@font-face{font-family:Fraunces;src:url(/fonts/Fraunces.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Nunito Sans;src:url(/fonts/NunitoSans.woff2)format("woff2");font-weight:200 1000;font-style:normal;font-display:swap}:root{--paper:#f6ecdb;--paper-deep:#ecdfc8;--card:#fffaf1;--ink:#2c1d14;--ink-soft:#6b5546;--ink-faint:#9b8877;--wood:#8a5a34;--wood-dark:#5d3a21;--wood-light:#b07c4e;--wood-shadow:#432717;--terracotta:#b9513f;--terracotta-dark:#8e392b;--olive:#6f8f43;--mustard:#dfa02a;--plum:#70506f;--danger:#b4442f;--radius-sm:8px;--radius:14px;--radius-lg:22px;--shadow-sm:0 1px 2px #2c1d142e;--shadow:0 4px 14px #2c1d1438;--shadow-lg:0 12px 34px #2c1d144d;--tap:44px;--font-display:"Fraunces", Georgia, "Times New Roman", serif;--font-ui:"Nunito Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--safe-top:env(safe-area-inset-top,0px);--safe-right:env(safe-area-inset-right,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px)}@media (prefers-color-scheme:dark){:root{--paper:#211710;--paper-deep:#2c2017;--card:#33251a;--ink:#f4e7d3;--ink-soft:#c2ab93;--ink-faint:#8e7a66;--wood:#6d4527;--wood-dark:#432717;--wood-light:#8f6039;--shadow-sm:0 1px 2px #0006;--shadow:0 4px 14px #00000073;--shadow-lg:0 12px 34px #0000008c}}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0;overflow:hidden}body{font-family:var(--font-ui);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior:none}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:not-allowed}:focus-visible{outline:3px solid var(--mustard);outline-offset:2px}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.app{height:100%;padding-top:var(--safe-top);padding-right:var(--safe-right);padding-bottom:var(--safe-bottom);padding-left:var(--safe-left);flex-direction:column;display:flex;position:relative;container:app/size}.app-header{background:var(--wood-dark);min-height:56px;color:var(--paper);box-shadow:var(--shadow);flex:none;align-items:center;gap:10px;padding:8px 12px;display:flex}.app-header h1{font-family:var(--font-display);letter-spacing:.01em;white-space:nowrap;text-overflow:ellipsis;flex:auto;margin:0;font-size:20px;font-weight:600;overflow:hidden}.header-subtitle{opacity:.8;white-space:nowrap;text-overflow:ellipsis;flex:0 auto;max-width:42%;font-size:12px;font-weight:600;overflow:hidden}.app-header .header-meta{font-variant-numeric:tabular-nums;gap:14px;font-size:14px;display:flex}.app-header .header-meta span{text-align:right;min-width:44px}.screen{-webkit-overflow-scrolling:touch;flex:auto;min-height:0;overflow:hidden auto}.screen-pad{padding:16px 16px calc(24px + var(--safe-bottom));max-width:640px;margin:0 auto}.btn{min-height:var(--tap);border:2px solid var(--wood-dark);border-radius:var(--radius);background:var(--card);color:var(--ink);box-shadow:var(--shadow-sm);justify-content:center;align-items:center;gap:8px;padding:10px 18px;font-weight:700;transition:transform .12s,box-shadow .12s,background .12s;display:inline-flex}.btn:active:not(:disabled){box-shadow:none;transform:translateY(2px)}.btn:disabled{opacity:.45}.btn-primary{background:var(--terracotta);border-color:var(--terracotta-dark);color:#fff6ec}.btn-accent{background:var(--mustard);color:#33230a;border-color:#a3700f}.btn-ghost{background:0 0;border-color:currentColor}.btn-block{width:100%}.btn-danger{background:var(--danger);color:#fff3ee;border-color:#8d3122}.icon-button{width:var(--tap);height:var(--tap);border-radius:var(--radius);color:inherit;background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.icon-button:active{background:#ffffff24}.menu{text-align:center;flex-direction:column;align-items:center;gap:14px;padding-top:28px;display:flex}.menu-logo{width:min(120px,32cqw);height:auto}.menu-title{font-family:var(--font-display);letter-spacing:.02em;margin:0;font-size:clamp(30px,9cqw,46px);font-weight:700}.menu-subtitle{max-width:30ch;color:var(--ink-soft);margin:0;font-size:15px}.menu-actions{flex-direction:column;gap:10px;width:min(320px,100%);margin-top:8px;display:flex}.menu-actions .btn{min-height:52px;font-size:17px}.menu-stats{color:var(--ink-soft);font-variant-numeric:tabular-nums;gap:18px;margin-top:6px;font-size:14px;display:flex}.menu-stats b{color:var(--ink);font-size:18px}.menu-links{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:10px;display:flex}.chapter{margin-bottom:26px}.chapter-header{align-items:baseline;gap:10px;margin-bottom:4px;display:flex}.chapter-header h2{font-family:var(--font-display);margin:0;font-size:22px;font-weight:600}.chapter-header .chapter-range{color:var(--ink-faint);font-variant-numeric:tabular-nums;font-size:13px}.chapter-blurb{color:var(--ink-soft);margin:0 0 12px;font-size:14px}.level-grid{grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:10px;display:grid}.level-tile{aspect-ratio:1;min-height:var(--tap);border:2px solid var(--wood-light);border-radius:var(--radius);background:var(--card);font-variant-numeric:tabular-nums;box-shadow:var(--shadow-sm);flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:4px;font-weight:700;display:flex;position:relative}.level-tile:active:not(:disabled){transform:translateY(2px)}.level-tile.locked{background:var(--paper-deep);border-color:var(--ink-faint);color:var(--ink-faint)}.level-tile .tile-stars{gap:1px;height:12px;display:flex}.level-tile .tile-star{width:12px;height:12px}.level-tile .tile-best{color:var(--ink-faint);font-size:10px;font-weight:600}.game{flex-direction:column;height:100%;min-height:0;display:flex}.board{flex-direction:column;flex:auto;justify-content:safe center;align-items:center;gap:10px;min-height:0;padding:12px 10px 16px;display:flex;overflow:hidden auto}.shelf{border-radius:var(--radius);background:linear-gradient(180deg, var(--wood-light), var(--wood));border:2px solid var(--wood-dark);width:min(100%,520px);box-shadow:var(--shadow-sm), inset 0 1px 0 #ffffff38;text-align:left;touch-action:manipulation;padding:6px 8px 8px;display:block}.shelf:disabled{opacity:1}.shelf.is-locked{background:repeating-linear-gradient(135deg, var(--wood-light), var(--wood-light) 8px, var(--wood) 8px, var(--wood) 16px);opacity:.85}.shelf.is-source{outline:3px solid var(--mustard);outline-offset:2px}.shelf.is-target{outline:3px solid var(--olive);outline-offset:2px}.shelf.is-invalid{animation:.32s shake}.shelf-slots{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;min-height:62px;display:grid}.shelf-slot{border-radius:var(--radius-sm);background:#2c1d1438;justify-content:center;align-items:flex-end;min-height:62px;display:flex;position:relative;box-shadow:inset 0 2px 5px #2c1d1459}.crack-lines{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.shelf-slot.is-empty:after{content:"";border:2px dashed #ffffff61;border-radius:50%;width:12px;height:12px;margin-bottom:12px}.shelf-item{width:100%;min-height:var(--tap);pointer-events:none;background:0 0;border:none;flex-direction:column;justify-content:flex-end;align-items:center;padding:2px;display:flex;position:relative}.shelf-item .item-art{filter:drop-shadow(0 2px 2px #2c1d1459);width:min(100%,58px);height:auto;transition:transform .16s}.shelf-item.is-front .item-art{width:min(100%,72px)}.shelf-item.is-selected .item-art{transform:translateY(-6px)scale(1.06)}.shelf-item.is-hint .item-art{animation:1.2s ease-in-out infinite pulse-hint}.shelf-badge{background:var(--card);border:1px solid var(--wood-dark);border-radius:50%;justify-content:center;align-items:center;width:20px;height:20px;font-size:12px;font-weight:700;display:inline-flex;position:absolute;bottom:2px;right:2px}.shelf-lock{color:#fff4e2;text-shadow:0 1px 2px #00000073;justify-content:center;align-items:center;gap:8px;min-height:62px;font-size:13px;font-weight:700;display:flex}.action-bar{padding:10px 12px calc(12px + var(--safe-bottom));background:var(--paper-deep);border-top:2px solid var(--wood-light);flex:none;grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.overlay-backdrop{z-index:20;background:#2c1d149e;justify-content:center;align-items:center;padding:20px;display:flex;position:absolute;inset:0}.overlay-panel{border-radius:var(--radius-lg);border:3px solid var(--wood-dark);background:var(--card);width:min(420px,100%);max-height:100%;box-shadow:var(--shadow-lg);text-align:center;padding:20px;overflow-y:auto}.overlay-panel h2{font-family:var(--font-display);margin:0 0 6px;font-size:26px;font-weight:700}.overlay-panel p{color:var(--ink-soft);margin:0 0 14px}.overlay-actions{flex-direction:column;gap:8px;display:flex}.star-row{justify-content:center;gap:8px;margin:10px 0 14px;display:flex}.star{width:44px;height:44px;color:var(--ink-faint)}.star.is-lit{color:var(--mustard);animation:.38s backwards pop}.toast{z-index:15;text-align:center;pointer-events:none;position:absolute;top:68px;left:0;right:0}.toast span{color:var(--paper);box-shadow:var(--shadow);background:#2c1d14e0;border-radius:999px;padding:8px 16px;font-size:14px;font-weight:700;display:inline-block}.tutorial-card{border-radius:var(--radius);border:2px solid var(--wood-light);background:var(--card);text-align:left;align-items:flex-start;gap:14px;margin-bottom:12px;padding:14px;display:flex}.tutorial-card .tutorial-art{flex:none;width:62px}.tutorial-card h3{font-family:var(--font-display);margin:0 0 4px;font-size:18px}.tutorial-card p{color:var(--ink-soft);margin:0;font-size:14px}.field{text-align:left;margin-bottom:14px;display:block}.field span{color:var(--ink-soft);margin-bottom:4px;font-size:13px;font-weight:700;display:block}.field input{width:100%;min-height:var(--tap);border:2px solid var(--wood-light);border-radius:var(--radius);background:var(--paper);color:var(--ink);font:inherit;padding:10px 12px}.field input:focus{border-color:var(--terracotta);outline:none}.form-error{border-radius:var(--radius-sm);border:1px solid var(--danger);color:var(--danger);text-align:left;background:#b4442f24;margin:0 0 12px;padding:10px 12px;font-size:14px;font-weight:600}.form-note{color:var(--ink-faint);text-align:left;margin:14px 0 0;font-size:13px}.toggle-row{min-height:var(--tap);border-bottom:1px solid var(--paper-deep);justify-content:space-between;align-items:center;gap:12px;padding:8px 0;display:flex}.toggle-row:last-child{border-bottom:none}.toggle-row label{font-weight:600}.toggle{border:2px solid var(--wood-light);background:var(--paper-deep);border-radius:999px;flex:none;width:56px;height:32px;transition:background .14s;position:relative}.toggle:after{content:"";background:var(--card);width:24px;height:24px;box-shadow:var(--shadow-sm);border-radius:50%;transition:transform .14s;position:absolute;top:2px;left:2px}.toggle[aria-checked=true]{background:var(--olive);border-color:var(--olive)}.toggle[aria-checked=true]:after{transform:translate(24px)}.segmented{gap:6px;display:flex}.segmented button{min-height:var(--tap);border:2px solid var(--wood-light);border-radius:var(--radius-sm);background:var(--card);flex:1 1 0;font-size:14px;font-weight:700}.segmented button[aria-pressed=true]{background:var(--terracotta);border-color:var(--terracotta-dark);color:#fff6ec}.board-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.board-row{border-radius:var(--radius-sm);background:var(--card);border:1px solid var(--paper-deep);grid-template-columns:34px 1fr auto;align-items:center;gap:10px;padding:10px 12px;display:grid}.board-row .rank{color:var(--ink-faint);font-variant-numeric:tabular-nums;font-weight:700}.board-row .name{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.board-row .score{font-variant-numeric:tabular-nums;color:var(--ink-soft);font-weight:700}.empty-note{text-align:center;color:var(--ink-faint);padding:24px 12px}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}@keyframes pulse-hint{0%,to{filter:drop-shadow(0 0 #dfa02a00);transform:translateY(0)}50%{filter:drop-shadow(0 0 8px #dfa02ae6);transform:translateY(-5px)}}@keyframes pop{0%{opacity:0;transform:scale(.4)}70%{transform:scale(1.15)}to{opacity:1;transform:scale(1)}}@keyframes float-up{0%{opacity:0;transform:translate(0)rotate(0)}15%{opacity:1}to{transform:translate(var(--drift,0px), -120px) rotate(220deg);opacity:0}}.particle{color:var(--mustard);pointer-events:none;animation-name:float-up;animation-timing-function:ease-out;animation-fill-mode:forwards;position:absolute;top:30%}.particle-layer{pointer-events:none;position:absolute;inset:0;overflow:hidden}.flying-item{z-index:30;pointer-events:none;filter:drop-shadow(0 4px 5px #2c1d1473);animation:.38s cubic-bezier(.4,0,.2,1) forwards flight;display:block;position:fixed;transform:translate(-50%)}@keyframes flight{0%{opacity:1;transform:translate(-50%)scale(1)}55%{transform:translate(calc(-50% + var(--dx,0px) * .55), calc(-26px + var(--dy,0px) * .45)) scale(1.08);opacity:1}to{transform:translate(calc(-50% + var(--dx,0px)), var(--dy,0px)) scale(.92);opacity:0}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (prefers-reduced-motion:no-preference){.reduce-motion *,.reduce-motion :before,.reduce-motion :after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
