@font-face{font-family:Fredoka;font-style:normal;font-weight:600;font-display:swap;src:url(/tracery/fonts/fredoka-600.woff2) format("woff2")}:root{--display: "Fredoka", ui-rounded, "SF Pro Rounded", system-ui, sans-serif;--bg: #f4f6fb;--bg-2: #eef1f8;--surface: #ffffff;--ink: #1c2030;--ink-soft: #5a6072;--line: #e4e8f1;--accent: #5b6bff;--accent-ink: #ffffff;--shadow: 0 6px 20px rgba(28, 32, 48, .08);--shadow-lg: 0 18px 50px rgba(28, 32, 48, .18);--radius: 18px;--chip-bg: #1c2030;--chip-ink: #ffffff;--gridline: rgba(28, 32, 48, .07);--frame-border: #2f3240;--bead-empty: #c7cfe0;--bead-empty-border: #a7b1c9;--switch-off: #cdd3e0;--tile-top: rgba(255, 255, 255, .7);--tile-shade: rgba(28, 32, 48, .05);font-family:ui-rounded,SF Pro Rounded,Segoe UI,system-ui,-apple-system,Roboto,Helvetica,Arial,sans-serif}:root[data-theme=dark]{--bg: #14151c;--bg-2: #0f1016;--surface: #1c1e29;--ink: #eceef6;--ink-soft: #98a0b6;--line: #2b2e3c;--accent: #7b86ff;--shadow: 0 6px 20px rgba(0, 0, 0, .4);--shadow-lg: 0 18px 50px rgba(0, 0, 0, .55);--chip-bg: #3a3f52;--chip-ink: #ffffff;--gridline: rgba(255, 255, 255, .045);--frame-border: #3a3f52;--bead-empty: #2a2e3d;--bead-empty-border: #3b4152;--switch-off: #3a3f52;--tile-top: rgba(255, 255, 255, .05);--tile-shade: rgba(0, 0, 0, .22)}:root[data-theme=dark] body{color:var(--ink)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}button{touch-action:manipulation}.board-frame,.tray,.word-preview,.hud{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}html,body,#root{margin:0;height:100%}body{background:linear-gradient(180deg,var(--bg) 0%,var(--bg-2) 100%);color:var(--ink);overscroll-behavior:none}.app{max-width:480px;margin:0 auto;min-height:100%;padding:env(safe-area-inset-top) 16px env(safe-area-inset-bottom)}.screen{padding:14px 0 28px;animation:fade .25s ease}@keyframes fade{0%{opacity:0;transform:translateY(6px)}}button{font:inherit;cursor:pointer;border:none;background:none;color:inherit}.splash{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#262836;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;cursor:pointer;transition:opacity .38s ease}.splash.leaving{opacity:0}.splash-panel{transform-origin:50% 50%;animation:splash-panel .45s cubic-bezier(.34,1.56,.64,1) both}@keyframes splash-panel{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}.splash-tube{animation:splash-draw .85s cubic-bezier(.4,.9,.4,1) .25s forwards}@keyframes splash-draw{to{stroke-dashoffset:0}}.splash-dot{transform-origin:center;transform-box:fill-box;transform:scale(0);animation:splash-dot .3s cubic-bezier(.34,1.56,.64,1) forwards}.splash-dot.start{animation-delay:.25s}.splash-dot.end{animation-delay:1.05s}@keyframes splash-dot{to{transform:scale(1)}}.splash-title{display:flex;font-size:40px;font-weight:800;color:#fff;letter-spacing:.5px}.splash-title span{opacity:0;animation:splash-letter .4s cubic-bezier(.34,1.56,.64,1) both}@keyframes splash-letter{0%{opacity:0;transform:translateY(14px) scale(.7)}to{opacity:1;transform:translateY(0) scale(1)}}.splash-tag{color:#ffffff8c;font-size:14px;opacity:0;animation:splash-tag .5s ease 1.5s forwards}@keyframes splash-tag{to{opacity:1}}.home{display:flex;flex-direction:column;min-height:88vh}.brand{text-align:center;margin:28px 0 22px}.logo{width:76px;height:76px;display:inline-block;border-radius:18px;box-shadow:0 10px 24px #282c4038}.brand h1{font-size:44px;margin:6px 0 4px;letter-spacing:-1px}.tagline{color:var(--ink-soft);margin:0;font-size:15px}.home-actions{display:flex;flex-direction:column;gap:12px;margin-top:10px}.streak-banner{display:flex;align-items:center;gap:12px;background:linear-gradient(135deg,#fff7ed,#ffedd5);border:1px solid #fed7aa;border-radius:var(--radius);padding:12px 16px;margin-bottom:12px}.streak-banner .flame{font-size:26px;transition:font-size .2s ease}.streak-banner.s7 .flame{font-size:32px}.streak-banner.s30 .flame{font-size:38px}.streak-banner.s100 .flame{font-size:44px}.streak-text{display:flex;flex-direction:column;line-height:1.2}.streak-text b{font-size:16px}.streak-sub{font-size:12px;color:var(--ink-soft)}.freeze-chip{margin-left:auto;background:#e0f2fe;border:1px solid #bae6fd;color:#0369a1;border-radius:999px;padding:4px 10px;font-size:13px;font-weight:700}.big-btn.expedition{background:linear-gradient(135deg,#f0fdf4,#dcfce7);border:1px solid #bbf7d0}.exp-blurb{color:var(--ink-soft);font-size:14px;margin:14px 2px}.exp-list{display:flex;flex-direction:column;gap:10px}.exp-item{display:flex;align-items:center;gap:14px;background:var(--surface);border-radius:14px;padding:14px 16px;box-shadow:var(--shadow);font-weight:700}.exp-item.done{opacity:.75;background:linear-gradient(135deg,#f0fdf4,#fff)}.exp-num{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--bg-2);font-weight:800}.exp-item.done .exp-num{background:#34c759;color:#fff}.exp-name{flex:1;text-align:left}.exp-diff{font-size:11px;color:var(--accent);letter-spacing:2px}.exp-complete{text-align:center;font-weight:800;margin-top:18px}.trophy-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:16px}.trophy{background:var(--surface);border-radius:12px;padding:12px 6px;text-align:center;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:2px;min-width:0}.trophy-num{font-weight:800;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trophy-lbl{font-size:10px;color:var(--ink-soft)}.coach-bubble{background:var(--accent);color:#fff;border-radius:12px;padding:10px 14px;font-size:14px;font-weight:600;text-align:center;animation:bob 1.6s ease-in-out infinite}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.big-btn{display:flex;flex-direction:column;align-items:flex-start;gap:3px;background:var(--surface);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow);text-align:left;transition:transform .12s ease,box-shadow .12s ease}.big-btn:active{transform:scale(.985)}.big-btn.primary{background:linear-gradient(135deg,#6a78ff,#5b6bff);color:var(--accent-ink);box-shadow:0 12px 30px #5b6bff59}.big-btn-title{font-size:18px;font-weight:700}.big-btn-sub{font-size:13px;opacity:.8}.home-row{display:flex;gap:12px}.ghost-btn{flex:1;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:13px;font-weight:600;color:var(--ink)}.ghost-btn.primary-text{color:var(--accent)}.howto{margin-top:auto;padding-top:22px}.howto-head{width:100%;text-align:left;font-weight:700;color:var(--ink-soft);display:flex;justify-content:space-between}.howto-body{margin-top:10px;color:var(--ink-soft);font-size:14px}.howto-body ul{margin:8px 0 0;padding-left:18px}.howto-body li{margin:4px 0}.topbar,.play-top{display:grid;grid-template-columns:44px 1fr 44px;align-items:center;gap:8px}.topbar h2{text-align:center;margin:0;font-size:20px}.icon-btn{width:44px;height:44px;border-radius:12px;font-size:22px;background:var(--surface);box-shadow:var(--shadow);display:grid;place-items:center}.icon-btn.ghost{background:transparent;box-shadow:none}.play-title{text-align:center;display:flex;flex-direction:column;line-height:1.15}.play-title strong{font-size:17px}.play-title span{font-size:12px;color:var(--ink-soft)}.level-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-top:16px}.level-cell{aspect-ratio:1;background:var(--surface);border-radius:14px;box-shadow:var(--shadow);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-weight:700}.level-cell.locked{background:var(--bg-2);box-shadow:none;color:var(--ink-soft)}.level-cell.done{background:linear-gradient(135deg,#fff,#eef1ff)}.level-num{font-size:18px}.level-stars{font-size:10px;color:#ffb300;letter-spacing:1px}.dim{color:var(--line)}.stat-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:16px 0}.stat-card{background:var(--surface);border-radius:16px;padding:18px 10px;text-align:center;box-shadow:var(--shadow)}.stat-num{font-size:26px;font-weight:800}.stat-label{font-size:12px;color:var(--ink-soft);margin-top:4px}.badge-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}.badge{background:var(--surface);border-radius:14px;padding:12px 8px;text-align:center;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:2px;opacity:.45;filter:grayscale(1)}.badge.earned{opacity:1;filter:none}.badge-icon{font-size:24px}.badge-name{font-weight:700;font-size:13px}.badge-req{font-size:11px;color:var(--ink-soft)}.test-push{align-self:flex-start;color:var(--accent);font-weight:600;font-size:14px;padding:4px 6px}.toggle-row:disabled{opacity:.55}.handle-row{display:flex;flex-direction:column;gap:6px;margin:8px 0 18px}.handle-row label{font-size:13px;color:var(--ink-soft)}.handle-row input{font:inherit;padding:12px 14px;border-radius:12px;border:1px solid var(--line);background:var(--surface)}.section-title{margin:8px 0;font-size:15px}.settings{display:flex;flex-direction:column;gap:10px;margin-bottom:18px}.toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px;text-align:left;background:var(--surface);border-radius:14px;padding:14px 16px;box-shadow:var(--shadow);font-weight:600}.toggle-sub{display:block;font-size:12px;font-weight:500;color:var(--ink-soft);margin-top:2px}.switch{flex-shrink:0;width:46px;height:28px;border-radius:999px;background:var(--switch-off);position:relative;transition:background .15s ease}.theme-row{cursor:default}.segmented{display:inline-flex;background:var(--bg-2);border-radius:10px;padding:3px;gap:2px;flex-shrink:0}.seg{padding:6px 12px;border-radius:8px;font-size:13px;font-weight:700;color:var(--ink-soft)}.seg.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}.switch:after{content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #00000040;transition:transform .15s ease}.switch.on{background:var(--accent)}.switch.on:after{transform:translate(18px)}.daily-list{display:flex;flex-direction:column;gap:8px}.daily-item{display:flex;justify-content:space-between;background:var(--surface);border-radius:12px;padding:12px 14px;font-size:13px;box-shadow:var(--shadow)}.muted{color:var(--ink-soft)}.play{display:flex;flex-direction:column;gap:12px}.hud{display:flex;justify-content:space-between;align-items:center;background:var(--surface);border-radius:14px;padding:10px 14px;box-shadow:var(--shadow)}.hud-clock{font-weight:700;font-variant-numeric:tabular-nums}.hud-right{display:flex;align-items:center;gap:12px}.hud-hints{color:var(--ink-soft);font-size:14px}.hint-btn{background:var(--accent);color:#fff;border-radius:10px;padding:8px 16px;font-weight:700}.hint-btn:disabled{opacity:.4}.hud-btn{padding:8px 14px;border-radius:10px;background:var(--bg-2);border:1px solid var(--line);font-weight:700;font-size:14px;color:var(--ink);font-family:var(--display);transition:transform .1s ease,opacity .1s ease}.hud-btn.accent{background:var(--accent);border-color:var(--accent);color:#fff}.hud-btn:active:not(:disabled){transform:scale(.96)}.hud-btn:disabled{opacity:.45}.board-area{display:flex;justify-content:center}.board-area.shake{animation:shake .34s ease}@keyframes shake{10%,90%{transform:translate(-2px)}30%,70%{transform:translate(4px)}50%{transform:translate(-6px)}}.board-wrap{width:100%;display:flex;justify-content:center}.board-frame{position:relative;-webkit-user-select:none;user-select:none;border:3px solid var(--frame-border);border-radius:16px;overflow:hidden;background:var(--frame-border);box-shadow:var(--shadow)}.cell-bg{position:absolute;box-sizing:border-box;border-right:1px solid var(--gridline);border-bottom:1px solid var(--gridline);transition:background .12s ease}.cell-bg:not(.blocked){box-shadow:inset 0 1px 0 var(--tile-top),inset 0 -2px 3px var(--tile-shade)}.cell-bg.blocked{border-color:var(--gridline)}.cell-bg.enter,.cell-hit.enter{animation:cell-enter .42s cubic-bezier(.34,1.4,.64,1) both}@keyframes cell-enter{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}.tubes{position:absolute;left:0;top:0;pointer-events:none}.tubes.celebrate{animation:board-celebrate .62s ease both}@keyframes board-celebrate{0%,to{filter:brightness(1)}40%{filter:brightness(1.35) saturate(1.25)}}.word-flash{position:absolute;left:50%;transform:translate(-50%);font-weight:900;letter-spacing:1px;pointer-events:none;z-index:8;text-shadow:0 2px 10px rgba(0,0,0,.25);animation:word-flash .85s cubic-bezier(.2,.8,.3,1) forwards;white-space:nowrap}@keyframes word-flash{0%{opacity:0;transform:translate(-50%,12px) scale(.7)}25%{opacity:1;transform:translate(-50%) scale(1.08)}70%{opacity:1;transform:translate(-50%,-6px) scale(1)}to{opacity:0;transform:translate(-50%,-34px) scale(1)}}.hint-cell{opacity:1;animation:hintglow 1.1s ease-in-out infinite}.hint-cell.start{filter:drop-shadow(0 0 3px rgba(245,166,35,.9))}@keyframes hintglow{0%,to{opacity:.45}50%{opacity:1}}.cell-hit{position:absolute;display:grid;place-items:center;font-weight:800;transition:color .12s ease,transform .1s ease}.cell-hit.tracing{transform:scale(1.16)}.cell-hit.pop{animation:letterpop .45s cubic-bezier(.34,1.56,.64,1) both}@keyframes letterpop{0%{transform:scale(1)}40%{transform:scale(1.35)}to{transform:scale(1)}}.cell-hit.settle{animation:lettersettle .4s ease both}@keyframes lettersettle{0%{transform:scale(1)}45%{transform:scale(.88)}to{transform:scale(1)}}.tube-draw{animation:tubedraw .5s cubic-bezier(.3,1.2,.5,1) forwards}@keyframes tubedraw{to{stroke-dashoffset:0}}.chev-fade{opacity:0;animation:chevin .25s ease .32s forwards}@keyframes chevin{to{opacity:1}}.wrong-word{opacity:.9}.burst{position:absolute;pointer-events:none;z-index:6}.burst i{position:absolute;border-radius:50%;animation:burstout .55s cubic-bezier(.2,.7,.4,1) forwards}@keyframes burstout{0%{transform:translate(-50%,-50%) scale(1);opacity:1}to{transform:translate(calc(var(--dx) - 50%),calc(var(--dy) - 50%)) scale(.35);opacity:0}}.start-badge{position:absolute;display:grid;place-items:center;background:#fff;border-radius:50%;font-weight:900;box-shadow:0 1px 4px #1c20304d;pointer-events:none;animation:pop .2s ease}.tray{display:flex;flex-direction:column;gap:7px;align-items:flex-start;padding:4px 2px}.tray-row{display:flex;align-items:center;gap:5px}.tray-count{width:26px;height:26px;flex-shrink:0;border-radius:8px;margin-right:4px;display:grid;place-items:center;font-size:14px;font-weight:800;color:var(--chip-ink);background:var(--chip-bg)}.bead{width:26px;height:26px;border-radius:7px;display:grid;place-items:center;font-size:14px;font-weight:800;color:#fff}.bead.empty{background:var(--bead-empty);border:2px solid var(--bead-empty-border);box-shadow:inset 0 1px 2px #1c20301f}.bead.filled{animation:pop .18s ease}@keyframes pop{0%{transform:scale(.6)}}.word-preview{min-height:34px;display:flex;justify-content:center;align-items:center;gap:5px}.preview-pill{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;color:#fff;font-weight:800;font-size:16px;animation:pop .12s ease}.word-notice{color:#d6336c;font-weight:700;font-size:14px;animation:pop .14s ease}.tray{max-height:30vh;overflow-y:auto}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#14182866;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:grid;place-items:end center;z-index:20;animation:fade .2s ease}.result-card{width:100%;max-width:480px;background:var(--surface);border-radius:26px 26px 0 0;padding:22px 20px calc(22px + env(safe-area-inset-bottom));text-align:center;box-shadow:var(--shadow-lg);animation:rise .3s cubic-bezier(.2,.8,.2,1)}@keyframes rise{0%{transform:translateY(40px)}}.confetti-rain{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none}.confetti-rain i{position:absolute;top:-24px;border-radius:2px;opacity:.95;animation:confetti-fall linear forwards}@keyframes confetti-fall{to{transform:translate(var(--drift, 0),110vh) rotate(720deg);opacity:.85}}.par-line{font-size:14px;font-weight:700;color:var(--ink-soft);margin-top:6px}.par-line.beat{color:#f59f00}.challenge-chip{background:linear-gradient(135deg,#fef3c7,#fde68a);border:1px solid #fcd34d;color:#78350f;border-radius:12px;padding:10px 14px;font-size:14px;text-align:center}.challenge-outcome{font-size:15px;font-weight:800;margin-top:8px}.challenge-outcome.won{color:#16a34a}.challenge-outcome.lost{color:#dc2626}.challenge-btn{width:100%;margin-top:10px;padding:13px;border-radius:var(--radius);border:1.5px dashed var(--accent);color:var(--accent);font-weight:700;background:#5b6bff0f}.result-card h2{margin:2px 0 6px;font-size:26px}.result-stars{font-size:30px;color:#ffb300;letter-spacing:4px}.result-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:16px 0}.result-num{font-size:22px;font-weight:800}.result-lbl{font-size:12px;color:var(--ink-soft)}.result-squares{font-size:22px;letter-spacing:2px;margin-bottom:16px}.result-actions{display:flex;gap:10px;margin-top:10px}.encore-btn{width:100%;margin-top:10px;padding:13px;border-radius:var(--radius);border:none;background:linear-gradient(135deg,#ff922b,#f76707);color:#fff;font-weight:800;font-size:15px;box-shadow:0 8px 22px #f7670759;animation:encore-pulse 1.6s ease-in-out infinite}@keyframes encore-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}.encore-result{font-size:15px;font-weight:800;color:#f76707;margin-top:8px}.coach-bubble.encore-bubble{background:linear-gradient(135deg,#ff922b,#f76707)}.encore-found{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;padding:2px}.encore-chip{background:linear-gradient(135deg,#ff922b,#f76707);color:#fff;border-radius:999px;padding:5px 12px;font-weight:800;font-size:13px;font-family:var(--display);animation:pop .18s ease}.meta-card{background:var(--surface);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:10px}.meta-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.meta-title{font-weight:700;font-size:16px;font-family:var(--display)}.meta-sub{font-size:12px;color:var(--ink-soft);text-align:right}.meta-tiles{display:flex;gap:5px;align-items:center}.meta-tiles.shake{animation:shake .34s ease}.meta-tile{width:32px;height:32px;border-radius:8px;display:grid;place-items:center;font-weight:800;font-size:16px;font-family:var(--display);background:var(--bead-empty);border:2px solid var(--bead-empty-border);color:var(--ink-soft)}.meta-tile.revealed{background:var(--chip-bg);border-color:var(--chip-bg);color:var(--chip-ink);animation:pop .2s ease}.meta-tile.solved{background:#34c759;border-color:#34c759;color:#fff}.meta-check{color:#34c759;font-weight:900;font-size:20px;margin-left:4px}.meta-guess{display:flex;gap:8px}.meta-guess input{flex:1;min-width:0;font:inherit;font-weight:700;text-transform:uppercase;letter-spacing:2px;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:var(--bg-2);color:var(--ink)}.meta-btn{background:var(--accent);color:#fff;border-radius:10px;padding:10px 16px;font-weight:700}.meta-btn:disabled{opacity:.4}.meta-hint{margin:0;font-size:12px;color:var(--ink-soft)}:root[data-theme=dark] .streak-banner{background:linear-gradient(135deg,#2a2016,#241c11);border-color:#4a3a1f}:root[data-theme=dark] .freeze-chip{background:#12303f;border-color:#1c4a63;color:#7dd3fc}:root[data-theme=dark] .big-btn.expedition{background:linear-gradient(135deg,#16241c,#12211a);border-color:#204030}:root[data-theme=dark] .exp-item.done{background:linear-gradient(135deg,#16241c,var(--surface))}:root[data-theme=dark] .level-cell.done{background:linear-gradient(135deg,var(--surface),#232744)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.brand h1,.splash-title,.topbar h2,.play-title strong,.big-btn-title,.stat-num,.result-num,.trophy-num,.result-card h2,.level-num,.word-flash,.cell-hit,.preview-pill,.bead,.tray-count,.exp-num,.hud-clock{font-family:var(--display);font-weight:600}.big-btn.expedition.exp-skin{background:linear-gradient(135deg,color-mix(in srgb,var(--exp) 10%,var(--surface)),color-mix(in srgb,var(--exp) 22%,var(--surface)));border:1px solid color-mix(in srgb,var(--exp) 38%,var(--surface))}.expedition-screen.exp-skin .topbar h2{color:color-mix(in srgb,var(--exp) 75%,var(--ink))}.exp-skin .exp-item.done{background:linear-gradient(135deg,color-mix(in srgb,var(--exp) 14%,var(--surface)),var(--surface))}.exp-skin .exp-item.done .exp-num{background:var(--exp)}.exp-skin .exp-diff{color:var(--exp)}.screen.play.exp-skin .board-frame{border-color:color-mix(in srgb,var(--exp) 65%,var(--frame-border));box-shadow:0 6px 26px color-mix(in srgb,var(--exp) 26%,transparent)}.screen.play.exp-skin .play-title span{color:var(--exp);font-weight:700}.screen.play.exp-skin .hud-btn.accent{background:var(--exp);border-color:var(--exp)}
