:root{font-family:ui-rounded,'Avenir Next','Trebuchet MS',system-ui,sans-serif;color:#153b4b;background:#f3f1e8;font-synthesis:none;--navy:#153b4b;--teal:#187b82;--paper:#fffdf6;--gold:#e0b355;--muted:#546b71}*{box-sizing:border-box}body{margin:0}button,input,a{-webkit-tap-highlight-color:transparent}button,input{font:inherit}button,a,input,summary{touch-action:manipulation}a{color:inherit}button{cursor:pointer}a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible{outline:3px solid #ca721b;outline-offset:4px}button:disabled{cursor:default}body:before{content:'';position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.08;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.5' filter='url(%23n)'/%3E%3C/svg%3E")}.topbar{max-width:1200px;margin:auto;padding:26px 36px;display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #153b4b20}.brand{text-decoration:none;display:flex;align-items:center;gap:12px;font-weight:900;font-size:23px;letter-spacing:-.7px}.brand-mark{display:block;object-fit:contain;background:transparent;width:46px;height:46px;flex-shrink:0;transform:none;border-radius:12px}.brand small{display:block;font-size:12px;font-weight:500;letter-spacing:1px;margin-top:4px}.demo-badge{font-size:12px;border:1px solid #153b4b30;border-radius:20px;padding:7px 12px;white-space:nowrap;color:#405c66}main{max-width:1130px;margin:auto;padding:30px 28px 120px}.heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:28px}.eyebrow{font-size:12px;font-weight:800;letter-spacing:1.8px;color:var(--teal);margin:0 0 10px}h1{font-size:clamp(30px,4vw,46px);letter-spacing:-1.4px;margin:0 0 8px;line-height:1.12}h2{font-size:22px;letter-spacing:-.5px;margin:0 0 14px}p{font-size:16px;line-height:1.6;margin:0 0 12px}.heading p:last-child{color:var(--muted)}.paper-label{background:#e9d392;padding:13px 22px;transform:rotate(4deg);font-size:14px;font-weight:700;box-shadow:2px 4px 0 #153b4b0a;clip-path:polygon(1% 4%,98% 0,100% 93%,3% 100%)}.editor-layout{display:grid;grid-template-columns:.9fr 1.1fr;gap:38px;align-items:start}.preview-panel{position:sticky;top:24px;text-align:center;background:#dfebe4;border:1px solid #b5cec5;padding:24px 28px 28px;border-radius:80px 80px 18px 18px;box-shadow:5px 6px 0 #153b4b09}.avatar{position:relative;aspect-ratio:1;isolation:isolate;overflow:hidden;border-radius:45% 47% 8% 9%;background:#b6dad3;max-width:420px;margin:auto}.avatar.background-1{background:#ead5a5}.avatar.background-2{background:#bcd8e6}.paper-halo{position:absolute;inset:9% 8% 7%;background:#fff8dd66;clip-path:polygon(9% 15%,40% 0,79% 3%,100% 32%,92% 72%,72% 96%,30% 100%,0 70%,2% 35%);transform:rotate(-8deg)}.layer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;object-fit:contain;filter:drop-shadow(2px 3px 1px #153b4b16)}.hair-color-1{filter:grayscale(1) brightness(.6) drop-shadow(2px 3px 1px #153b4b16)}.hair-color-2{filter:sepia(.9) saturate(1.5) brightness(2.3) drop-shadow(2px 3px 1px #153b4b16)}.preview-caption{padding-top:24px}.preview-caption h2{font-size:31px;margin-bottom:8px}.preview-caption .eyebrow{font-size:11px;letter-spacing:1.4px}.preview-tag{display:inline-block;background:#f9f6e9;padding:5px 14px;border-radius:20px;font-size:14px}.button{min-height:48px;border:0;border-radius:12px;padding:13px 20px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:14px;transition:transform .15s,background .15s}.button:active{transform:translateY(2px)}.primary{background:var(--navy);color:#fffdf6;box-shadow:0 3px 0 #09262f}.primary:hover{background:#20566b}.secondary{background:#fffdf6;border:1px solid #b7c8bc;color:var(--navy)}.shuffle{margin-top:22px;width:100%}.paper-card{background:var(--paper);border:1px solid #dedfd3;box-shadow:3px 4px 0 #153b4b06;border-radius:18px}.editor-controls{padding:27px}.form-intro{border-bottom:1px dashed #c8d2cb;padding-bottom:17px;margin-bottom:22px}.form-intro h2{margin-bottom:5px}.form-intro span{font-size:13px;color:var(--muted)}fieldset{border:0;margin:0 0 23px;padding:0;min-width:0}legend{font-size:15px;font-weight:800;margin-bottom:10px}.options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}.option{cursor:pointer;position:relative;display:flex;align-items:center;flex-direction:column;justify-content:center;gap:7px;background:#f5f3eb;border:2px solid transparent;border-radius:12px;padding:10px 3px;font-size:14px;min-height:48px;color:#314d59}.option input[type=radio]{position:absolute;opacity:0;width:1px;height:1px}.option:has(input:focus-visible){outline:3px solid #ca721b;outline-offset:3px}.option.selected{border-color:var(--teal);background:#e9f3ec;color:var(--navy)}.tick{position:absolute;top:3px;right:5px;font-size:12px;font-weight:bold;color:#12636d;visibility:hidden}.selected .tick{visibility:visible}.swatch{height:30px;width:30px;border-radius:50% 45% 49% 46%;border:1px solid #153b4b30;box-shadow:2px 2px 0 #153b4b12}.option-thumb{position:relative;height:54px;width:70px;overflow:hidden}.option-thumb img{position:absolute;width:110px;height:110px;object-fit:contain;top:-9px;left:-20px}.option:has(input[name=shirt]) .option-thumb img{top:-61px}.check-option{display:flex;align-items:center;gap:12px;min-height:48px;padding:11px 14px;border:1px solid #c9d2c9;border-radius:10px;cursor:pointer;font-size:15px}.check-option input{width:20px;height:20px;accent-color:var(--teal)}.identity{padding-top:22px;border-top:1px dashed #c8d2cb}.identity h2{font-size:20px}.identity label{display:block;font-size:14px;font-weight:700;margin-bottom:14px}.identity input{display:block;width:100%;margin-top:7px;border:1px solid #c6cec7;border-radius:9px;padding:13px 12px;background:#fffef9;color:var(--navy);font-size:16px}.name-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.optional{font-weight:400;color:var(--muted)}.field-help,.local-note{font-size:13px;color:var(--muted);line-height:1.5}.save-row{display:flex;flex-direction:column;gap:8px;margin-top:18px}.text-button{background:none;color:var(--navy);border:none;padding:10px;min-height:44px;text-decoration:underline;text-underline-offset:4px;font-size:14px}.local-note{text-align:center;margin:14px 0 0}#form-error:empty{display:none}#form-error{color:#a7392c;font-size:14px}.bottom-nav{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);display:flex;gap:6px;padding:7px;background:#153b4bf5;color:#fff;backdrop-filter:blur(14px);border-radius:18px;z-index:10;box-shadow:0 5px 25px #123b4b30}.bottom-nav a{display:flex;align-items:center;gap:10px;padding:12px 26px;min-height:48px;text-decoration:none;font-size:15px;font-weight:700;border-radius:12px;white-space:nowrap}.bottom-nav a.active{color:#183e4a;background:#ebd394}.bottom-nav a span{font-size:23px;line-height:1}#toast{position:fixed;left:50%;bottom:108px;transform:translate(-50%,15px);opacity:0;pointer-events:none;background:#173c4e;color:white;padding:14px 20px;border-radius:12px;font-size:14px;max-width:90vw;width:max-content;z-index:20;transition:.2s}#toast.visible{opacity:1;transform:translate(-50%,0)}.board-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;gap:10px}.board-heading .eyebrow{margin:0}.greeting{display:flex;align-items:center;justify-content:space-between;background:#d5e8e1;padding:20px 30px;overflow:hidden;margin-bottom:22px;gap:20px}.greeting h1{font-size:36px}.greeting p{color:#3e5a65}.greeting .small{width:185px;border-radius:45% 45% 10% 10%}.greeting>a{flex-shrink:0}.edit-link{font-size:14px;font-weight:700;text-underline-offset:5px;display:inline-block;padding:8px 0}.board-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:24px}.stats{display:grid;grid-template-columns:1fr 1fr;gap:15px;margin-bottom:20px}.stat{padding:20px}.stat span{font-size:16px;font-weight:700;display:block}.stat strong{display:block;font-size:45px;line-height:1.3}.stat small{font-size:12px;color:#3b5963}.gold{background:#f2e2b7}.blue{background:#dbeaf0}.journey{padding:25px;background:#e5efea}.journey h2{font-size:22px}.total{font-size:42px;font-weight:900}.total span{font-size:15px;font-weight:500}.milestones{display:flex;position:relative;margin:30px 0 20px;gap:8px}.milestones:before{content:'';height:3px;background:#95b4b0;position:absolute;top:21px;left:15%;right:15%}.milestone{z-index:1;display:flex;align-items:center;flex:1;flex-direction:column;text-align:center;gap:6px}.milestone b{display:grid;place-items:center;border:2px solid #91b4b0;background:#e6eeea;width:44px;height:44px;clip-path:polygon(15% 4%,90% 0,100% 80%,70% 100%,5% 90%,0 30%);font-size:22px}.milestone.done b{background:#28776f;color:white;border-color:#28776f}.milestone span{font-size:12px}.milestone strong{font-size:18px}.journey>p:last-child{font-size:14px;margin:18px 0 0}.deadlines{padding:24px;margin-bottom:20px}.deadline{display:flex;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid #153b4b13}.date-chip{font-size:10px;font-weight:900;letter-spacing:.5px;background:#dceae6;padding:13px 8px;border-radius:8px;min-width:57px;text-align:center}.date-chip.sand{background:#f2e2b7}.deadline strong{font-size:15px}.deadline p{font-size:13px;color:var(--muted);margin:3px 0 0}details{margin-top:14px}summary{cursor:pointer;min-height:44px;padding:10px 0;font-size:15px;font-weight:700}.schedule{font-size:15px;line-height:1.9;margin:0;padding-left:24px}.feed{padding:24px}.post-author{display:flex;align-items:center;gap:11px;margin:18px 0}.post-author strong{font-size:14px}.post-author small{display:block;font-size:12px;color:var(--muted);margin-top:3px}.initial{width:37px;height:37px;display:grid;place-items:center;background:#ead5a5;border-radius:45%;font-weight:800}.feed h2{font-size:22px}.feed p{font-size:15px}.post-tag{font-size:12px;background:#e8eee4;padding:6px 10px;border-radius:20px}.board-note{font-size:13px;color:var(--muted);margin-top:22px;max-width:750px} @media(min-width:900px){.option-fields{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.options{gap:5px}.option{font-size:14px}.option-thumb{width:58px}.editor-layout{grid-template-columns:.85fr 1.15fr}}
@media(max-width:700px){.topbar{padding:17px 18px}.brand{font-size:20px}.brand small{font-size:10px}.brand-mark{width:38px;height:38px}.demo-badge{font-size:11px;padding:6px 8px}main{padding:25px 16px 112px}.heading{margin-bottom:19px}.heading h1{font-size:34px}.heading p:last-child{font-size:15px;margin-bottom:0}.paper-label{display:none}.editor-layout{grid-template-columns:1fr;gap:20px}.preview-panel{position:relative;top:0;border-radius:45px 45px 14px 14px;padding:12px 18px 16px;display:grid;grid-template-columns:1.2fr 1fr;align-items:center;column-gap:15px}.avatar{max-width:250px}.preview-caption{padding:0}.preview-caption h2{font-size:25px}.preview-caption .eyebrow{font-size:10px;letter-spacing:1px;line-height:1.6;display:block}.shuffle{grid-column:1/-1;margin-top:12px;min-height:44px;font-size:14px}.editor-controls{padding:21px}.form-intro{margin-bottom:20px}.options{gap:9px}.option-thumb{height:56px}.bottom-nav{bottom:0;left:0;transform:none;width:100%;border-radius:18px 18px 0 0;padding:8px 12px calc(8px + env(safe-area-inset-bottom));justify-content:center}.bottom-nav a{flex:1;justify-content:center;padding:12px 16px}.greeting{padding:17px 18px;gap:8px}.greeting h1{font-size:28px}.greeting .small{width:125px}.greeting p{font-size:13px}.greeting .eyebrow{font-size:10px;letter-spacing:1px}.edit-link{font-size:12px}.board-grid{grid-template-columns:1fr;gap:20px}.stats{gap:12px}.stat{padding:18px}.stat small{font-size:12px}.journey{padding:22px}.board-heading{flex-wrap:wrap}.board-heading .eyebrow{font-size:11px}#toast{bottom:90px}}
.layer.shirt{left:9%;right:auto;top:27%;bottom:0;width:82%;height:73%}
.outfit-sprite{display:block;position:absolute;inset:0;overflow:hidden;pointer-events:none}
.outfit-sprite[data-outfit="0"]{--outfit-mask:url("assets/outfit-0-mask.svg?v=3")}
.outfit-sprite[data-outfit="1"]{--outfit-mask:url("assets/outfit-1-mask.svg?v=3")}
.outfit-sprite[data-outfit="2"]{--outfit-mask:url("assets/outfit-2-mask.svg?v=3")}
.outfit-sprite img{position:absolute;top:0;left:0;width:300%;height:100%;max-width:none;object-fit:fill;pointer-events:none;-webkit-mask-image:var(--outfit-mask);mask-image:var(--outfit-mask);-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;mask-mode:alpha}
.outfit-sprite[data-skin="1"] img{left:-100%}
.outfit-sprite[data-skin="2"] img{left:-200%}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;scroll-behavior:auto!important}}

.preview-panel>*{min-width:0}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.preview-caption h2{overflow-wrap:anywhere}
.wallet-link{text-decoration:none;transition:background .15s}
.wallet-link:hover{background:#ead393}
.ticket-demo-note{font-size:14px;line-height:1.6;padding:15px 18px;background:#e6ece5;border-radius:12px;margin:0 0 24px;color:#3b5961}
.ticket-error{font-size:15px;line-height:1.5;color:#9c3327;background:#fff0e8;border:1px solid #ddb3a2;padding:14px 18px;border-radius:10px;scroll-margin:24px}
.ticket-error:empty{display:none}
.ticket-layout{display:grid;grid-template-columns:1fr 1fr;gap:24px;align-items:start}
.ticket-main,.ticket-side{display:grid;gap:22px;min-width:0}
.ticket-balance{padding:28px;background:#f2e2b7}
.ticket-balance .eyebrow{font-size:13px;color:#6e552b}
.ticket-total{font-size:72px;font-weight:900;line-height:1.3;letter-spacing:-2px;overflow-wrap:anywhere}
.ticket-total>span{font-size:19px;font-weight:600;letter-spacing:0}
.ticket-balance dl{margin:20px 0 0;padding-top:16px;border-top:1px dashed #9a804e70;display:grid;gap:10px}
.ticket-balance dl>div{display:flex;align-items:baseline;justify-content:space-between;gap:20px}
.ticket-balance dt{font-size:14px;line-height:1.5}
.ticket-balance dd{font-size:17px;font-weight:800;margin:0}
.ticket-balance p{font-size:14px;margin:17px 0 0}
.ticket-form-card,.ticket-requests,.ticket-history{padding:25px}
.ticket-section-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.ticket-section-heading h2{margin:0}
.ticket-count{font-size:13px;background:#e9d392;padding:5px 10px;border-radius:20px;white-space:nowrap}
.ticket-kind{margin-bottom:19px}
.ticket-kind-options{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.ticket-kind-options label{position:relative;min-width:0}
.ticket-kind-options input{position:absolute;opacity:0;width:1px;height:1px}
.ticket-kind-options span{display:flex;align-items:center;justify-content:center;text-align:center;min-height:49px;padding:9px;font-size:14px;font-weight:700;border:2px solid transparent;background:#f1efe4;border-radius:10px;cursor:pointer}
.ticket-kind-options input:checked+span{border-color:var(--teal);color:var(--teal);background:#e9f3ec}
.ticket-kind-options input:focus-visible+span{outline:3px solid #ca721b;outline-offset:3px}
.ticket-form-fields{display:grid;gap:16px}
.ticket-form-fields label{font-size:14px;font-weight:700;display:block}
.ticket-form-fields input,.ticket-form-fields textarea{display:block;width:100%;margin-top:7px;border:1px solid #c6cec7;border-radius:9px;padding:12px;background:#fffef9;color:var(--navy);font:inherit;font-size:16px;line-height:1.5}
.ticket-form-fields input{max-width:160px;min-height:49px}
.ticket-form-fields textarea{resize:vertical;min-height:92px}
.ticket-form-fields textarea:focus-visible{outline:3px solid #ca721b;outline-offset:3px}
.ticket-form-card .field-help{margin:17px 0}
.ticket-form-card button[type=submit]{width:100%}
.ticket-list{list-style:none;margin:0;padding:0}
.ticket-list>li{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:19px 0;border-bottom:1px solid #153b4b17}
.ticket-list>li:last-child{border-bottom:0;padding-bottom:0}
.ticket-item-copy{min-width:0;flex:1}
.ticket-item-copy strong{display:block;font-size:15px;line-height:1.5;overflow-wrap:anywhere}
.ticket-item-copy small{display:block;font-size:13px;line-height:1.6;color:var(--muted);margin-top:4px}
.ticket-item-end{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0}
.ticket-amount{font-size:24px;line-height:1.3;font-weight:800;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;max-width:45%}
.ticket-item-end .ticket-amount{max-width:none}
.ticket-amount.credit{color:#236b59}
.ticket-amount.spend{color:#93512f}
.request-quantity{color:var(--navy);font-size:22px;text-align:right}
.request-quantity small{display:block;font-size:12px;font-weight:500}
.ticket-item-end .text-button{font-size:13px;padding:9px 0;min-height:44px}
.request-status{display:inline-block;font-size:12px;line-height:1.5;font-weight:700;padding:4px 9px;border-radius:6px;margin-top:9px;background:#edf0e9;color:#526165}
.status-pending{background:#f4e5b8;color:#73501b}
.status-approved{background:#dfefe5;color:#23614f}
.status-rejected{background:#f6e4df;color:#8c4236}
.ticket-empty{font-size:15px;line-height:1.6;color:var(--muted);margin:18px 0 0}
.ticket-teacher{margin-top:28px;padding:12px 25px 22px;border-style:dashed}
.ticket-teacher>summary{font-size:16px;padding:13px 0}
.ticket-teacher>p{font-size:14px;max-width:750px;margin-bottom:24px}
.teacher-grid{display:grid;grid-template-columns:1fr 1fr;gap:32px}
.teacher-grid>section{min-width:0}
.teacher-grid h2{font-size:20px}
.teacher-requests>li{flex-direction:column;gap:12px}
.request-actions{display:flex;flex-wrap:wrap;gap:8px}
.request-actions .button{min-height:44px;font-size:14px;padding:10px 16px}
#ticket-teacher-form>button{margin-top:18px;width:100%}
.game-board-link{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:22px 24px;margin-bottom:20px;text-decoration:none;background:#e2eeea;border-color:#afcfc1}
.game-board-link .eyebrow{display:block;font-size:12px;margin-bottom:9px}
.game-board-link strong{display:block;font-size:23px;margin-bottom:6px}
.game-board-link div>span:last-child{font-size:14px;line-height:1.5;display:block}
.game-board-link>b{font-size:22px;white-space:nowrap;background:#eed99e;padding:10px 12px;border-radius:10px}
.game-heading{margin-bottom:20px;gap:18px}
.game-heading h1{margin-bottom:0}
.game-wallet{display:block;padding:10px 16px;font-weight:800;font-size:16px;text-decoration:none;border-radius:12px;background:#f2e2b7;white-space:nowrap}
.sudoku-levels{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0 0 22px;max-width:660px}
.sudoku-levels label{position:relative;min-width:0}
.sudoku-levels input{position:absolute;opacity:0;width:1px;height:1px}
.sudoku-levels label>span{display:flex;flex-direction:column;gap:5px;border:2px solid transparent;border-radius:12px;padding:12px 14px;background:#e9e9de;cursor:pointer}
.sudoku-levels strong{font-size:16px}
.sudoku-levels small{font-size:13px;color:#49626a;line-height:1.4}
.sudoku-levels input:checked+span{border-color:var(--teal);background:#e4f0e9}
.sudoku-levels input:focus-visible+span{outline:3px solid #ca721b;outline-offset:3px}
.sudoku-layout{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(250px,.8fr);gap:26px;align-items:start}
.sudoku-play{padding:25px;min-width:0}
.sudoku-game-meta{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:17px;flex-wrap:wrap}
.sudoku-game-meta label{font-size:14px;font-weight:700;display:flex;align-items:center;gap:8px}
.sudoku-game-meta select{font:inherit;font-size:14px;min-height:42px;padding:8px 26px 8px 10px;color:var(--navy);background:#fffdf6;border:1px solid #b2c8bd;border-radius:8px;max-width:195px}
.sudoku-game-meta select:focus-visible{outline:3px solid #ca721b;outline-offset:3px}
.sudoku-reward-label{font-size:13px;background:#f2e2b7;border-radius:6px;padding:6px 9px;font-weight:700}
.sudoku-board{display:grid;grid-template-columns:repeat(var(--grid-size),minmax(0,1fr));grid-template-rows:repeat(var(--grid-size),minmax(0,1fr));aspect-ratio:1;width:100%;max-width:470px;margin:auto;border:3px solid var(--navy);background:#fffef9;box-shadow:3px 4px 0 #153b4b12}
.sudoku-cell{position:relative;display:grid;place-items:center;min-width:0;min-height:0;border:0;border-right:1px solid #b2c6bf;border-bottom:1px solid #b2c6bf;border-radius:0;padding:0;background:#fffef9;color:var(--navy);font:inherit;font-size:clamp(20px,4vw,29px);font-variant-numeric:tabular-nums;line-height:1;user-select:none}
.sudoku-cell.given{font-weight:850}
.sudoku-cell.entered{font-weight:600;color:#116e78}
.sudoku-cell.peer{background:#edf3ec}
.sudoku-cell.same-number{background:#f1dfae}
.sudoku-cell.box-right{border-right:3px solid var(--navy)}
.sudoku-cell.box-bottom{border-bottom:3px solid var(--navy)}
.sudoku-cell.selected{background:#c9e3d9;box-shadow:inset 0 0 0 3px #187b82;z-index:1}
.sudoku-cell.conflict{background:#f7dbd4;color:#922d23;text-decoration:underline;text-underline-offset:4px}
.sudoku-cell:focus-visible{outline:3px solid #ca721b;outline-offset:-3px;z-index:2}
.sudoku-notes{position:absolute;inset:2px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(var(--note-rows),minmax(0,1fr));color:#425f68;font-size:12px;font-weight:500;line-height:1}
.sudoku-notes>span{display:grid;place-items:center;min-width:0;min-height:0}
.sudoku-below-grid{display:flex;justify-content:space-between;gap:12px;font-size:13px;color:#49626a;margin:14px auto;max-width:470px}
.sudoku-keypad{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;max-width:470px;margin:18px auto 14px}
.sudoku-keypad .button{font-size:22px;min-height:48px;padding:9px 3px;border-radius:9px}
.sudoku-keypad .keypad-erase{font-size:13px}
.sudoku-keypad .button:disabled,.sudoku-tools .button:disabled{opacity:.42}
.sudoku-tools{display:grid;grid-template-columns:1.2fr .75fr 1.2fr;gap:8px;max-width:470px;margin:0 auto}
.sudoku-tools .button{padding:10px 6px;font-size:14px;gap:5px;min-height:47px;border-radius:9px}
.sudoku-tools .is-active{background:#d5eade;border:2px solid var(--teal);color:var(--teal)}
.sudoku-message{font-size:14px;line-height:1.5;margin:16px 0 0;color:#31535f}
.sudoku-message:empty{display:none}
.sudoku-error{font-size:14px;line-height:1.5;color:#922d23;background:#fff0e8;padding:12px 15px;border-radius:9px;margin:16px 0 0}
.sudoku-error p{font-size:14px;margin-bottom:0}
.sudoku-error .text-button{padding:7px 0;color:#922d23}
.sudoku-win{padding:20px;background:#e1efe6;border:1px solid #acd0bb;border-radius:12px;margin-top:20px}
.sudoku-win h2{font-size:23px;margin-bottom:10px}
.sudoku-win p{font-size:15px}
.sudoku-win>div{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px}
.sudoku-win .button{font-size:14px}
.sudoku-restart{display:block;margin:15px auto 0}
.sudoku-sidebar{display:grid;gap:20px;min-width:0}
.sudoku-guide,.sudoku-achievements{padding:24px}
.sudoku-guide p,.sudoku-achievements p{font-size:15px}
.sudoku-guide .field-help{font-size:13px;margin:18px 0 0}
.sudoku-achievements{background:#e6efe7}
.sudoku-achievements dl{display:grid;gap:12px;margin:20px 0}
.sudoku-achievements dl>div{display:flex;justify-content:space-between;gap:15px;align-items:baseline}
.sudoku-achievements dt{font-size:15px}
.sudoku-achievements dd{font-size:24px;font-weight:800;margin:0}
.sudoku-achievements p{margin-bottom:0}
.sudoku-local-note{font-size:13px;color:var(--muted);line-height:1.6;padding:0 5px}
@media(max-width:700px){
  .bottom-nav a{min-width:0;flex-direction:column;gap:4px;padding:8px 5px;font-size:13px;min-height:56px}
  .bottom-nav a span{font-size:22px}
  .ticket-layout,.teacher-grid{grid-template-columns:1fr;gap:20px}
  .ticket-heading h1{font-size:34px}
  .ticket-demo-note{padding:14px 16px;margin-bottom:20px}
  .ticket-main,.ticket-side{gap:20px}
  .ticket-balance,.ticket-form-card,.ticket-requests,.ticket-history{padding:22px}
  .ticket-total{font-size:65px}
  .ticket-teacher{padding:10px 21px 22px}
  .ticket-list>li{gap:13px}
  .sudoku-layout{grid-template-columns:1fr;gap:20px}
  .sudoku-play{padding:15px 12px 18px}
  .sudoku-levels{gap:7px;margin-bottom:16px}
  .sudoku-levels label>span{padding:11px 9px}
  .sudoku-levels strong{font-size:14px}
  .sudoku-levels small{font-size:12px}
  .game-wallet{padding:9px 12px;font-size:14px}
  .game-heading{margin-bottom:17px}
  .sudoku-game-meta{gap:8px;margin-bottom:13px}
  .sudoku-game-meta select{max-width:155px}
  .sudoku-reward-label{font-size:12px}
  .sudoku-tools{gap:6px}
  .sudoku-tools .button{font-size:13px}
  .sudoku-keypad{gap:7px}
  .sudoku-cell{font-size:clamp(19px,5.5vw,25px)}
  .sudoku-below-grid{font-size:12px;gap:6px}
  .sudoku-guide,.sudoku-achievements{padding:22px}
  .game-board-link{padding:20px;gap:14px}
}

/* Shared classroom: pupils see progress; management has its own teacher view. */
.classroom-mode-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.classroom-mode-bar>span{font-size:11px;font-weight:800;letter-spacing:1.2px;color:var(--teal)}
.classroom-mode-bar>a{font-size:13px;font-weight:700;min-height:44px;display:inline-flex;align-items:center;text-underline-offset:4px}
.classroom-demo-note{font-size:13px;line-height:1.6;color:#486269;margin-bottom:22px;max-width:850px}
.classroom-grid{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(0,1fr);grid-template-areas:"voyage polls" "wall extras";gap:28px 24px;align-items:start}
.classroom-grid>*{min-width:0}
.voyage-area{grid-area:voyage}
.polls-area{grid-area:polls;display:grid;gap:20px}
.wall-area{grid-area:wall}
.classroom-extras{grid-area:extras}
.classroom-stats .stat{padding:18px 24px}
.classroom-stats .stat strong{font-size:38px}
.classroom-journey{border-radius:22px 18px 24px 16px}
.classroom-journey:focus,.wall-post:focus,.poll-card:focus,.proposal:focus,#pending-posts:focus{outline:0}
.classroom-journey h2{font-size:24px}
.classroom-journey .total{font-size:48px;line-height:1.2;margin:18px 0}
.classroom-journey .total span{display:block;font-size:15px;margin-top:4px}
progress.class-progress{display:block;width:100%;height:12px;appearance:none;border:0;border-radius:8px;overflow:hidden;background:#c6dcd0;accent-color:var(--teal)}
progress.class-progress::-webkit-progress-bar{background:#c6dcd0}
progress.class-progress::-webkit-progress-value{background:var(--teal);border-radius:8px}
progress.class-progress::-moz-progress-bar{background:var(--teal);border-radius:8px}
.journey-next{font-size:14px;line-height:1.6;margin:14px 0}
.team-contributions{padding:16px 0 19px;margin:0 0 6px;list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;border-bottom:1px dashed #92b4a580}
.team-contributions li{display:flex;flex-direction:column;gap:4px;text-align:center;font-size:12px;color:#49626a}
.team-contributions strong{font-size:22px;color:var(--navy)}
.class-rewards{list-style:none;padding:0;margin:6px 0 16px}
.class-rewards li{display:flex;align-items:center;gap:12px;padding:13px 0;border-bottom:1px solid #153b4b12;flex-wrap:wrap}
.class-rewards li>div{flex:1;min-width:120px}
.class-rewards strong{display:block;font-size:15px;line-height:1.4;overflow-wrap:anywhere}
.class-rewards small{display:block;font-size:12px;margin-top:4px;color:#49626a}
.class-rewards .button{font-size:12px;min-height:44px;padding:8px 12px}
.reward-mark{display:grid;place-items:center;width:34px;height:37px;flex-shrink:0;background:#d2e0d7;color:#4b7069;clip-path:polygon(10% 0,91% 3%,100% 82%,76% 100%,0 88%);font-size:22px}
.reward-mark.reached{background:#2b796e;color:#fffdf6}
.classroom-journey>.field-help:last-child{font-size:12px}
.wall-area>h2{font-size:27px;margin-bottom:18px}
.wall-composer,.my-proposals{padding:8px 22px;margin:0 0 18px;border-style:dashed}
.wall-composer{background:#f5ecd3;border-color:#d5c699}
.wall-composer>summary{font-size:16px;min-height:48px}
.wall-composer[open],.my-proposals[open]{padding-bottom:22px}
.wall-composer .class-form{padding-top:14px}
.my-proposals>summary{display:flex;align-items:center;gap:10px}
.my-proposals>summary:before{content:"▸";font-size:12px}
.my-proposals[open]>summary:before{content:"▾"}
.wall-feed{display:grid;gap:20px}
.wall-post{padding:24px}
.wall-post .post-author{margin:0 0 18px}
.wall-post h3,.poll-card h3,.proposal h3{font-size:21px;line-height:1.3;letter-spacing:-.3px;margin:0 0 12px;overflow-wrap:anywhere}
.post-body{white-space:pre-wrap;overflow-wrap:anywhere;font-size:15px;line-height:1.65}
.post-comments{border-top:1px dashed #bccac280;padding-top:9px;margin-top:20px}
.post-comments>summary{font-size:14px}
.post-comments>summary span{font-weight:500;margin-left:5px}
.class-form{display:grid;gap:17px}
.class-form label{display:grid;gap:7px;font-size:14px;font-weight:700;min-width:0}
.class-form input,.class-form select,.class-form textarea{display:block;width:100%;min-width:0;min-height:46px;font:inherit;font-size:16px;font-weight:400;line-height:1.5;color:var(--navy);background:#fffef9;border:1px solid #b7c8bd;border-radius:9px;padding:10px 12px}
.class-form textarea{resize:vertical}
.class-form select:focus-visible,.class-form textarea:focus-visible{outline:3px solid #ca721b;outline-offset:3px}
.class-form input[type=number]{max-width:200px}
.class-form>.field-help{margin:0}
.class-form fieldset{display:grid;gap:14px;margin:0}
.class-form fieldset>legend{margin-bottom:14px}
.class-form>.button{justify-self:start;font-size:14px;text-decoration:none}
.class-form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.comment-form{gap:12px;margin-top:16px}
.comment-form label{font-size:13px}
.comment-list{list-style:none;padding:0;margin:6px 0 20px}
.comment-list>li{padding:14px 0;border-bottom:1px solid #153b4b12}
.comment-list>li>div{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.comment-list strong{font-size:13px;overflow-wrap:anywhere}
.comment-list small{font-size:11px;color:var(--muted);white-space:nowrap}
.comment-list p{font-size:14px;white-space:pre-wrap;overflow-wrap:anywhere;margin:7px 0 0}
.proposal{padding:18px 0;border-bottom:1px solid #153b4b20}
.proposal:last-child{border-bottom:0}
.proposal-meta{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.proposal-meta .request-status{margin:0}
.proposal-meta small{font-size:13px;color:var(--muted)}
.proposal h3{font-size:18px}
.proposal .post-body{font-size:14px}
.poll-card{padding:24px;background:#faf6e8}
.poll-heading{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:17px;flex-wrap:wrap}
.poll-heading .eyebrow{margin:0;font-size:11px}
.poll-status{font-size:11px;background:#e0ece2;color:#31584c;border-radius:6px;padding:5px 8px}
.poll-choices{display:grid;gap:9px;margin:18px 0}
.poll-choices label{display:flex;gap:12px;align-items:center;font-size:15px;line-height:1.4;padding:11px 13px;min-height:48px;border:1px solid #c9d1bd;border-radius:10px;background:#fffdf6;cursor:pointer}
.poll-choices input{width:18px;height:18px;flex-shrink:0;margin:0;accent-color:var(--teal)}
.poll-choices label:has(input:checked){background:#e4efe5;border-color:#3f8275}
.poll-choices label span{overflow-wrap:anywhere}
.poll-card form>.button{width:100%;font-size:14px}
.poll-results{display:grid;gap:13px;margin:22px 0 16px;padding-top:17px;border-top:1px dashed #c5c7b6}
.poll-result>div{display:flex;justify-content:space-between;gap:12px;align-items:baseline;font-size:13px;line-height:1.5;margin-bottom:7px}
.poll-result span{overflow-wrap:anywhere}
.poll-result b{font-weight:700;color:#2a6f63;font-size:11px}
.poll-result strong{font-size:14px;white-space:nowrap}
.poll-result small{font-weight:400;font-size:12px}
.poll-result progress{display:block;width:100%;height:7px;appearance:none;border:0;background:#e4e3d5;border-radius:6px;overflow:hidden;accent-color:#3f8275}
.poll-result progress::-webkit-progress-bar{background:#e4e3d5}
.poll-result progress::-webkit-progress-value{background:#3f8275;border-radius:6px}
.poll-result progress::-moz-progress-bar{background:#3f8275;border-radius:6px}
.poll-card>.field-help{font-size:12px;margin:0}
.poll-card>.button{font-size:13px;margin-top:17px}
.teacher-tabs{display:flex;gap:8px;padding:6px;background:#dce7df;border-radius:14px;margin:24px 0}
.teacher-tabs button{flex:1;min-width:0;padding:11px 10px;border:0;background:transparent;color:#3a5e64;border-radius:10px;font-size:15px;min-height:48px;font-weight:700}
.teacher-tabs button[aria-pressed=true]{background:var(--navy);color:#fffdf6;box-shadow:0 2px 2px #153b4b15}
.teacher-tabs button>span{display:inline-block;font-size:11px;background:#efd99b;color:var(--navy);min-width:20px;padding:2px 5px;border-radius:6px;margin-left:3px}
.classroom-teacher-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:26px;align-items:start}
.classroom-teacher-grid>div,.classroom-teacher-grid>section{min-width:0}
.teacher-panel{padding:26px;margin-bottom:24px}
.teacher-panel .eyebrow{font-size:11px;line-height:1.6}
.teacher-panel h2{font-size:23px;margin-bottom:20px}
.teacher-panel .proposal h3{font-size:19px}
.teacher-panel .ticket-empty{margin:0}
.points-history{padding:12px 24px 23px;margin-top:22px}
.sample-points-note{padding:16px 4px}
.teacher-polls{display:grid;gap:22px}
@media(max-width:700px){
  .classroom-mode-bar{gap:6px;margin-bottom:12px}
  .classroom-mode-bar>span{font-size:10px}
  .classroom-mode-bar>a{font-size:12px}
  .classroom-demo-note{font-size:12px;margin-bottom:18px}
  .classroom-grid{grid-template-columns:minmax(0,1fr);grid-template-areas:"voyage" "polls" "wall" "extras";gap:24px}
  .classroom-stats .stat{padding:17px}
  .classroom-stats .stat strong{font-size:35px}
  .classroom-journey h2{font-size:22px}
  .classroom-journey .total{font-size:44px}
  .wall-post,.poll-card,.teacher-panel{padding:21px}
  .wall-composer,.my-proposals{padding-left:19px;padding-right:19px}
  .wall-area>h2{font-size:25px}
  .classroom-teacher-grid{grid-template-columns:minmax(0,1fr);gap:0}
  .teacher-tabs{gap:4px;padding:5px;margin:20px 0}
  .teacher-tabs button{font-size:13px;padding:11px 6px}
  .teacher-panel .eyebrow{font-size:10px;letter-spacing:1.3px}
  .class-form-row{gap:12px}
  .teacher-polls{margin-top:0}
}
