/* Infinite games use the lobby menu tokens and controls; the world remains full bleed. */
.training-lobby{padding:0 0 16px}.training-game-description{font-size:12px;line-height:1.5;color:var(--ink-dim);margin:5px 0 0}.training-cloud{font-size:12px;color:var(--ink-faint);margin:16px 0}
#app .screen.training-screen{position:absolute;inset:0;width:100%;height:100%;max-width:none;border:0;isolation:isolate;overflow:hidden;background:var(--menu-bg);--dock-height:220px}
.training-screen [hidden]{display:none!important}.training-stage,.training-viewport{position:absolute;inset:0;overflow:hidden}.training-stage{background:var(--menu-bg)}
.training-viewport{touch-action:none;user-select:none;-webkit-user-select:none;cursor:grab;outline:none;overscroll-behavior:none}
.training-controls{position:absolute;z-index:3;bottom:max(12px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:calc(100% - 24px);max-width:440px;padding:12px;display:flex;flex-direction:column;gap:9px;border:1px solid var(--menu-border);border-radius:10px;background:var(--menu-panel);box-shadow:0 6px 24px #0005;touch-action:manipulation}
.training-header{display:grid;grid-template-columns:minmax(0,1fr) 34px;align-items:center;gap:8px 10px}
.training-score-panel{grid-row:1;grid-column:1;min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:3px 8px}
.training-game-name{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:800;grid-column:1;white-space:nowrap}.training-game-name .ico-img{flex:none}
.training-score-line{grid-column:2;grid-row:1 / 3;display:flex;align-items:center;gap:6px}
.training-score-caption{font-size:8px;line-height:1.3;color:var(--ink-dim);max-width:48px;text-align:right;letter-spacing:.5px}
.training-score{font:800 30px/1 var(--font);font-variant-numeric:tabular-nums;color:var(--ink)}.training-progress-detail{display:none}
.training-save-row{display:flex;align-items:center;gap:4px;grid-column:1;min-width:0}.training-save{font-size:9px;color:var(--ink-faint);white-space:nowrap}.training-save.error{color:var(--danger)}.training-retry{padding:0;background:none;border:0;color:var(--menu-brass);text-decoration:underline;font-size:9px;cursor:pointer}
.training-controls .training-help{grid-row:1;grid-column:2;width:34px;height:34px;min-height:34px;padding:0}
.training-controls .training-back{grid-row:2;grid-column:1;justify-self:start}
.training-controls .training-dashboard-button{grid-row:2;grid-column:1 / 3;justify-self:end}
.training-controls .training-back,.training-controls .training-dashboard-button{min-height:32px;height:32px;padding:0 10px;font-size:12px;white-space:nowrap}
.training-dock-row{display:flex;align-items:center;gap:8px;border-top:1px solid var(--line);padding-top:8px;min-width:0}
.training-selection{flex:1;min-width:0;font-size:11px;color:var(--ink-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.training-navigation{flex:none}.training-map-badge{display:none}.training-zoom{display:flex;align-items:center;gap:3px}
.training-controls .training-zoom button{width:29px;height:29px;min-height:29px;padding:0;font-size:18px}.training-zoom-value{width:34px;text-align:center;font-size:10px;color:var(--ink-dim);font-variant-numeric:tabular-nums}
.training-tools{display:flex;gap:7px}.training-controls .sd-mode,.training-controls .mn-mode{width:100%;height:36px;flex:1;margin:0;background:var(--surface-sunken);border:1px solid var(--line-strong);border-radius:5px}
.training-controls .sd-mode button,.training-controls .mn-mode button{min-height:0;padding:0 8px;font:700 12px var(--font);color:var(--ink-dim);gap:7px;border-radius:3px}
.training-controls .sd-mode button[aria-pressed=true],.training-controls .mn-mode button[aria-pressed=true]{color:var(--ink);background:transparent;border:0}
.training-controls .sd-mode-thumb,.training-controls .mn-mode-thumb,.training-controls .sd-mode.draft .sd-mode-thumb,.training-controls .mn-mode.draft .mn-mode-thumb{border-radius:3px;background:var(--menu-action-deep);border-color:var(--line-strong);box-shadow:inset 0 1px #ffffff0c}
.training-controls .sd-erase{width:37px;height:36px;min-height:36px;padding:0;flex:none}
.training-controls .sd-keypad{margin:0;gap:4px}.training-controls .sd-keypad button{height:43px;border-radius:5px;background:var(--menu-panel-raised);border-color:var(--line-strong);color:var(--ink);box-shadow:0 2px #060d15}.training-controls .sd-keypad b{font-size:21px}.training-controls .sd-keypad small{color:var(--ink-dim)}
.training-hint{position:absolute;z-index:2;left:16px;right:16px;bottom:calc(var(--dock-height) + max(12px,env(safe-area-inset-bottom)) + 8px);text-align:center;font-size:9px;color:var(--ink-dim);pointer-events:none;text-shadow:0 1px 4px #000;transition:opacity .2s}.training-screen.gesturing .training-hint{opacity:0}
.training-feedback{position:absolute;z-index:4;left:50%;top:max(18px,env(safe-area-inset-top));transform:translate(-50%,-6px);max-width:calc(100% - 32px);width:max-content;padding:10px 14px;border:1px solid var(--menu-border);border-radius:8px;background:var(--menu-panel);color:var(--ink);font-size:12px;text-align:center;pointer-events:none;opacity:0;transition:opacity .2s,transform .2s}.training-feedback.visible{opacity:1;transform:translate(-50%,0)}
.training-screen button:focus-visible{outline:2px solid var(--menu-brass);outline-offset:3px}
@media(max-width:360px){.training-controls{padding:9px;gap:8px}.training-game-name{font-size:10px;gap:4px}.training-game-name .ico-img{width:16px;height:16px}.training-score-caption{font-size:7px;max-width:40px}.training-score{font-size:27px}.training-header{gap:8px}.training-selection{font-size:10px}.training-controls .sd-keypad{gap:3px}}
@media(max-height:620px){.training-controls{padding:8px;gap:6px}.training-controls .sd-keypad button{height:36px}.training-controls .sd-keypad b{font-size:19px}.training-hint{display:none}}
@media(prefers-reduced-motion:reduce){.training-feedback,.training-hint{transition:none}}

.training-viewport:active{cursor:grabbing}.training-world{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform;contain:layout style}.training-tile{position:absolute}
.training-overview{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.training-tile .sd-grid{border:0;border-radius:0;outline:1.5px solid #acbcad;overflow:visible}
.training-tile .mn-grid{margin:0;border:0;border-radius:0;gap:0;padding:0;outline:0}
.training-viewport .sd-cell,.training-viewport .mn-cell{touch-action:none;cursor:inherit}
.training-screen.mines .mn-grid{background:#202126;outline:.6px solid #74717c88}
.training-screen.mines .mn-cell{font-family:'Roboto Mono',monospace;font-weight:650;color:#c1c0c8}
.training-screen.mines .mn-cell.covered,.training-screen.mines .mn-cell.covered.alternate{background:#1c1e22;box-shadow:inset 0 0 0 .5px #303137}
.training-screen.mines .mn-cell.covered:after{display:none}
.training-screen.mines .mn-cell.open,.training-screen.mines .mn-cell.open.alternate{background:#303238;box-shadow:inset 0 0 0 .7px #191a1e}
.training-screen.mines .mn-cell[data-number="0"]{background:#292b30}
.training-screen.mines .mn-cell.flagged,.training-screen.mines .mn-cell.flagged.alternate{background:#251e26;color:#dc3c75;font-size:24px;text-shadow:0 2px 9px #d22d6e28}
.training-screen.mines .mn-cell.hit,.training-screen.mines .mn-cell.hit.alternate{background:#962949;color:#ffe1ed;font-size:29px;font-weight:450}
.training-screen.mines .mn-cell.pending{box-shadow:inset 0 0 0 1.5px #d86591}
.training-screen.mines .mn-cover-peel,.training-screen.mines .alternate .mn-cover-peel{background:#1c1e22}
.training-screen.mines .training-tile[data-status=failed] .mn-grid{outline:1.2px solid #c6416d}
.training-screen.mines .training-tile[data-status=failed] .mn-cell:not(.hit){background:#3d2632;color:#9e8790;box-shadow:inset 0 0 0 .5px #69253e44}
.training-recovery{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);white-space:nowrap;pointer-events:none;border:1px solid #d05a8180;border-radius:8px;background:#421e30eb;padding:10px 14px;color:#ffc6da;font:600 11px/1.3 var(--font);box-shadow:0 4px 20px #0005}
/* A solved sector settles into darker graphite while its boundary and clues stay readable. */
.training-screen.mines .mn-grid{--mn-solve-glow:#f4a8c3;--mn-solve-shadow:#e7619c38}
.training-screen.mines .training-tile[data-status=complete] .mn-grid{outline:1px solid #827987aa}
.training-screen.mines .training-tile[data-status=complete] .mn-cell.open{background:#22242a;color:#9e99a6;box-shadow:inset 0 0 0 .6px #14151a}
.training-screen.mines .training-tile[data-status=complete] .mn-cell[data-number="0"]{background:#202126}
.training-screen.mines .training-tile[data-status=complete] .mn-cell.flagged{background:#1b191f;color:#903452}
/* Keep touch targets stable while detail tiles are prepared or removed during a pinch. */
.training-world{pointer-events:none}
/* Each world cell owns one DOM node; only one side paints a shared line. */
.training-screen.sudoku .sd-grid{background:transparent;outline:0;border:0}
.training-screen.sudoku .sd-cell{box-sizing:border-box;border:0;border-right:.6px solid #65809355;border-bottom:.6px solid #65809355}
.training-screen.sudoku .sd-cell.world-box-right{border-right:1.4px solid #9cad9f}
.training-screen.sudoku .sd-cell.world-box-bottom{border-bottom:1.4px solid #9cad9f}
.training-screen.sudoku .sd-cell.world-edge-top:before{content:"";position:absolute;top:-1.4px;left:0;right:0;height:1.4px;background:#9cad9f;pointer-events:none}
.training-screen.sudoku .sd-cell.world-edge-left:after{content:"";position:absolute;left:-1.4px;top:0;bottom:0;width:1.4px;background:#9cad9f;pointer-events:none}
.training-screen.sudoku .sd-cell.world-edge-top.world-edge-left:before{left:-1.4px}
.training-world-event{position:absolute;z-index:2;pointer-events:none;transform:translate(-50%,-100%);white-space:nowrap}
.training-world-event span{display:block;color:#b3efc9;font:650 14px/1.3 var(--font);text-shadow:0 2px 5px #07150f,0 0 12px #0009}
.training-screen.mines .training-world-event span{color:#f5bbd2}
.training-world-event.bad span{color:#ff99a9}

/* Solved areas are green on the overview; close up they recede behind active cells. */
.training-screen.sudoku .sd-cell.retired{background:#101f28;color:#71858b}
.training-screen.sudoku .sd-cell.retired.same,.training-screen.sudoku .sd-cell.retired.related{background:#192c36;color:#91a5aa}
.training-screen.sudoku .sd-cell.retired.selected{background:#2d4651;color:#e1ebe5}
.training-motivation{position:absolute;width:108px;height:108px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:9px;box-sizing:border-box;text-align:center;pointer-events:none;color:#84b1ac;animation:training-phrase .6s ease-out}
.training-motivation span{font-size:18px;opacity:.5}.training-motivation b{font:600 13px/1.4 var(--font);letter-spacing:.3px;overflow-wrap:anywhere}
@keyframes training-phrase{from{opacity:0;transform:translateY(5px)}to{opacity:.85;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.training-motivation{animation:none}.training-screen .mn-mode-thumb{transition:none}}

/* Dashboard layout only: shell, cards, buttons, tabs and rating rows come from the lobby. */
.training-dashboard .scroll{padding-bottom:max(24px,env(safe-area-inset-bottom))}.td-header .grow{min-width:0}.td-title{display:flex;gap:8px;align-items:center}.td-title .ico-img{flex:none}.td-game-picker{min-width:0;max-width:100%;padding:4px 18px 4px 0;border:0;border-radius:0;background:transparent;color:var(--ink);font:800 23px var(--font)}.td-game-picker option{background:var(--menu-panel)}.td-header .btn{flex:none}
.td-mode-label{margin:0 0 5px;font-size:12px;color:var(--ink-faint)}.td-content{display:grid;gap:12px}.td-page-tabs{margin-bottom:16px}.td-content h2{font:800 18px/1.2 var(--font);margin:0;display:flex;align-items:center;gap:8px}.td-status{font-size:13px;color:var(--ink-dim)}.td-status[hidden]{display:none}.td-status button{color:var(--menu-brass);border:0;background:none;text-decoration:underline}
.td-hero-top,.td-hero-footer{display:flex;justify-content:space-between;gap:8px;font-size:12px;color:var(--ink-dim)}.td-hero-top>span:first-child{text-transform:capitalize}.td-hero-top>span:last-child{display:none}.td-ledger-value{display:flex;justify-content:space-between;align-items:center;margin:12px 0}.td-ledger-value>div{display:flex;flex-direction:column;gap:5px}.td-ledger-value small{font-size:12px;color:var(--ink-dim)}.td-month-value{font:800 40px/1.1 var(--font);letter-spacing:-1px;font-variant-numeric:tabular-nums}.td-hero-footer{border-top:1px solid var(--line);padding-top:12px}.td-hero-footer b{color:var(--ink)}
.td-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.td-metrics>div{display:flex;flex-direction:column;gap:6px}.td-metrics strong{font-size:21px;font-weight:800}.td-metrics small{font-size:11px;color:var(--ink-dim);line-height:1.4}
.td-section-title{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}.td-legend{display:flex;gap:5px;align-items:center;font-size:10px;color:var(--ink-dim)}.td-legend i{width:7px;height:10px;border-radius:2px;background:var(--menu-brass)}.td-legend i.previous{background:var(--ink-faint);margin-left:8px}.td-week-score{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}.td-week-score strong{font-size:27px;font-weight:800}.td-week-score>span{font-size:12px;color:var(--ink-dim)}.td-week-score small{font-size:11px;color:var(--ink-faint);flex-basis:100%}
.td-chart{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin:14px 0 10px}.td-day{min-width:0;padding:6px 0;display:flex;align-items:center;flex-direction:column;gap:8px;border:1px solid transparent;border-radius:5px;background:transparent;color:var(--ink-dim);cursor:pointer;transition:background .18s,border-color .18s}.td-day[aria-pressed=true]{background:var(--surface-strong);border-color:var(--menu-border);color:var(--ink)}.td-bar-value{font-size:10px;font-variant-numeric:tabular-nums;max-width:100%;overflow:hidden;text-overflow:ellipsis}.td-bars{position:relative;width:100%;height:86px;background:repeating-linear-gradient(to top,transparent 0,transparent 20px,var(--line) 20px,var(--line) 21px)}.td-bars i{position:absolute;left:calc(50% + 1px);width:8px;max-width:25%;min-height:1px;background:var(--menu-brass);border-radius:2px 2px 0 0;transform-origin:bottom;animation:td-grow .5s ease-out both;animation-delay:var(--delay)}.td-bars i.previous{left:auto;right:calc(50% + 2px);background:var(--ink-faint)}.td-bars i.negative{transform-origin:top;background:var(--danger)}.td-day.future .current{opacity:.25}.td-zero{position:absolute;left:0;right:0;height:1px;background:var(--line-strong)}.td-day>small{font-size:10px;text-transform:uppercase}.td-day-detail{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;font-size:12px;border-top:1px solid var(--line);padding-top:10px}.td-day-detail small{margin-left:auto;font-size:11px;color:var(--ink-dim)}
.td-ranking-title{padding:4px 0 16px}.td-ranking-title>small{font-size:12px;color:var(--ink-faint);text-transform:capitalize}.td-ranking-title h2{margin:8px 0}.td-ranking-title p{font-size:12px;line-height:1.5;color:var(--ink-dim);margin:0}.td-tabs{margin-bottom:14px}.td-personal-rank{display:flex;align-items:center;gap:10px}.td-personal-rank small{font-size:12px;color:var(--ink-dim)}.td-personal-rank b{font-size:24px}.td-personal-rank>span{margin-left:auto;font-size:13px;font-weight:700}
.td-rank-footer{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:12px;color:var(--ink-dim)}.td-rank-footer small{font-size:11px}.td-empty{padding:24px 12px;display:grid;justify-items:center;text-align:center;gap:12px}.td-empty b{font-size:18px}.td-empty p{font-size:13px;line-height:1.5;color:var(--ink-dim);margin:0}.td-unranked{padding:12px 0;font-size:12px;color:var(--ink-dim)}.td-footnote{padding:4px 0;font-size:11px;line-height:1.6;color:var(--ink-faint)}.td-footnote strong{color:var(--ink-dim);font-weight:700}.td-footnote p{margin:6px 0 0}
.td-reward-heading{display:flex;justify-content:space-between;gap:8px;align-items:center;flex-wrap:wrap}.td-reset{color:var(--ink-faint);font-size:11px;font-variant-numeric:tabular-nums}.td-reward-amount{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:18px 0 15px}.td-reward-amount>span{flex-basis:100%;font-size:12px;color:var(--ink-dim)}.td-reward-amount strong{font:800 38px/1.1 var(--font)}.td-claim{width:100%}.td-claim-message{font-size:12px;color:var(--menu-brass);margin:10px 0}.td-claim-message:empty{display:none}.td-reward-next{display:flex;justify-content:space-between;align-items:center;margin:16px 0 10px;font-size:12px;color:var(--ink-dim)}.td-reward-next b{color:var(--gold)}.td-reward-steps{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}.td-reward-steps>div{display:flex;flex-direction:column;align-items:center;gap:6px;padding:7px 0;border-bottom:2px solid var(--line);background:var(--surface)}.td-reward-steps small{font-size:10px;color:var(--ink-faint)}.td-reward-steps b{font-size:13px}.td-reward-steps .done{opacity:.4}.td-reward-steps .next{background:var(--menu-panel-raised);border-color:var(--menu-brass)}.td-reward-note{font-size:12px;line-height:1.5;color:var(--ink-dim);margin:12px 0 0}
@keyframes td-grow{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@media(max-width:350px){.td-game-picker{font-size:20px}.td-title{gap:5px}.td-title .ico-img{width:24px;height:24px}.td-header .btn{padding:8px 10px;font-size:12px}.td-personal-rank{gap:8px}.td-personal-rank small{font-size:11px}.td-personal-rank>span{font-size:12px}}
@media(prefers-reduced-motion:reduce){.training-dashboard *{animation:none!important;transition:none!important}}

.training-controls .training-dashboard-button.reward-ready{border-color:var(--menu-brass);box-shadow:inset 0 1px #ffffff0c,0 0 0 2px #ccb17e20}.training-reward-dot{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:#ccb17e24;animation:training-reward-ready .4s ease-out}@keyframes training-reward-ready{from{opacity:0;scale:.65}to{opacity:1;scale:1}}@media(prefers-reduced-motion:reduce){.training-reward-dot{animation:none}}

.training-reward-dot[hidden]{display:none}.td-page-tabs .reward-available::after{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;margin:0 0 2px 7px;background:var(--menu-brass);box-shadow:0 0 8px #ccb17e66}

.training-current-head,.training-current-progress{display:flex;align-items:center;gap:7px}.training-current-head{margin-bottom:5px}.training-current-head>b{font-size:11px;font-weight:700}.training-difficulty{font-size:9px;padding:2px 5px;border:1px solid #8ba59b55;border-radius:4px;color:#a6cbbb}.training-difficulty[data-difficulty=Medium]{color:#d6c28e;border-color:#a48d5055}.training-difficulty[data-difficulty=Hard]{color:#d4a8a0;border-color:#a56f6655}.training-current-progress{font-size:9px;white-space:nowrap;font-variant-numeric:tabular-nums;color:#95aab8}.training-current-progress>b{color:#d8e7e8;font-weight:600}.training-current-track{height:3px;flex:1;min-width:25px;max-width:72px;overflow:hidden;background:#879da82b;border-radius:3px}.training-current-track i{display:block;height:100%;background:#86bdab;transition:width .25s ease}.training-screen.sudoku .training-selection{min-width:125px}
@media(prefers-reduced-motion:reduce){.training-current-track i{transition:none}}
