.cmap{touch-action:none;background:var(--map-water);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;cursor:pointer;position:relative;overflow:hidden}.cmap.tap-only{touch-action:pan-x pan-y}.cmap.static{touch-action:auto;cursor:default}.cmap-svg{transform-origin:0 0;will-change:transform;width:100%;height:100%;display:block;position:absolute;inset:0;overflow:visible}.cmap-svg path{vector-effect:non-scaling-stroke;stroke-linejoin:round}.cm-out-fill{fill:var(--map-out)}.cm-out-edge{fill:none;stroke:var(--map-edge);stroke-opacity:.45;stroke-width:1px}.cm-cell{fill:var(--m0);transition:fill var(--t-fill)}.cm-cell.ctx,.cm-cell.dim{fill:var(--map-ctx)}.cm-cell.lv0{fill:var(--m0)}.cm-cell.lv1{fill:var(--m1)}.cm-cell.lv2{fill:var(--m2)}.cm-cell.lv3{fill:var(--m3)}.cm-cell.hl{fill:var(--hl)}.cm-water{fill:var(--map-water)}.cm-edge,.cm-bank{fill:none;stroke:var(--map-edge);stroke-width:1px}.cm-edge.gap{stroke:var(--map-gap);stroke-width:1.2px}.cm-rim{fill:none;stroke:var(--map-edge-strong);stroke-width:2px}.cm-lesson-rim{fill:none;stroke:var(--map-edge-strong);stroke-width:2.5px}.cm-q{fill:var(--hl);stroke:var(--q-outline);stroke-width:2.5px}.cm-q.breathe{animation:1.6s ease-in-out infinite cm-breathe}@keyframes cm-breathe{50%{stroke-width:5px}}.cm-ok{fill:var(--ok-fill);stroke:var(--ok);stroke-width:2.5px}.cm-ok.pencil{animation:cm-pencil var(--t-pencil) ease-out both}@keyframes cm-pencil{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}.cm-ok.blink{animation:1s ease-in-out 2 cm-blink}@keyframes cm-blink{50%{fill-opacity:.15;stroke-opacity:.3}}.cm-no{fill:var(--no-fill);stroke:var(--no);stroke-width:2.5px;stroke-dasharray:7 4}.cm-no-hatch{stroke:none}.cmap-svg .cm-hatch-line{stroke:var(--no);stroke-width:1.4px;stroke-opacity:.6;vector-effect:none}.cm-px path,.cm-labels path{vector-effect:none}.cm-sym-bg{fill:var(--surface);stroke:var(--ink);stroke-opacity:.2;stroke-width:1px}.cm-sym-ok{fill:none;stroke:var(--ok);stroke-width:3.2px}.cm-sym-no{fill:none;stroke:var(--no);stroke-width:3.2px;stroke-linecap:round}.cm-arrow{fill:none;stroke:var(--ink-2);stroke-width:2.5px;stroke-linecap:round}.cm-arrow-head path{fill:var(--ink-2)}.cm-label text{font:700 15px/1 var(--font-head);fill:var(--ink);stroke:var(--surface);stroke-width:4px;stroke-linejoin:round;paint-order:stroke}.cm-badge circle{fill:var(--due-badge);stroke:var(--surface);stroke-width:2px}.cm-badge-arrow{fill:none;stroke:var(--ink);stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round}.cm-badges path{vector-effect:none}.cm-label.sm text{stroke-width:3px;font-size:11px}.cm-leader{stroke:var(--ink);stroke-width:1.5px}.cm-ctx{pointer-events:none}.cm-ctxname text{font:700 13px/1 var(--font-ui);fill:var(--ink-3);stroke:var(--paper);stroke-width:3px;stroke-linejoin:round;paint-order:stroke;letter-spacing:.02em}.cm-ctxname.water text{fill:var(--map-water-ink);stroke:var(--map-water);letter-spacing:.3em;font-weight:400}.cm-ctxname.cell text{stroke:var(--surface);font-size:12px;font-weight:400}.cm-leader-dot{fill:var(--ink)}.cm-inset{background:var(--map-water);border:1.5px solid var(--map-edge-strong);border-radius:var(--r-xs);box-shadow:var(--e1);flex-direction:column;align-items:center;display:flex;position:absolute;top:12px;left:12px;overflow:hidden}.cm-inset[hidden]{display:none}.cm-inset-svg{display:block}.cm-inset-svg path{vector-effect:non-scaling-stroke;stroke-linejoin:round;stroke:var(--map-edge-strong);stroke-width:1px}.cm-inset-svg .cm-q,.cm-inset-svg .cm-ok,.cm-inset-svg .cm-no{stroke-width:2px}.cm-inset-svg .cm-q{fill:var(--hl)}.cm-inset-svg .cm-ok{fill:var(--ok-fill);stroke:var(--ok)}.cm-inset-svg .cm-no{fill:var(--no-fill);stroke:var(--no)}.cm-inset-note{background:var(--surface);width:100%;color:var(--ink-2);text-align:center;white-space:nowrap;padding:1px 4px 2px;font-size:13px;line-height:18px}@media (prefers-reduced-motion:reduce){.cm-q.breathe,.cm-ok.pencil,.cm-ok.blink{animation:none}}#app{word-break:keep-all;overflow-wrap:anywhere}#app .page{gap:var(--sp-6);max-width:520px;padding:var(--sp-2) max(var(--gutter), env(safe-area-inset-right,0px)) var(--sp-8) max(var(--gutter), env(safe-area-inset-left,0px));flex-direction:column;margin-inline:auto;display:flex}#app p{margin:0}#app .stack{gap:var(--sp-3);flex-direction:column;display:flex}#app .row{gap:var(--sp-2);align-items:center;display:flex}#app .wrap{flex-wrap:wrap;max-width:none;margin:0;padding:0}#app .sub{color:var(--ink-2);font-size:15px;line-height:22px}#app .card{gap:var(--sp-3)}#app .card.due{background:var(--due-soft);border-color:#f2d3a6}#app .card.list{padding-block:var(--sp-1);gap:0}.eyebrow{color:var(--ink-3);font-size:13px;font-weight:700;line-height:18px}.eyebrow.due{color:var(--due)}.title-26{font:700 26px/34px var(--font-head)}.title-22{font:700 22px/30px var(--font-head)}.title-18{font:700 18px/26px var(--font-head)}.t15{color:var(--ink-2);font-size:15px;line-height:22px}.t14{color:var(--ink-2);font-size:14px;line-height:20px}.t13{color:var(--ink-3);font-size:13px;line-height:18px}.t13.warn{color:var(--due)}.num{font-variant-numeric:tabular-nums}#app .btn,#app .btn2{width:100%}#app .btn2.half,#app .btn.half{flex:1;width:auto}#app .btn:disabled,#app .btn2:disabled{opacity:.55;cursor:default}.chip{min-height:var(--chip-h);border-radius:var(--r-pill);border:1.5px solid var(--line-strong);background:var(--surface);color:var(--ink);cursor:pointer;align-items:center;gap:6px;padding:0 14px;font-family:inherit;font-size:14px;text-decoration:none;display:inline-flex}.chip.on{background:var(--brand-soft);border-color:var(--brand);color:var(--brand);font-weight:700}.chip.due{border-color:var(--due);color:var(--due)}.chip.static{cursor:default}.linkrow{min-height:var(--btn-h);justify-content:space-between;align-items:center;gap:var(--sp-2);border:0;border-bottom:1px solid var(--line);text-align:left;color:var(--ink);background:0 0;width:100%;padding:0;font-family:inherit;font-size:15px;text-decoration:none;display:flex}.linkrow:last-child{border-bottom:0}.bar{border-radius:var(--r-pill);background:var(--sunk);flex:1;height:6px;overflow:hidden}.bar i{background:var(--brand);border-radius:var(--r-pill);width:0;height:100%;transition:width var(--t-fill);display:block}.map-box{border-radius:var(--r-md);width:100%;height:200px;position:relative;overflow:hidden}.map-box.tall{height:240px}.map-box.explore{height:min(62dvh,420px)}.map-box.map-fail{padding:var(--sp-4);background:var(--sunk);color:var(--ink-2);text-align:center;place-items:center;font-size:15px;display:grid}.map-wrap{position:relative}.map-reset{z-index:2;border:1.5px solid var(--line-strong);border-radius:var(--r-pill);background:var(--surface);min-height:40px;color:var(--ink);font:700 14px/20px var(--font-head);box-shadow:var(--e1);cursor:pointer;padding:0 12px;position:absolute;top:12px;right:12px}.legend{color:var(--ink-2);flex-wrap:wrap;gap:14px;font-size:13px;line-height:18px;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}.sw{border:1px solid var(--line-strong);border-radius:4px;width:16px;height:16px;display:inline-block}.sw.dot{border-style:dashed}.topbar{align-items:center;gap:6px;min-height:56px;display:flex}.topbar h1{flex:1;font-size:18px;line-height:26px}.icon-btn{width:var(--tap-min);height:var(--tap-min);border-radius:var(--r-md);color:var(--ink);cursor:pointer;background:0 0;border:0;flex:none;place-items:center;display:grid}.stamp{border:3px solid var(--brand);width:92px;height:92px;color:var(--brand);text-align:center;font:800 18px/22px var(--font-head);background:var(--brand-soft);border-radius:50%;flex:none;place-items:center;display:grid;transform:rotate(-8deg)}.score{font:800 40px/44px var(--font-head)}.toggle{gap:var(--sp-3);min-height:var(--btn-h);padding:var(--sp-3) var(--sp-4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);cursor:pointer;align-items:flex-start;font-size:15px;line-height:22px;display:flex}.toggle input{width:22px;height:22px;accent-color:var(--brand);flex:none;margin:0}.toggle>span{flex-direction:column;gap:2px;display:flex}.path{flex-direction:column;gap:10px;display:flex}.step{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);text-align:left;width:100%;min-height:72px;color:var(--ink);align-items:center;gap:12px;padding:12px 14px;text-decoration:none;display:flex}.step .no{border:2px solid var(--line-strong);width:32px;height:32px;font:700 15px/1 var(--font-head);background:var(--surface);border-radius:50%;flex:none;place-items:center;display:grid}.step .no.done{background:var(--brand);border-color:var(--brand);color:var(--white)}.step .body{flex:1;min-width:0}.step .name{font:700 17px/24px var(--font-head)}.step .tag{border-radius:var(--r-pill);background:var(--sunk);color:var(--ink-2);flex:none;padding:3px 8px;font-size:13px;font-weight:700;line-height:18px}.step .tag.rec{background:var(--hl-soft);color:#6b5200}.step .tag.ok{background:var(--brand-soft);color:var(--brand)}.step.off{opacity:.6}.steps3{gap:var(--sp-2);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.steps3 div{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);flex-direction:column;gap:4px;padding:12px 10px;display:flex}.steps3 b{font:700 15px/22px var(--font-head)}details.fold{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:0 var(--sp-4)}details.fold summary{min-height:52px;font:700 17px/24px var(--font-head);cursor:pointer;align-items:center;display:flex}details.fold[open]{padding-bottom:var(--sp-4)}.fb-title{font:700 20px/28px var(--font-head)}.ok-c{color:var(--ok)}.no-c{color:var(--no)}.fb-line{font-size:17px;line-height:26px}.fb-hint{color:var(--ink-2);font-size:15px;line-height:22px}.opts{gap:var(--sp-2);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.opt{border-radius:var(--r-md);border:1.5px solid var(--line-strong);background:var(--surface);min-height:56px;color:var(--ink);font:700 17px/24px var(--font-head);cursor:pointer;padding:0 var(--sp-6);position:relative}.opt .k{color:var(--ink-3);font-size:12px;font-weight:400;line-height:1;position:absolute;top:6px;left:10px}.opt.ok{background:var(--ok-soft);border:2px solid var(--ok);color:var(--ok)}.opt.no{background:var(--no-soft);border:2px dashed var(--no);color:var(--no)}.opt:disabled{cursor:default}html.app-full,html.app-full body{overscroll-behavior:none;height:100%;overflow:hidden}html.app-full .hdr,html.app-full .foot{display:none}html.app-full #app{background:var(--paper);position:fixed;inset:0}.play{flex-direction:column;height:100%;display:flex}.play-top{height:48px;padding:env(safe-area-inset-top,0px) max(8px, env(safe-area-inset-right,0px)) 0 max(4px, env(safe-area-inset-left,0px));box-sizing:content-box;flex:none;align-items:center;gap:10px;display:flex}.play-top .pn{text-align:right;min-width:48px}.play-q{text-align:center;min-height:52px;padding:0 max(var(--gutter), env(safe-area-inset-right,0px)) 0 max(var(--gutter), env(safe-area-inset-left,0px));font:700 20px/28px var(--font-head);flex:none;justify-content:center;align-items:center;display:flex}.play-q b{background:var(--hl-soft);border-radius:var(--r-xs);padding:0 4px}.play-body{flex:1;min-height:0;display:flex}.play-main{flex-direction:column;flex:1;min-width:0;display:flex}.play-side{display:none}.play-stage{flex:1;min-height:0;position:relative}.play-map{position:absolute;inset:0}.play-toast,.app-toast{border-radius:var(--r-pill);background:var(--ink);width:max-content;max-width:calc(100% - 32px);color:var(--paper);text-align:center;box-shadow:var(--e2);z-index:5;pointer-events:none;padding:8px 14px;font-size:15px;line-height:22px;position:absolute;top:12px;left:50%;transform:translate(-50%)}.app-toast{top:auto;bottom:calc(24px + env(safe-area-inset-bottom,0px));z-index:60;position:fixed}.play-toast[hidden],.app-toast[hidden]{display:none}.sheet{z-index:3;background:var(--surface);border-radius:var(--r-xl) var(--r-xl) 0 0;max-height:48%;box-shadow:var(--e3);box-sizing:border-box;min-height:80px;padding:var(--sp-4) max(var(--gutter), env(safe-area-inset-right,0px)) calc(var(--sp-4) + env(safe-area-inset-bottom,0px)) max(var(--gutter), env(safe-area-inset-left,0px));flex-direction:column;gap:10px;display:flex;position:absolute;bottom:0;left:0;right:0;overflow:auto}.scrim{z-index:40;background:#26231e59;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.scrim[hidden]{display:none}.scrim .panel{background:var(--surface);border-radius:var(--r-xl) var(--r-xl) 0 0;width:100%;max-width:520px;box-shadow:var(--e3);gap:var(--sp-2);padding:var(--sp-4) max(var(--gutter), env(safe-area-inset-right,0px)) calc(20px + env(safe-area-inset-bottom,0px)) max(var(--gutter), env(safe-area-inset-left,0px));flex-direction:column;display:flex}.scrim .panel .row{margin-top:var(--sp-2)}@media (width>=1024px){.play-side{gap:var(--sp-3);width:400px;padding:var(--sp-4) var(--sp-6) var(--sp-8);border-left:1px solid var(--line);background:var(--surface);flex-direction:column;flex:none;display:flex;overflow:auto}.side-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.side-list li{justify-content:space-between;align-items:center;gap:var(--sp-2);border-bottom:1px solid var(--line);min-height:40px;font-size:15px;display:flex}.side-list li.now{background:var(--hl-soft);margin-inline:calc(-1 * var(--sp-2));padding-inline:var(--sp-2);border-radius:var(--r-xs);font-weight:700}.side-list li.ok .t13{color:var(--ok)}.side-list li.no .t13{color:var(--no)}.sheet{border-radius:var(--r-xl);width:min(560px,100% - 48px);bottom:16px;left:50%;right:auto;transform:translate(-50%)}.map-box.tall{height:300px}}@media (prefers-reduced-motion:reduce){.bar i{transition:none}}
