/* 1単元パッケージの見た目。色・フォントは学習画面(public/app/index.html)のデザイントークンに合わせる */
:root{--paper:#F8FBFF;--grid:#DCE7F5;--ink:#1B2559;--muted:#5B6690;--card:#FFFFFF;--line:#C9D6EA;--hl:#FFE14D;--act:#E0612A;--ok:#1F9D63;--ng:#D64545;--line-green:#06C755}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--paper:#111831;--grid:#1D294A;--ink:#E7ECFF;--muted:#A3AED6;--card:#18223F;--line:#2C3A63;--hl:#F2D23A;--act:#FF7A3D;--ok:#3CC286;--ng:#FF6B6B;color-scheme:dark}}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0}
body{color:var(--ink);font-family:'Zen Maru Gothic','Hiragino Maru Gothic ProN','Hiragino Sans','Noto Sans JP',sans-serif;font-weight:500;line-height:1.6;background-color:var(--paper);
  background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:24px 24px;-webkit-text-size-adjust:100%}
#unit{max-width:480px;margin:0 auto;min-height:100vh;min-height:100dvh}
a{color:var(--ink)}
button{font:inherit;color:inherit;-webkit-tap-highlight-color:transparent}
:focus-visible{outline:3px solid var(--act);outline-offset:2px}
.lbl{font-size:.8rem;color:var(--muted);font-weight:700;margin:0 0 4px}

/* ボタン(タップ領域は44px以上) */
.primary,.linecta,.ghost,.choice,.toggle,.qcard,.mask,.back{min-height:44px;cursor:pointer}
.primary{background:var(--act);color:#fff;border:none;border-radius:999px;padding:12px 22px;font-weight:900;font-size:1.05rem;box-shadow:0 4px 0 rgba(0,0,0,.18)}
.primary:disabled{opacity:.4;box-shadow:none;cursor:default}
.primary.big,.linecta.big{width:100%}
.linecta{background:var(--line-green);color:#fff;border:none;border-radius:999px;padding:12px 14px;font-weight:900;font-size:.9rem;box-shadow:0 4px 0 rgba(0,0,0,.18)}
.ghost{background:none;border:2px dashed var(--muted);border-radius:12px;padding:8px 14px;color:var(--muted);font-weight:700}
.choices,.btnrow,.selfeval{display:flex;flex-wrap:wrap;gap:8px}
.selfeval{flex-direction:column}
.choice{flex:1 1 auto;min-width:88px;padding:10px 16px;border-radius:14px;border:2px solid var(--ink);background:var(--card);font-weight:900;font-size:1rem}
.choice.on{background:var(--hl);color:#1B2559}
.choice.ok{background:var(--ok);border-color:var(--ok);color:#fff}
.choice.ng{background:var(--ng);border-color:var(--ng);color:#fff}
.choice:disabled{cursor:default}
.toggle{flex:1 1 auto;padding:8px 12px;border-radius:12px;border:2px solid var(--ink);background:var(--card);font-weight:900}
.toggle[aria-pressed="true"]{background:var(--ink);color:var(--paper)}
.toggle.swatch{border-color:var(--sw)}
.toggle.swatch[aria-pressed="true"]{background:var(--sw);color:#1B2559}

/* そら先生の吹き出し */
.bubble{display:flex;gap:10px;align-items:flex-start;background:var(--card);border:2px solid var(--line);border-radius:16px;padding:10px 12px}
.neko{flex:none;object-fit:contain}
.btext{min-width:0}
.who{font-size:.72rem;color:var(--muted);font-weight:700}
.bubble p{margin:0;font-weight:700;font-size:.98rem;line-height:1.55}

/* A 単元トップ */
.top{padding:12px 16px 28px;display:flex;flex-direction:column;gap:14px}
.tophd{display:flex;justify-content:space-between;align-items:center}
.brand{display:flex;align-items:center;gap:6px;font-weight:900;text-decoration:none}
.subject{font-size:.8rem;color:var(--muted);font-weight:700}
.top h1{margin:4px 0 0;font-size:1.5rem;line-height:1.35}
.qcards{display:flex;flex-direction:column;gap:8px}
.qcard{text-align:left;display:flex;flex-direction:column;gap:2px;background:var(--card);border:2px solid var(--ink);border-radius:16px;padding:12px 14px}
.qcard.done{border-color:var(--ok)}
.qcard.locked{border-style:dashed;border-color:var(--line);color:var(--muted);cursor:default}
.qn{font-size:.78rem;color:var(--act);font-weight:900}
.qcard b{font-size:1.02rem}
.qmeta{display:flex;justify-content:space-between;align-items:center;font-size:.8rem;color:var(--muted)}
.chip{border-radius:999px;padding:1px 10px;font-weight:700;border:1.5px solid var(--line)}
.chip.doing{border-color:var(--act);color:var(--act)}
.chip.done{border-color:var(--ok);color:var(--ok)}
.memolinks{display:flex;flex-direction:column;gap:6px}
.parent{text-align:center;font-size:.85rem;margin:4px 0 0}

/* B 共通フレーム:ヘッダー / ステージ(固定) / 吹き出し / 操作エリア */
.frame{display:flex;flex-direction:column;height:100vh;height:100dvh}
.fhd{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--paper);border-bottom:2px solid var(--line);flex:none}
.back{border:2px solid var(--line);background:var(--card);border-radius:12px;font-weight:900;min-width:52px;padding:2px 6px;display:flex;flex-direction:column;align-items:center;line-height:1.1;font-size:1.05rem}
.back small{font-size:.62rem;color:var(--muted)}
.prevbtn{flex:none;min-height:44px;background:none;border:none;color:var(--muted);font-weight:900;padding:0 10px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.prevbtn[hidden]{display:none}
.mainbtn .primary.big{flex:1;width:auto}
.hinttoggle{align-self:flex-start}
.ftitle{flex:1;min-width:0;font-weight:900;font-size:.9rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.ftitle span{display:block;font-size:.72rem;color:var(--act)}
.dots{display:flex;flex-wrap:wrap;gap:4px;max-width:96px;justify-content:flex-end}
.dots i{width:7px;height:7px;border-radius:50%;background:var(--line)}
.dots i.on{background:var(--ok)}.dots i.now{background:var(--act)}
.stage{flex:none;height:min(46vh,calc(min(100vw,480px)*.72));height:min(46dvh,calc(min(100vw,480px)*.72));padding:8px 10px 0;display:flex;align-items:center;justify-content:center}
.itemsvg,.itemcanvas{display:block;width:100%;height:100%;max-height:100%;object-fit:contain}
.itemcanvas{border-radius:16px}
.photo{width:100%;height:100%;border-radius:16px;overflow:hidden;background:var(--card);border:2px solid var(--line);display:flex}
.photo img{width:100%;height:100%;object-fit:cover}
.ph{margin:auto;color:var(--muted);font-weight:900}
.talk{flex:none;padding:8px 10px 0}
.ops{flex:1 1 auto;min-height:0;overflow-y:auto;padding:10px 12px calc(12px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:10px}
.itemctrl{display:flex;flex-direction:column;gap:8px}
.mainbtn{margin-top:auto;display:flex;gap:8px}
.mainbtn.col{flex-direction:column}
.slider{display:flex;flex-direction:column;gap:2px;font-weight:700;font-size:.85rem}
.slider input{width:100%;height:44px;accent-color:var(--act)}
.itemnote{margin:0;font-size:.88rem;font-weight:700;min-height:1.4em;background:var(--card);border-left:4px solid var(--act);border-radius:6px;padding:6px 10px}
.btnrow.grid2{display:grid;grid-template-columns:1fr 1fr}
.btnrow.grid2 .toggle{font-size:.86rem;padding:8px 4px}
/* 光の矢印:線が伸びるように出る / 吸収された光の× / 下敷きのスライド */
.ray{stroke-linecap:butt!important;stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:rayin .45s ease-out forwards}
@keyframes rayin{to{stroke-dashoffset:0}}
.gone{opacity:0;animation:fadein .2s ease-out forwards}
@keyframes fadein{to{opacity:1}}
.sheet.slide{animation:slidein .45s ease-out both}
@keyframes slidein{from{transform:translateX(360px)}to{transform:none}}
.itemlbl{margin:0;font-size:.8rem;color:var(--muted);font-weight:700}
.svglbl{font-family:'Zen Maru Gothic',sans-serif;font-weight:900;font-size:12px}
.halo{paint-order:stroke;stroke:#fff;stroke-width:3px;stroke-linejoin:round}
.understand{background:var(--card);border:2px solid var(--ink);border-radius:14px;padding:10px 14px}
.understand p{margin:0 0 8px;font-weight:700}.understand p:last-child{margin:0}
.home{background:var(--card);border:2px dashed var(--act);border-radius:14px;padding:10px 14px}
.home p{margin:2px 0 0}

/* C・D・E */
.page{display:flex;flex-direction:column;gap:12px;padding:0 0 calc(20px + env(safe-area-inset-bottom,0px));min-height:100vh;min-height:100dvh}
.page>*:not(.fhd){margin-left:14px;margin-right:14px}
.hints{display:flex;flex-direction:column;gap:6px}
.hint{display:flex;gap:10px;align-items:center;background:var(--card);border:2px solid var(--line);border-radius:12px;padding:8px 12px;font-weight:700}
.hint b{flex:none;width:26px;height:26px;border-radius:50%;background:var(--ink);color:var(--paper);display:flex;align-items:center;justify-content:center;font-size:.8rem}
.parentbox{background:var(--card);border:2px solid var(--line);border-radius:12px;padding:8px 12px}
.parentbox summary{font-weight:900;cursor:pointer;min-height:32px}
.memotools{display:flex;justify-content:flex-end}
.memo{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px;counter-reset:m}
.memo li{counter-increment:m;background:var(--card);border:2px solid var(--line);border-radius:12px;padding:10px 12px 10px 40px;position:relative;font-weight:700;line-height:2}
.memo li::before{content:counter(m);position:absolute;left:10px;top:11px;width:22px;height:22px;border-radius:50%;background:var(--ink);color:var(--paper);font-size:.75rem;display:flex;align-items:center;justify-content:center;line-height:1}
.mask{display:inline-flex;align-items:center;vertical-align:middle;min-height:32px;margin:2px 1px;padding:0 6px;border:none;border-radius:6px;background:#E5484D;font-weight:900}
.mask span{visibility:hidden}
.mask[aria-pressed="true"]{background:var(--hl);color:#1B2559}
.mask[aria-pressed="true"] span{visibility:visible}
.done .clear{text-align:center;padding-top:22px}
.done .clear h2{margin:0;font-size:2rem;color:var(--act)}
.done .clear .qn{margin:6px 0 0}
.found{background:var(--card);border:2px solid var(--ink);border-radius:14px;padding:10px 14px}
.found b{display:block;font-size:.8rem;color:var(--muted)}
.found p{margin:2px 0 0;font-weight:900;background-image:linear-gradient(transparent 60%,var(--hl) 60%);display:inline}
.demobadge{position:fixed;right:8px;bottom:8px;background:#1B2559;color:#fff;font-size:.75rem;font-weight:700;padding:4px 10px;border-radius:999px;opacity:.85;z-index:50}
.err{padding:24px;font-weight:700}
@media (prefers-reduced-motion: reduce){*{scroll-behavior:auto!important}.ray,.gone,.sheet.slide{animation:none!important;stroke-dashoffset:0;opacity:1}}

/* 埋め込み(?embed=prism):ステージだけを、枠いっぱいに */
body.embed{background:transparent;background-image:none}
body.embed #unit{max-width:none;min-height:0}
.embedstage{height:100vh!important;padding:0!important}
