/* GRADING ROOM — シネマの暗室 */
:root{
  --room:#0e0d0c;        /* 暗室の壁 */
  --room-2:#161514;      /* 机・パネル */
  --room-3:#1f1d1b;
  --rule:#2d2a27;        /* 罫線 */
  --rule-2:#3b3733;
  --ink:#f1ebe3;         /* 文字 */
  --ink-2:#a79f94;       /* 二次 */
  --ink-3:#8a8378;
  --lamp:#e5a63a;        /* 採点・進み具合の琥珀 */
  --lamp-2:#f3c56d;
  --ok:#8fc9a3;
  --warn:#d9705b;
  --trace:#b9ffb0;       /* スコープのトレース */
  --display:"Archivo",sans-serif;
  --body:"Noto Sans JP","Hiragino Sans",sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--room);color:var(--ink);font:14px/1.7 var(--body);-webkit-user-select:none;user-select:none;-webkit-font-smoothing:antialiased}
::selection{background:var(--lamp);color:var(--room)}
*::-webkit-scrollbar{width:10px;height:10px}
*::-webkit-scrollbar-thumb{background:var(--rule-2);border:3px solid var(--room);border-radius:8px}
*::-webkit-scrollbar-track{background:var(--room)}
:focus-visible{outline:1px solid var(--lamp);outline-offset:2px}
a{color:inherit}
button{font:500 12px/1 var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--ink);background:transparent;border:1px solid var(--rule-2);border-radius:2px;padding:10px 16px;cursor:pointer;transition:border-color .2s,background .2s,color .2s}
button:hover{border-color:var(--ink-2)}
button.primary{background:var(--lamp);color:var(--room);border-color:var(--lamp)}
button.primary:hover{background:var(--lamp-2);border-color:var(--lamp-2)}
.d{font-family:var(--display)}
#app{height:100%;height:100dvh;display:flex;flex-direction:column}

/* ---------- ヘッダー ---------- */
#top{display:flex;align-items:center;gap:28px;padding:0 24px;height:52px;border-bottom:1px solid var(--rule);background:var(--room);flex:none;z-index:5}
#brand{display:flex;align-items:center;gap:10px;font:800 13px/1 var(--display);font-stretch:125%;letter-spacing:.22em;text-decoration:none}
#brand .mark{width:10px;height:10px;background:var(--lamp);border-radius:1px}
#tabs{display:flex;gap:2px}
#tabs button{border-color:transparent;color:var(--ink-3);padding:8px 12px}
#tabs button.on{color:var(--ink)}
#tabs button:hover{color:var(--ink)}
#progress{margin-left:auto;display:flex;align-items:center;gap:12px;font:500 12px/1 var(--display);letter-spacing:.1em;color:var(--ink-2);font-variant-numeric:tabular-nums}
#prog-bar{width:120px;height:2px;background:var(--rule-2);position:relative}
#prog-bar i{position:absolute;left:0;top:0;bottom:0;background:var(--lamp);width:0;transition:width .6s cubic-bezier(.2,.8,.2,1)}

.view{display:none;flex:1;min-height:0}
.view.on{display:flex;flex-direction:column}

/* ---------- 入口 ---------- */
#view-levels{overflow:auto;overflow-x:hidden}
#hero{position:relative;height:min(78vh,760px);min-height:560px;overflow:hidden;cursor:ew-resize;--wipe:0%}
#hero .layer{position:absolute;inset:0;background:url(img/nas/nas12.jpg) center/cover no-repeat}
#hero .layer.before{filter:saturate(.25) contrast(.8) brightness(1.08);clip-path:inset(0 calc(100% - var(--wipe)) 0 0)}
#hero .layer.before::after{content:"";position:absolute;inset:0;background:#4a6fa8;mix-blend-mode:soft-light;opacity:.7}
#hero .shade{position:absolute;inset:0;background:linear-gradient(90deg,rgba(14,13,12,.78) 0%,rgba(14,13,12,.42) 45%,rgba(14,13,12,.05) 75%),linear-gradient(0deg,rgba(14,13,12,1) 0%,rgba(14,13,12,0) 32%);pointer-events:none}
#hero .split{position:absolute;top:0;bottom:0;left:var(--wipe);width:1px;background:rgba(241,235,227,.85);box-shadow:0 0 12px rgba(241,235,227,.5);transform:translateX(-.5px)}
#hero.ready{--wipe:46%}
#hero.animating .layer.before,#hero.animating .split{transition:clip-path 2.4s cubic-bezier(.16,1,.3,1),left 2.4s cubic-bezier(.16,1,.3,1)}
.hero-copy{position:absolute;left:clamp(24px,6vw,96px);bottom:clamp(40px,9vh,96px);max-width:640px;z-index:2}
.hero-copy h1{margin:0 0 20px;font:900 clamp(48px,min(9vw,13vh),120px)/.9 var(--display);font-stretch:125%;letter-spacing:-.01em;text-wrap:balance;text-shadow:0 2px 30px rgba(0,0,0,.4)}
.hero-copy h1{display:inline-flex;flex-direction:column}
.h-line{display:flex;align-items:flex-end}
.bars{flex:1;align-self:flex-end;height:.7em;margin:0 .012em .1em .1em;background:linear-gradient(90deg,#bfbfbf 0 14.286%,#bfbf00 0 28.571%,#00bfbf 0 42.857%,#00bf00 0 57.143%,#bf00bf 0 71.429%,#bf0000 0 85.714%,#0000bf 0)}
.hero-copy .lead{margin:0 0 6px;font-size:clamp(16px,1.6vw,20px);font-weight:500;color:var(--ink)}
.hero-copy .sub{margin:0 0 28px;color:var(--ink-2);font-size:14px;max-width:46ch}
.cta{padding:14px 26px;font-size:13px}
#hero-start{display:inline-flex;align-items:center;gap:14px;padding:9px 24px 9px 9px;text-transform:none;letter-spacing:0;font-family:var(--body);text-align:left;max-width:100%}
#hero-start img{width:64px;height:44px;object-fit:cover;border-radius:1px;display:block;background:#222}
#hero-start .hs-text{display:flex;flex-direction:column;gap:4px}
#hero-start b{font-size:15px;font-weight:700;line-height:1.2}
#hero-start small{font:500 11px/1 var(--display);letter-spacing:.12em;opacity:.72}
.hero-row{margin-top:10px;display:flex;gap:10px;flex-wrap:wrap}
.hero-row:empty,.hero-row:not(:has(button:not([hidden]))){display:none}
.cta.primary{background:var(--lamp);color:var(--room);border-color:var(--lamp)}
.cta.primary:hover{background:var(--lamp-2);border-color:var(--lamp-2);color:var(--room)}
#hero-about{border-color:var(--ink-2);background:rgba(14,13,12,.45)}
#hero-about:hover{border-color:var(--ink)}
.hero-foot{position:absolute;left:0;right:0;bottom:16px;display:flex;justify-content:space-between;padding:0 24px;font:500 11px/1 var(--display);letter-spacing:.24em;text-transform:uppercase;color:var(--ink-2);pointer-events:none}

#level-list{padding:40px clamp(24px,6vw,96px) 120px;display:flex;flex-direction:column;gap:56px;max-width:1500px;width:100%;margin:0 auto}
.chapter{display:grid;grid-template-columns:260px 1fr;gap:40px;align-items:start}
.chapter .ch-head{position:sticky;top:0;padding-top:4px}
.chapter .ch-head .ch-n{font:800 11px/1 var(--display);letter-spacing:.3em;color:var(--lamp);text-transform:uppercase;margin:0 0 10px}
.chapter .ch-head h2{margin:0 0 8px;font:700 22px/1.25 var(--body);text-wrap:balance}
.chapter .ch-head .ch-tools{color:var(--ink-3);font:500 11px/1.8 var(--display);letter-spacing:.12em;text-transform:uppercase}
.lv.locked{cursor:default}
.lv.locked img{filter:brightness(.35) saturate(.2)}
.lv.locked .t,.lv.locked .no{color:var(--ink-3)}
.ch-rate{margin-top:14px;display:flex;align-items:center;gap:10px;font:600 12px/1 var(--display);font-variant-numeric:tabular-nums;color:var(--ink-2)}
.ch-rate .bar{flex:1;max-width:150px;height:3px;background:var(--rule-2);position:relative}
.ch-rate .bar i{position:absolute;left:0;top:0;bottom:0;background:var(--lamp)}
.chapter .cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:1px}
.lv{position:relative;background:var(--room);cursor:pointer;overflow:hidden;outline:1px solid var(--rule);outline-offset:0}
.lv img{display:block;width:100%;aspect-ratio:3/2;object-fit:cover;transform:scale(1.001);transition:transform .7s cubic-bezier(.16,1,.3,1),filter .4s;filter:brightness(.92)}
.lv:hover img{transform:scale(1.04);filter:brightness(1)}
.lv .meta{padding:12px 14px 14px;display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center}
.lv .no{font:600 11px/1 var(--display);letter-spacing:.16em;color:var(--ink-3)}
.lv .t{font-weight:500;color:var(--ink);line-height:1.3}
.lv .mode{position:absolute;top:10px;left:10px;font:600 11px/1 var(--display);letter-spacing:.18em;text-transform:uppercase;padding:5px 7px;background:rgba(14,13,12,.7);color:var(--ink-2);backdrop-filter:blur(4px)}
.pips{display:inline-flex;gap:3px}
.pips i{width:9px;height:9px;border:1px solid var(--rule-2);border-radius:1px;background:transparent}
.pips i.on{background:var(--lamp);border-color:var(--lamp)}
.pips.big i{width:14px;height:14px}

/* ---------- 練習画面 ---------- */
#stage{flex:1;display:flex;min-height:0;background:#070707}
#viewer{flex:1;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}
#gl{max-width:100%;max-height:100%;display:block;cursor:ew-resize}
#wipe-line{position:absolute;top:0;bottom:0;width:1px;background:rgba(241,235,227,.85);box-shadow:0 0 10px rgba(241,235,227,.4);pointer-events:none;display:none}
#badge-a,#badge-b{position:absolute;top:12px;padding:5px 8px;font:600 11px/1 var(--display);letter-spacing:.2em;text-transform:uppercase;background:rgba(7,7,7,.7);color:var(--ink);pointer-events:none;display:none}
#badge-a{left:12px}#badge-b{right:12px}
#task-card{position:absolute;left:16px;bottom:16px;max-width:440px;padding:12px 16px 13px;background:rgba(14,13,12,.78);border:1px solid rgba(255,255,255,.08);backdrop-filter:blur(10px)}
#task-no{font:600 11px/1 var(--display);letter-spacing:.24em;color:var(--lamp);text-transform:uppercase;margin-bottom:6px}
#task-title{font-weight:700;font-size:16px;line-height:1.3;margin-bottom:2px}
#task-text{font-size:13px;color:var(--ink-2)}
#scopes{width:372px;overflow:auto;background:var(--room);border-left:1px solid var(--rule);padding:12px;display:flex;flex-direction:column;gap:10px;flex:none}
.scope{position:relative;background:#0a0a0a;border:1px solid var(--rule);display:flex;justify-content:center;overflow:hidden;padding:26px 8px 8px}
#scope-chip{display:none}
.scope canvas{display:block}
.scope .cap{position:absolute;right:10px;top:9px;font:600 11px/1 var(--display);letter-spacing:.18em;text-transform:uppercase;color:var(--ink-3)}
#scope-src{display:flex;border:1px solid var(--rule)}
#scope-src button{flex:1;padding:8px;border:0;border-radius:0;color:var(--ink-3)}
#scope-src button+button{border-left:1px solid var(--rule)}
#scope-src button.on{color:var(--ink);background:var(--room-2)}

#controls{display:flex;align-items:stretch;gap:0;padding:12px 16px;background:var(--room);border-top:1px solid var(--rule);min-height:176px;flex:none;overflow-x:auto}
#controls .sliders{display:grid;grid-auto-flow:column;grid-template-rows:repeat(4,auto);align-content:center;column-gap:28px;row-gap:9px;padding:0 24px 0 4px;border-right:1px solid var(--rule)}
.group{display:contents}
.group[hidden]{display:none !important}
.slider{display:grid;grid-template-columns:68px 112px 50px;align-items:center;gap:10px}
.mrow{display:flex;align-items:center;min-width:0}
.mrow input{flex:1;min-width:0;width:100%;position:relative;z-index:1}
.trk{--th:12px;--tick:18px;flex:1;min-width:0;position:relative;display:flex;align-items:center}
.wheel .trk{--th:8px;--tick:24px}
.hint-tick{display:none;position:absolute;top:50%;left:calc(var(--th)/2 + var(--t,.5)*(100% - var(--th)));width:2px;height:var(--tick);margin:calc(var(--tick)/-2) 0 0 -1px;background:var(--lamp-2);pointer-events:none}
.hint-ring{display:none;position:absolute;width:16px;height:16px;border-radius:50%;border:2px solid var(--lamp-2);transform:translate(-50%,-50%);pointer-events:none}
body.hinting:not(.answering) .trk:not(.no-hint) .hint-tick,body.hinting:not(.answering) .hint-ring:not(.no-hint){display:block}
#actions #btn-hint{flex:none;align-self:center;width:38px;height:38px;padding:0;border-radius:50%;font-family:var(--display);font-size:15px;font-weight:600;letter-spacing:0}
#btn-hint.on{color:var(--room);background:var(--lamp-2);border-color:var(--lamp-2)}
body.hinting:not(.answering) #band-chips button.has-hint{box-shadow:inset 0 -2px 0 var(--lamp-2)}
.adj{display:none}
.slider label,.w-head label{cursor:pointer}
.slider label{font:500 11px/1 var(--display);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2)}
.slider output{text-align:right;font:500 12px/1 var(--display);font-variant-numeric:tabular-nums;color:var(--ink);cursor:ew-resize;padding:3px 0;border-bottom:1px solid transparent;touch-action:none}
.slider output:hover,.slider output.drag{color:var(--lamp-2);border-bottom-color:var(--rule-2)}
input[type=range]{-webkit-appearance:none;appearance:none;height:2px;background:var(--rule-2);outline:none;margin:0}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:var(--ink);border:2px solid var(--room);box-shadow:0 0 0 1px var(--rule-2);cursor:pointer;transition:transform .15s}
input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.2)}
.slider[hidden],.wheel[hidden]{display:none !important}
.band-off{display:none !important}
#band-chips{display:flex;gap:2px;align-self:center}
#band-chips button{display:flex;align-items:center;gap:5px;padding:6px 7px;font-size:11px;letter-spacing:.06em;color:var(--ink-3);border-color:transparent}
#band-chips button i{width:9px;height:9px;border-radius:50%;display:block}
#band-chips button.on{color:var(--ink);border-color:var(--rule-2)}
#controls .sliders.none{display:none}
.warp-box{display:flex;justify-content:center;align-items:center;flex:1}
.warp-box[hidden]{display:none !important}
#warper{width:280px;height:280px;touch-action:none;cursor:grab;display:block}
body.warp #controls{min-height:304px}
.group.wheels{display:flex;flex-direction:row;align-items:center;gap:18px;padding:0 8px 0 24px}
.wheel{display:flex;flex-direction:column;align-items:stretch;gap:8px;width:108px}
.w-head{display:flex;justify-content:space-between;align-items:baseline}
.w-head output{font:500 12px/1 var(--display);font-variant-numeric:tabular-nums;color:var(--ink);cursor:ew-resize;touch-action:none}
.w-head output:hover,.w-head output.drag{color:var(--lamp-2)}
input[type=range].master{height:4px;background:linear-gradient(90deg,var(--rule-2) calc(50% - 1px),var(--ink-3) calc(50% - 1px),var(--ink-3) calc(50% + 1px),var(--rule-2) calc(50% + 1px))}
input[type=range].master::-webkit-slider-thumb{width:8px;height:18px;border-radius:2px}
input[type=range].master::-moz-range-thumb{width:8px;height:18px;border-radius:2px}
input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--ink);border:2px solid var(--room)}
.wheel .pad{width:108px;height:108px;border-radius:50%;position:relative;cursor:crosshair;
  background:conic-gradient(from 90deg,#d9534f 0,#d9b24f 60deg,#5fb86b 120deg,#4fb8c0 180deg,#5868d6 240deg,#c45fb8 300deg,#d9534f 360deg)}
.wheel .pad::before{content:"";position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle,#161514 0,#161514 30%,rgba(22,21,20,.72) 72%,rgba(22,21,20,.45) 100%);box-shadow:inset 0 0 0 1px rgba(255,255,255,.06)}
#mtabs{display:none}
.wheel .pad::after{content:"";position:absolute;left:50%;top:50%;width:5px;height:5px;margin:-2.5px;border-radius:50%;background:var(--ink-3)}
.wheel .dot{position:absolute;width:10px;height:10px;border-radius:50%;background:var(--ink);border:1px solid var(--room);box-shadow:0 1px 6px rgba(0,0,0,.6);transform:translate(-50%,-50%);left:50%;top:50%;pointer-events:none}
.wheel label{font:500 11px/1 var(--display);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-2)}
#actions{margin-left:auto;display:flex;flex-direction:column;justify-content:center;gap:8px;padding-left:20px;border-left:1px solid var(--rule)}
#actions button,#actions label{text-align:center;min-width:132px}
#btn-open{display:inline-block;font:500 12px/1 var(--display);letter-spacing:.14em;text-transform:uppercase;border:1px solid var(--rule-2);border-radius:2px;padding:10px 16px;cursor:pointer}
#btn-open:hover{border-color:var(--ink-2)}
#btn-open[hidden]{display:none}
.hidden{display:none !important}

/* ---------- 採点 ---------- */
.modal{position:fixed;inset:0;background:rgba(7,7,7,.72);display:none;align-items:center;justify-content:center;z-index:10;backdrop-filter:blur(3px)}
.modal.on{display:flex}
.card{background:var(--room-2);border:1px solid var(--rule-2);padding:26px 30px 24px;width:500px;box-shadow:0 30px 80px rgba(0,0,0,.6);animation:slate .5s cubic-bezier(.16,1,.3,1)}
@keyframes slate{from{transform:translateY(14px);opacity:0}to{transform:none;opacity:1}}
.slate-head{display:flex;justify-content:space-between;align-items:center;font:600 11px/1 var(--display);letter-spacing:.24em;text-transform:uppercase;color:var(--ink-2);padding-bottom:14px;border-bottom:1px solid var(--rule)}
#r-score{font:900 88px/1 var(--display);font-stretch:125%;letter-spacing:-.02em;margin:18px 0 6px;font-variant-numeric:tabular-nums}
#r-score small{font:500 12px/1 var(--display);letter-spacing:.2em;margin-left:10px;color:var(--ink-2);text-transform:uppercase}
#r-delta{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:6px;font-size:13px;color:var(--ink-2)}
#r-delta .up{color:var(--ok)}
#r-delta .down{color:var(--warn)}
#r-lines{display:flex;flex-direction:column;margin:10px 0 14px;border-top:1px solid var(--rule)}
#r-lines div{padding:10px 0 10px 18px;border-bottom:1px solid var(--rule);position:relative;color:var(--ink)}
#r-lines div::before{content:"";position:absolute;left:0;top:17px;width:8px;height:8px;background:var(--warn)}
#r-lines div.good::before{background:var(--ok)}
#r-lines div.tip{color:var(--ink-2);font-size:13px}
#r-lines div.tip::before{background:var(--lamp)}
.card .row{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px;margin-top:22px}
#c-teaser{display:flex;align-items:center;gap:16px;margin-top:24px;padding:12px;border:1px solid var(--rule);background:rgba(255,255,255,.03);cursor:pointer;transition:border-color .2s}
#c-teaser:hover{border-color:var(--ink-2)}
#c-teaser img{width:104px;height:70px;object-fit:cover;flex:none;display:block}
#c-teaser p{margin:0}
#c-teaser .t-k{font:600 10px/1 var(--display);letter-spacing:.24em;text-transform:uppercase;color:var(--lamp);margin-bottom:6px}
#c-teaser .t-h{font-size:16px;font-weight:700;line-height:1.25}
#c-teaser .t-s{font-size:12px;color:var(--ink-2);margin-top:3px}
#c-teaser .t-p{font:600 10px/1 var(--display);letter-spacing:.12em;color:var(--ink-3);margin-top:8px}


/* ---------- 学ぶ → 試す → 採点 ---------- */
#steps{display:flex;gap:0;margin:-4px -8px 8px;border-bottom:1px solid rgba(255,255,255,.08);padding:0 0 8px}
#steps button{border:0;padding:4px 8px;font-size:11px;letter-spacing:.18em;color:var(--ink-3);position:relative}
#steps button::before{content:"";display:inline-block;width:6px;height:6px;margin-right:8px;background:var(--rule-2);vertical-align:1px}
#steps button.done::before{background:var(--ink-2)}
#steps button.on{color:var(--ink)}
#task-prog{margin-left:auto;display:inline-flex;align-items:center;gap:3px;padding-right:4px}
#task-prog i{width:7px;height:7px;border:1px solid var(--rule-2);border-radius:1px}
#task-prog i.on{background:var(--lamp);border-color:var(--lamp)}
#task-prog i.cur{border-color:var(--ink);background:rgba(255,255,255,.12)}
#task-prog span{margin-left:6px;font:600 10px/1 var(--display);letter-spacing:.12em;color:var(--ink-3)}
#steps button.on::before{background:var(--lamp)}
#steps button:hover{color:var(--ink)}
#lesson{position:absolute;inset:0;display:none;z-index:3;background:linear-gradient(90deg,rgba(14,13,12,.94) 0%,rgba(14,13,12,.88) 46%,rgba(14,13,12,.1) 74%,rgba(14,13,12,0) 100%)}
#lesson.on{display:block;animation:fadein .5s cubic-bezier(.16,1,.3,1)}
@keyframes fadein{from{opacity:0}to{opacity:1}}
#lesson .l-body{position:absolute;left:clamp(20px,4vw,56px);top:50%;transform:translateY(-50%);max-width:520px;padding-right:24px}
#lesson .l-ch{font:600 11px/1 var(--display);letter-spacing:.28em;text-transform:uppercase;color:var(--lamp);margin-bottom:12px}
#lesson .l-title{margin:0 0 18px;font:700 clamp(22px,2.4vw,30px)/1.25 var(--body);text-wrap:balance}
#lesson .l-points{margin:0 0 18px;padding:0;list-style:none;counter-reset:pt}
#lesson .l-points li{position:relative;padding:10px 0 10px 40px;border-top:1px solid rgba(255,255,255,.1);font-size:14px;line-height:1.7;color:var(--ink)}
#lesson .l-points li:last-child{border-bottom:1px solid rgba(255,255,255,.1)}
#lesson .l-points li::before{counter-increment:pt;content:counter(pt,decimal-leading-zero);position:absolute;left:0;top:12px;font:600 11px/1 var(--display);letter-spacing:.1em;color:var(--ink-3)}
#lesson .l-watch{margin:0 0 22px;font-size:13px;color:var(--ink-2);padding-left:14px;border-left:2px solid var(--lamp)}
#lesson .l-row{display:flex;align-items:center;gap:18px}
#viewer.learning #task-card{display:none}

/* ---------- 章のクリアと案内（全画面のページ） ---------- */
a.btn{display:inline-block;font:500 12px/1 var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--ink);text-decoration:none;border:1px solid var(--rule-2);border-radius:2px;padding:10px 16px}
a.btn:hover{border-color:var(--ink-2)}
a.btn[hidden]{display:none}
#view-clear.on{flex-direction:row;overflow:auto}
.clear-photo{flex:1.2;min-width:0;background:#070707 center/cover no-repeat}
.clear-body{flex:1;min-width:0;max-width:560px;padding:clamp(24px,5vw,64px);display:flex;flex-direction:column;justify-content:safe center;overflow:auto}
.clear-body>*{flex:none}
.clear-body h2{margin:0 0 18px;font:700 clamp(20px,2.2vw,28px)/1.3 var(--body);text-wrap:balance}
#c-score{font:900 88px/1 var(--display);font-stretch:125%;letter-spacing:-.02em;font-variant-numeric:tabular-nums;display:flex;align-items:baseline;gap:12px;margin-bottom:18px}
#c-score small{font:500 12px/1 var(--display);letter-spacing:.2em;color:var(--ink-2)}
#c-scenes{list-style:none;margin:0 0 16px;padding:0}
#c-scenes li{display:grid;grid-template-columns:44px 1fr 36px;gap:8px;padding:8px 0;border-top:1px solid var(--rule);font-size:14px}
#c-scenes li span:first-child{font:600 11px/1.9 var(--display);letter-spacing:.14em;color:var(--ink-3)}
#c-scenes li span:last-child{text-align:right;font:500 13px/1.6 var(--display);font-variant-numeric:tabular-nums}
#c-scenes li small{display:block;margin-top:2px;font-size:12px;line-height:1.5;color:var(--ink-3)}
#c-line{margin:0 0 22px;font-size:14px;line-height:1.7;color:var(--ink-2);min-height:1em}
#c-line p{margin:0 0 6px}
.ch-review{margin-top:14px;padding:7px 14px;font-size:11px}
#reset-all{display:block;margin:40px 0 0 auto;padding:7px 14px;font-size:11px;color:var(--ink-3);border-color:var(--rule-2);background:transparent}
#reset-all.armed{color:#f1ebe3;border-color:#c0503c;background:#c0503c}
.clear-body .row,#promo-body .row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
#view-promo.on{position:relative;overflow:auto;justify-content:center}
#promo-bg{position:absolute;inset:0;background:center/cover no-repeat}
#promo-shade{position:absolute;inset:0;background:linear-gradient(90deg,rgba(14,13,12,.92) 0%,rgba(14,13,12,.72) 42%,rgba(14,13,12,.08) 80%)}
#promo-video{position:absolute;inset:0;overflow:hidden;pointer-events:none}
#promo-video iframe{position:absolute;left:50%;top:50%;width:max(100%,calc(100dvh*1.778));height:max(100%,56.25vw);transform:translate(-50%,-50%) scale(1.18);border:0}
#promo-sound{position:absolute;right:24px;bottom:24px;z-index:3;background:rgba(14,13,12,.72);border-color:var(--ink-2)}
#promo-sound[hidden]{display:none}
#promo-final{display:none}
#view-promo.final #promo-shade,#view-promo.clear #promo-shade{display:none}
#view-promo.clear #promo-body{text-shadow:0 1px 3px rgba(0,0,0,.8),0 0 18px rgba(0,0,0,.55)}
#view-promo.clear #p-main,#view-promo.clear #p-note{font-weight:500;color:#fff}
#view-promo.clear #promo-body .row a:not(.primary){background:rgba(14,13,12,.55);text-shadow:none}
#view-promo.clear #promo-body .row button{text-shadow:none}
#view-promo.final.on{flex-direction:row;align-items:center;justify-content:center;gap:clamp(24px,4vw,64px);padding:24px}
#view-promo.final #promo-final{display:block;height:100%;min-height:0;flex:0 1 auto;aspect-ratio:1;background:center/contain no-repeat}
#view-promo.final #promo-body{padding:0;max-width:none;flex:none}
#view-promo.final #p-h,#view-promo.final #p-lead,#view-promo.final #p-main,#view-promo.final #p-note{display:none}
#view-promo.final .row{flex-direction:column;align-items:stretch;min-width:240px}
#view-promo.final .row>*{text-align:center}
a.btn.primary{background:var(--lamp);color:var(--room);border-color:var(--lamp)}
a.btn.primary:hover{background:var(--lamp-2);border-color:var(--lamp-2)}
#promo-body{position:relative;max-width:620px;padding:clamp(28px,7vw,96px)}
#p-cover{position:absolute;z-index:1;right:clamp(40px,11vw,200px);top:50%;transform:translateY(-50%);height:min(66%,500px);box-shadow:0 18px 60px rgba(0,0,0,.6)}
#p-cover[hidden]{display:none}
#view-promo.book #promo-body h2{font-size:clamp(28px,2.9vw,40px);line-height:1.2;word-break:keep-all}
#promo-body h2{margin:0 0 14px;font:800 clamp(30px,4.4vw,56px)/1.08 var(--display);font-stretch:112%;text-wrap:balance}
#p-lead{text-wrap:balance;margin:0 0 18px;font-size:clamp(16px,1.5vw,19px);line-height:1.7;font-weight:500}
#p-main{font-size:14px;line-height:1.85;color:var(--ink)}
#p-main p{margin:0 0 10px}
#p-main ul{margin:0;padding:0;list-style:none}
#p-main li{padding:10px 0;border-top:1px solid rgba(255,255,255,.14)}
#p-note{margin:16px 0 24px;font-size:13px;color:var(--ink-2)}
#p-note:empty{margin:0 0 24px}

/* ---------- 正解を見る ---------- */
.ans-row{display:flex;gap:6px}
.ans-row button{flex:1;min-width:0 !important;padding-left:4px;padding-right:4px}
#ans-cursor{position:fixed;left:0;top:0;width:30px;height:30px;z-index:50;pointer-events:none;filter:drop-shadow(0 2px 4px rgba(0,0,0,.6))}
#ans-cursor[hidden]{display:none}
body.answering:not(.answer-done) #controls>*{pointer-events:none}
body.answering #task-card{display:none}
#ans-card{position:absolute;left:16px;bottom:16px;width:min(440px,calc(100% - 32px));padding:14px 16px;background:rgba(14,13,12,.86);border:1px solid rgba(255,255,255,.1);backdrop-filter:blur(10px);z-index:4}
#ans-card[hidden]{display:none}
#ans-no{font:600 11px/1 var(--display);letter-spacing:.24em;color:var(--lamp);text-transform:uppercase;margin-bottom:8px}
#ans-title{font-weight:700;font-size:17px;line-height:1.3;margin-bottom:4px}
#ans-text{font-size:13px;line-height:1.7;color:var(--ink);margin-bottom:10px}
#ans-card .row{display:flex;justify-content:flex-end;gap:8px}
#ans-card .row button[hidden]{display:none}
.ans-on label{color:var(--lamp-2)}
.slider.ans-on output,.wheel.ans-on output{color:var(--lamp-2)}
#warper.ans-on{outline:1px solid var(--lamp);outline-offset:4px}

#c-share{display:inline-flex;align-items:center;gap:10px}
#c-share svg{width:14px;height:14px;display:block}
/* ---------- 修了証 ---------- */
#view-cert.on{position:relative;overflow:auto;align-items:center;justify-content:center}
#cert-bg{position:absolute;inset:0;background:url(img/nas/nas12.jpg) center/cover no-repeat;filter:brightness(.72)}
#cert-bg::after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at center,rgba(14,13,12,.25) 0%,rgba(14,13,12,.6) 100%)}
#cert-body{position:relative;width:min(640px,calc(100% - 32px));margin:auto;padding:44px 44px 36px;text-align:center;border:1px solid rgba(241,235,227,.28);background:rgba(14,13,12,.62);backdrop-filter:blur(6px)}
.cert-bars{display:block;height:8px;width:100%;margin-bottom:clamp(20px,4vh,34px);background:linear-gradient(90deg,#bfbfbf 0 14.286%,#bfbf00 0 28.571%,#00bfbf 0 42.857%,#00bf00 0 57.143%,#bf00bf 0 71.429%,#bf0000 0 85.714%,#0000bf 0)}
#view-cert.play .cert-bars{animation:certbars 1.6s cubic-bezier(.16,1,.3,1) both}
@keyframes certbars{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
#view-cert.play #cert-rank,#view-cert.play #cert-thanks,#view-cert.play #cert-stats{animation:fadein 1.2s .7s cubic-bezier(.16,1,.3,1) both}
#cert-kicker{margin:0 0 14px;font:600 11px/1 var(--display);letter-spacing:.3em;text-transform:uppercase;color:var(--ink-2)}
#cert-rank{margin:0 0 10px;font:900 clamp(32px,5.6vw,56px)/1.06 var(--display);font-stretch:112%;color:var(--lamp-2);text-wrap:balance}
#cert-brand{margin:0 0 20px;font:800 13px/1 var(--display);font-stretch:125%;letter-spacing:.24em}
#cert-thanks{margin:0 0 22px;font-size:15px}
#cert-stats{display:flex;justify-content:center;gap:clamp(20px,5vw,48px);margin:0 0 18px}
#cert-stats dt{font:600 11px/1 var(--display);letter-spacing:.2em;text-transform:uppercase;color:var(--ink-2);margin-bottom:8px}
#cert-stats dd{margin:0;font:800 30px/1 var(--display);font-variant-numeric:tabular-nums}
#cert-stats small{font-size:13px;font-weight:500;color:var(--ink-2)}
#cert-date{margin:0 0 22px;font:500 12px/1 var(--display);letter-spacing:.1em;color:var(--ink-2)}
#cert-body .row{display:flex;justify-content:center;flex-wrap:wrap;gap:10px;margin-bottom:18px}
#cert-share{display:inline-flex;align-items:center;gap:10px}
#cert-share[hidden]{display:none}
#cert-share svg{width:14px;height:14px;display:block;color:#fff}
#cert-more{margin:0;font-size:12px;color:var(--ink-2)}
#cert-more:empty{display:none}
#cert-more a{color:var(--lamp-2);text-underline-offset:3px}
#cert-open[hidden]{display:none}
#cert-open{margin-left:8px}
@media (prefers-reduced-motion:reduce){#view-cert.play .cert-bars,#view-cert.play #cert-rank,#view-cert.play #cert-thanks,#view-cert.play #cert-stats{animation:none}}

/* ---------- 作者 ---------- */
.social a[aria-label=X],.social a[aria-label=X]:hover{color:#fff}
#view-about.on{flex-direction:row;overflow:auto}
.about-photo{flex:1;min-width:0;background:#070707 center 20%/cover no-repeat}
.about-body{flex:1;min-width:0;max-width:640px;padding:clamp(28px,5vw,72px);display:flex;flex-direction:column;align-items:flex-start;justify-content:center}
.about-body h2{margin:0 0 6px;font:700 clamp(26px,3vw,38px)/1.2 var(--body)}
#a-role{margin:0 0 22px;font-size:13px;color:var(--ink-2)}
#a-lead{margin:0 0 16px;font-size:16px;font-weight:500;line-height:1.7;text-wrap:pretty}
#a-bio{margin:0 0 18px;font-size:14px;line-height:1.9;color:var(--ink-2)}
#a-wm{margin-bottom:26px}
#a-list{list-style:none;margin:0 0 22px;padding:0;width:100%}
#a-list li{padding:8px 0;border-top:1px solid var(--rule);font-size:13px}
#a-bio a{color:var(--lamp-2);text-underline-offset:3px}
#a-bio a:hover{color:var(--lamp)}
.social{display:flex;gap:4px}
.social a{display:flex;align-items:center;justify-content:center;width:44px;height:44px;color:var(--ink-2);border-radius:2px;transition:color .2s}
.social a:hover{color:var(--lamp)}
.social svg{width:24px;height:24px;display:block}
#a-links{margin:0 0 0 -10px}
#foot{display:flex;justify-content:center;align-items:center;gap:16px;padding:12px 16px 40px}
#foot[hidden]{display:none}
#foot-about{border-color:transparent;color:var(--ink-2)}
#foot-about:hover{color:var(--ink)}
#tab-about[hidden]{display:none}

/* ---------- スマホ: 写真を全面に、操作は下に重ねる ---------- */
@media (max-width:720px), (max-height:500px){
  html,body{overscroll-behavior:none}
  .chapter{grid-template-columns:1fr}
  .chapter .ch-head{position:static}
  #top{flex-wrap:wrap;gap:10px 16px;height:auto;padding:10px 16px}
  #prog-bar{display:none}
  .card{width:calc(100% - 32px);max-height:calc(100dvh - 32px);overflow:auto;padding:20px}
  body.in-play #top{flex-wrap:nowrap;height:44px;padding:0 12px}
  body.in-play #tabs{display:none}

  #view-play{position:relative}
  #stage{position:absolute;inset:0;display:block}
  #viewer{position:absolute;inset:0}
  #gl{max-width:none;max-height:none;flex:none;touch-action:none}
  .pad{touch-action:none}
  #view-play button,#view-play input{touch-action:manipulation}
  #badge-a,#badge-b{top:auto;bottom:calc(var(--panel-h,250px) + 8px)}
  #badge-a{left:8px}#badge-b{right:8px}
  #task-card{left:8px;right:8px;top:8px;bottom:auto;max-width:none;padding:8px 12px 10px}
  #task-no{display:none}
  #steps{margin:0 -4px 6px;padding:0 0 6px}
  #task-title{font-size:15px}
  #task-text{font-size:12px;line-height:1.5}
  #task-card.min #task-text{display:none}

  #scopes{position:absolute;right:8px;top:112px;width:auto;overflow:visible;padding:0;border:0;background:transparent;display:block;z-index:2;cursor:pointer}
  #scope-src{display:none !important}
  .scope{padding:4px;background:rgba(10,10,10,.72)}
  .scope .cap{display:none}
  #wave{width:176px;height:107px}
  #vscope{width:150px;height:150px}
  #scopes[data-m=wave] .scope[data-s=vector],#scopes[data-m=vector] .scope[data-s=wave],#scopes[data-m=off] .scope{display:none}
  #scopes[data-m=off] #scope-chip{display:block;padding:8px 10px;font-size:11px;background:rgba(14,13,12,.78)}
  #viewer.learning ~ #scopes{display:none}

  #lesson{bottom:var(--panel-h,250px);background:rgba(14,13,12,.82);overflow:auto}
  #lesson .l-body{position:static;transform:none;max-width:none;padding:14px 16px}
  #lesson .l-title{margin-bottom:10px;font-size:20px}
  #lesson .l-points{margin-bottom:10px}
  #lesson .l-points li{padding:7px 0 7px 30px;font-size:13px;line-height:1.6}
  #lesson .l-points li::before{top:9px}
  #lesson .l-watch{margin-bottom:12px;font-size:12px}

  #controls{position:absolute;left:0;right:0;bottom:0;display:block;min-height:0;padding:0 0 env(safe-area-inset-bottom);overflow:visible;background:rgba(14,13,12,.84);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);z-index:4}
  #mtabs{display:flex;overflow-x:auto;border-bottom:1px solid var(--rule);scrollbar-width:none}
  #mtabs::-webkit-scrollbar{display:none}
  #mtabs button{flex:1 0 auto;border:0;border-radius:0;padding:13px 12px;font-size:11px;color:var(--ink-3)}
  #mtabs button.on{color:var(--ink);box-shadow:inset 0 -2px 0 var(--lamp)}
  body.hinting:not(.answering) #mtabs button.has-hint::after{content:"";display:inline-block;width:6px;height:6px;margin-left:5px;border-radius:50%;background:var(--lamp-2);vertical-align:1px}
  .trk,.wheel .trk{--th:26px;--tick:34px}
  #actions #btn-hint{width:32px;height:32px}
  #actions .ans-row:has(#btn-hint:not(.hidden)){flex:1.5}
  .mhide{display:none !important}
  #controls .sliders{display:flex;flex-direction:column;justify-content:center;min-height:136px;padding:4px 12px;border:0}
  .group:not([hidden]){display:contents}
  .slider{grid-template-columns:74px 1fr 46px;gap:4px;height:44px}
  .slider output{font-size:13px}
  .group.wheels{display:flex;justify-content:center;min-height:136px;padding:6px 12px;gap:0}
  body.warp #controls{min-height:0}
  #band-chips{justify-content:space-between;padding:4px 0}
  .warp-box{padding:8px 0}
  #warper{width:232px;height:232px}
  .wheel{display:grid;grid-template-columns:120px 1fr;grid-template-rows:auto 1fr;gap:6px 14px;width:100%;align-items:center}
  .wheel .pad{width:120px;height:120px;grid-row:1/3}
  .w-head{grid-column:2}
  .wheel .mrow{grid-column:2}
  .adj{display:block;flex:none;width:38px;height:38px;padding:0;position:relative;border:1px solid var(--rule-2);border-radius:50%;background:rgba(255,255,255,.04);-webkit-touch-callout:none}
  .adj::before,.adj.plus::after{content:"";position:absolute;left:50%;top:50%;width:12px;height:2px;margin:-1px 0 0 -6px;background:var(--ink)}
  .adj.plus::after{transform:rotate(90deg)}
  .mrow{gap:6px}
  input[type=range],input[type=range].master{height:38px;background:transparent}
  input[type=range]::-webkit-slider-runnable-track{height:6px;border-radius:3px;background:var(--rule-2)}
  input[type=range]::-moz-range-track{height:6px;border-radius:3px;background:var(--rule-2)}
  input[type=range]::-webkit-slider-thumb,input[type=range].master::-webkit-slider-thumb{width:26px;height:26px;margin-top:-10px;border-radius:50%}
  input[type=range]::-moz-range-thumb,input[type=range].master::-moz-range-thumb{width:22px;height:22px;border-radius:50%}
  #actions{display:flex;flex-direction:row;gap:8px;margin:0;padding:8px 12px 10px;border:0;border-top:1px solid var(--rule)}
  #actions button,#actions label{flex:1;min-width:0;padding:13px 4px}
  #actions .ans-row{flex:1;min-width:0;gap:4px}
  #actions .ans-row:has(#btn-next:not(.hidden)){flex:2}
  #actions{gap:6px}
  #actions button,#actions label{padding-left:2px;padding-right:2px}
  #actions button{font-size:11px;letter-spacing:.08em}
  #btn-ab{-webkit-touch-callout:none;touch-action:none}

  .hero-copy h1{font-size:min(14vw,120px);margin-bottom:14px}
  #hero{height:min(74dvh,640px);min-height:440px}
  .hero-copy{left:16px;right:16px;bottom:44px}
  .hero-copy .sub{margin-bottom:18px}
  #hero-start{width:100%}
  #hero-start b{font-size:16px}
  #c-teaser img{width:84px;height:56px}
  #cert-body{padding:28px 20px}
  #view-clear.on{flex-direction:column;overflow:auto}
  #view-about.on{flex-direction:column}
  .about-photo{flex:none;height:42dvh}
  .about-body{flex:none;max-width:none;padding:22px 16px 32px;justify-content:flex-start}
  .clear-photo{flex:none;height:30dvh}
  .clear-body{flex:none;max-width:none;padding:20px 16px 28px;justify-content:flex-start;overflow:visible}
  #c-score{font-size:68px}
  #ans-card{left:8px;right:8px;width:auto;top:8px;bottom:auto;padding:10px 12px}
  body.answering #scopes{top:164px}
  #ans-title{font-size:15px}
  #ans-text{font-size:12px;margin-bottom:6px}
  #promo-shade{background:rgba(14,13,12,.6)}
  #promo-sound{right:12px;bottom:12px}
  #view-promo.final.on{flex-direction:column;padding:12px;gap:14px;justify-content:flex-start}
  #view-promo.final #promo-final{height:auto;width:100%;max-height:70dvh;flex:none}
  #view-promo.final .row{width:100%}
  #promo-body{padding:28px 16px 32px}
  #p-cover{position:relative;right:auto;top:auto;transform:none;align-self:flex-start;flex:none;height:220px;margin:24px 0 0 16px}
  #p-cover:not([hidden]) + #promo-body{padding-top:18px}
}
/* スマホの横持ち: 操作パネルを右に置く */
@media (max-height:500px) and (min-width:500px){
  body.in-play #top{display:none}
  #controls{left:auto;top:0;width:340px;overflow:auto}
  #viewer{right:340px}
  #scopes{right:348px;top:8px}
  #task-card{right:auto;width:280px;top:8px}
  #badge-a,#badge-b{bottom:8px}
  #lesson{bottom:0}
  .clear-photo{height:40dvh}
}
/* 言語の切替（ヘッダー右端） */
#lang{display:flex;gap:2px;margin-left:12px}
#lang button{padding:6px 7px;font-size:11px;letter-spacing:.08em;border-color:transparent;color:var(--ink-2)}
#lang button.on{color:var(--ink);border-color:var(--rule-2)}
html.lang-ko{--body:"Noto Sans KR","Apple SD Gothic Neo","Noto Sans JP",sans-serif}
@media (max-width:720px), (max-height:500px){
  #brand{order:0} #lang{order:1;margin-left:auto} #tabs{order:2} #progress{order:3}
  #lang button{padding:5px 6px}
  body.in-play #lang{display:none}
}
