/* サイバークエスト ピクセル調テーマ（配色D1：草原と紺の窓／N1：王道の夜）。上は元の明るいスタイルの色をP3に変換したもの、下の「PIXEL THEME」で枠・文字・演出を上書き（元は styles.css.before-pixel） */
:root{--ink:#203f54;--muted:#647780;--paper:#f6f5ef;--card:#fffefa;--gold:#e6b45d;--green:#477c6d;--line:#e1e5df;--coral:#ca7558;--shadow:0 10px 30px #243f4f08}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:'Hiragino Kaku Gothic ProN','Yu Gothic',Meiryo,sans-serif;font-size:calc(15px*var(--fs));line-height:1.8}button,input,textarea,select{font:inherit}button,a,input,textarea{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:default;opacity:.55}a{color:var(--ink)}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid #c9892d;outline-offset:4px}button{border:0}h1,h2,h3,p{margin-top:0}h1{font-size:calc(36px*var(--fs));line-height:1.5;letter-spacing:.02em;margin-bottom:12px}h2{font-size:calc(22px*var(--fs));line-height:1.5}h3{font-size:calc(17px*var(--fs));line-height:1.6}p{margin-bottom:16px}small,.small{font-size:calc(12px*var(--fs))}.muted{color:var(--muted)}.skip{position:fixed;top:-100px;z-index:100;background:white;padding:12px}.skip:focus{top:0}.layout{display:grid;grid-template-columns:238px minmax(0,1fr);min-height:100vh}.sidebar{background:var(--card);border-right:1px solid var(--line);padding:32px 22px;position:sticky;top:0;height:100vh;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:11px;text-decoration:none;margin-bottom:42px}.brand-mark{width:42px;height:48px;background:var(--ink);color:var(--gold);clip-path:polygon(50% 0,95% 17%,90% 75%,50% 100%,10% 75%,5% 17%);display:grid;place-items:center;font-size:calc(25px*var(--fs))}.brand strong{font-size:calc(17px*var(--fs));letter-spacing:.03em}.brand span{display:block;font-size:calc(10px*var(--fs));letter-spacing:.15em;color:var(--muted)}.nav-label{font-size:calc(10px*var(--fs));letter-spacing:.18em;color:var(--muted);margin:0 14px 14px}.nav{display:grid;gap:7px}.nav button{display:flex;align-items:center;gap:13px;padding:13px 15px;border-radius:11px;color:var(--muted);background:transparent;text-align:left;font-size:calc(14px*var(--fs))}.nav button:hover{background:var(--card)}.nav button.active{background:var(--card);color:var(--ink);font-weight:700}.ico{width:22px;height:22px;flex-shrink:0;display:inline-block;vertical-align:middle}.side-bottom{margin-top:auto;padding-top:22px}.profile{border:1px solid var(--line);padding:15px;border-radius:13px;background:var(--card)}.profile-line{display:flex;align-items:center;gap:10px;margin-bottom:10px}.profile p{margin:0;font-size:calc(12px*var(--fs))}.bar{height:6px;background:var(--card);border-radius:8px;overflow:hidden}.bar span{display:block;height:100%;background:var(--green);border-radius:inherit}.side-note{font-size:calc(10px*var(--fs));color:var(--muted);margin:15px 3px 0}.workspace{min-width:0}.topbar{height:77px;display:flex;align-items:center;justify-content:space-between;padding:0 44px;border-bottom:1px solid var(--line);gap:15px}.crumb{font-size:calc(12px*var(--fs));color:var(--muted)}.top-pills{display:flex;gap:16px;align-items:center;font-size:calc(12px*var(--fs))}.xp{color:var(--hi);font-weight:700}.pill{display:inline-flex;gap:6px;align-items:center;border:1px solid var(--line);border-radius:20px;padding:4px 12px;font-size:calc(11px*var(--fs));background:var(--card)}.page{max-width:1300px;margin:auto;padding:34px 44px 60px}.eyebrow{font-size:calc(10px*var(--fs));letter-spacing:.2em;text-transform:uppercase;font-weight:700;color:var(--green);margin-bottom:10px}.intro{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:22px}.intro p{color:var(--muted);font-size:calc(13px*var(--fs));margin:0}.intro h1{font-size:calc(29px*var(--fs));margin-bottom:6px}.season{display:flex;align-items:center;gap:10px;font-size:calc(11px*var(--fs));letter-spacing:.06em;white-space:nowrap}.dot{width:7px;height:7px;background:var(--green);border-radius:50%;display:inline-block}.hero{border-radius:22px;background:var(--card);position:relative;overflow:hidden;min-height:370px;border:1px solid var(--cbd);display:grid;grid-template-columns:43% 57%}.hero-copy{padding:39px 0 32px 32px;position:relative;z-index:2}.hero h2{font-size:calc(35px*var(--fs));line-height:1.55;letter-spacing:.03em;margin:14px 0}.hero p{font-size:calc(13px*var(--fs));color:var(--muted);max-width:310px}.hero .tag{font-size:calc(10px*var(--fs));font-weight:700;letter-spacing:.14em;color:var(--muted);display:inline-block;background:#ffffff90;padding:4px 10px;border-radius:5px}.primary,.secondary{min-height:46px;padding:11px 20px;border-radius:9px;display:inline-flex;align-items:center;justify-content:center;gap:13px;font-size:calc(13px*var(--fs));font-weight:700;text-decoration:none}.primary{background:var(--ink);color:white;box-shadow:0 5px 10px #203f5415}.primary:hover{background:#315a70}.secondary{background:var(--card);border:1px solid var(--line);color:var(--ink)}.secondary:hover{background:var(--card)}.hero .under{font-size:calc(10px*var(--fs));margin:11px 0 0;color:var(--muted)}.map-art{width:100%;height:100%;min-height:350px;overflow:visible}.hero-art{align-self:stretch;position:relative;margin-left:-35px}.hero-art .map-art{position:absolute;inset:0}.section-head{display:flex;justify-content:space-between;align-items:center;gap:15px;margin:29px 0 15px}.section-head h2{margin:0;font-size:calc(19px*var(--fs))}.section-head p{font-size:calc(12px*var(--fs));color:var(--muted);margin:0}.quest-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:17px}.quest-card{padding:0;text-align:left;color:var(--ink);border:1px solid var(--line);background:var(--card);border-radius:15px;overflow:hidden;box-shadow:var(--shadow);transition:transform .18s,box-shadow .18s;display:flex;flex-direction:column}.quest-card:hover{transform:translateY(-3px);box-shadow:0 14px 25px #203f5410}.quest-art{height:112px;background:var(--card);position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}.quest-art.warm{background:var(--card)}.quest-art.green{background:var(--card)}.quest-art svg{width:160px;height:105px}.quest-number{position:absolute;left:15px;top:12px;font-size:calc(10px*var(--fs));letter-spacing:.1em;color:var(--muted)}.quest-status{position:absolute;right:12px;top:10px;font-size:calc(10px*var(--fs));background:#fffc;border-radius:20px;padding:2px 9px}.card-body{padding:17px 18px;flex:1}.card-body h3{font-size:calc(15px*var(--fs));margin:3px 0 7px}.card-body p{font-size:calc(12px*var(--fs));line-height:1.8;color:var(--muted);margin:0 0 14px}.card-meta{display:flex;justify-content:space-between;font-size:calc(10px*var(--fs));color:var(--muted);gap:6px}.card-meta b{color:var(--green)}.bottom-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:18px;margin-top:21px}.guide{display:flex;align-items:center;gap:18px;border:1px solid var(--line);border-radius:14px;background:var(--card);padding:18px 22px}.guide h3{font-size:calc(14px*var(--fs));margin-bottom:4px}.guide p{font-size:calc(12px*var(--fs));color:var(--muted);margin:0}.owl{width:76px;height:85px;flex-shrink:0}.review-card{background:var(--card);border-radius:14px;padding:19px 22px;display:flex;justify-content:space-between;align-items:center;gap:15px}.review-card h3{font-size:calc(14px*var(--fs));margin-bottom:4px}.review-card p{font-size:calc(11px*var(--fs));margin:0;color:var(--muted)}.text-btn{background:none;color:var(--ink);text-decoration:underline;text-underline-offset:4px;padding:5px 0;min-height:36px;font-size:calc(12px*var(--fs))}.footer{font-size:calc(10px*var(--fs));color:var(--muted);display:flex;justify-content:space-between;gap:10px;margin-top:28px}.quest-page{max-width:950px;margin:auto}.back{margin-bottom:18px}.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:23px 0}.steps button{padding:10px 8px;border-radius:8px;background:var(--card);color:var(--muted);font-size:calc(12px*var(--fs))}.steps button.active{background:var(--ink);color:white}.lesson{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:30px;margin:20px 0}.lesson h2{font-size:calc(23px*var(--fs))}.lesson p{max-width:740px}.lesson .lead{font-size:calc(15px*var(--fs))}.diagram{display:flex;align-items:stretch;gap:10px;padding:23px 0;flex-wrap:wrap}.diagram .node{flex:1;min-width:120px;background:var(--card);padding:17px 12px;border-radius:12px;text-align:center;font-size:calc(13px*var(--fs))}.node .ico{width:35px;height:35px;margin-bottom:9px}.node small{display:block;margin-top:5px;color:var(--muted)}.arrow{align-self:center;color:var(--muted)}.callout{background:var(--card);padding:18px 21px;border-radius:12px;margin:20px 0;font-size:calc(13px*var(--fs))}.callout p:last-child{margin:0}.callout.warning{background:var(--call-wn)}.callout.error{background:var(--call-ng);color:var(--hi)}.callout.success{background:var(--call-ok);color:var(--hi)}.fact-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}.fact{background:var(--card);border-radius:12px;padding:19px;font-size:calc(13px*var(--fs))}.fact h3{font-size:calc(15px*var(--fs))}.actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:24px}.choices{display:grid;gap:10px}.choice{padding:14px 16px;background:white;border:1px solid var(--cbd);border-radius:10px;text-align:left;color:var(--ink);display:flex;gap:12px;align-items:flex-start}.choice.selected{background:var(--card);border-color:var(--green);box-shadow:inset 0 0 0 1px var(--green)}.choice:hover{background:var(--card)}.choice span.num{background:var(--card);border-radius:5px;min-width:25px;text-align:center;font-size:calc(12px*var(--fs))}.exercise-label{font-size:calc(11px*var(--fs));color:var(--green);font-weight:700;letter-spacing:.1em;margin-bottom:10px}.slots{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0;min-height:60px;align-items:center;background:var(--card);border-radius:11px;padding:12px}.slot{padding:8px 12px;background:var(--card);border:1px solid var(--cbd);border-radius:7px;font-size:calc(12px*var(--fs))}.slot.empty{color:var(--muted);border-style:dashed;background:transparent}.permission-table{width:100%;border-collapse:separate;border-spacing:0;margin:20px 0;font-size:calc(13px*var(--fs))}.permission-table th,.permission-table td{padding:13px 10px;border-bottom:1px solid var(--line);text-align:center}.permission-table th:first-child,.permission-table td:first-child{text-align:left}.permission-table input{width:20px;height:20px;accent-color:var(--green);cursor:pointer}.table-scroll{overflow:auto}.field{display:block;margin:18px 0;font-size:calc(13px*var(--fs));font-weight:700}.field select,.field textarea,.search{display:block;width:100%;margin-top:8px;background:var(--card);border:1px solid var(--cbd);border-radius:9px;color:var(--ink);padding:12px}.field textarea{min-height:150px;resize:vertical;font-size:calc(14px*var(--fs));font-weight:400;line-height:1.9}.snapshot-list{display:grid;gap:10px}.snapshot{display:flex;align-items:center;gap:12px;padding:15px;border:1px solid var(--line);border-radius:10px;background:white}.snapshot:has(input:checked){background:var(--call-ok);border-color:#477c6d}.snapshot input{accent-color:var(--green)}details{margin:20px 0;border:1px solid var(--line);border-radius:10px;padding:14px 18px;font-size:calc(13px*var(--fs))}summary{cursor:pointer;font-weight:700}details p{margin:14px 0 0}.check-row{display:flex;align-items:flex-start;gap:10px;margin:13px 0;font-size:calc(13px*var(--fs))}.check-row input{margin-top:5px;accent-color:var(--green);width:18px;height:18px}.source{font-size:calc(11px*var(--fs));color:var(--muted);margin-top:24px}.source a{color:var(--muted)}.celebrate{text-align:center;padding:45px 20px}.celebrate .owl{width:120px;height:130px}.celebrate h2{font-size:calc(27px*var(--fs))}.earned{font-size:calc(28px*var(--fs));color:var(--hi);font-weight:700;letter-spacing:.04em;margin:15px}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:15px;margin:20px 0}.stat{padding:20px;background:var(--card);border:1px solid var(--line);border-radius:13px}.stat b{font-size:calc(28px*var(--fs));display:block}.stat span{font-size:calc(12px*var(--fs));color:var(--muted)}.world-list{display:grid;gap:13px;margin-top:20px}.world-row{display:flex;gap:18px;align-items:center;border:1px solid var(--line);background:var(--card);padding:22px;border-radius:14px}.world-row .world-num{width:48px;height:48px;border-radius:12px;background:var(--card);display:grid;place-items:center;flex-shrink:0;font-size:calc(20px*var(--fs));font-family:Georgia,serif}.world-row h3{margin:0 0 4px}.world-row p{margin:0;font-size:calc(12px*var(--fs));color:var(--muted)}.world-row .pill{margin-left:auto;flex-shrink:0}.dictionary{display:grid;grid-template-columns:1fr 1fr;gap:15px;margin-top:20px}.term{border:1px solid var(--line);background:var(--card);border-radius:13px;padding:23px}.term h3{margin-bottom:8px}.term p{font-size:calc(13px*var(--fs));margin:0}.term .reading{font-size:calc(11px*var(--fs));color:var(--green);margin-bottom:10px}.journal-entry{padding:23px;border:1px solid var(--line);border-radius:13px;background:var(--card);margin:15px 0}.journal-entry .note{white-space:pre-wrap;overflow-wrap:anywhere;font-size:calc(14px*var(--fs));background:var(--card);padding:16px;border-radius:10px}.review-question{font-size:calc(19px*var(--fs))}.notice{font-size:calc(12px*var(--fs));border-radius:10px;padding:12px 16px;background:var(--card)}.mobile-brand{display:none}#toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);background:#0b1235;color:white;padding:12px 22px;border-radius:10px;box-shadow:0 5px 30px #203f5430;z-index:99;max-width:90vw;font-size:calc(13px*var(--fs));display:none}#toast.show{display:block}.search{max-width:460px;margin:15px 0}.file-input{max-width:100%;font-size:calc(12px*var(--fs))}.mastery{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}.mastery span{font-size:calc(10px*var(--fs));background:var(--card);padding:4px 9px;border-radius:20px}.mastery span.pending{background:var(--card);color:var(--muted)}.only-screen{font-size:calc(11px*var(--fs));color:var(--muted)}.final-quiz fieldset{border:0;padding:0;margin:0 0 28px}.final-quiz legend{font-weight:700;margin-bottom:12px}.final-quiz label{display:flex;gap:10px;border:1px solid var(--line);border-radius:9px;padding:12px;margin:8px 0;font-size:calc(13px*var(--fs));background:var(--card);cursor:pointer}.final-quiz input{accent-color:var(--green)}@media(min-width:1500px){.page{padding-top:43px}.hero{min-height:410px}.hero-copy{padding-top:45px}.hero h2{font-size:calc(40px*var(--fs))}}@media(max-width:1100px){.layout{grid-template-columns:195px minmax(0,1fr)}.sidebar{padding:26px 14px}.brand strong{font-size:calc(14px*var(--fs))}.brand-mark{width:35px;height:40px}.topbar{padding:0 25px}.page{padding:27px 25px 40px}.hero h2{font-size:calc(29px*var(--fs))}.hero-copy{padding:30px 0 25px 24px}.hero{min-height:335px}.quest-grid{gap:11px}.card-body{padding:15px 13px}.bottom-grid{grid-template-columns:1fr}.hero-art{margin-left:-15px}.season{display:none}}@media(max-width:760px){.layout{display:block}.sidebar{position:fixed;z-index:20;bottom:0;top:auto;left:0;right:0;width:100%;height:auto;padding:7px 8px max(7px,env(safe-area-inset-bottom));border:0;border-top:1px solid var(--line);background:#fffefaf7;backdrop-filter:blur(12px)}.brand,.nav-label,.side-bottom{display:none}.nav{display:grid;grid-template-columns:repeat(6,1fr);gap:2px}.nav button{padding:7px 2px;gap:2px;flex-direction:column;font-size:calc(10px*var(--fs));border-radius:8px;line-height:1.6}.nav .ico{width:20px;height:20px}.topbar{height:62px;padding:0 19px}.crumb{display:none}.mobile-brand{display:flex;align-items:center;gap:8px;font-size:calc(14px*var(--fs));font-weight:700}.mobile-brand .brand-mark{width:25px;height:30px;font-size:calc(16px*var(--fs))}.top-pills{font-size:calc(10px*var(--fs));gap:10px}.top-pills .pill{font-size:calc(9px*var(--fs));padding:3px 7px}.page{padding:23px 18px 110px}.intro h1{font-size:calc(24px*var(--fs))}.intro p{font-size:calc(12px*var(--fs))}.hero{display:block;min-height:485px;border-radius:17px}.hero-copy{padding:25px 24px 0}.hero h2{font-size:calc(29px*var(--fs));margin:10px 0}.hero p{max-width:290px;margin-bottom:15px}.hero-art{height:230px;margin:-18px 0 0 70px;pointer-events:none}.map-art{min-height:230px}.hero-copy .primary{position:relative;z-index:3}.hero .under{max-width:200px}.quest-grid{grid-template-columns:1fr;gap:12px}.quest-card{display:grid;grid-template-columns:110px minmax(0,1fr)}.quest-art{height:100%;min-height:150px}.quest-art svg{width:125px}.quest-number{left:10px;top:8px;font-size:calc(8px*var(--fs))}.quest-status{top:auto;bottom:8px;left:8px;right:auto;font-size:calc(9px*var(--fs))}.card-body{padding:15px}.card-body h3{font-size:calc(14px*var(--fs))}.card-body p{font-size:calc(11px*var(--fs));margin-bottom:9px}.section-head p{font-size:calc(10px*var(--fs))}.section-head h2{font-size:calc(17px*var(--fs))}.guide{padding:16px;gap:12px}.guide .owl{width:60px;height:70px}.footer{flex-direction:column;gap:3px}.lesson{padding:21px 17px;border-radius:14px}.lesson h2{font-size:calc(21px*var(--fs))}.lesson p{font-size:calc(14px*var(--fs))}.fact-grid,.dictionary{grid-template-columns:1fr}.steps{gap:5px}.steps button{font-size:calc(11px*var(--fs));padding:9px 3px}.diagram{gap:7px}.diagram .node{min-width:100px;font-size:calc(12px*var(--fs))}.diagram .arrow{display:none}.stats{gap:8px}.stat{padding:15px 10px}.stat b{font-size:calc(24px*var(--fs))}.stat span{font-size:calc(10px*var(--fs))}.world-row{padding:17px 14px;gap:12px;flex-wrap:wrap}.world-row .pill{margin-left:60px}.world-row h3{font-size:calc(15px*var(--fs))}.world-row>div:nth-child(2){flex:1;min-width:180px}.permission-table th,.permission-table td{padding:11px 5px;font-size:calc(11px*var(--fs))}.actions>.primary{flex:1}.source{overflow-wrap:anywhere}#toast{bottom:90px}.quest-page h1{font-size:calc(26px*var(--fs))}}@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important;scroll-behavior:auto!important}}

.predict{margin-top:28px;padding:20px;border:1.5px solid var(--cbd);border-radius:16px;background:var(--card)}
.conf-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0 4px}
.conf{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1.5px solid var(--cbd);border-radius:999px;background:var(--card);font-size:calc(13px*var(--fs));cursor:pointer}
.conf.selected,.conf:has(input:checked){border-color:#203f54;background:#0b1235;color:#fff}
.conf input{accent-color:#d8a64a}
.pill.hot{background:#8a2f2f;color:#fff;border-color:#8a2f2f;font-size:calc(11px*var(--fs));vertical-align:middle}
.final-quiz .conf-row label.conf{display:inline-flex;width:auto;min-height:0;margin:0;padding:5px 12px;border-radius:999px;font-size:calc(13px*var(--fs))}


/* ===== v2: story / daily / level / badges / settings ===== */
:root{--fs:1}html.big{--fs:1.2}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.sec{margin:34px 0 8px;font-size:calc(22px*var(--fs))}
.dlg{margin:6px 0}.dl{display:flex;gap:10px;align-items:flex-start;margin:10px 0;text-align:left}
.av{flex:none;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:700;font-size:calc(18px*var(--fs));overflow:hidden}
.av-owl{background:var(--card);border:1px solid var(--line)}.av-owl .owl{width:36px;height:40px}
.bub{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:9px 14px;min-width:0}
.bub b{font-size:calc(12px*var(--fs));color:var(--green);letter-spacing:.04em}.bub p{margin:2px 0 0;font-size:calc(14px*var(--fs));line-height:1.75;max-width:none}
.nar{text-align:center;font-size:calc(13px*var(--fs));color:var(--muted);margin:14px 0}
.story-card{border:1px solid var(--cbd);background:var(--card);border-radius:16px;padding:16px 18px;margin:0 0 22px;text-align:left}
.story-card .exercise-label{margin-bottom:4px}
.cast{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;margin:18px 0}
.cast-item{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--line);background:var(--card);border-radius:14px;padding:14px}
.cast-item p{margin:2px 0 0;font-size:calc(13px*var(--fs));color:var(--muted)}
.goal{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:20px;align-items:center;border:1.5px solid var(--cbd);background:var(--card);border-radius:16px;padding:20px 24px;margin:0 0 22px}
.goal.done{border-color:var(--green);background:var(--card)}.goal h2{margin-bottom:4px}
.goal-list{list-style:none;padding:0;margin:10px 0 0;display:grid;gap:8px}.goal-list li{display:flex;gap:10px;align-items:center;font-size:calc(14px*var(--fs))}
.gchk{flex:none;width:26px;height:26px;border-radius:50%;border:2px solid var(--cbd);background:var(--card);display:grid;place-items:center}
.gchk.on{background:var(--green);border-color:var(--green);color:#fff}.gchk .ico{width:15px;height:15px}
.goal-side{text-align:center;font-size:calc(12px*var(--fs));max-width:170px}.goal-side p{margin:6px 0 0}
.goal-streak{display:inline-flex;align-items:baseline;gap:6px}.goal-streak b{font-size:calc(36px*var(--fs));color:var(--hi);line-height:1}.goal-streak span{font-size:calc(12px*var(--fs));color:var(--muted)}
.ov{position:fixed;inset:0;z-index:60;background:#14303fe6;display:grid;place-items:center;padding:16px;overflow-y:auto}
.ov-card{position:relative;overflow:hidden;background:var(--card);border:1px solid var(--cbd);border-radius:20px;padding:24px;max-width:480px;width:100%;max-height:calc(100vh - 32px);overflow-y:auto}
.ov-card h2{font-size:calc(22px*var(--fs))}.ov-card p{max-width:none}
.dlg .dl:last-child{animation:rise .35s ease-out}
.stamps{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;list-style:none;padding:0;margin:14px 0}
.stamp{text-align:center;font-size:calc(12px*var(--fs))}
.st-c{display:grid;place-items:center;width:100%;max-width:46px;aspect-ratio:1;margin:0 auto 4px;border-radius:50%;border:2px dashed var(--cbd);background:var(--card);color:var(--ink)}
.stamp.on .st-c{background:var(--gold);border:2px solid #b98a2e}.stamp.today .st-c{border-color:var(--ink)}.stamp.future{opacity:.6}
.st-c .ico{width:55%;height:55%}
.login-sum{display:flex;gap:18px;align-items:center;flex-wrap:wrap;background:var(--card);border-radius:12px;padding:12px 16px}
.xp-lines{list-style:none;margin:0;padding:0;font-size:calc(13px*var(--fs))}.xp-lines b{color:var(--hi)}
.lu-card{text-align:center}.lu-card .dl{text-align:left}
.lu-badge{width:96px;height:96px;margin:6px auto 12px;border-radius:50%;background:var(--ink);color:var(--gold);border:4px solid var(--gold);display:grid;place-content:center;line-height:1;animation:pop .7s cubic-bezier(.2,1.4,.4,1)}
.lu-badge span{font-size:calc(13px*var(--fs));letter-spacing:.1em}.lu-badge b{font-size:calc(40px*var(--fs))}
.lu-title{font-size:calc(18px*var(--fs));font-weight:700;color:var(--hi);margin-bottom:14px}
.burst{position:absolute;left:50%;top:54px;width:0;height:0;pointer-events:none}
.burst i{position:absolute;width:120px;height:120px;margin:-60px 0 0 -60px;border:3px solid var(--gold);border-radius:50%;opacity:0;animation:ring 1.5s ease-out forwards}
.burst i:nth-child(2){animation-delay:.25s;border-color:#477c6d}.burst i:nth-child(3){animation-delay:.5s;border-color:var(--cbd)}
.confetti{position:fixed;inset:0;overflow:hidden;pointer-events:none}
.confetti i{position:absolute;top:-6%;left:var(--l);width:10px;height:14px;background:var(--c);opacity:0;animation:cfall var(--du) var(--dl) ease-in forwards}
.confetti i:nth-child(3n){border-radius:50%;width:10px;height:10px}.confetti i:nth-child(3n+1){clip-path:polygon(50% 0,100% 100%,0 100%)}
@keyframes cfall{0%{opacity:1;transform:translateY(0) rotate(0)}100%{opacity:.9;transform:translateY(112vh) rotate(var(--r))}}
@keyframes ring{0%{opacity:.9;transform:scale(.3)}100%{opacity:0;transform:scale(3.2)}}
@keyframes pop{0%{transform:scale(.3);opacity:0}100%{transform:scale(1);opacity:1}}
@keyframes rise{0%{transform:translateY(8px);opacity:0}100%{transform:none;opacity:1}}
html.calm *,html.calm *::before,html.calm *::after{animation:none!important;transition:none!important}
html.calm .confetti,html.calm .burst{display:none}
@media(prefers-reduced-motion:reduce){.confetti,.burst{display:none}*{animation:none!important}}
.stats6{grid-template-columns:repeat(3,minmax(0,1fr))}.stat small{font-size:calc(14px*var(--fs));color:var(--muted)}
.lv-card{border:1px solid var(--line);background:var(--card);border-radius:13px;padding:14px 18px;margin:0 0 18px}.lv-card .bar{margin-top:8px}
.heat{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px;max-width:420px;margin:10px 0}
.hm{display:grid;place-items:center;aspect-ratio:1;border-radius:7px;background:var(--card);color:var(--muted);font-size:calc(11px*var(--fs))}
.hm.l1{background:#c9dccd;color:var(--ink)}.hm.l2{background:#86b394;color:var(--ink)}.hm.l3{background:#477c6d;color:#fff}
.hm.today{outline:2px solid var(--ink);outline-offset:1px}.hm.blank{background:none}
.hm-h{text-align:center;font-size:calc(11px*var(--fs));color:var(--muted)}
.heat-legend{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.heat-legend .hm{display:inline-block;width:14px;height:14px;aspect-ratio:auto;border-radius:4px}
.badges{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;list-style:none;padding:0;margin:14px 0}
.badge{border:1px solid var(--line);background:var(--card);border-radius:14px;padding:14px 10px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:2px}
.badge svg{width:56px;height:56px;margin-bottom:4px}.badge b{font-size:calc(14px*var(--fs))}.badge span{font-size:calc(12px*var(--fs));color:var(--muted);line-height:1.5}.badge em{font-size:calc(11px*var(--fs));font-style:normal;color:var(--hi)}
.badge.off{background:var(--card)}.badge.off b{color:var(--muted)}.badge.off em{color:var(--muted)}
.hist{list-style:none;padding:0;margin:12px 0;display:grid;gap:8px}
.hist li{display:flex;gap:10px;align-items:center;border:1px solid var(--line);background:var(--card);border-radius:10px;padding:9px 12px;font-size:calc(13px*var(--fs))}
.hist .pill{flex:none;font-size:calc(11px*var(--fs))}.hist .hl{flex:1;min-width:0;overflow-wrap:anywhere}.hist time{flex:none;font-size:calc(11px*var(--fs));color:var(--muted)}
@media(max-width:760px){.nav{grid-template-columns:repeat(6,1fr)!important}.nav button{font-size:calc(9px*var(--fs))}.stats6{grid-template-columns:repeat(2,minmax(0,1fr))}.goal{grid-template-columns:1fr}.goal-side{max-width:none;text-align:left}.top-pills .xp{font-size:calc(10px*var(--fs))}.ov-card{padding:20px 16px}.hist li{flex-wrap:wrap}.hist time{width:100%}}

/* 教材 */
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 18px}.chip{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:6px 13px;border:1px solid var(--cbd);border-radius:20px;background:var(--card);color:var(--ink);text-decoration:none;font-size:calc(13px*var(--fs));line-height:1.5}.chip:hover{background:var(--card)}.chip small{color:var(--muted);font-size:calc(11px*var(--fs))}.chip.t1{background:var(--card)}.chip.t3{color:var(--muted);background:var(--card)}.chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}.lib-cats{display:flex;flex-wrap:wrap;gap:7px}.lib-cats .chip .dotc{width:10px;height:10px;border-radius:50%;background:var(--cc,#647780);display:inline-block}.lib-cats .chip.on .dotc{box-shadow:0 0 0 2px #fff}.lib-bar{margin:18px 0 6px}.lib-note{font-size:calc(12px*var(--fs));background:var(--call-wn);border-radius:10px;padding:10px 14px;color:var(--hi)}.mm-wrap{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:10px;margin:8px 0 22px;max-width:100%}.mm{display:block;width:100%;min-width:320px;max-width:560px;height:auto;margin:auto}.mm text{font-family:inherit}.mm-n{cursor:pointer}.mm-n:hover rect,.mm-a:hover rect{filter:brightness(1.08)}.mm-n:focus-visible,.mm-a:focus-visible{outline:3px solid #c9892d;outline-offset:2px}.mm-a{cursor:pointer}.mm.lg{max-width:420px}.sec{font-size:calc(19px*var(--fs));margin:28px 0 8px}.cat-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:20px}.cat-card{text-align:left;background:var(--card);border:1px solid var(--line);border-radius:13px;padding:15px 17px;color:var(--ink);display:grid;gap:4px}.cat-card::before{content:"";width:34px;height:8px;border-radius:5px;background:var(--cc)}.cat-card:hover{background:var(--card)}.cat-card span{font-size:calc(12px*var(--fs));color:var(--muted);line-height:1.7}.cat-card small{color:var(--green)}.lib-filters{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 12px}.lib-filters select{padding:9px 12px;border:1px solid var(--cbd);border-radius:9px;background:var(--card);color:var(--ink);max-width:100%}.rows{display:grid;gap:8px}.trow{display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px 10px;align-items:baseline;padding:12px 15px;border:1px solid var(--line);border-radius:11px;background:var(--card);color:var(--ink);text-decoration:none}.trow:hover{background:var(--card)}.trow small{color:var(--muted);text-align:right;grid-column:2}.trow .tshort{grid-column:1/-1;font-size:calc(12px*var(--fs));color:var(--muted)}.trow b{overflow-wrap:anywhere}.tb{display:inline-block;font-size:calc(11px*var(--fs));padding:1px 9px;border-radius:12px;background:var(--card);color:var(--muted);white-space:nowrap}.tb.t1{background:var(--call-ok)}.tb.t2{background:var(--card);color:var(--hi)}.tb.t3{background:var(--card);color:var(--muted)}.tb.gov{background:var(--card);color:var(--hi)}.tb.yt{background:var(--card);color:var(--hi)}.tod{display:flex;gap:16px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin:22px 0;padding:18px 22px;border:1px solid var(--cbd);border-radius:15px;background:var(--card)}.tod h3{margin:0 0 4px}.tod p{margin:0;font-size:calc(13px*var(--fs));color:var(--muted)}.tod .eyebrow{margin-bottom:4px}.tod-act{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.term-page{max-width:820px}.term-meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.crumbs{margin:6px 0 10px;color:var(--muted)}.crumbs .text-btn{min-height:28px;padding:0;font-size:inherit}.tsec{background:var(--card);border:1px solid var(--line);border-radius:15px;padding:18px 22px;margin:14px 0}.tsec h2{font-size:calc(17px*var(--fs));margin-bottom:8px}.tsec p:last-child{margin-bottom:0}.tsec ul{margin:0;padding-left:1.2em}.tsec li{margin:6px 0}.il{color:var(--hi);text-decoration:underline;text-underline-offset:3px}.chips.linked .chip{align-items:baseline}.srcs{list-style:none;padding:0!important}.srcs li{font-size:calc(13px*var(--fs));overflow-wrap:anywhere}.rel-terms{margin:22px 0 0;padding:16px 18px;border-radius:13px;background:var(--card)}.rel-terms h3{margin-bottom:2px}.dictionary .term{padding:16px}
@media(max-width:760px){.cat-list{grid-template-columns:1fr}.tsec{padding:15px 16px}.tod{padding:15px 16px}.mm-wrap{padding:6px}}

/* 単語テスト */
[hidden]{display:none!important}
.fl-entry{background:var(--card);border-color:var(--cbd)}
.fl-page{max-width:760px}
.fl-set{margin-bottom:18px}
.fl-opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.fl-opt{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;min-height:64px;padding:12px 14px;border:1px solid var(--cbd);border-radius:12px;background:var(--card);color:var(--ink)}
.fl-opt small{color:var(--muted);font-size:calc(11px*var(--fs));line-height:1.5}
.fl-opt[aria-pressed=true],.fl-chip[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:#fff}
.fl-opt[aria-pressed=true] small{color:#dfe8e4}
.fl-row{display:flex;flex-wrap:wrap;gap:8px}
.fl-chip{min-height:44px;padding:8px 15px;border:1px solid var(--cbd);border-radius:22px;background:var(--card);color:var(--ink);font-size:calc(13px*var(--fs))}
.fl-sel{padding:11px 12px;border:1px solid var(--cbd);border-radius:9px;background:var(--card);color:var(--ink);max-width:100%;min-height:44px}
.fl-count{margin:16px 0 0}
.fl-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px}
.fl-bar{height:8px;background:var(--card);border-radius:6px;overflow:hidden;margin-bottom:18px}
.fl-bar span{display:block;height:100%;background:var(--green);transition:width .3s}
.fl-card{background:var(--card);border:1px solid var(--line);border-radius:15px;padding:20px 18px;box-shadow:var(--shadow)}
.fl-q{margin:6px 0 16px;font-size:calc(17px*var(--fs));line-height:1.7}
.fl-term{display:block;font-size:calc(28px*var(--fs));font-weight:700;line-height:1.4;overflow-wrap:anywhere}
.fl-q .fl-term{display:inline}
.fl-defq{padding:14px 16px;background:var(--card);border-radius:11px}
.fl-ch{display:grid;gap:10px}
.fl-c{display:flex;align-items:center;gap:12px;width:100%;min-height:52px;padding:11px 14px;text-align:left;border:1px solid var(--cbd);border-radius:12px;background:var(--card);color:var(--ink);line-height:1.6;font-size:calc(14px*var(--fs))}
.fl-c:disabled{opacity:1}
.fl-c>span:nth-child(2){flex:1;min-width:0;overflow-wrap:anywhere}
.fl-n{flex:none;display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--card);font-weight:700;font-size:calc(12px*var(--fs))}
.fl-mark{flex:none;font-size:calc(11px*var(--fs));white-space:nowrap}
.fl-c.ok{background:var(--call-ok);border-color:#477c6d;border-width:2px}
.fl-c.ng{background:var(--call-ng);border-color:var(--cbd);border-width:2px}
.fl-fb{margin-top:16px;padding:14px 16px;border-radius:12px;background:var(--card)}
.fl-fb.ok{background:var(--call-ok)}
.fl-fb.ng{background:var(--call-ng)}
.fl-fb p{margin:6px 0}
.fl-mine{white-space:pre-wrap;overflow-wrap:anywhere;padding:8px 12px;background:var(--card);border-radius:9px}
.fl-fb .actions{margin-top:12px}
.fl-form textarea,.fl-form input{max-width:none;margin:6px 0 4px}
.fcard{display:block;width:100%;padding:0;background:none;border:0;perspective:1000px;text-align:center;color:inherit}
.fcard .fin{display:grid;transition:transform .5s;transform-style:preserve-3d}
.fcard.flipped .fin{transform:rotateY(180deg)}
.fcard .ff,.fcard .fbk{grid-area:1/1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:230px;padding:22px 18px;border-radius:15px;backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow-wrap:anywhere}
.fcard .ff{background:var(--card);border:2px solid var(--ink);color:var(--ink)}
.fcard .fbk{background:var(--ink);color:#fff;transform:rotateY(180deg)}
.fl-gold{color:var(--gold)}
.fl-def{font-size:calc(17px*var(--fs));line-height:1.8}
.fl-plain{font-size:calc(13px*var(--fs));line-height:1.7;color:#dfe8e4}
.fl-after{margin-top:14px;display:grid;gap:8px;justify-items:start}
.fl-after .actions{margin-top:0;width:100%}
.fl-after .actions button{flex:1}
.fl-miss{padding-left:20px}
.fl-miss li{margin-bottom:6px}
html.calm .fcard .fin,.fl-bar span{transition:none}
html.calm .fcard .fin{transform:none!important;transform-style:flat}
html.calm .fcard .ff,html.calm .fcard .fbk{backface-visibility:visible;transform:none}
html.calm .fcard:not(.flipped) .fbk,html.calm .fcard.flipped .ff{display:none}
@media(prefers-reduced-motion:reduce){.fcard .fin{transition:none;transform:none!important;transform-style:flat}.fcard .ff,.fcard .fbk{backface-visibility:visible;transform:none}.fcard:not(.flipped) .fbk,.fcard.flipped .ff{display:none}}
@media(max-width:760px){.fl-opts{grid-template-columns:1fr}.fl-card{padding:16px 14px}.fl-term{font-size:calc(24px*var(--fs))}.fl-after .actions button{min-height:48px}}
/* 3D回転はbutton内で平坦化されるため、表裏の切り替え表示に統一 */
.fcard .fin,.fcard.flipped .fin{transform:none!important;transform-style:flat}
.fcard .ff,.fcard .fbk{backface-visibility:visible;-webkit-backface-visibility:visible;transform:none}
.fcard:not(.flipped) .fbk,.fcard.flipped .ff{display:none}
.fcard.flipped .fbk{animation:fcIn .28s ease-out}
@keyframes fcIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.fcard.flipped .fbk{animation:none}}
html.calm .fcard.flipped .fbk{animation:none}
.av-pt{background:color-mix(in srgb,var(--pc) 16%,var(--card));border-color:color-mix(in srgb,var(--pc) 45%,var(--cbd))}
/* ---- 章末の総合試験・物語の拡張 ---- */
.exam-entry{display:flex;gap:16px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin:24px 0;padding:18px 22px;border:1px solid var(--cbd);border-radius:15px;background:var(--card)}
.exam-entry.ready{background:var(--card);border-color:var(--cbd)}
.exam-entry .ex-body{flex:1 1 260px;min-width:0}.exam-entry h3{margin:2px 0 4px}
.exam-entry p{margin:0 0 8px;font-size:calc(13px*var(--fs));color:var(--muted);max-width:none}.exam-entry .bar{max-width:320px}
.chapter-prog{margin:18px 0 6px;padding:14px 18px;border:1px solid var(--line);border-radius:13px;background:var(--card)}
.cp-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.ex-prog{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin:14px 0 8px;font-weight:700}
.ex-nav{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0 0}
.ex-nav button{width:36px;height:36px;padding:0;border-radius:50%;border:1px solid var(--cbd);background:var(--card);color:var(--ink);font-size:calc(12px*var(--fs));font-weight:700}
.ex-nav button.done{background:var(--card);border-color:var(--green)}.ex-nav button.cur{background:var(--ink);border-color:var(--ink);color:#fff}
.ex-ctx{margin:0 0 14px;padding:12px 14px;border:1px solid var(--cbd);border-radius:12px;background:var(--card);font-size:calc(13px*var(--fs));line-height:1.85;max-width:none}
.ex-q{margin:0 0 14px;font-size:calc(18px*var(--fs));line-height:1.6;outline:none}
.ex-rules{margin:8px 0 6px;padding-left:1.3em;line-height:1.95;font-size:calc(14px*var(--fs))}
.ex-big{font-family:Georgia,serif;font-size:calc(46px*var(--fs));font-weight:700;line-height:1.2}.ex-big span{font-size:.45em;color:var(--muted);font-weight:400}
.ex-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:18px}
.ex-row{padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:var(--card)}.ex-row.bad{background:var(--call-ng);border-color:var(--cbd)}
.ex-row-h{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline}
.ex-row-m{display:flex;align-items:center;gap:12px;margin:8px 0}.ex-row-m .bar{flex:1}
.ex-score{min-width:3.4em;font-family:Georgia,serif;font-weight:700}
.ex-row-a{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center}.ex-row-a .secondary{min-height:40px;padding:8px 14px}
.ex-wrong{margin:12px 0;padding:16px 18px;border:1px solid var(--line);border-radius:14px;background:var(--card)}
.ex-wrong h3{margin:0 0 8px;font-size:calc(15px*var(--fs));line-height:1.6}.ex-wrong .callout{margin:10px 0}.ex-wrong .chips{margin:6px 0 0}
.ex-ok{margin:16px 0}.ex-ok summary{cursor:pointer;font-weight:700;padding:8px 0}
@media(max-width:760px){.ex-grid{grid-template-columns:1fr}.exam-entry{padding:15px 16px}.exam-entry>button{width:100%}.ex-q{font-size:calc(16px*var(--fs))}.ex-big{font-size:calc(38px*var(--fs))}.ex-card .actions button{flex:1}.ex-row-a .secondary{width:100%}}
/* ===== 第2章：章の切り替え・ロック・割り当て演習 ===== */
.ch-switch{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 20px}
.ch-switch .fl-chip{flex:1 1 220px;display:flex;flex-direction:column;align-items:flex-start;gap:0;border-radius:14px;padding:9px 16px;text-align:left;line-height:1.55}
.ch-switch .fl-chip small{font-size:calc(11px*var(--fs));opacity:.85}
.ch-lock .bar{max-width:420px}
.hero.town{background:var(--card);border-color:var(--cbd)}
.assign-list{display:grid;gap:10px}
.assign{display:grid;gap:8px;padding:15px;border:1px solid var(--line);border-radius:10px;background:var(--card)}
.assign label{font-size:calc(14px*var(--fs))}
.assign select{width:100%;min-height:44px;margin:0}
.assign.ok,.snapshot.ok{background:var(--call-ok);border-color:#477c6d}
.assign.ng,.snapshot.ng{background:var(--call-ng);border-color:var(--cbd)}
.assign-note{margin:0;font-size:calc(12px*var(--fs));color:var(--muted)}
.assign.ng .assign-note,.snapshot.ng .assign-note{color:var(--hi)}
.snapshot .assign-note{display:inline-block;margin-top:4px}
@media(max-width:760px){.ch-switch .fl-chip{flex-basis:100%}}
.snapshot.ng:has(input){background:var(--call-ng);border-color:var(--cbd)}

/* ch2b: 記録の書庫（ログ表） */
.logtbl{width:100%;border-collapse:collapse;margin:14px 0;background:var(--card);border:1px solid var(--line);border-radius:10px;font-size:calc(12px*var(--fs));line-height:1.6}
.logtbl th,.logtbl td{padding:9px 6px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top;overflow-wrap:anywhere}
.logtbl th{background:var(--card);font-size:calc(11px*var(--fs));color:var(--muted)}
.logtbl td small{color:var(--muted);font-size:calc(11px*var(--fs))}
.logtbl td:first-child label{display:flex;align-items:center;gap:5px;min-height:32px;cursor:pointer}
.logtbl input{width:18px;height:18px;accent-color:var(--green);flex-shrink:0}
.logtbl tr:has(input:checked) td{background:var(--call-ok)}
.logtbl tr.ok td{background:var(--call-ok)}
.logtbl tr.ng td{background:var(--call-ng)}
.log-notes{list-style:none;margin:0 0 6px;padding:0;display:grid;gap:8px}
.log-notes li{padding:11px 14px;border:1px solid var(--line);border-radius:10px;background:var(--card);font-size:calc(12px*var(--fs));line-height:1.7}
.log-notes li.ok{background:var(--call-ok);border-color:#477c6d;color:var(--muted)}
.log-notes li.ng{background:var(--call-ng);border-color:var(--cbd);color:var(--hi)}
@media(max-width:760px){.logtbl th,.logtbl td{padding:8px 4px}.logtbl{font-size:calc(11px*var(--fs))}}
.logtbl tr.ok:has(input) td{background:var(--call-ok)}
.logtbl tr.ng:has(input) td{background:var(--call-ng)}

/* ch2c: 台帳の測量所（幅の広い表）・章末のまとめ */
.logtbl.wide{min-width:620px}
.fact .chips{margin:10px 0 0}
@media(max-width:760px){.logtbl.wide{min-width:560px}}

/* ch3: コード工房（コード表示・章の見た目） */
.code-wrap{margin:12px 0;max-width:100%;min-width:0}
.code-cap{margin:0 0 4px;font-size:calc(11px*var(--fs));letter-spacing:.04em;color:var(--muted)}
.code{margin:0;padding:12px 0;background:#0b1235;color:#eef3f1;border-radius:10px;overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'Courier New',monospace;font-size:calc(13px*var(--fs));line-height:1.75;tab-size:2}
.code:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
.code code{display:block;min-width:max-content;padding:0 16px 0 0;font-family:inherit}
.code .cl{display:block;white-space:pre}
.code .cl::before{content:attr(data-n);display:inline-block;width:2.2em;margin-right:.9em;text-align:right;color:#9db4bd;user-select:none}
code.ic{padding:1px 6px;border-radius:6px;background:var(--card);border:1px solid var(--cbd);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.92em;overflow-wrap:anywhere}
.hero.workshop{background:var(--card);border-color:var(--cbd)}
.assign .code-wrap{margin:2px 0 4px}
@media(max-width:760px){.code{font-size:calc(12px*var(--fs))}}
.fact,.fact-grid>*,.lesson,.assign{min-width:0}
.fact .logtbl{min-width:340px}
.hero.range{background:var(--card);border-color:var(--cbd)}
.hero.city{background:var(--card);border-color:var(--cbd)}
.hero.expedition{background:var(--card);border-color:var(--cbd)}
.cmp-wrap{overflow-x:auto;margin:14px 0;border:1px solid var(--line);border-radius:10px;background:var(--card)}
.cmp-wrap:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
.cmp{border-collapse:collapse;width:100%;min-width:560px;font-size:calc(13px*var(--fs))}
.cmp caption{text-align:left;padding:10px 12px;font-weight:700;color:var(--ink)}
.cmp th,.cmp td{padding:9px 12px;border-top:1px solid var(--line);text-align:left;vertical-align:top;line-height:1.6}
.cmp thead th{background:var(--card);font-size:calc(12px*var(--fs));color:var(--muted)}
.cmp tbody th{background:var(--card);color:var(--ink);white-space:nowrap}
@media(max-width:640px){.cmp{min-width:0}.cmp caption{display:block}.cmp thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.cmp tbody,.cmp tr,.cmp th,.cmp td{display:block}.cmp tr{margin-top:8px}.cmp tbody th{background:var(--card);white-space:normal}.cmp td{border-top:1px solid var(--line)}.cmp td::before{content:attr(data-label);display:block;font-size:11px;font-weight:700;color:var(--muted)}}

.hero.alliance{background:var(--card);border-color:var(--cbd)}

/* ===== PIXEL THEME M1「仕様どおり」＋ N「夜」（mock-ivory/tokens.css の値） ===== */
:root{--bgimg-d:url(assets/bg/bg-town-day-1600.webp);--bgimg-n:url(assets/bg/bg-town-night-1600.webp);--bgimg:var(--bgimg-d);
--sbg:#f6ead2;--stext:#2e1a0c;--ssel-bg:#f5a623;--ssel-text:#2e1a0c;--sbd:#2e1a0c;
--panel-bg:#f3e3bb;--panel-text:#2e1a0c;--panel-bd:#2e1a0c;--panel-bd2:#f5a623;--panel-out:#fff6e0;--panel-title:#2e1a0c;
--hero-bg:#3b2414;--hero-title:#ffbf45;--hero-text:#fbf0d6;--hero-bd:#f5a623;
--btn-bg:#f5a623;--btn-text:#2e1a0c;
--card-bg:#fffcf2;--card-text:#2e1a0c;--card-bd:#2e1a0c;
--choice-bg:#fffcf2;--choice-text:#2e1a0c;--choice-bd:#2e1a0c;--choice-sel-bg:#f5a623;--choice-sel-text:#2e1a0c;--choice-sel-bd:#2e1a0c;
--call-bg:#3b2414;--call-text:#fbf0d6;--call-title:#ffbf45;--call-bd:#f5a623;
--bubble-bg:#fffaf0;--bubble-text:#2e1a0c;--bubble-bd:#2e1a0c;
--bar-fill:#f5a623;--bar-empty:#e6d3a8;--bar-bd:#2e1a0c;
--top-bg:#fbf0d6;--top-text:#2e1a0c;--top-bd:#2e1a0c;--save-bg:#3b2414;--save-text:#fbf0d6;
--shadow:rgba(35,18,6,.55);--sh2:rgba(255,246,224,.75);
--pmuted:#4a3322;--phi:#6e3200;--cmuted:#4a3322;--chi:#6e3200;--cur:#2e1a0c;--focus:#2e1a0c;--ring:#fff6e0;--ovbg:rgba(35,18,6,.62);
--call-ok:#1f4a2c;--call-okb:#7be39a;--call-ng:#5a2218;--call-ngb:#ff9a8a;--call-wn:#5a4310;--call-wnb:#ffbf45;
--ink:#2e1a0c;--muted:#4a3322;--hi:#6e3200;--green:#6e3200;--card:#fffcf2;--cbd:#2e1a0c;--line:#2e1a0c;--gold:#f5a623;--paper:#f6ead2;
--px-font:"DotGothic16","Hiragino Maru Gothic ProN","Hiragino Kaku Gothic ProN","Yu Gothic",Meiryo,sans-serif;
--body-font:"DotGothic16","Hiragino Maru Gothic ProN","Hiragino Kaku Gothic ProN","Yu Gothic",Meiryo,sans-serif;
--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace}
html.night{--bgimg:var(--bgimg-n);--sbg:#2a1a0f;--stext:#f6ead2;--ssel-bg:#ffd84a;--ssel-text:#2a1a0f;--sbd:#e0b43a;
--panel-bg:#3a2514;--panel-text:#f6ead2;--panel-bd:#e0b43a;--panel-bd2:#8a6a1e;--panel-out:#1c1008;--panel-title:#ffd84a;
--hero-bg:#241509;--hero-title:#ffd84a;--hero-text:#f6ead2;--hero-bd:#e0b43a;--btn-bg:#ffd84a;--btn-text:#2a1a0f;
--card-bg:#241509;--card-text:#f6ead2;--card-bd:#e0b43a;--choice-bg:#4a3220;--choice-text:#f6ead2;--choice-bd:#e0b43a;--choice-sel-bg:#ffd84a;--choice-sel-text:#2a1a0f;--choice-sel-bd:#e0b43a;
--call-bg:#241509;--call-text:#f6ead2;--call-title:#ffd84a;--call-bd:#e0b43a;--bubble-bg:#4a3220;--bubble-text:#f6ead2;--bubble-bd:#e0b43a;
--bar-fill:#ffd84a;--bar-empty:#1c1008;--bar-bd:#e0b43a;--top-bg:#3a2514;--top-text:#f6ead2;--top-bd:#e0b43a;--save-bg:#ffd84a;--save-text:#2a1a0f;
--shadow:rgba(0,0,0,.7);--sh2:rgba(224,180,58,.5);--pmuted:#e9dcc0;--phi:#ffd84a;--cmuted:#e9dcc0;--chi:#ffd84a;--cur:#ffd84a;--focus:#ffd84a;--ring:#1c1008;--ovbg:rgba(0,0,0,.7);
--ink:#f6ead2;--muted:#e9dcc0;--hi:#ffd84a;--green:#ffd84a;--card:#241509;--cbd:#e0b43a;--line:#e0b43a;--gold:#ffd84a;--paper:#2a1a0f}
html{min-height:100%;color-scheme:light}
html.night{color-scheme:dark}
body{min-height:100vh;font-family:var(--body-font);letter-spacing:.04em;line-height:1.8;background:#3a6ea5 var(--bgimg) 62% top/cover no-repeat fixed;color:var(--panel-text)}
@media(max-width:760px){html{--bgimg-d:url(assets/bg/bg-town-day-900.webp);--bgimg-n:url(assets/bg/bg-town-night-900.webp)}body{background-position:70% top}}
img,canvas,svg image{image-rendering:pixelated}
.px-scene{image-rendering:pixelated}
h1,h2,h3,.eyebrow,.primary,.secondary,.nav button,.steps button,.chip,.pill,.tag,.quest-number,.quest-status,.stat b,.xp,.exercise-label,.fl-chip,.fl-opt,.text-btn,.nav-label,.brand strong,.lu-badge,.ts-h,.earned,.card-meta b,.cp-head,.ex-prog,.goal-streak b,.badge b,.mobile-brand,.section-head h2,.ex-big,.fl-term,button,input,select,textarea{font-family:var(--px-font)}
h1,h2,h3,.fl-term{font-weight:400;letter-spacing:.04em;overflow-wrap:anywhere}
.code,.code *,code.ic,pre,code{font-family:var(--mono);letter-spacing:0}
a{color:var(--phi);text-decoration:underline;text-underline-offset:3px}
.skip{color:#2e1a0c;background:#fff6e0}
/* ---- 文字の色：どの面でも、その面に合う色を変数で渡す ---- */
.lesson,.goal,.exam-entry,.chapter-prog,.world-row,.tsec,.journal-entry,.guide,.review-card,.tod,.fl-card,.lv-card,.fl-entry,.ov-card,.intro,.fl-set,.lib-search,.quest-card,.stat,.profile,.term,.cat-card,.fact,.predict,.badge,.trow,.cast-item,.ex-row,.ex-wrong,.ex-ctx,.assign,.notice,.rel-terms,.hist li,.log-notes li,details,.cmp-wrap,.logtbl,.diagram .node,.fl-defq,.fl-fb,.lib-note,.slots,.fl-mine,.permission-table,.tb,.fcard .ff,.login-sum,.mm-wrap,.bub,.hero,.callout,.choice,.chip,.fl-chip,.fl-opt,.conf,.fl-c,.final-quiz label,.ex-nav button,.steps button,.slot,.snapshot,.secondary,input:not([type=checkbox]):not([type=radio]),textarea,select,.field select,.field textarea,.search,.lib-filters select,.fl-sel,.assign select,.stamp .st-c,.gchk{--ink:var(--panel-text);--muted:var(--pmuted);--hi:var(--phi);--green:var(--phi);color:var(--ink)}
.quest-card,.stat,.profile,.term,.cat-card,.fact,.predict,.badge,.trow,.cast-item,.ex-row,.ex-wrong,.ex-ctx,.assign,.notice,.rel-terms,.hist li,.log-notes li,details,.cmp-wrap,.logtbl,.diagram .node,.fl-defq,.fl-fb,.lib-note,.slots,.fl-mine,.permission-table,.tb,.fcard .ff,.login-sum,.mm-wrap{--ink:var(--card-text);--muted:var(--cmuted);--hi:var(--chi);--green:var(--chi);color:var(--card-text)}
.bub{--ink:var(--bubble-text);--muted:var(--bubble-text);--hi:var(--chi);color:var(--bubble-text)}
.hero,.callout{--ink:var(--hero-text);--muted:var(--hero-text);--hi:var(--hero-title);--green:var(--hero-title);color:var(--hero-text)}
.choice,.chip,.fl-chip,.fl-opt,.conf,.fl-c,.final-quiz label,.ex-nav button,.steps button,.slot,.snapshot,.secondary,input:not([type=checkbox]):not([type=radio]),textarea,select,.field select,.field textarea,.search,.lib-filters select,.fl-sel,.assign select,.stamp .st-c,.gchk{--ink:var(--choice-text);--muted:var(--choice-text);--hi:var(--choice-text);--green:var(--choice-text);color:var(--choice-text)}
.lesson h1,.goal h1,.exam-entry h1,.chapter-prog h1,.world-row h1,.tsec h1,.journal-entry h1,.guide h1,.review-card h1,.tod h1,.fl-card h1,.lv-card h1,.fl-entry h1,.ov-card h1,.intro h1,.fl-set h1,.lib-search h1,.quest-card h1,.stat h1,.profile h1,.term h1,.cat-card h1,.fact h1,.predict h1,.badge h1,.trow h1,.cast-item h1,.ex-row h1,.ex-wrong h1,.ex-ctx h1,.assign h1,.notice h1,.rel-terms h1,.hist li h1,.log-notes li h1,details h1,.cmp-wrap h1,.logtbl h1,.diagram .node h1,.fl-defq h1,.fl-fb h1,.lib-note h1,.slots h1,.fl-mine h1,.permission-table h1,.tb h1,.fcard .ff h1,.login-sum h1,.mm-wrap h1,.bub h1,.hero h1,.callout h1,.choice h1,.chip h1,.fl-chip h1,.fl-opt h1,.conf h1,.fl-c h1,.final-quiz label h1,.ex-nav button h1,.steps button h1,.slot h1,.snapshot h1,.secondary h1,input:not([type=checkbox]):not([type=radio]) h1,textarea h1,select h1,.field select h1,.field textarea h1,.search h1,.lib-filters select h1,.fl-sel h1,.assign select h1,.stamp .st-c h1,.gchk h1,.lesson h2,.goal h2,.exam-entry h2,.chapter-prog h2,.world-row h2,.tsec h2,.journal-entry h2,.guide h2,.review-card h2,.tod h2,.fl-card h2,.lv-card h2,.fl-entry h2,.ov-card h2,.intro h2,.fl-set h2,.lib-search h2,.quest-card h2,.stat h2,.profile h2,.term h2,.cat-card h2,.fact h2,.predict h2,.badge h2,.trow h2,.cast-item h2,.ex-row h2,.ex-wrong h2,.ex-ctx h2,.assign h2,.notice h2,.rel-terms h2,.hist li h2,.log-notes li h2,details h2,.cmp-wrap h2,.logtbl h2,.diagram .node h2,.fl-defq h2,.fl-fb h2,.lib-note h2,.slots h2,.fl-mine h2,.permission-table h2,.tb h2,.fcard .ff h2,.login-sum h2,.mm-wrap h2,.bub h2,.hero h2,.callout h2,.choice h2,.chip h2,.fl-chip h2,.fl-opt h2,.conf h2,.fl-c h2,.final-quiz label h2,.ex-nav button h2,.steps button h2,.slot h2,.snapshot h2,.secondary h2,input:not([type=checkbox]):not([type=radio]) h2,textarea h2,select h2,.field select h2,.field textarea h2,.search h2,.lib-filters select h2,.fl-sel h2,.assign select h2,.stamp .st-c h2,.gchk h2,.lesson h3,.goal h3,.exam-entry h3,.chapter-prog h3,.world-row h3,.tsec h3,.journal-entry h3,.guide h3,.review-card h3,.tod h3,.fl-card h3,.lv-card h3,.fl-entry h3,.ov-card h3,.intro h3,.fl-set h3,.lib-search h3,.quest-card h3,.stat h3,.profile h3,.term h3,.cat-card h3,.fact h3,.predict h3,.badge h3,.trow h3,.cast-item h3,.ex-row h3,.ex-wrong h3,.ex-ctx h3,.assign h3,.notice h3,.rel-terms h3,.hist li h3,.log-notes li h3,details h3,.cmp-wrap h3,.logtbl h3,.diagram .node h3,.fl-defq h3,.fl-fb h3,.lib-note h3,.slots h3,.fl-mine h3,.permission-table h3,.tb h3,.fcard .ff h3,.login-sum h3,.mm-wrap h3,.bub h3,.hero h3,.callout h3,.choice h3,.chip h3,.fl-chip h3,.fl-opt h3,.conf h3,.fl-c h3,.final-quiz label h3,.ex-nav button h3,.steps button h3,.slot h3,.snapshot h3,.secondary h3,input:not([type=checkbox]):not([type=radio]) h3,textarea h3,select h3,.field select h3,.field textarea h3,.search h3,.lib-filters select h3,.fl-sel h3,.assign select h3,.stamp .st-c h3,.gchk h3,.lesson .eyebrow,.goal .eyebrow,.exam-entry .eyebrow,.chapter-prog .eyebrow,.world-row .eyebrow,.tsec .eyebrow,.journal-entry .eyebrow,.guide .eyebrow,.review-card .eyebrow,.tod .eyebrow,.fl-card .eyebrow,.lv-card .eyebrow,.fl-entry .eyebrow,.ov-card .eyebrow,.intro .eyebrow,.fl-set .eyebrow,.lib-search .eyebrow,.quest-card .eyebrow,.stat .eyebrow,.profile .eyebrow,.term .eyebrow,.cat-card .eyebrow,.fact .eyebrow,.predict .eyebrow,.badge .eyebrow,.trow .eyebrow,.cast-item .eyebrow,.ex-row .eyebrow,.ex-wrong .eyebrow,.ex-ctx .eyebrow,.assign .eyebrow,.notice .eyebrow,.rel-terms .eyebrow,.hist li .eyebrow,.log-notes li .eyebrow,details .eyebrow,.cmp-wrap .eyebrow,.logtbl .eyebrow,.diagram .node .eyebrow,.fl-defq .eyebrow,.fl-fb .eyebrow,.lib-note .eyebrow,.slots .eyebrow,.fl-mine .eyebrow,.permission-table .eyebrow,.tb .eyebrow,.fcard .ff .eyebrow,.login-sum .eyebrow,.mm-wrap .eyebrow,.bub .eyebrow,.hero .eyebrow,.callout .eyebrow,.choice .eyebrow,.chip .eyebrow,.fl-chip .eyebrow,.fl-opt .eyebrow,.conf .eyebrow,.fl-c .eyebrow,.final-quiz label .eyebrow,.ex-nav button .eyebrow,.steps button .eyebrow,.slot .eyebrow,.snapshot .eyebrow,.secondary .eyebrow,input:not([type=checkbox]):not([type=radio]) .eyebrow,textarea .eyebrow,select .eyebrow,.field select .eyebrow,.field textarea .eyebrow,.search .eyebrow,.lib-filters select .eyebrow,.fl-sel .eyebrow,.assign select .eyebrow,.stamp .st-c .eyebrow,.gchk .eyebrow,.lesson .exercise-label,.goal .exercise-label,.exam-entry .exercise-label,.chapter-prog .exercise-label,.world-row .exercise-label,.tsec .exercise-label,.journal-entry .exercise-label,.guide .exercise-label,.review-card .exercise-label,.tod .exercise-label,.fl-card .exercise-label,.lv-card .exercise-label,.fl-entry .exercise-label,.ov-card .exercise-label,.intro .exercise-label,.fl-set .exercise-label,.lib-search .exercise-label,.quest-card .exercise-label,.stat .exercise-label,.profile .exercise-label,.term .exercise-label,.cat-card .exercise-label,.fact .exercise-label,.predict .exercise-label,.badge .exercise-label,.trow .exercise-label,.cast-item .exercise-label,.ex-row .exercise-label,.ex-wrong .exercise-label,.ex-ctx .exercise-label,.assign .exercise-label,.notice .exercise-label,.rel-terms .exercise-label,.hist li .exercise-label,.log-notes li .exercise-label,details .exercise-label,.cmp-wrap .exercise-label,.logtbl .exercise-label,.diagram .node .exercise-label,.fl-defq .exercise-label,.fl-fb .exercise-label,.lib-note .exercise-label,.slots .exercise-label,.fl-mine .exercise-label,.permission-table .exercise-label,.tb .exercise-label,.fcard .ff .exercise-label,.login-sum .exercise-label,.mm-wrap .exercise-label,.bub .exercise-label,.hero .exercise-label,.callout .exercise-label,.choice .exercise-label,.chip .exercise-label,.fl-chip .exercise-label,.fl-opt .exercise-label,.conf .exercise-label,.fl-c .exercise-label,.final-quiz label .exercise-label,.ex-nav button .exercise-label,.steps button .exercise-label,.slot .exercise-label,.snapshot .exercise-label,.secondary .exercise-label,input:not([type=checkbox]):not([type=radio]) .exercise-label,textarea .exercise-label,select .exercise-label,.field select .exercise-label,.field textarea .exercise-label,.search .exercise-label,.lib-filters select .exercise-label,.fl-sel .exercise-label,.assign select .exercise-label,.stamp .st-c .exercise-label,.gchk .exercise-label{color:var(--panel-title)}
.quest-card h1,.stat h1,.profile h1,.term h1,.cat-card h1,.fact h1,.predict h1,.badge h1,.trow h1,.cast-item h1,.ex-row h1,.ex-wrong h1,.ex-ctx h1,.assign h1,.notice h1,.rel-terms h1,.hist li h1,.log-notes li h1,details h1,.cmp-wrap h1,.logtbl h1,.diagram .node h1,.fl-defq h1,.fl-fb h1,.lib-note h1,.slots h1,.fl-mine h1,.permission-table h1,.tb h1,.fcard .ff h1,.login-sum h1,.mm-wrap h1,.quest-card h2,.stat h2,.profile h2,.term h2,.cat-card h2,.fact h2,.predict h2,.badge h2,.trow h2,.cast-item h2,.ex-row h2,.ex-wrong h2,.ex-ctx h2,.assign h2,.notice h2,.rel-terms h2,.hist li h2,.log-notes li h2,details h2,.cmp-wrap h2,.logtbl h2,.diagram .node h2,.fl-defq h2,.fl-fb h2,.lib-note h2,.slots h2,.fl-mine h2,.permission-table h2,.tb h2,.fcard .ff h2,.login-sum h2,.mm-wrap h2,.quest-card h3,.stat h3,.profile h3,.term h3,.cat-card h3,.fact h3,.predict h3,.badge h3,.trow h3,.cast-item h3,.ex-row h3,.ex-wrong h3,.ex-ctx h3,.assign h3,.notice h3,.rel-terms h3,.hist li h3,.log-notes li h3,details h3,.cmp-wrap h3,.logtbl h3,.diagram .node h3,.fl-defq h3,.fl-fb h3,.lib-note h3,.slots h3,.fl-mine h3,.permission-table h3,.tb h3,.fcard .ff h3,.login-sum h3,.mm-wrap h3,.quest-card .stat b,.stat .stat b,.profile .stat b,.term .stat b,.cat-card .stat b,.fact .stat b,.predict .stat b,.badge .stat b,.trow .stat b,.cast-item .stat b,.ex-row .stat b,.ex-wrong .stat b,.ex-ctx .stat b,.assign .stat b,.notice .stat b,.rel-terms .stat b,.hist li .stat b,.log-notes li .stat b,details .stat b,.cmp-wrap .stat b,.logtbl .stat b,.diagram .node .stat b,.fl-defq .stat b,.fl-fb .stat b,.lib-note .stat b,.slots .stat b,.fl-mine .stat b,.permission-table .stat b,.tb .stat b,.fcard .ff .stat b,.login-sum .stat b,.mm-wrap .stat b,.quest-card .eyebrow,.stat .eyebrow,.profile .eyebrow,.term .eyebrow,.cat-card .eyebrow,.fact .eyebrow,.predict .eyebrow,.badge .eyebrow,.trow .eyebrow,.cast-item .eyebrow,.ex-row .eyebrow,.ex-wrong .eyebrow,.ex-ctx .eyebrow,.assign .eyebrow,.notice .eyebrow,.rel-terms .eyebrow,.hist li .eyebrow,.log-notes li .eyebrow,details .eyebrow,.cmp-wrap .eyebrow,.logtbl .eyebrow,.diagram .node .eyebrow,.fl-defq .eyebrow,.fl-fb .eyebrow,.lib-note .eyebrow,.slots .eyebrow,.fl-mine .eyebrow,.permission-table .eyebrow,.tb .eyebrow,.fcard .ff .eyebrow,.login-sum .eyebrow,.mm-wrap .eyebrow,.quest-card .exercise-label,.stat .exercise-label,.profile .exercise-label,.term .exercise-label,.cat-card .exercise-label,.fact .exercise-label,.predict .exercise-label,.badge .exercise-label,.trow .exercise-label,.cast-item .exercise-label,.ex-row .exercise-label,.ex-wrong .exercise-label,.ex-ctx .exercise-label,.assign .exercise-label,.notice .exercise-label,.rel-terms .exercise-label,.hist li .exercise-label,.log-notes li .exercise-label,details .exercise-label,.cmp-wrap .exercise-label,.logtbl .exercise-label,.diagram .node .exercise-label,.fl-defq .exercise-label,.fl-fb .exercise-label,.lib-note .exercise-label,.slots .exercise-label,.fl-mine .exercise-label,.permission-table .exercise-label,.tb .exercise-label,.fcard .ff .exercise-label,.login-sum .exercise-label,.mm-wrap .exercise-label{color:var(--card-text)}
.bub b{color:var(--bubble-text)}
.hero h1,.callout h1,.hero h2,.callout h2,.hero h3,.callout h3,.hero .eyebrow,.callout .eyebrow,.hero b,.callout b{color:var(--hero-title)}
.choice h1,.chip h1,.fl-chip h1,.fl-opt h1,.conf h1,.fl-c h1,.final-quiz label h1,.ex-nav button h1,.steps button h1,.slot h1,.snapshot h1,.secondary h1,input:not([type=checkbox]):not([type=radio]) h1,textarea h1,select h1,.field select h1,.field textarea h1,.search h1,.lib-filters select h1,.fl-sel h1,.assign select h1,.stamp .st-c h1,.gchk h1,.choice h2,.chip h2,.fl-chip h2,.fl-opt h2,.conf h2,.fl-c h2,.final-quiz label h2,.ex-nav button h2,.steps button h2,.slot h2,.snapshot h2,.secondary h2,input:not([type=checkbox]):not([type=radio]) h2,textarea h2,select h2,.field select h2,.field textarea h2,.search h2,.lib-filters select h2,.fl-sel h2,.assign select h2,.stamp .st-c h2,.gchk h2,.choice h3,.chip h3,.fl-chip h3,.fl-opt h3,.conf h3,.fl-c h3,.final-quiz label h3,.ex-nav button h3,.steps button h3,.slot h3,.snapshot h3,.secondary h3,input:not([type=checkbox]):not([type=radio]) h3,textarea h3,select h3,.field select h3,.field textarea h3,.search h3,.lib-filters select h3,.fl-sel h3,.assign select h3,.stamp .st-c h3,.gchk h3{color:var(--choice-text)}
.lesson a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.goal a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.exam-entry a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.chapter-prog a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.world-row a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.tsec a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.journal-entry a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.guide a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.review-card a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.tod a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-card a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.lv-card a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-entry a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.ov-card a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.intro a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-set a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.lib-search a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.quest-card a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.stat a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.profile a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.term a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.cat-card a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fact a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.predict a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.badge a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.trow a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.cast-item a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.ex-row a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.ex-wrong a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.ex-ctx a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.assign a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.notice a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.rel-terms a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.hist li a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.log-notes li a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),details a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.cmp-wrap a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.logtbl a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.diagram .node a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-defq a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-fb a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.lib-note a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.slots a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-mine a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.permission-table a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.tb a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fcard .ff a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.login-sum a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.mm-wrap a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.bub a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.hero a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.callout a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.choice a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.chip a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-chip a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-opt a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.conf a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-c a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.final-quiz label a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.ex-nav button a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.steps button a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.slot a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.snapshot a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.secondary a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),input:not([type=checkbox]):not([type=radio]) a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),textarea a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),select a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.field select a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.field textarea a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.search a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.lib-filters select a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-sel a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.assign select a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.stamp .st-c a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.gchk a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand){color:var(--phi)}
.quest-card a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.stat a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.profile a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.term a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.cat-card a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fact a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.predict a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.badge a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.trow a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.cast-item a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.ex-row a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.ex-wrong a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.ex-ctx a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.assign a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.notice a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.rel-terms a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.hist li a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.log-notes li a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),details a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.cmp-wrap a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.logtbl a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.diagram .node a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-defq a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-fb a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.lib-note a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.slots a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fl-mine a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.permission-table a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.tb a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.fcard .ff a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.login-sum a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.mm-wrap a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand){color:var(--chi)}
.hero a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand),.callout a:not(.chip):not(.primary):not(.secondary):not(.trow):not(.brand){color:var(--hero-title)}
.hero .il,.callout .il{color:var(--hero-title)}
.callout.warning a,.callout.error a,.callout.success a{color:#fbf0d6!important}
.choice a,.chip a,.fl-chip a,.fl-opt a,.conf a,.fl-c a,.final-quiz label a,.ex-nav button a,.steps button a,.slot a,.snapshot a,.secondary a,input:not([type=checkbox]):not([type=radio]) a,textarea a,select a,.field select a,.field textarea a,.search a,.lib-filters select a,.fl-sel a,.assign select a,.stamp .st-c a,.gchk a{color:var(--choice-text)}
.lesson .muted,.goal .muted,.exam-entry .muted,.chapter-prog .muted,.world-row .muted,.tsec .muted,.journal-entry .muted,.guide .muted,.review-card .muted,.tod .muted,.fl-card .muted,.lv-card .muted,.fl-entry .muted,.ov-card .muted,.intro .muted,.fl-set .muted,.lib-search .muted,.quest-card .muted,.stat .muted,.profile .muted,.term .muted,.cat-card .muted,.fact .muted,.predict .muted,.badge .muted,.trow .muted,.cast-item .muted,.ex-row .muted,.ex-wrong .muted,.ex-ctx .muted,.assign .muted,.notice .muted,.rel-terms .muted,.hist li .muted,.log-notes li .muted,details .muted,.cmp-wrap .muted,.logtbl .muted,.diagram .node .muted,.fl-defq .muted,.fl-fb .muted,.lib-note .muted,.slots .muted,.fl-mine .muted,.permission-table .muted,.tb .muted,.fcard .ff .muted,.login-sum .muted,.mm-wrap .muted,.bub .muted,.hero .muted,.callout .muted,.choice .muted,.chip .muted,.fl-chip .muted,.fl-opt .muted,.conf .muted,.fl-c .muted,.final-quiz label .muted,.ex-nav button .muted,.steps button .muted,.slot .muted,.snapshot .muted,.secondary .muted,input:not([type=checkbox]):not([type=radio]) .muted,textarea .muted,select .muted,.field select .muted,.field textarea .muted,.search .muted,.lib-filters select .muted,.fl-sel .muted,.assign select .muted,.stamp .st-c .muted,.gchk .muted,.lesson .small,.goal .small,.exam-entry .small,.chapter-prog .small,.world-row .small,.tsec .small,.journal-entry .small,.guide .small,.review-card .small,.tod .small,.fl-card .small,.lv-card .small,.fl-entry .small,.ov-card .small,.intro .small,.fl-set .small,.lib-search .small,.quest-card .small,.stat .small,.profile .small,.term .small,.cat-card .small,.fact .small,.predict .small,.badge .small,.trow .small,.cast-item .small,.ex-row .small,.ex-wrong .small,.ex-ctx .small,.assign .small,.notice .small,.rel-terms .small,.hist li .small,.log-notes li .small,details .small,.cmp-wrap .small,.logtbl .small,.diagram .node .small,.fl-defq .small,.fl-fb .small,.lib-note .small,.slots .small,.fl-mine .small,.permission-table .small,.tb .small,.fcard .ff .small,.login-sum .small,.mm-wrap .small,.bub .small,.hero .small,.callout .small,.choice .small,.chip .small,.fl-chip .small,.fl-opt .small,.conf .small,.fl-c .small,.final-quiz label .small,.ex-nav button .small,.steps button .small,.slot .small,.snapshot .small,.secondary .small,input:not([type=checkbox]):not([type=radio]) .small,textarea .small,select .small,.field select .small,.field textarea .small,.search .small,.lib-filters select .small,.fl-sel .small,.assign select .small,.stamp .st-c .small,.gchk .small,.lesson small,.goal small,.exam-entry small,.chapter-prog small,.world-row small,.tsec small,.journal-entry small,.guide small,.review-card small,.tod small,.fl-card small,.lv-card small,.fl-entry small,.ov-card small,.intro small,.fl-set small,.lib-search small,.quest-card small,.stat small,.profile small,.term small,.cat-card small,.fact small,.predict small,.badge small,.trow small,.cast-item small,.ex-row small,.ex-wrong small,.ex-ctx small,.assign small,.notice small,.rel-terms small,.hist li small,.log-notes li small,details small,.cmp-wrap small,.logtbl small,.diagram .node small,.fl-defq small,.fl-fb small,.lib-note small,.slots small,.fl-mine small,.permission-table small,.tb small,.fcard .ff small,.login-sum small,.mm-wrap small,.bub small,.hero small,.callout small,.choice small,.chip small,.fl-chip small,.fl-opt small,.conf small,.fl-c small,.final-quiz label small,.ex-nav button small,.steps button small,.slot small,.snapshot small,.secondary small,input:not([type=checkbox]):not([type=radio]) small,textarea small,select small,.field select small,.field textarea small,.search small,.lib-filters select small,.fl-sel small,.assign select small,.stamp .st-c small,.gchk small,.lesson p.muted,.goal p.muted,.exam-entry p.muted,.chapter-prog p.muted,.world-row p.muted,.tsec p.muted,.journal-entry p.muted,.guide p.muted,.review-card p.muted,.tod p.muted,.fl-card p.muted,.lv-card p.muted,.fl-entry p.muted,.ov-card p.muted,.intro p.muted,.fl-set p.muted,.lib-search p.muted,.quest-card p.muted,.stat p.muted,.profile p.muted,.term p.muted,.cat-card p.muted,.fact p.muted,.predict p.muted,.badge p.muted,.trow p.muted,.cast-item p.muted,.ex-row p.muted,.ex-wrong p.muted,.ex-ctx p.muted,.assign p.muted,.notice p.muted,.rel-terms p.muted,.hist li p.muted,.log-notes li p.muted,details p.muted,.cmp-wrap p.muted,.logtbl p.muted,.diagram .node p.muted,.fl-defq p.muted,.fl-fb p.muted,.lib-note p.muted,.slots p.muted,.fl-mine p.muted,.permission-table p.muted,.tb p.muted,.fcard .ff p.muted,.login-sum p.muted,.mm-wrap p.muted,.bub p.muted,.hero p.muted,.callout p.muted,.choice p.muted,.chip p.muted,.fl-chip p.muted,.fl-opt p.muted,.conf p.muted,.fl-c p.muted,.final-quiz label p.muted,.ex-nav button p.muted,.steps button p.muted,.slot p.muted,.snapshot p.muted,.secondary p.muted,input:not([type=checkbox]):not([type=radio]) p.muted,textarea p.muted,select p.muted,.field select p.muted,.field textarea p.muted,.search p.muted,.lib-filters select p.muted,.fl-sel p.muted,.assign select p.muted,.stamp .st-c p.muted,.gchk p.muted{color:var(--muted)}
/* ---- 大パネル：太い茶色のドット枠＋内側の橙の線＋外側のふち＋段の影（背景の絵から浮かせる） ---- */
.lesson,.goal,.exam-entry,.chapter-prog,.world-row,.tsec,.journal-entry,.guide,.review-card,.tod,.fl-card,.lv-card,.fl-entry,.ov-card,.intro,.fl-set,.lib-search{background:var(--panel-bg);color:var(--panel-text);border:4px solid var(--panel-bd);border-radius:0;box-shadow:inset 0 0 0 3px var(--panel-out),inset 0 0 0 5px var(--panel-bd2),0 0 0 3px var(--sh2),8px 10px 0 var(--shadow)}
.ov-card{box-shadow:inset 0 0 0 3px var(--panel-out),inset 0 0 0 5px var(--panel-bd2),0 0 0 3px var(--sh2),8px 10px 0 var(--shadow)}
.intro{padding:14px 18px;margin-bottom:18px}
.lesson{padding:28px}
.hero,.callout{background:var(--hero-bg);border:4px solid var(--hero-bd);border-radius:0;box-shadow:0 0 0 3px var(--sh2),8px 10px 0 var(--shadow)}
.hero{outline:3px solid var(--panel-text);outline-offset:-7px;min-height:380px}
.hero.village{background:var(--card);border-color:var(--cbd)}
.hero.village,.hero.town,.hero.workshop,.hero.range,.hero.city,.hero.expedition,.hero.alliance{background:var(--hero-bg);border-color:var(--hero-bd)}
.hero p,.hero .under{color:var(--hero-text)}
.hero .tag{background:var(--btn-bg);color:var(--btn-text);border-radius:0;letter-spacing:.06em}
.callout{border:3px solid var(--call-bd);box-shadow:4px 4px 0 rgba(0,0,0,.3);color:var(--call-text);background:var(--call-bg)}
.callout b,.callout h3,.callout strong{color:var(--call-title)}
.callout.warning{background:var(--call-wn);border-color:var(--call-wnb)}
.callout.error{background:var(--call-ng);border-color:var(--call-ngb)}
.callout.success{background:var(--call-ok);border-color:var(--call-okb)}
.callout.warning,.callout.error,.callout.success{color:#fbf0d6}
.callout.warning b,.callout.error b,.callout.success b{color:#fbf0d6}
/* ---- 小カード・選択肢・吹き出し ---- */
.quest-card,.stat,.profile,.term,.cat-card,.fact,.predict,.badge,.trow,.cast-item,.ex-row,.ex-wrong,.ex-ctx,.assign,.notice,.rel-terms,.hist li,.log-notes li,details,.cmp-wrap,.logtbl,.diagram .node,.fl-defq,.fl-fb,.lib-note,.slots,.fl-mine,.permission-table,.tb,.fcard .ff,.login-sum,.mm-wrap{background:var(--card-bg);color:var(--card-text);border:3px solid var(--card-bd);border-radius:0;box-shadow:inset 0 0 0 2px var(--panel-bd2)}
.quest-card,.stat,.cat-card,.term,.trow,.badge,.cast-item,.hist li,.notice,.profile{box-shadow:inset 0 0 0 2px var(--panel-bd2),0 0 0 3px var(--sh2),5px 6px 0 var(--shadow)}
.mm-wrap{background:var(--card-bg)}
.bub{background:var(--bubble-bg);color:var(--bubble-text);border:3px solid var(--bubble-bd);border-radius:0;box-shadow:3px 3px 0 rgba(0,0,0,.3)}
.bub b{display:block;font-weight:400;font-size:12px;border-bottom:2px dotted currentColor;margin-bottom:3px}
.bub p,.card-body p{color:inherit}
.choice,.chip,.fl-chip,.fl-opt,.conf,.fl-c,.final-quiz label,.ex-nav button,.steps button,.slot,.snapshot,.secondary,input:not([type=checkbox]):not([type=radio]),textarea,select,.field select,.field textarea,.search,.lib-filters select,.fl-sel,.assign select,.stamp .st-c,.gchk{background:var(--choice-bg);color:var(--choice-text);border:3px solid var(--choice-bd);border-radius:0;box-shadow:3px 3px 0 rgba(0,0,0,.3)}
.choice.selected,.fl-opt[aria-pressed=true],.fl-chip[aria-pressed=true],.chip.on,.conf.selected,.conf:has(input:checked),.ex-nav button.cur,.steps button.active,.snapshot:has(input:checked),.final-quiz label:has(input:checked),.tut-h,.nav button.active{background:var(--choice-sel-bg);color:var(--choice-sel-text);border-color:var(--choice-sel-bd);box-shadow:inset 0 0 0 2px var(--choice-sel-text),3px 3px 0 rgba(0,0,0,.3)}
.choice.selected small,.choice.selected span,.choice.selected b,.choice.selected strong,.choice.selected em,.fl-opt[aria-pressed=true] small,.fl-opt[aria-pressed=true] span,.fl-opt[aria-pressed=true] b,.fl-opt[aria-pressed=true] strong,.fl-opt[aria-pressed=true] em,.fl-chip[aria-pressed=true] small,.fl-chip[aria-pressed=true] span,.fl-chip[aria-pressed=true] b,.fl-chip[aria-pressed=true] strong,.fl-chip[aria-pressed=true] em,.chip.on small,.chip.on span,.chip.on b,.chip.on strong,.chip.on em,.conf.selected small,.conf.selected span,.conf.selected b,.conf.selected strong,.conf.selected em,.conf:has(input:checked) small,.conf:has(input:checked) span,.conf:has(input:checked) b,.conf:has(input:checked) strong,.conf:has(input:checked) em,.ex-nav button.cur small,.ex-nav button.cur span,.ex-nav button.cur b,.ex-nav button.cur strong,.ex-nav button.cur em,.steps button.active small,.steps button.active span,.steps button.active b,.steps button.active strong,.steps button.active em,.snapshot:has(input:checked) small,.snapshot:has(input:checked) span,.snapshot:has(input:checked) b,.snapshot:has(input:checked) strong,.snapshot:has(input:checked) em,.final-quiz label:has(input:checked) small,.final-quiz label:has(input:checked) span,.final-quiz label:has(input:checked) b,.final-quiz label:has(input:checked) strong,.final-quiz label:has(input:checked) em,.tut-h small,.tut-h span,.tut-h b,.tut-h strong,.tut-h em,.nav button.active small,.nav button.active span,.nav button.active b,.nav button.active strong,.nav button.active em{color:var(--choice-sel-text)}
.tut-h{background:var(--btn-bg);color:var(--btn-text);border-color:var(--btn-text)}
.ov-card h3.tut-h,.dlg h3.tut-h{color:var(--btn-text)}
.story-card{background:transparent;border:2px dashed var(--panel-bd);border-radius:0;box-shadow:none;color:var(--panel-text)}
.pill{background:var(--save-bg);color:var(--save-text);border:3px solid var(--top-bd);border-radius:0;box-shadow:3px 3px 0 var(--shadow)}
.pill.hot{background:#8a1d2f;border-color:#ffb0bb;color:#fff}
/* ---- 左のメニュー（象牙色）・上の帯・スマホの下のメニュー ---- */
.sidebar{background:var(--sbg);color:var(--stext);border:0;border-right:4px solid var(--sbd);border-radius:0;box-shadow:inset -3px 0 0 var(--panel-bd2),6px 0 0 var(--shadow)}
.sidebar .brand span,.sidebar .side-note,.sidebar .nav-label,.sidebar .brand strong{color:var(--stext)}
.nav-label{color:var(--stext);letter-spacing:.1em}
.brand strong{font-size:calc(17px*var(--fs));letter-spacing:0;white-space:nowrap;font-weight:400}
.brand-mark{background:var(--card-bg);clip-path:none;border:3px solid var(--sbd);border-radius:0;width:50px;height:50px;display:grid;place-items:center}
.brand-mark .pxi{width:42px;height:42px}.mobile-brand .brand-mark{width:34px;height:34px}.mobile-brand .brand-mark .pxi{width:26px;height:26px}
.mobile-brand{color:var(--stext)}
.nav button{border-radius:0;color:var(--stext);position:relative;background:transparent;border:3px solid transparent;box-shadow:none;display:flex;align-items:center;gap:10px;padding:8px 10px}
.nav button:hover{background:var(--card-bg);border-color:var(--sbd)}
.nav button.active{background:var(--ssel-bg);color:var(--ssel-text);border:3px solid var(--sbd);box-shadow:3px 3px 0 var(--sbd)}
.nav button.active::after{content:'▶';position:absolute;right:9px;font-size:12px}
.nav .pxn{width:20px;height:20px;background:currentColor;-webkit-mask:var(--ic) center/contain no-repeat;mask:var(--ic) center/contain no-repeat;image-rendering:pixelated;flex:none;display:inline-block}
.profile{margin-top:10px}
.topbar{background:transparent;border:0;box-shadow:none;height:auto;padding:16px 28px 0;gap:12px;align-items:flex-start}
.crumb{flex:1;max-width:740px;margin-left:6px;background:var(--top-bg);color:var(--top-text);border:3px solid var(--top-bd);padding:3px 14px;font-size:13px;box-shadow:3px 3px 0 var(--shadow)}
.crumb span{color:var(--top-text)}
.top-pills{gap:10px;align-items:flex-start}
.xp{background:var(--top-bg);color:var(--top-text);border:3px solid var(--top-bd);padding:3px 10px;font-size:13px;box-shadow:3px 3px 0 var(--shadow)}
.top-pills .pill{padding:3px 10px;font-size:13px}
/* ---- ボタン：橙の主ボタン。▶は押せる所に出て、フォーカスと選択中で点滅 ---- */
.primary{background:var(--btn-bg);color:var(--btn-text);border:3px solid var(--panel-text);border-radius:0;box-shadow:3px 3px 0 rgba(0,0,0,.45);position:relative;padding-left:26px}
.hero .primary{border-color:var(--hero-bd)}
.primary:hover{filter:brightness(1.08)}
.secondary{position:relative;padding-left:26px}
.secondary:hover,.choice:hover,.chip:hover,.fl-opt:hover,.fl-chip:hover,.fl-c:hover,.ex-nav button:hover,.steps button:hover{background:var(--choice-sel-bg);color:var(--choice-sel-text)}
.text-btn{color:var(--phi);background:none}
.primary::before,.secondary::before,.choice::before,.fl-opt::before,.fl-chip::before,.nav button::before,.conf::before{content:"";position:absolute;left:9px;top:50%;margin-top:-6px;border:6px solid transparent;border-left:9px solid var(--cur);border-right:0;visibility:hidden;pointer-events:none}
.nav button::before{display:none}
.primary::before{border-left-color:var(--btn-text)}
.choice:hover::before,.fl-opt:hover::before,.fl-chip:hover::before,.secondary:hover::before,.choice.selected::before,.fl-opt[aria-pressed=true]::before,.fl-chip[aria-pressed=true]::before{border-left-color:var(--choice-sel-text)}
.primary:hover::before,.secondary:hover::before,.choice:hover::before,.fl-opt:hover::before,.fl-chip:hover::before{visibility:visible}
.primary:focus-visible::before,.secondary:focus-visible::before,.choice:focus-visible::before,.fl-opt:focus-visible::before,.fl-chip:focus-visible::before,.choice.selected::before,.fl-chip[aria-pressed=true]::before{visibility:visible;animation:pxblink 1s steps(2) infinite}
.choice,.fl-opt,.fl-chip{position:relative;padding-left:30px}
.fl-chip{padding-left:28px}
.choice span.num{background:var(--choice-text);color:var(--choice-bg);border-radius:0}
.choice.selected span.num{background:var(--choice-sel-text);color:var(--choice-sel-bg)}
.conf::before{display:none}
.final-quiz label:has(input:checked) input,.snapshot:has(input:checked) input{accent-color:var(--choice-sel-text)}
.final-quiz input,.snapshot input,.check-row input,.permission-table input{accent-color:var(--choice-text)}
.steps button{font-size:calc(13px*var(--fs))}
.chip.t1,.chip.t3{background:var(--choice-bg);color:var(--choice-text)}
.ex-nav button.done{background:var(--call-ok);border-color:var(--call-okb);color:#fbf0d6}
.gchk.on,.stamp.on .st-c{background:var(--choice-sel-bg);border-color:var(--choice-sel-bd);color:var(--choice-sel-text)}.stamp.today .st-c{border-width:4px}
.stamp,.stamp .st-w{color:var(--panel-text)}
/* ---- 経験値・HPのような目盛りバー ---- */
.bar,.fl-bar{height:14px;border:2px solid var(--bar-bd);border-radius:0;background:var(--bar-empty);padding:1px}
.bar span,.fl-bar span{border-radius:0;background:repeating-linear-gradient(90deg,var(--bar-fill) 0 8px,transparent 8px 10px);transition:width .45s steps(10)}
.hm{border-radius:0;background:var(--bar-empty);color:var(--card-text)}.hm.l1{background:#f9d98a;color:#2e1a0c}.hm.l2{background:#f5a623;color:#2e1a0c}.hm.l3{background:#6a3800;color:#fbf0d6}.hm.today{outline:2px solid var(--panel-text)}
html.night .hm{color:#f6ead2}html.night .hm.l1{background:#5a430f;color:#fff6e0}html.night .hm.l2{background:#e0b43a;color:#2a1a0f}html.night .hm.l3{background:#ffd84a;color:#2a1a0f}
/* ---- クエストカード・地図・タイトル ---- */
.quest-card{overflow:hidden}
.quest-card:hover,.quest-card:focus-visible{transform:translateY(-3px)}
.quest-art{height:124px;background:var(--px-grass-g,#4eab52);background-size:48px 48px;border-bottom:3px solid var(--card-bd);image-rendering:pixelated}
.quest-art.warm{background-image:var(--px-grass-w,none);background-color:#c6ae64}
.quest-art.green{background-color:#4eab52}
.quest-art .px-b{width:96px;height:96px;position:relative;z-index:1}
.quest-number{color:var(--btn-text);background:var(--btn-bg);padding:0 6px;border-radius:0;z-index:2;font-family:var(--px-font)}
.quest-status{background:var(--save-bg);color:var(--save-text);border:2px solid var(--top-bd);border-radius:0;z-index:2}
.card-meta{color:var(--card-text)}.card-meta b{color:var(--chi)}
.hero-art{margin:14px 14px 14px 0;padding:0;align-self:center;aspect-ratio:3/2;height:auto}.hero-art .map-art{inset:0;width:100%;height:100%;min-height:0}
.map-art{filter:none;overflow:hidden;border:3px solid var(--hero-text);border-radius:0;background:#2a7fd0}
html.night .map-art{filter:brightness(.52) saturate(.75) contrast(1.08)}
.map-hero{animation:pxbob 1s steps(2) infinite}
.title-scene{position:relative;border:4px solid var(--panel-bd);border-radius:0;overflow:hidden;margin:0 0 22px;box-shadow:inset 0 0 0 3px var(--panel-out),0 0 0 3px var(--sh2),8px 10px 0 var(--shadow);background:#7ec8f8;aspect-ratio:3/1}
@media(max-width:760px){.title-scene{aspect-ratio:2/1}}
.px-scene{display:block;width:100%;height:100%;object-fit:cover;object-position:center 50%}
.ts-logo{position:absolute;left:0;right:0;top:4%;bottom:4%;z-index:1;display:flex;flex-direction:column;justify-content:space-between;align-items:center;text-align:center;padding:0 8px;pointer-events:none}
.ts-h{font-size:clamp(26px,7.6vw,56px);line-height:1.15;color:#fff4c8;letter-spacing:.06em;text-shadow:0 3px 0 #2e1a0c,0 -2px 0 #2e1a0c,3px 0 0 #2e1a0c,-3px 0 0 #2e1a0c,3px 3px 0 #2e1a0c}
.ts-sub{display:inline-block;padding:3px 10px;background:#2e1a0c;border:2px solid #ffd36b;margin:6px 0 0;font:400 clamp(12px,3.2vw,19px)/1.4 var(--px-font);color:#fff;text-shadow:1px 1px 0 #2e1a0c,-1px 1px 0 #2e1a0c,1px -1px 0 #2e1a0c,-1px -1px 0 #2e1a0c}
.season,.dot{color:var(--panel-text)}.dot{background:var(--panel-text);border-radius:0}
.intro p{color:var(--pmuted)}
.mm text{font-family:var(--px-font)}
.goal.done{border-color:var(--panel-bd)}.goal-streak b{color:var(--phi)}
.exam-entry.ready,.fl-entry{background:var(--panel-bg)}
.world-row .world-num{background:var(--btn-bg);color:var(--btn-text);border:3px solid var(--card-bd);border-radius:0;font-family:var(--px-font)}
.ch-switch .fl-chip{border-radius:0}
/* ---- 人物・物語の窓 ---- */
.av{width:56px;height:56px;border-radius:0;background:var(--card-bg);border:3px solid var(--sbd);overflow:hidden;font-family:var(--px-font);color:var(--card-text)}
.av-pt{background:var(--card-bg)}
.av .pxi,.av-owl .pxi{width:100%;height:100%;display:block}
.owl{width:96px;height:96px;object-fit:contain;flex-shrink:0}
.celebrate .owl{width:128px;height:128px}.guide .owl{width:84px;height:84px}
.ov{background:var(--ovbg)}
.ov-card{max-width:520px}
.nar{color:var(--pmuted);font-family:var(--px-font)}
.dlg .dl:last-child .bub::after{content:"";display:inline-block;margin-left:8px;border:6px solid transparent;border-top:9px solid var(--bubble-text);border-bottom:0;animation:pxblink 1s steps(2) infinite;vertical-align:middle}
.lu-badge{background:var(--btn-bg);color:var(--btn-text);border:4px solid var(--panel-text);border-radius:0}
.lu-title,.earned{color:var(--phi)}
#toast{background:var(--top-bg);color:var(--top-text);border:3px solid var(--top-bd);border-radius:0;font-family:var(--px-font);box-shadow:4px 4px 0 var(--shadow)}
/* ---- フォーム・表・コード ---- */
::placeholder{color:#6a5238}
html.night ::placeholder{color:#c9b998}
.permission-table th,.permission-table td{border-bottom:1px solid var(--card-bd)}
.logtbl th,.cmp thead th{background:var(--bar-empty);color:var(--card-text)}.cmp tbody th{background:var(--card-bg);color:var(--card-text)}
html.night .logtbl th,html.night .cmp thead th{background:#4a3220}
.logtbl,.cmp-wrap,.cmp{background:var(--card-bg);color:var(--card-text)}
.logtbl td,.cmp td{color:var(--card-text)}
.slots{background:var(--bar-empty);border-style:dashed}.slot.empty{background:var(--choice-bg);color:var(--choice-text);border-style:dashed}
.arrow{color:var(--phi)}
code.ic{background:var(--bar-empty);border:1px solid var(--card-bd);color:var(--card-text)}
html.night code.ic{background:#4a3220}
.code{background:#2a1a0f;color:#fbf0d6;border:3px solid var(--card-bd);border-radius:0}
.code .cl::before{color:#c9b998}
summary{color:inherit}
.tb,.tb.t1,.tb.t2,.tb.t3,.tb.gov,.tb.yt{background:var(--bar-empty);color:var(--card-text);border:1px solid var(--card-bd);box-shadow:none}
html.night .tb,html.night .tb.t1,html.night .tb.t2,html.night .tb.t3{background:#4a3220;color:#f6ead2}
.fcard .ff{background:var(--card-bg);border:3px solid var(--card-bd);color:var(--card-text)}.fcard .fbk{background:var(--choice-sel-bg);color:var(--choice-sel-text);border:3px solid var(--choice-sel-bd)}
.fl-gold{color:var(--phi)}.fl-plain{color:var(--card-text)}.fl-n{background:var(--btn-bg);color:var(--btn-text)}
.fl-c.ok,.fl-fb.ok,.assign.ok,.snapshot.ok,.log-notes li.ok,.ex-ok{background:var(--call-ok);border-color:var(--call-okb);color:#fbf0d6}
.fl-c.ng,.fl-fb.ng,.assign.ng,.snapshot.ng,.log-notes li.ng,.ex-row.bad{background:var(--call-ng);border-color:var(--call-ngb);color:#fbf0d6}
.ex-row.bad span,.ex-row.bad b,.ex-row.bad p{color:#fbf0d6!important}
.fl-c.ok span,.fl-c.ng span,.snapshot.ok *,.snapshot.ng *,.fl-fb.ok *,.fl-fb.ng *{color:#fbf0d6}
.logtbl tr.ok td,.logtbl tr.ok:has(input) td,.logtbl tr:has(input:checked) td{background:var(--call-ok);color:#fbf0d6}
.logtbl tr.ng td,.logtbl tr.ng:has(input) td{background:var(--call-ng);color:#fbf0d6}
.assign.ok .assign-note,.assign.ng .assign-note,.log-notes li.ok,.log-notes li.ng{color:#fbf0d6}
.mastery span{background:var(--bar-empty);color:var(--card-text)}.mastery span.pending{background:var(--card-bg);color:var(--card-text)}
html.night .mastery span{background:#4a3220;color:#f6ead2}
.badge.off{opacity:.92}.badge em{color:var(--chi)}.badge.off b,.badge.off em{color:var(--card-text)}
.lib-note{background:var(--call-wn);border-color:var(--call-wnb);color:#fbf0d6}
.login-sum .goal-streak b,.login-sum .goal-streak span,.login-sum .xp-lines,.login-sum .xp-lines b{color:var(--card-text)}
/* ---- 背景の絵の上に直接ある見出し・説明は、象牙色の札にのせる ---- */
.page>h3,.page>.heat,.page>.heat-legend,.quest-page>h2,.quest-page>.sec,.page>.sec,.crumbs,.page>.eyebrow,.page>h1,.page>h2,.page>p,.page>.back,.page>.crumbs,.page>.term-meta,.page>.sec,.quest-page>.eyebrow,.quest-page>h1,.quest-page>p,.quest-page>.back,.quest-page>.text-btn,.section-head,.footer,.page>.lib-bar,.page>label,.page>.search{background:var(--top-bg);color:var(--top-text);border:3px solid var(--top-bd);padding:6px 14px;box-shadow:3px 3px 0 var(--shadow),0 0 0 3px var(--sh2);margin-bottom:14px}
.page>.eyebrow,.quest-page>.eyebrow,.page>.back,.quest-page>.back,.quest-page>.text-btn,.page>.crumbs,.quest-page>.crumbs{display:inline-block}
.crumbs,.crumbs a,.crumbs .text-btn,.crumbs small{color:var(--top-text)}
.page>h3,.page>.sec,.quest-page>.sec,.quest-page>h2{color:var(--top-text);font-size:calc(18px*var(--fs))}
.heat{padding:8px 10px;max-width:460px}
.fl-set,.lib-search{padding:14px 18px;margin-bottom:16px}
.page>h1,.quest-page>h1{color:var(--panel-title);background:var(--panel-bg);border-color:var(--panel-bd)}
.page>p,.quest-page>p,.section-head p,.section-head h2,.footer span{color:var(--top-text)}
.section-head{padding:8px 14px}
.page>.eyebrow,.quest-page>.eyebrow,.footer,.page>label{color:var(--top-text)}
.page>.back,.quest-page>.back,.quest-page>.text-btn{color:var(--top-text);text-decoration:underline}
/* ---- 読みやすさ：すべてドット絵フォント。本文は15px以上、行間は広めに ---- */
.lesson p,.lesson li,.lesson td,.bub p,.callout,.fact p,.fact li,.tsec p,.tsec li,.story-card p,.term p,.card-body p,.exam-entry p,.goal p,.guide p,.review-card p,.ex-ctx,.ex-q,.ex-rules li,.predict p,.journal-entry p,.assign label,.fl-q,.fl-def,.fl-c,.fl-fb p,.world-row p,.cat-card span,.notice,.nar,.lib-note,.trow .tshort,.log-notes li,.assign-note{font-family:var(--body-font);line-height:1.8;letter-spacing:.04em}
.lesson p,.lesson li,.bub p,.callout,.fact p,.tsec p,.tsec li,.story-card p,.term p,.exam-entry p,.goal p,.guide p,.review-card p,.ex-ctx,.ex-rules li,.predict p,.world-row p,.fl-fb p,.notice,.lib-note{font-size:calc(16px*var(--fs))}
.card-body p,.nar,.cat-card span,.trow .tshort,.log-notes li,.assign-note,.fl-c{font-size:calc(15px*var(--fs))}
.fl-opt small,.fl-chip small,.ch-switch .fl-chip small,.card-meta,.hero .under,.stat span,.stat small,.badge span,.badge em,.goal-side,.tag,.season,.hist li,.hist time,.small,small{font-family:var(--body-font)}
.fl-opt small,.fl-chip small,.ch-switch .fl-chip small,.stat span,.stat small,.badge span,.hero .under,.goal-side,.small,.card-meta,small{font-size:calc(15px*var(--fs))}
.section-head{flex-wrap:wrap}.section-head h2{flex:1 1 12em}
.page{padding-bottom:60px}
/* ---- はじめての案内・ひとこと強調 ---- */
.tut-h{margin:18px 0 6px;padding:4px 10px;display:inline-block;border:3px solid var(--btn-text);font-size:calc(16px*var(--fs))}
.dlg .tut-h:first-child{margin-top:4px}
.pulse{outline:4px dashed var(--focus);outline-offset:5px;box-shadow:0 0 0 4px var(--ring);animation:pxpulse 1.2s steps(2) infinite}
@keyframes pxpulse{50%{outline-color:#c0392b}}
/* ---- 物語の窓：箱は固定サイズ。会話だけが中でスクロールし、ボタンは同じ位置に固定 ---- */
.ov-card.scene-card{display:flex;flex-direction:column;height:min(70vh,560px);max-height:calc(100vh - 32px);overflow:hidden;padding-bottom:18px}
.scene-card .eyebrow,.scene-card h2{flex:none}
.scene-card h2{margin-bottom:8px}
.scene-card .ov-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding-right:4px;margin-right:-4px}
.scene-card .actions{flex:none;margin-top:12px;padding-top:12px;border-top:3px solid var(--panel-bd)}
/* ---- バトル形式の確認問題 ---- */
.battle .b-scene{position:relative;height:232px;margin:8px 0 14px;border:4px solid var(--panel-bd);background:var(--bgimg) 55% 96%/cover no-repeat;overflow:hidden;box-shadow:inset 0 0 0 3px var(--panel-out);image-rendering:auto}
.b-box{position:absolute;z-index:2;background:var(--card-bg);color:var(--card-text);border:3px solid var(--card-bd);padding:4px 10px 6px;font-size:15px;line-height:1.5;box-shadow:inset 0 0 0 2px var(--panel-bd2),3px 3px 0 var(--shadow);max-width:62%}
.b-box b{display:block;font-weight:400;font-size:15px;color:var(--card-text)}
.b-lab{display:inline-block;font-size:13px;margin-right:6px;color:var(--card-text)}
.b-mon-box{left:8px;top:8px}
.b-me-box{right:8px;bottom:8px}
.b-segs{display:inline-flex;gap:2px;vertical-align:middle;padding:1px;border:2px solid var(--bar-bd);background:var(--bar-empty)}
.b-segs i{display:block;width:13px;height:10px;background:transparent}
.b-segs i.on{background:var(--bar-fill)}
.b-segs.mon i.on{background:#d8412f}
html.night .b-segs.mon i.on{background:#ff7a5a}
.b-mon{position:absolute;right:11%;top:14px;width:128px;height:128px;image-rendering:pixelated;transition:opacity .4s}
.b-mon.gone{opacity:.25}
@media(prefers-reduced-motion:reduce){.b-mon{transition:none}}
html.calm .b-mon{transition:none}
.b-hero{position:absolute;left:7%;bottom:4px;width:128px;height:128px;image-rendering:pixelated}
.b-mon.hit{outline:4px solid var(--btn-bg);outline-offset:3px;background:rgba(255,255,255,.18)}
.b-hero.dmg{outline:4px solid #d8412f;outline-offset:3px;background:rgba(255,255,255,.18)}
@media(prefers-reduced-motion:no-preference){html:not(.calm) .b-mon.hit{animation:pxhit .9s steps(1) 1}html:not(.calm) .b-hero.dmg{animation:pxshake .6s steps(3) 1}}
@keyframes pxhit{0%{opacity:1;transform:translateX(-4px)}16%{opacity:.25;transform:translateX(4px)}33%{opacity:1;transform:translateX(-4px)}50%{opacity:.25;transform:translateX(4px)}66%{opacity:1;transform:none}100%{opacity:1}}
@keyframes pxshake{0%{transform:translateX(0)}33%{transform:translateX(-5px)}66%{transform:translateX(5px)}100%{transform:none}}
.b-win{background:var(--bubble-bg);color:var(--bubble-text);border:3px solid var(--bubble-bd);box-shadow:3px 3px 0 rgba(0,0,0,.3);padding:10px 14px;margin:0 0 12px}
.b-win p{margin:0 0 6px;color:var(--bubble-text);font-size:calc(16px*var(--fs))}
.b-win p:last-child{margin-bottom:0}
.b-no{font-size:calc(14px*var(--fs))!important;border-bottom:2px dotted currentColor;display:inline-block}
.b-intro{background:var(--hero-bg);color:var(--hero-text)!important;border:2px solid var(--hero-bd);padding:6px 10px}
.b-intro b{color:var(--hero-title)}
.b-battle-line b{font-weight:400;font-size:calc(17px*var(--fs))}
.b-msg.b-end{margin-top:-4px}
.b-cmd{display:grid;gap:9px;margin:0 0 10px}
.b-cmd .choice{font-size:calc(16px*var(--fs))}
.battle .actions{margin-top:10px}
.battle .exercise-label,.battle .b-lab,.battle .choice .num,.battle .text-btn,.battle .primary,.battle .secondary,.b-box,.b-box b{font-size:calc(15px*var(--fs))}
.battle .b-no{font-size:calc(15px*var(--fs))!important}
/* ---- 章末試験のボス戦 ---- */
.battle .b-scene.boss-scene{height:276px}
.b-mon.b-boss{width:192px;height:192px;right:4%;top:8px}
.b-segs.boss i{width:9px}
.b-ctx{margin:0 0 8px!important}
.b-phase{margin-top:-4px}
.b-case-row{border-top:2px dotted currentColor;padding-top:8px;margin-top:10px}
.b-case-row p{margin:0 0 6px}
@media(prefers-reduced-motion:no-preference){html:not(.calm) .b-mon.shift{animation:pxhit .9s steps(1) 1}}
/* ---- 昼から夜への切り替え ---- */
#px-dim{position:fixed;inset:0;z-index:80;background:#1c1008;opacity:0;pointer-events:none}
#px-dim.go{animation:pxdim .9s steps(9) 1}
@keyframes pxdim{0%{opacity:.92}100%{opacity:0}}
@media(max-width:760px){
h1{font-size:calc(26px*var(--fs))}
.lesson p,.lesson li,.lesson td,.bub p,.callout,.fact p,.fact li,.tsec p,.tsec li,.story-card p,.term p,.card-body p,.exam-entry p,.goal p,.guide p,.review-card p,.ex-ctx,.ex-rules li,.predict p,.journal-entry p,.world-row p,.fl-fb p,.notice,.lib-note,.nar,.cat-card span,.trow .tshort,.log-notes li,.assign-note,.fl-c,.fl-q,.hero p,.intro p,.section-head p,.callout p,.fl-opt small,.fl-chip small,.ch-switch .fl-chip small,.stat span,.stat small,.badge span,.badge em,.hero .under,.goal-side,.small,.card-meta,.hist li,.hist time,small{font-size:calc(15px*var(--fs))!important}
.lesson{padding:18px 12px!important}
.hero{display:block;min-height:0}.hero-copy{padding:22px 18px 6px}.hero-art{margin:0 12px 12px;height:auto;aspect-ratio:3/2;padding:0;position:relative}.hero-art .map-art{position:absolute;inset:0;width:100%;height:100%}
.hero .under,.hero p{max-width:none}
.lesson,.goal,.exam-entry,.chapter-prog,.world-row,.tsec,.journal-entry,.guide,.review-card,.tod,.fl-card,.lv-card,.fl-entry,.ov-card,.intro,.fl-set,.lib-search{box-shadow:inset 0 0 0 3px var(--panel-out),inset 0 0 0 5px var(--panel-bd2),0 0 0 3px var(--sh2),5px 7px 0 var(--shadow)}
.quest-card{grid-template-columns:116px minmax(0,1fr)}.quest-art{height:100%;min-height:150px;border-bottom:0;border-right:3px solid var(--card-bd)}.quest-art .px-b{width:96px;height:96px}
.sidebar{border-right:0;border-top:4px solid var(--sbd);box-shadow:inset 0 3px 0 var(--panel-bd2),0 -4px 0 var(--shadow);background:var(--sbg)}
.nav button{flex-direction:column;gap:2px;padding:6px 2px;font-size:calc(11px*var(--fs))}.nav button.active::after{display:none}.nav .pxn{width:22px;height:22px}
.topbar{height:auto;min-height:58px;padding:8px 10px;gap:6px;background:var(--sbg);border-bottom:4px solid var(--sbd);box-shadow:0 4px 0 var(--shadow);align-items:center}
.mobile-brand{font-size:13px;white-space:nowrap;gap:5px}.top-pills{gap:6px;align-items:center}.top-pills .xp,.top-pills .pill{font-size:11px!important;white-space:nowrap;padding:2px 6px}
.crumb{display:none}
.page>h1,.quest-page>h1{font-size:calc(22px*var(--fs))}
.av,.av .pxi{width:48px;height:48px}.av{flex:none}
.battle .b-scene{height:200px}.b-mon,.b-hero{width:96px;height:96px}.b-mon{right:6%}.battle .b-scene.boss-scene{height:262px}.b-mon.b-boss{width:150px;height:150px;right:3%;top:6px}.boss-scene .b-hero{width:84px;height:84px}.b-segs.boss i{width:8px}.b-box{font-size:15px;padding:3px 8px 5px}.b-segs i{width:11px}
.lesson .story-card{border:0;box-shadow:none;background:transparent;padding:0;margin:0 0 18px}
.lesson .story-card .dl{flex-wrap:wrap;gap:4px}.lesson .story-card .av,.lesson .story-card .av .pxi{width:40px;height:40px}.lesson .story-card .bub{flex:1 1 100%;min-width:0;padding:8px 10px}
.chip,.text-btn,.primary,.secondary,.fl-chip,.exercise-label{font-size:calc(14px*var(--fs))}.exercise-label{font-size:calc(12px*var(--fs))}.nav-label,.eyebrow{font-size:calc(12px*var(--fs))}
.page{padding-bottom:110px}
}
/* ---- フォーカス・動き ---- */
:focus-visible{outline:3px dashed var(--focus);outline-offset:3px;box-shadow:0 0 0 3px var(--ring)}
.choice:focus-visible,.chip:focus-visible,.fl-chip:focus-visible,.fl-opt:focus-visible,.conf:focus-visible,.fl-c:focus-visible,.final-quiz label:focus-visible,.ex-nav button:focus-visible,.steps button:focus-visible,.slot:focus-visible,.snapshot:focus-visible,.secondary:focus-visible,input:not([type=checkbox]):not([type=radio]):focus-visible,textarea:focus-visible,select:focus-visible,.field select:focus-visible,.field textarea:focus-visible,.search:focus-visible,.lib-filters select:focus-visible,.fl-sel:focus-visible,.assign select:focus-visible,.stamp .st-c:focus-visible,.gchk:focus-visible{outline-color:var(--focus)}
@keyframes pxblink{50%{opacity:0}}
@keyframes pxbob{50%{transform:translate(var(--bx,0),-3px)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}.map-hero{animation:none}.pulse{animation:none}#px-dim{display:none}}
html.calm *,html.calm *::before,html.calm *::after{animation:none!important;transition:none!important}
html.calm #px-dim{display:none}
/* ---- 文字の最小サイズ（スマホは15px以上、パソコンは13px以上） ---- */
@media(max-width:760px){
.nav button,.nav button span,#toast,.tb,.top-pills .xp,.top-pills .pill,.mobile-brand,.mobile-brand *,.ts-sub,.fl-chip,.fl-chip span,.eyebrow,.tag,.primary,.secondary,.text-btn,.chip,.chip span,.goal-streak span,.quest-number,.quest-status,.card-body h3,.footer span,.pill,.check-row,.check-row span,label.field,summary,.reading,.source,.hm-h,.hm,.badge b,.pending,.steps button,.exercise-label,.bub b,.node b,.choice .num,.only-screen,.slot,th,.code-cap,.code-wrap code,.code-wrap .cl,code.ic,caption,legend.exercise-label,.tod-act a,.tod-act button,details p,details a,li span,label span,.lesson h3,.story-card .dl b,.tut-h{font-size:calc(15px*var(--fs))!important}
.cast-item p,.tod p,.guide h3,.review-card h3,.assign label b{font-size:calc(15px*var(--fs))!important}
.hero-art svg text{display:none}
.mm-wrap svg.lg{width:560px;max-width:none}
.mm-wrap{overflow-x:auto}
.mm-wrap svg{width:660px;max-width:none}
.nav button{padding:6px 1px}
.top-pills .pill,.top-pills .xp{white-space:normal}
.battle .b-scene.boss-scene{height:332px}
.b-mon.b-boss{width:150px;height:150px;right:3%;top:102px}
.boss-scene .b-hero{left:4%}
}
@media(min-width:761px){
.tb,#toast,.eyebrow,.exercise-label,.nav-label,.tag,.pill,.quest-number,.quest-status,.pending,.hm-h,.hm,.source,.reading,.only-screen,.code-cap,.footer span,th,.ts-sub,.b-lab,.code-wrap .cl,.node b,.bub b,.choice .num{font-size:calc(13px*var(--fs))!important}
.brand span,.profile p,.side-note,.season,.goal-streak span,.text-btn,.section-head p,.badge em,li time,.slot,td{font-size:calc(13px*var(--fs))!important}
.hero-art svg text{font-size:14px}
.mm.lg{max-width:480px}
}


/* パソコン幅でも関連用語の補足は13px以上（スマホは760px以下の指定で15px） */
.chip small{font-size:calc(13px*var(--fs))}
/* 正誤の色がついた項目の中の補足・注記は、昼夜とも明るい文字にする */
.assign.ok,.assign.ng,.snapshot.ok,.snapshot.ng{--muted:#fbf0d6;--hi:#fbf0d6}
.assign.ok :is(.muted,small,.small,p,.assign-note),.assign.ng :is(.muted,small,.small,p,.assign-note),.snapshot.ok :is(.muted,small,.small,p,.assign-note,span,b),.snapshot.ng :is(.muted,small,.small,p,.assign-note,span,b){color:#fbf0d6}
html.night .assign.ok :is(.muted,small,.small,p,.assign-note),html.night .assign.ng :is(.muted,small,.small,p,.assign-note),html.night .snapshot.ok :is(.muted,small,.small,p,.assign-note,span,b),html.night .snapshot.ng :is(.muted,small,.small,p,.assign-note,span,b){color:#fbf0d6}
/* 長い選択肢を選んでも、選択欄が画面の外へ広がらない */
.assign,.assign>*,.snapshot,.snapshot>*{min-width:0}
select{max-width:100%;min-width:0;text-overflow:ellipsis}
/* 記録の表の補足もパソコン幅で13px以上 */
.logtbl td small{font-size:calc(13px*var(--fs))}
/* Safariで、長い選択肢を選んだ選択欄の中身がページ幅を広げないようにする */
select{overflow:hidden}
/* 正誤がついた行・項目は、選択中の色より正誤の色を優先し、補足も明るい文字にする */
.snapshot.ng,.snapshot.ng:has(input),.snapshot.ng:has(input:checked){background:var(--call-ng)!important}
.snapshot.ok,.snapshot.ok:has(input),.snapshot.ok:has(input:checked){background:var(--call-ok)!important}
.logtbl tr.ok td,.logtbl tr.ng td{--muted:#fbf0d6}
.logtbl tr.ok td small,.logtbl tr.ng td small,html.night .logtbl tr.ok td small,html.night .logtbl tr.ng td small{color:#fbf0d6}

/* ===== UI修正（ui1）：戦闘のHPの帯・URLの図・関連用語カード・日本語の折り返し ===== */
/* 戦闘：魔物・主人公の位置を1か所の変数で決め、HPの帯はその変数から「すぐ隣」に置く（魔物の左／主人公の右）。通常戦・ボス戦・スマホ幅で共通 */
.b-scene{--mon-r:11%;--mon-w:128px;--mon-t:14px;--hero-l:7%;--hero-w:128px}
.boss-scene{--mon-r:4%;--mon-w:192px;--mon-t:8px}
.b-mon{right:var(--mon-r);top:var(--mon-t);width:var(--mon-w);height:var(--mon-w)}
.b-hero{left:var(--hero-l);width:var(--hero-w);height:var(--hero-w)}
.b-mon-box{left:auto;top:var(--mon-t);right:calc(var(--mon-r) + var(--mon-w) + 8px);max-width:calc(100% - var(--mon-r) - var(--mon-w) - 16px)}
.b-me-box{right:auto;bottom:8px;left:calc(var(--hero-l) + var(--hero-w) + 8px);max-width:calc(100% - var(--hero-l) - var(--hero-w) - 16px)}
@media(max-width:760px){
.b-scene{--mon-r:6%;--mon-w:96px;--hero-w:96px}
.boss-scene{--mon-r:3%;--mon-w:150px;--mon-t:102px;--hero-l:4%;--hero-w:84px}
}
/* URLの読み方の図 */
.urlfig{margin:14px 0;padding:14px 16px;border:3px solid var(--card-bd);background:var(--card-bg);color:var(--card-text);box-shadow:inset 0 0 0 2px var(--panel-bd2),3px 3px 0 var(--shadow)}
.urlfig figcaption{font-size:calc(15px*var(--fs));margin:0 0 8px;color:var(--card-text)}
.uf-url{display:flex;flex-wrap:wrap;align-items:stretch;font-family:var(--mono);font-size:calc(16px*var(--fs));line-height:1.5;letter-spacing:0;overflow-wrap:anywhere;word-break:break-all}
.uf-s,.uf-h,.uf-o,.uf-p,.uf-ex,.uf-tag{border:3px solid #2e1a0c}
.uf-url>span{padding:4px 8px;margin:0 2px 4px 0}
.uf-url>span:empty{display:none}
.uf-s{background:#e6d3a8;color:#2e1a0c}
.uf-h{background:#fffcf2;color:#2e1a0c;border-style:dashed}
.uf-o{background:#f5a623;color:#2e1a0c;font-weight:700}
.uf-p{background:#3b2414;color:#fbf0d6}
.uf-dir{margin:6px 0 10px;font-size:calc(15px*var(--fs));color:var(--card-text)}
.uf-key{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.uf-key li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start;font-size:calc(15px*var(--fs));line-height:1.7;color:var(--card-text)}
.uf-tag{display:inline-block;min-width:3.2em;padding:2px 6px;text-align:center;font-family:var(--px-font);font-size:calc(15px*var(--fs));line-height:1.5}
.uf-ex{display:inline-block;padding:0 6px;font-family:var(--mono);font-size:calc(15px*var(--fs));overflow-wrap:anywhere;word-break:break-all;line-height:1.5}
.uf-key b{font-weight:400;color:var(--card-text)}
/* 関連用語カード */
.rel-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(250px,100%),1fr));gap:10px;margin:10px 0 4px}
.rel-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px}
.rel-card b{font-size:calc(15px*var(--fs));overflow-wrap:anywhere}
.rel-card .tshort{font-size:calc(15px*var(--fs));line-height:1.7}
@media(max-width:760px){.rel-cards{grid-template-columns:minmax(0,1fr)}}
/* 結果：押した後に移る先 */
.q-res:focus{outline:3px dashed var(--focus);outline-offset:3px}
/* 日本語は文節の途中で折り返さない（文節の切れ目は assets/phrase-wrap.js が <wbr> で入れる）。入らなかった長い語は、はみ出さずに折り返す */
body{word-break:keep-all;overflow-wrap:break-word}
/* 長い語の折り返しの保険は break-word（anywhere だと、ボタンなどの「最小の幅」が1文字分に縮み、1字ずつ縦に並ぶ） */
pre,.code,.code *{word-break:normal;overflow-wrap:normal}
.pw{display:inline}
/* ボタン・短いラベルは、文字が1字ずつ縦に並ばない最小の幅を持つ。狭い画面では上の帯のレベル表示を折り返さず、ロゴの文字のほうを折り返す */
.primary,.secondary,.text-btn,.steps button,.pill,.tb,.tag,.xp{overflow-wrap:break-word;min-width:min-content}
/* 長い用語のチップは、1行に収まらなければ折り返す（チップの幅は、行の幅まで） */
.chip{max-width:100%;min-width:0;overflow-wrap:anywhere}
/* 本文の段落・見出し・カードは、幅が親で決まる箱なので、長い語がはみ出すときは anywhere で折り返してよい（ボタンの幅は縮めない） */
.lesson p,.lesson li,.lesson h2,.lesson h3,.fact p,.fact li,.fact h3,.callout p,.bub p,.story-card p,.tshort,.quest-page>p,.predict p,.tsec p,.tsec li{overflow-wrap:anywhere}
@media(max-width:360px){.topbar{flex-wrap:wrap;row-gap:4px}.mobile-brand{flex:1 1 100%}.top-pills{flex:1 1 100%;justify-content:flex-start}.top-pills .xp{white-space:nowrap}}
/* 図の箱（.diagram .node）：狭い画面では2列（奇数のときは最後の箱が広がる）、さらに狭ければ1列。全クエストの同じ部品に効く */
@media(max-width:420px){.diagram .node,.node{flex:1 1 calc(50% - 8px);min-width:0}}
@media(max-width:340px){.diagram .node,.node{flex-basis:100%}}
/* 幅のある表（.fact の中）は、狭い画面では枠の中で横に動かす（画面全体を広げない） */
.fact:has(>.logtbl),.fact:has(>div>.logtbl){overflow-x:auto}
/* 横に並ぶ「印＋文」の行（選択肢・チェック行など）：文の側は縮められ、長い語は折り返す（ボタン・番号の幅は縮めない） */
.check-row>span,.choice>span:not(.num),.snapshot>span,.final-quiz label>span,.assign>label,.conf>span{min-width:0;overflow-wrap:anywhere}
/* iPhone SE（320px）：ボスを少し小さくして、HPの帯（魔物の左）に幅を残す */
@media(max-width:360px){.boss-scene{--mon-w:112px}.b-mon.b-boss{width:var(--mon-w);height:var(--mon-w)}}
/* 未解放の章はたたんで、本文を上に出す */
.ch-more{margin:4px 0 0;padding:6px 10px;border:2px dashed var(--line);background:var(--card)}
.ch-more summary{cursor:pointer;min-height:36px;display:flex;align-items:center;color:var(--ink)}
.ch-more p{margin:4px 0}

/* タイトル画面：嵐の港町の主画像（2026-10-30）。上部を暗く落として題字と空が被らないようにする */
.title-scene{background:#0a0d26;container-type:inline-size}
.title-scene .ts-h{font-size:clamp(24px,6.4cqw,56px)}
.title-scene::after{content:"";position:absolute;left:0;right:0;top:0;height:46%;background:linear-gradient(#070a22e6,#070a2299 55%,#070a2200);pointer-events:none}
.title-scene .ts-sub{background:#140d22e6;border-color:#c9a24a}
@media(max-width:760px){
.px-scene{object-position:center top}
.title-scene::after{height:40%}
.ts-logo{top:3%;bottom:4%}
.title-scene .ts-h{font-size:clamp(24px,8cqw,40px)}
.title-scene .ts-sub{margin:0;padding:1px 8px;border-width:1px;max-width:100%;text-wrap:balance}
}
@media(max-width:360px){.title-scene{aspect-ratio:16/11}}

/* ===== 公開版の追加スタイル（public-build/src/site.css） ===== */
.site-foot{margin:36px 0 0;padding:18px 0 10px;border-top:1px solid var(--line);font-size:calc(11px*var(--fs));color:var(--muted);line-height:1.7}
.site-foot nav{display:flex;flex-wrap:wrap;gap:4px 18px;margin-bottom:8px}
.site-foot a{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.site-foot p{margin:2px 0}
.workspace>.site-foot{padding-left:44px;padding-right:44px;max-width:1300px;margin-left:auto;margin-right:auto}
.review-badge{display:inline-block;margin:6px 0 0;padding:4px 12px;border-radius:999px;background:#eef1ea;border:1px solid var(--line);font-size:calc(11.5px*var(--fs));color:var(--ink)}
.review-badge b{margin-right:4px;color:var(--muted)}
.review-badge[data-review="ai"],.review-badge[data-review="pending"]{background:#f7efdf;border-color:#e6d6ae}
.review-badge[data-review="reviewed"]{background:#e6f0ea;border-color:#b9d3c6}
.review-line{margin:10px 2px 0}
.cta-card.gentle{background:#f2f6f3;border-color:#cfd9d2}
.cta-card a.primary,.cta-card a.secondary{white-space:nowrap}
.cta-card .small{margin:0 0 6px;font-size:calc(11px*var(--fs));color:var(--muted)}
.fl-chip.locked small{color:var(--coral)}
.edition-note{margin:0 0 16px;background:#f7efdf}
@media(max-width:760px){.workspace>.site-foot{padding-left:18px;padding-right:18px;padding-bottom:96px}.cta-card a.primary,.cta-card a.secondary{white-space:normal;width:100%;text-align:center}}

/* 運営・法務ページ */
.legal-page{background:var(--paper)}
.legal{max-width:780px;margin:0 auto;padding:26px 20px 56px}
.legal-back{display:inline-block;margin-bottom:12px;color:var(--ink);font-size:calc(13px*var(--fs));text-underline-offset:3px}
.legal h1{margin:6px 0 4px}
.legal h2{margin:30px 0 8px;font-size:calc(17px*var(--fs))}
.legal p,.legal li{font-size:calc(14px*var(--fs));max-width:none}
.legal ul{padding-left:1.3em}
.legal li{margin:4px 0}
.draft-banner{margin:0 0 14px;padding:10px 14px;border-radius:10px;background:#f8e9e1;border:1px solid #e3b9a6;color:#85442f;font-size:calc(12.5px*var(--fs))}
mark.todo{background:#ffe9a8;color:#5c4400;padding:0 5px;border-radius:4px;font-weight:700;font-size:.92em}
.info-table{width:100%;border-collapse:collapse;margin:8px 0 14px;font-size:calc(13.5px*var(--fs))}
.info-table th,.info-table td{padding:9px 12px;border:1px solid var(--line);text-align:left;vertical-align:top;background:var(--card)}
.info-table th{width:9em;background:#f1f3ec;font-weight:700}
.info-table thead th{width:auto}
.info-table.changelog th[scope=row]{width:5.5em}
.link-button{display:inline-flex;text-decoration:none}
.legal .site-foot{margin-top:40px}

/* ===== 公開版（全8章構成・第1章のみ）の調整（public-build/src/site8.css） ===== */
.site-foot{font-size:calc(13px*var(--fs))}
.legal p,.legal li{font-size:calc(15px*var(--fs))}
.legal{overflow-wrap:anywhere}
.info-table{table-layout:fixed}
.info-table th,.info-table td{overflow-wrap:anywhere;word-break:break-word}
@media(max-width:560px){.info-table th{width:6.2em}.info-table.changelog th[scope=row]{width:4.2em}.info-table th,.info-table td{padding:8px}}
