/* TrustAI Prep · Vocabulary Coach · skeleton styles (brand navy #022d5a / cyan #0092c8) */
:root{
  --ink:#141b2b; --ink-soft:#48546b; --muted:#7a869c;
  --bg:#f4f6fb; --card:#ffffff; --line:#e2e7f0;
  --navy:#022d5a; --navy2:#0a3f7a; --cyan:#0092c8; --cyan-bg:#e6f6fc;
  --green:#0f8a53; --green-bg:#e7f6ee; --rose:#c02a52; --rose-bg:#fdecf1;
  --amber:#b7791f; --amber-bg:#fdf4e3; --violet:#5b3fb0; --violet-bg:#efeafb;
  --shadow:0 1px 3px rgba(16,32,64,.06),0 8px 24px rgba(16,32,64,.06);
}
*{box-sizing:border-box}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;
  overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
body{margin:0;background:var(--bg);color:var(--ink);
  font-family:"Segoe UI","Hiragino Sans","Yu Gothic UI","Noto Sans JP","Microsoft YaHei",system-ui,sans-serif;
  line-height:1.65;-webkit-font-smoothing:antialiased;overscroll-behavior-x:contain}
/* 中文の省略号「……」(U+2026)を中線に(GB/T 15834 · founder 2026-10-12)。
   Windows の Segoe UI / 微软雅黑 / Yu Gothic UI は「…」を底線に描く(Edge 実測)→ 中線に描く字体をこの 1 字だけに当てる。
   unicode-range = U+2026 だけ差し替え:本文の字体・英字・数字は変わらない。中文界面だけ(main.js が html lang=zh-CN を付ける)。 */
@font-face{font-family:"TP Zh Ellipsis";unicode-range:U+2026;
  src:local("DengXian"),local("SimHei"),local("PingFang SC"),local("PingFangSC-Regular"),
      local("Noto Sans CJK SC"),local("NotoSansCJKsc-Regular"),local("Source Han Sans SC"),local("SourceHanSansSC-Regular")}
/* 中文界面は中国語の字体を日本語の字体より前に(2026-10-12 実測:元の並びだと Windows では漢字が全部 Yu Gothic UI = 日本の字形
   〔骨・直・角・令 など〕で描かれる)。Segoe UI は漢字を持たない → 英字だけ従来どおり。 */
body:lang(zh){
  font-family:"TP Zh Ellipsis","Segoe UI","Microsoft YaHei","PingFang SC","Noto Sans SC","Hiragino Sans","Yu Gothic UI","Noto Sans JP",system-ui,sans-serif}
.wrap{max-width:1040px;margin:0 auto;padding:22px 18px 60px}
.muted{color:var(--muted)} .tiny{font-size:12px} .center{text-align:center}

.topbar{display:flex;align-items:center;gap:10px;margin-bottom:16px}
.topbar .logo{width:30px;height:30px;border-radius:8px;background:var(--navy);color:#fff;display:grid;place-items:center;font-weight:800;font-size:15px}
.topbar .name{font-weight:700;color:var(--navy)}
.topbar .name small{display:block;font-weight:500;color:var(--muted);font-size:11px;letter-spacing:.04em}
#vc-search,#vc-gear{min-width:44px;min-height:44px}

.card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:26px 24px;box-shadow:var(--shadow)}
.kicker{letter-spacing:.16em;font-size:11px;color:var(--cyan);text-transform:uppercase;margin:0 0 8px;font-weight:700}
h1{font-size:24px;margin:0 0 8px;color:var(--navy);font-weight:800}
h2{font-size:19px;margin:0 0 8px;color:var(--navy)}

.btn{appearance:none;border:1px solid var(--line);background:#fff;color:var(--navy);
  border-radius:12px;padding:12px 20px;min-height:44px;font-size:15px;font-weight:700;cursor:pointer;transition:.12s}
.btn:hover{border-color:var(--cyan)}
.btn-primary{background:var(--navy);border-color:var(--navy);color:#fff}
.btn-primary:hover{background:var(--navy2)}
.btn.big{font-size:17px;padding:14px 34px;margin-top:8px}
.btn:focus-visible,.study-mode:focus-visible,.library-filter:focus-visible,.opt:focus-visible{
  outline:3px solid rgba(0,146,200,.28);outline-offset:2px}

.hero-card{padding:34px 26px}
.chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:16px 0 20px}
.chip{background:var(--cyan-bg);color:var(--navy);border-radius:999px;padding:6px 14px;font-size:13px;font-weight:600}
.chip b{font-size:15px} .chip.ghost{background:#f0f2f7;color:var(--muted);font-weight:500}
.chips-cap{align-self:center;font-size:12px;font-weight:600;color:var(--muted);letter-spacing:.02em}   /* 2026-10-17:「今日の学習」= 横の数は今日の数(設定「1 日の目安」と同じ) */

/* question */
.progress{height:6px;background:#e6eaf2;border-radius:99px;overflow:hidden;margin-bottom:12px}
.progress .bar{height:100%;background:linear-gradient(90deg,var(--cyan),var(--navy2));transition:width .25s}
.qmeta{display:flex;justify-content:space-between;align-items:center;font-size:13px;color:var(--muted);margin-bottom:8px}
.tag{border-radius:99px;padding:3px 11px;font-size:12px;font-weight:700}
.tag.review{background:var(--cyan-bg);color:var(--navy)} .tag.new{background:#eef7ee;color:var(--green)}
.qcard{touch-action:pan-y pinch-zoom}   /* 横スワイプ=次へ(答題後の四択面 · FR-VCH-02)· 縦スクロール/ピンチは温存。card-library と同じ扱い。 */
.qcard .head{text-align:center;padding:8px 0 6px}
.qcard .hw{font-size:38px;font-weight:800;color:var(--navy);letter-spacing:.01em}
.qcard .sub{color:var(--muted);font-size:14px;margin-top:2px}
.qcard .ipa{font-family:"Cascadia Code",Consolas,monospace}
.prompt{text-align:center;color:var(--ink-soft);margin:6px 0 16px;font-size:15px}
.opts{display:grid;gap:10px}
.opt{display:flex;align-items:center;gap:12px;text-align:left;background:#fff;border:1.5px solid var(--line);
  border-radius:13px;padding:13px 15px;font-size:16px;cursor:pointer;transition:.12s;color:var(--ink)}
/* 「問題を報告」(2026-10-18):設定の最下段の 1 行 + 報告の面 + 失敗の案内の横のリンク */
.sp-card button.sp-navrow{width:100%;appearance:none;border:0;background:transparent;font:inherit;text-align:left;cursor:pointer;display:flex;justify-content:space-between;align-items:center}
.sp-chev{color:var(--muted);font-size:18px}
/* 種類 4 つ = 2×2(375px で 1 列 4 つは文字が重なる · 2026-10-18 founder 指摘)。プルダウンにしない:4 択は全部見せて 1 回で選べる方が速い */
.rp-card .rp-cats{display:grid;grid-template-columns:1fr 1fr}
.rp-card .rp-cats .btn{white-space:normal;line-height:1.25;padding:4px 6px}
.rp-card .rp-text,.rp-card .rp-preview{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:10px;padding:8px 10px;font:inherit;font-size:14px;margin:4px 0 10px}
.rp-card .rp-preview{font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--ink-soft);background:#f8fafc}
.rp-card .rp-actions{display:flex;gap:8px;margin:4px 0 8px}
.rp-card .rp-actions .btn{flex:1}
.rp-link{appearance:none;border:0;background:transparent;padding:0;font:inherit;font-weight:700;color:var(--cyan);text-decoration:underline;cursor:pointer}
/* 赤ペン添削(learn.js redPenLearner):足す句読点 = 緑(誤りではなく追加)· 大文字小文字だけ違う語 = 波線(取り消し線にしない)
   · rp-del / rp-caret は各級 index.html の内側 CSS(従来どおり)。2026-10-18 founder iPhone 実機「dog. の句点で dog に取り消し線」。 */
.rp-ins{color:#047857;font-weight:800;background:#dcf3e9;border-radius:3px;padding:0 3px}
.rp-case{text-decoration:underline wavy #0092c8;text-underline-offset:4px}
/* 2026-10-17(founder iPhone 実機):悬停は【マウスの在る端末だけ】—— iOS は指の最後の位置に :hover が残る(sticky hover)。
   答えた後に次の問題の同じ位置の選択肢が浮いて「押す前から選ばれている」ように見えるのを防ぐ。悬停は枠の色だけ。 */
@media (hover:hover){.opt:hover:not(:disabled){border-color:var(--cyan)}}
.opt:disabled{cursor:default}
.opt .num{flex:0 0 auto;width:24px;height:24px;border-radius:7px;background:#eef1f7;color:var(--muted);
  display:grid;place-items:center;font-size:13px;font-weight:700}
.opt.correct{border-color:var(--green);background:var(--green-bg)} .opt.correct .num{background:var(--green);color:#fff}
.opt.wrong{border-color:var(--rose);background:var(--rose-bg)} .opt.wrong .num{background:var(--rose);color:#fff}
.opt.dim{opacity:.5}
/* ★ PR-2 · 押した誤答の正体(= protect)。1 回の間違いを 2 語の学習にする。
   右端に小さく出す —— 主役は正解の緑で、これは添え物。押せると誤解させない色(文字だけ)。 */
.qr-chosen{margin-left:auto;font-size:12.5px;color:var(--rose);font-weight:700;white-space:nowrap;
  font-family:"Cascadia Code",Consolas,monospace}
.opt.wrong .gloss,.opt.wrong .opt-idiom{min-width:0}
.feedback{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px;flex-wrap:wrap}
/* v1.2:判定行の右側に副ボタン(✍️ 使ってみる)+ 次へ を並べる(しっかり定着の即答正解)。 */
.feedback .fb-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-left:auto}
.fb{font-weight:700} .fb.ok{color:var(--green)} .fb.ng{color:var(--rose)}
.fb.learn{color:var(--navy);background:var(--cyan-bg);border-radius:999px;padding:6px 10px}
.fb .etag{font-size:12px;color:var(--amber);font-weight:600;margin-left:4px}
.next{white-space:nowrap}
/* ★「← 戻る」は qmeta(位置表示の隣)に置く —— 判定行に置くと「不正解」が ← に張り付いて
   ← のラベルのように読める(founder 指摘 2026-09-21)。位置の操作は位置表示の隣が意味的に正しい。
   qmeta の尺度(track-toggle と同じ)に合わせる。32px は WCAG 2.5.8(AA · 24px)を満たす。
   親指向けの大きな経路は右スワイプが担当しているので、ここは小さくてよい。 */
.qmeta .qr-back{min-width:32px;min-height:32px;padding:0 9px;margin-right:2px;color:var(--muted);
  font-size:15px;line-height:1;flex:none;border-radius:99px}
.qmeta .qr-back:hover{color:var(--navy);border-color:var(--cyan)}
/* 指に追従したスワイプが閾値を超えた合図(答えた後だけ · 未答面には付かない)。 */
.qcard.swipe-ready{box-shadow:0 0 0 2px var(--cyan) inset}
/* ★ PR-2 自動送りのカウントダウン(1.2 秒)。**予測可能 > 速い** —— 線が見えていれば驚かないし、
   線そのものが「触れば止まる」ことを教える(WCAG 2.2 SC 2.2.1 の「延長できる」を満たす手段)。 */
.qr-next{position:relative;overflow:hidden}
.qr-next::after{content:"";position:absolute;left:0;bottom:0;height:3px;background:var(--cyan);
  width:100%;transform-origin:left;animation:qrCount 1.2s linear forwards}
@keyframes qrCount{from{transform:scaleX(1)}to{transform:scaleX(0)}}
/* 動きを減らす設定では、線を**動かさず出したまま**にする —— 既定の reduce 規則(duration .01ms)だと
   線が一瞬で消えて「自動で進むこと」の予告がゼロになるため。 */
@media(prefers-reduced-motion:reduce){.qr-next::after{animation:none!important;transform:scaleX(1);opacity:.55}}

/* ★ FR-VJU-11 · 顶部持久「単語 | 重要表現(熟語)」track トグル(segmented control · house 配色 · in-place 切替) */
/* ★ 方案2(founder 2026-09-14): 居中悬空 → 左对齐(内容列左边 = header/卡片外边缘同一竖线)。margin-left:0(auto を外す)。
   home + choice 流れ(制御行なし)では此の standalone 形(下 margin 16px)で先頭に出す。 */
.track-toggle{display:flex;justify-content:flex-start;gap:2px;width:fit-content;margin:0 0 16px;
  background:#eef2f6;border:1px solid var(--line);border-radius:999px;padding:3px}
.track-tab{border:none;background:transparent;color:var(--muted);font-weight:700;font-size:14px;
  padding:8px 22px;border-radius:999px;cursor:pointer;transition:.15s;white-space:nowrap}
.track-tab:hover:not(.on){color:var(--navy)}
.track-tab.on{background:#fff;color:var(--navy);box-shadow:0 1px 3px rgba(2,45,90,.12)}
/* ★ track merge FR-6: home の「専攻」3 択(混合/単語/熟語)。track-toggle と同じ pill · home は center ゆえ inline で中央寄せ。 */
.focus-wrap{margin:12px 0 2px}
.focus-toggle{display:inline-flex;gap:2px;margin-top:5px;background:#eef2f6;border:1px solid var(--line);border-radius:999px;padding:3px}
.focus-tab{border:none;background:transparent;color:var(--muted);font-weight:700;font-size:14px;padding:8px 20px;border-radius:999px;cursor:pointer;transition:.15s;white-space:nowrap}
.focus-tab:hover:not(.on){color:var(--navy)}
.focus-tab.on{background:#fff;color:var(--navy);box-shadow:0 1px 3px rgba(2,45,90,.12)}
/* ★ FR-VJU-11(founder 2026-09-14 · Layout 再設計): control 行へ組込む時の in-row 形 —
   左簇 = ← 選択学法 + トグル(共に上位ナビ);下 margin を外し、行の高さに合わせ少しコンパクトに。 */
.card-library-nav{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}
.card-complete .card-library-nav{justify-content:center;margin-bottom:6px}
.qmeta-left{display:flex;align-items:center;gap:10px;min-width:0}
.card-library-top .track-toggle,.qmeta .track-toggle,.card-complete .track-toggle{margin:0}
.card-library-top .track-tab,.qmeta .track-tab{padding:6px 15px;font-size:13px}
/* ★ FR-VSM-04 v1.0(founder 2026-10-11):カードの「今日 / 全部」。同じ pill だが選択中を navy で塗り、隣の 単語/熟語 と見分ける。 */
.card-scope-toggle .track-tab.on{background:var(--navy);color:#fff;box-shadow:none}
/* 2026-10-11(founder:説明の行は場所を取る)→ 意味は ⓘ を押した時だけ開く。触れる範囲は 44px(NFR-VSM-03)· 見た目は 20px。 */
.card-scope-tip-btn{appearance:none;border:none;background:none;color:var(--muted);width:44px;height:44px;margin-left:-8px;padding:0;
  display:inline-flex;align-items:center;justify-content:center;border-radius:999px;cursor:pointer;flex:none}
.card-scope-tip-btn svg{width:20px;height:20px}
.card-scope-tip-btn:hover,.card-scope-tip-btn[aria-expanded="true"]{color:var(--navy)}
.card-scope-tip-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,160,210,.18)}
.card-scope-tip{margin:0 0 10px;padding:8px 12px;border-radius:10px;background:var(--cyan-bg);border:1px solid #b9dcef;color:var(--navy);font-size:12.5px}
.card-scope-tip ul{list-style:none;margin:0;padding:0}
.card-scope-tip li{display:flex;gap:8px;margin:2px 0}
.card-scope-tip li b{flex:none}

/* ★ FR-VJU-7/11 · 熟語 空所補充(cloze)出題+揭示 — 承認 mockup ②③(house 配色 · 既存 .opt/.qcard 流用) */
.cloze-stem{text-align:center;font-size:20px;line-height:1.7;color:var(--ink);font-weight:500;margin:8px 6px 4px}
.cloze-blank{display:inline-block;min-width:96px;border-bottom:2.5px solid var(--cyan);color:var(--cyan);
  font-weight:800;text-align:center;vertical-align:baseline;margin:0 3px}
/* ★ 選択肢の熟語も本文書体にする(code フォントをやめる · 上の .qr-hw b の注釈と同じ理由)。 */
.cloze-opt .opt-idiom{font-weight:600;color:var(--navy);font-size:16px}
.cloze-opt.correct .opt-idiom{color:var(--green)} .cloze-opt.wrong .opt-idiom{color:var(--rose)}
/* ★ 2026-09-21: 熟語が自前で持っていた揭示(.cloze-verdict / .cloze-rv-hw / .cloze-rv-gloss /
   .cloze-badge / .cloze-exbox / .cloze-audio / .cloze-coll*)は共有部品 .qr-* に置換して削除した。
   判定は .feedback + .fb(単語と同じ行・同じ文言)へ一本化。残るのは【出題面】の 3 つだけ。 */

/* settle */
.settle .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:18px 0}
.settle .stat{background:#f7f9fc;border:1px solid var(--line);border-radius:13px;padding:12px 6px}
.settle .stat .big{font-size:26px;font-weight:800;color:var(--navy)}
.settle .stat .lbl{font-size:11px;color:var(--muted)}
.settle .stat.save .big{color:var(--cyan)} .settle .stat.learn .big{color:var(--green)}
.settle-split{margin:0 0 10px;letter-spacing:.02em}   /* ★ track merge FR-7: 混合結算「単語 X · 熟語 Y」内訳行 */
.masterbar{margin:10px 0 14px} .masterbar .mtop{display:flex;justify-content:space-between;font-size:13px;color:var(--ink-soft);margin-bottom:6px;font-weight:600}
.big{font-size:26px}

.spinner{width:26px;height:26px;border:3px solid #e0e6f0;border-top-color:var(--cyan);border-radius:50%;
  margin:8px auto;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* recall (义→英 production) */
.tag.recall{background:var(--violet-bg,#efeafb);color:var(--violet,#5b3fb0)}
/* spelling (fill-in-blanks orthography) */
.tag.spelling{background:var(--amber-bg);color:var(--amber)}
/* 1 文字 1 マス(founder 2026-10-08):旧版は文字ごとに空白 + letter-spacing で、1 文字ぶん離れて語に見えなかった。
   文字は詰めて並べ(語の形が見える)、空所は 1 つずつ独立した下線(連続しても 1 本に繋がらない)。語の区切りは広い隙間。 */
.spell-scaffold{display:flex;justify-content:center;align-items:flex-end;flex-wrap:wrap;gap:3px;
  font-family:"Cascadia Code",Consolas,monospace;font-size:26px;line-height:1.2;color:var(--navy2);margin:6px 0 14px;font-weight:700}
.spell-scaffold .sp-ch{display:inline-block;min-width:.62em;text-align:center}
.spell-scaffold .sp-blank{display:inline-block;width:.62em;height:1.05em;border-bottom:3px solid var(--cyan);margin:0 1px}
.spell-scaffold .sp-gap{display:inline-block;width:.7em}
.recall-card .prompt{margin-bottom:4px}
.gloss-prompt{text-align:center;font-size:30px;font-weight:800;color:var(--navy);margin:4px 0 2px}
.recall-card .sub{text-align:center;margin-bottom:14px}
.recall-input{width:100%;font-size:22px;text-align:center;padding:12px 14px;border:1.5px solid var(--line);
  border-radius:12px;color:var(--ink);outline:none;letter-spacing:.02em}
.recall-input:focus{border-color:var(--cyan);background:var(--cyan-bg)}
.recall-actions{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px;flex-wrap:wrap}
.btn.ghost{background:#f4f6fb;border-color:var(--line);color:var(--ink-soft);font-weight:600;font-size:14px;padding:9px 14px}
.btn.tertiary{background:transparent;border-color:transparent;color:var(--muted);font-weight:600}
.btn.tertiary:hover{background:#f4f6fb;border-color:var(--line);color:var(--navy)}
.hint-btn{white-space:nowrap}
.hint-shown{background:var(--cyan-bg);color:var(--navy);border-radius:10px;padding:8px 14px;font-size:16px;letter-spacing:.16em}
.reveal-answer{text-align:center;font-size:26px;font-weight:800;color:var(--navy);margin:6px 0}
.reveal-answer .ipa{font-family:"Cascadia Code",Consolas,monospace;font-size:15px;color:var(--muted);letter-spacing:0}
.typed{text-align:center;color:var(--muted);font-size:14px;margin-bottom:8px}
.typed span{color:var(--rose);font-weight:600}
.fb.near{color:var(--amber)}

/* settle: encouragement + three restrained rewards (FR-VC-51/52) */
.encourage{color:var(--navy2);font-weight:600;margin:2px 0 14px}
.rewards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:6px 0 14px}
.rw{border:1px solid var(--line);border-radius:13px;padding:12px 6px;background:#f7f9fc}
.rw .rn{font-size:24px;font-weight:800;color:var(--navy)}
.rw .rl{font-size:11px;color:var(--muted);line-height:1.35}
.rw.save .rn{color:var(--cyan)} .rw.up .rn{color:var(--green)} .rw.courage .rn{color:var(--violet)}
.m2line{color:var(--green);font-weight:700;margin:4px 0 12px}
.settle-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:6px}
.settle-weak{margin:16px 0;padding:16px;border:1px solid #b8dfee;border-radius:14px;background:var(--cyan-bg)}
.settle-weak h2{font-size:17px;margin-bottom:3px}.settle-weak p{margin:3px 0 11px;color:var(--ink-soft);font-size:13px}

/* progress dashboard (FR-VC-54) */
.progressview{padding:22px 22px 26px}
.ptop{display:flex;align-items:center;justify-content:space-between}
.progress-title{font-size:19px;margin:0;color:var(--navy)}
.buckets{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:14px 0}
.bk{border-radius:13px;padding:14px 6px;text-align:center;border:1px solid var(--line)}
.bk .bn{font-size:26px;font-weight:800} .bk .bl{font-size:11px;color:var(--muted);line-height:1.3;margin-top:2px}
.bk.mastered{background:var(--green-bg)} .bk.mastered .bn{color:var(--green)}
.bk.learning{background:var(--cyan-bg)} .bk.learning .bn{color:var(--navy)}
.bk.due{background:var(--amber-bg,#fdf4e3)} .bk.due .bn{color:var(--amber)}   /* 2026-10-11 FR-VC-54 改定:要復習(今が時刻) · 旧 .bk.fragile */
.bk.fresh{background:#f0f2f7} .bk.fresh .bn{color:var(--muted)}
.streak{text-align:center;font-size:15px;color:var(--ink-soft);margin:6px 0 16px}
.streak b{color:var(--rose);font-size:20px}
.axtitle{font-size:15px;color:var(--navy);margin:6px 0 10px}
.axes{display:flex;flex-direction:column;gap:8px}
.axrow{display:grid;grid-template-columns:64px 1fr 48px;align-items:center;gap:10px}
.axrow.weakest .axname{color:var(--rose);font-weight:700}
.axname{font-size:13px;color:var(--ink-soft)}
.axname .wk{font-size:10px;background:var(--rose-bg);color:var(--rose);border-radius:6px;padding:1px 5px}
.axbar{height:9px;background:#e6eaf2;border-radius:99px;overflow:hidden}
.axfill{height:100%;background:linear-gradient(90deg,var(--cyan),var(--navy2))}
.axrow.weakest .axfill{background:linear-gradient(90deg,#e39,var(--rose))}
.axval{font-size:12px;color:var(--muted);text-align:right}
.future{margin:18px 0 6px;padding:12px 14px;border:1px dashed var(--line);border-radius:12px;background:#fafbfe;text-align:center}
.future-label{font-size:12px;color:var(--muted)} .future-val{font-size:13px;color:var(--ink-soft);font-weight:600;margin-top:2px}

/* Dynamic 「苦手な単語」: derived from event_log + canonical FSRS, never a second scheduler. */
.weak-summary,.weak-progress{margin:18px 0 4px;padding:15px;text-align:left;border:1px solid var(--line);border-radius:15px;background:#fbfcff}
.weak-summary.compact{max-width:620px;margin-left:auto;margin-right:auto}
.weak-summary-head,.weak-progress-title{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.weak-summary h2,.weak-progress h2{font-size:16px;margin:0 0 2px}.weak-summary p,.weak-progress-title p{margin:0;color:var(--muted);font-size:12px}
.weak-counts{display:flex;justify-content:flex-end;align-items:center;gap:7px;flex-wrap:wrap;font-size:12px;color:var(--ink-soft)}
.weak-counts span{padding:4px 8px;border-radius:999px;background:#eef1f7;white-space:nowrap}.weak-counts .weak-ready{background:var(--amber-bg);color:#8a5a14}
.weak-actions{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin-top:11px}   /* 2026-10-11 founder:ボタンは 1 つ → 中央(首页の「学習を始める」と揃える) */
/* ★ 易错词区块重设计(founder 2026-09-22): 主数字 + 状态语义色分块 */
.weak-title{display:flex;gap:10px;align-items:flex-start}
.weak-ic{flex:none;width:26px;height:26px;background:#fef6e9;color:#8a5a14;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:15px}
.weak-big{flex:none;text-align:center;line-height:1}
/* 2026-10-11(founder):苦手の一覧の入口 = 見出しそのもの(「苦手な… ›」)+ 右上の数字。別の行を取らない。 */
.weak-title-btn{appearance:none;border:none;background:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;
  display:inline-flex;align-items:center;gap:4px;min-height:44px;margin:-11px 0;text-align:left}   /* 触れる範囲 44px · 負の margin で行の高さは変えない */
.weak-title-btn:hover{color:var(--cyan)}
.weak-title-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,160,210,.18);border-radius:6px}
.weak-title-chev{color:var(--cyan);font-weight:700;font-size:18px;line-height:1}
button.weak-big{appearance:none;border:none;background:none;padding:2px 4px;font:inherit;color:inherit;cursor:pointer;border-radius:8px}
button.weak-big:hover{background:var(--cyan-bg)}
.weak-big-n{font-size:28px;font-weight:800;color:var(--navy)}
.weak-big-u{display:block;font-size:11px;color:var(--muted)}
.weak-split{display:inline-block;margin:11px 0 0;padding:6px 11px;background:#eef5fb;border-radius:9px;font-size:13px;font-weight:600;color:var(--navy)}   /* ★ REC-LO-1(FR-8.2): 苦手区块の跨軌内訳「単語 X · 熟語 Y」 */
.weak-status{display:flex;gap:10px;margin:12px 0 0}
.weak-st{flex:1;border-radius:11px;padding:9px 12px;font-size:13px;border:1px solid var(--line);background:#fbfcff}
.weak-st.ready{background:#e6f4fa;border-color:#bfe6f4}
.weak-st b{color:var(--navy);font-size:15px}
.weak-st-sub{display:block;font-size:11px;color:var(--muted);margin-top:2px}
.weak-notice{margin:12px auto 0;padding:9px 11px;max-width:620px;border-radius:10px;background:var(--cyan-bg);color:var(--navy);font-size:13px;font-weight:650;text-align:left}
.weak-progress{margin:18px 0}.weak-progress-title strong{font-size:22px;color:var(--navy);white-space:nowrap}
.weak-list{list-style:none;padding:0;margin:11px 0 0;border-top:1px solid var(--line)}
.weak-list li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 2px;border-bottom:1px solid var(--line)}
.weak-list li>span:first-child{display:flex;align-items:baseline;gap:8px;min-width:0}.weak-list b{color:var(--navy);overflow-wrap:anywhere}.weak-list small{color:var(--muted)}
/* 2026-10-11(founder):進捗ページの苦手は 1 行の入口(首页と重ねない · 押すと苦手の一覧) */
.weak-progress-row h2{margin:0}
.weak-progress-row .weak-title-btn{width:100%;justify-content:space-between;margin:0;padding:2px 0}   /* 行全体が入口 · 1 行目 = 呼び名 · 2 行目 = 数 */
.weak-progress-main{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0}
.weak-progress-name{white-space:nowrap}
.weak-progress-n{font-size:12.5px;font-weight:600;color:var(--muted)}
.weak-state{flex:0 0 auto;padding:3px 8px;border-radius:999px;font-size:11px;font-weight:700;background:#eef1f7;color:var(--muted)}
.weak-state.ready{background:var(--amber-bg);color:#8a5a14}.weak-empty{margin:12px 0 0;color:var(--green);font-weight:650;font-size:13px}
/* ★ 2026-10-11(founder · FR-VSM-09 v1.0):苦手の一覧(検索と同じ浮層)の行の「理由」小札 · 区切り見出し */
.lr-reason{flex:none;font-size:11px;font-weight:700;color:#8a5a14;background:var(--amber-bg);border-radius:5px;padding:1px 6px}
.weak-list-sec{margin:12px 2px 6px;font-size:12px;font-weight:700;color:var(--muted);letter-spacing:.02em}
[data-weak-wait-note]{margin:6px 0 0}
[data-weak-reason-all]{margin:10px 2px 2px}
.weak-list-sec:first-child{margin-top:2px}
.weak-card-label{margin:2px auto 10px;width:max-content;max-width:100%;padding:5px 10px;border-radius:999px;background:var(--amber-bg);color:#8a5a14;font-size:12px;font-weight:700}

/* soft-lock card — free tier only (design/vocab-content-gate.md FR-CG-10 · §9).
   Renders under the home hero and at the end of the word-search list = where "word 101+" would have been.
   Deliberately calm (no lock icon, no red): the free tier is a complete product, not a crippled one. */
.vc-lock{margin:16px auto 4px;max-width:620px;padding:14px 16px;text-align:left;
  border:1px solid var(--line);border-radius:15px;background:linear-gradient(135deg,var(--cyan-bg),#f7faff)}
.vc-lock-t{margin:0 0 4px;font-size:15px;color:var(--navy)}
.vc-lock-p{margin:0;color:var(--muted);font-size:12.5px;line-height:1.6}
.vc-lock-cta{display:inline-block;margin-top:10px;font-size:13px;font-weight:700;color:var(--cyan);text-decoration:none}
.vc-lock-cta:hover{text-decoration:underline}

/* L3 Coach (panda tip · flag-gated · advisory display-only) */
.coach-bubble{display:flex;align-items:flex-start;gap:10px;margin-top:16px;padding:12px 14px;
  background:linear-gradient(135deg,var(--cyan-bg),#eef6ff);border:1px solid var(--line);border-radius:14px}
.coach-bubble .panda{font-size:26px;line-height:1;flex:0 0 auto}
.coach-bubble .coach-tip{font-size:14px;color:var(--ink-soft);line-height:1.65}
.coach-bubble .coach-think{font-size:14px;color:var(--muted)}
.coach-bubble.busy{opacity:.85}

footer.disclaimer{margin-top:26px;padding:14px 16px;border-top:1px solid var(--line);color:var(--muted);font-size:11.5px;line-height:1.6}
footer.disclaimer b{color:var(--ink-soft)}

/* Task-shaped responsive width: linear quiz/recall screens stay readable; only the visual card library expands. */
.topbar,#vc-root,footer.disclaimer{width:100%;max-width:560px;margin-left:auto;margin-right:auto}
#vc-root.vc-phase-cards{max-width:960px}
body[data-vocab-phase="cards"] .topbar,body[data-vocab-phase="cards"] footer.disclaimer{max-width:960px}

/* Study modes + card library (design/vocab-study-modes.md) */
.study-mode-wrap{margin:18px auto 12px;max-width:620px}
.study-modes{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:7px}
.study-mode{position:relative;appearance:none;border:1.5px solid var(--line);border-radius:12px;background:#fff;
  color:var(--ink-soft);padding:11px 7px;min-height:48px;font-size:13px;font-weight:700;cursor:pointer}
.study-mode.selected{border-color:var(--cyan);background:var(--cyan-bg);color:var(--navy)}
/* 2026-10-17(founder iPhone 実機「2 つ同時に選ばれて見える」):旧 = :hover と .selected が同じ見た目。iOS は指の最後の位置に
   :hover が残り、モードを替えると上の行(進み具合など)の高さが変わってボタンが 41px 動く(375px 実測)→ 指の下が隣のボタンになり、
   そちらも選択中に見えた。悬停はマウスの在る端末だけ · 枠の色だけ(選択中と見分けられる)。 */
@media (hover:hover){.study-mode:hover:not(.selected){border-color:var(--cyan)}}
.study-mode span{display:block;font-size:9px;color:var(--cyan);margin-top:2px}
.mode-desc{min-height:19px;color:var(--ink-soft);margin:8px 0 0}
.device-note{margin:14px 0 4px;padding:7px 10px;border-radius:9px;background:#f5f7fa}
.unknown-btn{display:block;width:100%;margin-top:10px;color:var(--muted)}
.choice-headword{display:flex;align-items:center;justify-content:center;gap:9px;flex-wrap:wrap}
.choice-word-audio,.qr-ex-audio{display:flex;align-items:center}
.choice-word-audio .pron-ic,.qr-ex-audio .pron-ic,.card-pron .pron-ic,.vcard-example-controls .pron-ic{
  width:44px;height:44px}
.choice-word-audio .pron-ic svg,.qr-ex-audio .pron-ic svg,.card-pron .pron-ic svg,.vcard-example-controls .pron-ic svg{
  width:19px;height:19px}

/* ★ 四択 揭示面の【共有部品】(単語 recognition と 熟語 cloze が同じ物を使う · quizRevealHtml · 2026-09-21)。
   旧 .choice-teach / .choice-media-*(単語側)と .cloze-verdict / .cloze-rv-* / .cloze-exbox /
   .cloze-audio / .cloze-coll-*(熟語側)を 1 組に置換。両軌で見た目が割れる余地を無くす。 */
.qr-answer{margin-top:14px;padding:13px 14px;border-radius:12px;background:var(--cyan-bg);
  color:var(--navy);line-height:1.55;text-align:left}   /* ★ 统一例文卡(founder 2026-09-23): 去贯穿大竖线 border-left,浅底+圆角已足够区分卡片 */
.qr-answer-grid{display:grid;gap:13px}
.qr-answer-grid.has-image{grid-template-columns:1fr}   /* ★ founder 2026-09-22: 図を上・文を下へ縦積み(単語カード .vcard-image と同じ) —— 図左/文右の並びを廃止 */
.qr-img{width:min(280px,100%);aspect-ratio:3/2;margin:0 auto;border-radius:11px;overflow:hidden;background:#eef3f8;border:1px solid var(--line)}   /* ★ 统一例文卡: 纳入 vcard 响应式 —— aspect-ratio 保持比例(替代固定 height) + min() 随屏宽缩放 */
.qr-img img{display:block;width:100%;height:100%;object-fit:cover}
.qr-body{min-width:0}
.qr-hw{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin-bottom:2px}
/* ★ code フォント(Cascadia)を使わない —— 英語の熟語を「コード」の書体で出すのは去黑客化の方針に反する。
   単語の見出しは本文書体なので、熟語だけ等幅だと同一製品で英語見出しが 2 書体になっていた。 */
.qr-hw b{font-size:22px;font-weight:800;color:var(--navy)}
.qr-badge{font-size:11px;background:#fff;color:var(--cyan);border:1px solid #cfe4f2;border-radius:7px;padding:1px 8px;font-weight:700}
.qr-gloss{font-size:19px;font-weight:800;color:var(--navy);text-align:center}   /* ★ 统一词义(founder 2026-09-23): 居中+粗体大写 */
/* 単語側: 選択肢が既に「意味」→ ここは新情報ではなく「この例文はどの意味か」の標識 → caption へ降格
   (同じ一文が画面に 3 回出ていた問題の 2 つ目 · founder 指摘 2026-09-21)。 */
.qr-gloss.sub{font-size:19px;font-weight:800;color:var(--navy);text-align:center}   /* ★ 统一词义(founder 2026-09-23): 原 caption 降级取消 → 居中+粗体大写 */
.qr-ex{margin-top:6px;padding-left:10px;border-left:3px solid var(--cyan)}   /* ★ 统一例文卡(founder 2026-09-23 改 Q2): 例文段短竖线【保留】—— 标出"这是例文"、有层次,比纯留白好 */
.qr-ex.playing{background:#e6f6fc;border-radius:0 8px 8px 0}
.qr-ex-en{color:var(--ink)}
.qr-ex-en mark{background:#fff3bf;color:var(--navy);font-weight:700;padding:0 3px;border-radius:4px}
.hw-hit{background:#fff3bf;color:var(--navy);font-weight:700;padding:0 3px;border-radius:4px}   /* ★ 统一例文卡: 高亮词统一黄底(原 hw-hit 全站无样式=纯粗体,与 cloze 黄底不一致) */
.qr-ex-ja{margin-top:2px;color:var(--muted)}
.qr-ex-audio{margin-top:6px}
.qr-coll{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin-top:12px}
.qr-coll-label{font-size:11px;color:var(--muted);font-weight:700;letter-spacing:.04em}
/* チップだけは等幅を残す ——「この字面のまま覚える」という合図として実際に機能しているため。 */
.qr-coll-chip{background:#f4f0ff;color:var(--violet);border-radius:999px;padding:3px 11px;font-size:12.5px;
  font-family:"Cascadia Code",Consolas,monospace}

/* FR-VCH-02 · 左右スワイプがブラウザの戻る/進む(履歴ナビ)や横スクロールに化けないように:横方向ジェスチャは
   アプリ(JS)が処理、縦スクロール + ピンチズームはブラウザに残す。overscroll-behavior で横オーバースクロール→
   履歴ナビも封じる。→「スワイプで単語ページの外へ出る」を防ぐ(founder 2026-08-30)。 */
.card-library{padding:20px;touch-action:pan-y pinch-zoom;overscroll-behavior:contain}.card-library-top{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px}
.card-library-meta{display:flex;align-items:center;justify-content:flex-end;gap:12px;min-width:0}
.card-audio-prefs{display:flex;align-items:center;gap:9px;min-width:0}
.card-pref{display:flex;align-items:center;gap:5px}.card-pref-label{font-size:11px;color:var(--muted);white-space:nowrap}
/* Same compact segmented-control language as the recommended adaptive loop, with 44px button hit targets. */
.card-audio-prefs .pron-gseg{height:44px;padding:0 3px;flex:0 0 auto}
.card-audio-prefs .pron-gseg .pg-thumb{top:3px;left:3px;width:44px;height:38px}
.card-audio-prefs .pron-gseg.f .pg-thumb{transform:translateX(44px)}
.card-audio-prefs .pron-gseg .pg{width:44px;height:44px}
.card-count{white-space:nowrap;font-variant-numeric:tabular-nums}
.library-controls{margin:8px 0 16px;display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px}.library-order{display:flex;align-items:center;flex-wrap:wrap;gap:7px}
.library-filter{appearance:none;border:1px solid var(--line);background:#fff;color:var(--ink-soft);
  border-radius:999px;padding:7px 12px;min-height:44px;font-size:12px;font-weight:700;cursor:pointer}
.library-filter.selected{border-color:var(--cyan);background:var(--cyan-bg);color:var(--navy)}
@media (hover:hover){.library-filter:hover:not(.selected){border-color:var(--cyan)}}   /* 同上(iOS の sticky hover · 悬停 ≠ 選択中) */
.library-pos-select{position:relative;display:inline-flex;align-items:center;color:var(--navy)}
.library-pos-select select{appearance:none;min-height:44px;border:1px solid var(--cyan);border-radius:999px;background:#fff;color:var(--navy);
  padding:6px 31px 6px 13px;font:700 12px/1.2 inherit;cursor:pointer;outline:none}
.library-pos-select select:focus-visible{box-shadow:0 0 0 3px rgba(0,160,210,.18)}
.library-pos-select>span:last-child{position:absolute;right:11px;top:50%;transform:translateY(-56%);pointer-events:none;font-size:16px}
.vcard{min-height:330px;border:1.5px solid var(--line);border-radius:20px;background:linear-gradient(160deg,#fff,#f6fbff);
  padding:22px;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 10px 28px rgba(2,45,90,.08)}
/* ★ v1.2(founder 2026-10-08 · design/vocab-example-card-ui.md):頭の絵の幅 = 下の例文枠(.vcard-example max-width:520px)の幅。
   左右の縁が例文枠と揃う(図占満の原則をカード面にも)。高さは 3:2 の比率で決める(旧 240×160 / 手機 240×146 固定は廃止)。 */
.vcard-image-wrap{width:min(520px,100%);aspect-ratio:3/2;margin:16px auto 4px;border-radius:16px;overflow:hidden;
  background:#eef3f8;border:1px solid var(--line);box-shadow:0 5px 16px rgba(2,45,90,.07)}
.vcard-image{display:block;width:100%;height:100%;object-fit:cover}
.vcard-word{font-size:44px;font-weight:800;color:var(--navy);margin-top:12px;overflow-wrap:anywhere;text-align:center;
  transition:color .12s}
/* ★再生中の見出し語（founder 指摘 2026-08-30「朗読の時に単語が Focus されない」）。
   例文には .playing の見た目があったのに、**見出し語には CSS が1行も無かった** ——
   選択題面(.qcard .hw)と辞書面(.lu-hw)はクラスを付けていたのに何も起きていない死んだ指定だった。
   ∴ カード面だけでなく3面まとめて効かせる。下線は文字送りを変えないので行が動かない
   （背景を敷くと見出しの高さが変わり、めくった瞬間に下の内容がずれる）。 */
.vcard-word.playing,.qcard .hw.playing,.lu-hw.playing{
  color:var(--cyan);text-decoration:underline;text-decoration-thickness:3px;text-underline-offset:7px}
.vcard-ipa{color:var(--muted);font-family:"Cascadia Code",Consolas,monospace;margin:3px 0 12px}
/* 「基礎にも収録」標記(design/vocab-per-grade-dedup.md v1.4 · CR-PGD-2)。級バッジ(.sense-grade 塗り/cyan)と
   混同しないよう淡いグレーの破線枠。詳細面は見出し行(28px/800/navy)の中に置くので字の大きさ・太さ・色を戻す。
   inline-block = 再生中の見出し下線(.playing の text-decoration)がこの枠に掛からない。
   ★ v1.4(founder 2026-10-08):単語カード = カードの右上の角(見出しは単独で真ん中に · 長い語でも折れない)·
   詳細 = 見出し行の右端(margin-left:auto · 狭い画面で折り返しても右寄せのまま)。 */
.also-in-foundation{display:inline-block;vertical-align:middle;padding:1px 8px;border:1px dashed #b8c2cc;
  border-radius:999px;color:var(--muted,#6b7a8d);background:transparent;font-size:11px;font-weight:600;line-height:1.6;
  letter-spacing:.02em;white-space:nowrap;text-decoration:none;cursor:help}
.vcard{position:relative}
.vcard>.also-in-foundation{position:absolute;top:10px;right:12px}
.lu-hw .also-in-foundation{margin-left:auto}
/* 答えカード(quizRevealHtml)も同じ規則:見出し行(.qr-hw · 熟語 / 語境填空)の右端 · 見出し行が無い単語の答えカードは
   一番上の右寄せ 1 行(.qr-mark)。絶対配置にしない —— 絵(手機で幅いっぱい)や中央寄せの語義に重ならないように。 */
.qr-hw .also-in-foundation{margin-left:auto}
.qr-mark{display:flex;justify-content:flex-end;margin:-3px -4px 6px}
.card-pron{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:7px}
.card-pron.playing .pron-ic:first-child{border-color:var(--cyan);background:var(--cyan-bg);box-shadow:inset 0 0 0 1px var(--cyan)}
.card-reveal{margin-top:28px}.vcard-back{width:100%;text-align:center;border-top:1px solid var(--line);margin-top:20px;padding-top:18px}
.vcard-gloss{font-size:23px;font-weight:800;color:var(--navy)}
.vcard-example{margin:14px auto 0;max-width:520px;color:var(--ink);line-height:1.55;text-align:left;background:var(--cyan-bg);
  border-left:3px solid var(--cyan);border-radius:0 12px 12px 0;padding:12px 14px}   /* ★ 统一例文卡(founder 2026-09-23): 例文盒の浅蓝底を cyan-bg に統一(旧 #f7fbfe) —— .qr-answer と同系色 */
.vcard-example.playing{background:#e6f6fc;box-shadow:0 0 0 2px #8fd0ec}
.vcard-example-ja{color:var(--muted);margin-top:3px}
.vcard-example-controls{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin-top:9px}
.vcard-example-controls span{color:var(--muted);font-size:11px;margin-left:2px}
/* 多義カードの語義行(CR-VC-8 · founder 2026-08-30)。単語義カードは従来の .vcard-gloss のままで、
   ここは語義が2つ以上ある時だけ使う。**品詞バッジを語義の行に置く**のが要点 —— カード直下に
   1つだけ置いていた頃は cook 名「料理をする人」に【動】が並ぶ矛盾が出ていた。 */
.vcard-senses{display:grid;gap:14px;text-align:left;max-width:520px;margin:0 auto}
.vcard-sense{display:grid;gap:8px}
.vcard-sense + .vcard-sense{border-top:1px dashed var(--line);padding-top:14px}
.vcard-sense-h{display:flex;align-items:baseline;flex-wrap:wrap;gap:7px}
.vcard-sense-h .vcard-sense-ja,.vcard-sense-h .vcard-gloss{flex:1;min-width:0}
/* 頻出星を右端に揃える（★★★/★★/★ の右端一致）。gloss=flex:1 が pos+星を右へ押し、星ブロックは固定幅で右詰め。B/C・founder 2026-09-06 */
.vcard-sense-h .freq-stars{display:inline-flex;justify-content:space-between;align-items:baseline;gap:6px;min-width:5.4em;margin-left:9px}
/* 使い分け(label無し)= 顶格リスト·複数は 1. 2. 番号(counter で顶格·標準 ol の左インデントを出さない)·D/E founder 2026-09-06 */
.use-list{font-size:12.5px;line-height:1.65;color:var(--ink);margin:0}
ol.use-list{list-style:none;padding:0;counter-reset:u}
ol.use-list li{counter-increment:u;display:flex;gap:5px;align-items:baseline;margin:3px 0}
ol.use-list li::before{content:counter(u) ".";flex:none;font-weight:700;color:var(--cyan)}
.vcard-sense-h-solo{padding:6px 0}
/* ★ v1.2(founder 2026-10-08):カード面の語義見出しは 2 行。1 行目 = 番号 + 語義(中央 · 行まるごと)、
   2 行目 = .vcard-sense-meta(級・品詞・頻出・音標/🔊 を中央に)。以前は語義が行の左 6 割に押し込まれ、
   単義カードの 32%(3,192/9,823)が手機で折れていた。番号列と同幅の空き列を右にも置き、語義を本当の中央に。
   ⚠ .vcard の中だけ(🔍 詳細の折りたたみ見出し .lu-fold は左揃えの行のまま · 範囲外)。
   ★ v1.3(CR-VC-22):教学卡の語義リスト(.rv-senses)は単語カード背面と【同じ部品】→ 同じ規則を同じ行で当てる(別に書かない)。 */
.vcard .vcard-sense-h,.rv-senses .vcard-sense-h{display:grid;grid-template-columns:1.6em minmax(0,1fr) 1.6em;align-items:baseline;gap:4px 0}
.vcard .vcard-sense-h-solo,.rv-senses .vcard-sense-h-solo{grid-template-columns:minmax(0,1fr)}
.vcard .vcard-sense-h .vcard-sense-n,.rv-senses .vcard-sense-h .vcard-sense-n{grid-column:1;grid-row:1}
.vcard .vcard-sense-h .vcard-sense-ja,.vcard .vcard-sense-h .vcard-gloss,.vcard .vcard-sense-meta,
.rv-senses .vcard-sense-h .vcard-sense-ja,.rv-senses .vcard-sense-h .vcard-gloss,.rv-senses .vcard-sense-meta{grid-column:2;text-align:center}
.vcard .vcard-sense-h-solo .vcard-gloss,.vcard .vcard-sense-h-solo .vcard-sense-meta,
.rv-senses .vcard-sense-h-solo .vcard-gloss,.rv-senses .vcard-sense-h-solo .vcard-sense-meta{grid-column:1}
.vcard .vcard-sense-h .vcard-sense-ja,.vcard .vcard-sense-h .vcard-gloss,.qr-gloss,
.rv-senses .vcard-sense-h .vcard-sense-ja,.rv-senses .vcard-sense-h .vcard-gloss{text-wrap:balance}
.vcard .vcard-sense-meta,.rv-senses .vcard-sense-meta{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:4px 8px}
.vcard .vcard-sense-meta .freq-stars,.rv-senses .vcard-sense-meta .freq-stars{min-width:0;margin-left:0}
/* 教学卡(design/vocab-example-card-ui.md §2.4 v1.3)。語義リストは単語カード背面と同じ見た目(中央の語義 + 例文枠)。
   判定ラベルの不正解 = 四択の不正解と同じ rose(founder 2026-10-08)· 練習行は語義の下 · 連続ミス時の詳細入口は主ボタン。 */
.rv-senses{text-align:center;margin:12px 0 4px;padding-top:14px;border-top:1px solid var(--line)}
.rv-badge.ng{background:var(--rose-bg);color:var(--rose)}
.rv-practice{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px;margin:14px 0 4px}
.reveal-more .rv-more-deep{margin-top:4px}
/* 提示 = 左に頭像 · 右に「コーチのヒント」+(選んだ語の 1 文)+ 単語詳細と同じ塊(意味の芯 / コアパターン / 覚え方 / 混同)。
   紫の大きな吹き出しはやめる(塊が自分の枠と色を持つ → 二重の枠になる)。founder 2026-10-08。 */
.coach-rescue.teach-tip{background:none;border:0;padding:0;margin:16px 0 6px;gap:12px;align-items:flex-start}
.teach-tip .tt-body{flex:1;min-width:0;text-align:left}
.teach-tip .tt-cap{font-size:12px;font-weight:700;letter-spacing:.02em;color:var(--violet);margin:4px 0 6px}
.teach-tip .tt-lead{margin:0 0 8px;font-size:14px;line-height:1.6;color:var(--ink)}
.teach-tip .tt-lead b{color:var(--navy)}
.teach-tip .tt-body > :last-child{margin-bottom:0}
.reveal-rich .feedback .next{margin-left:auto}   /* 判定行は「次へ」だけ → 四択と同じ右端へ(✍️ は練習行に移った) */
/* 語義の分割(glossHtml):項目は途中で折らない(区切り「・」「/」の所でだけ折る)· 括弧の補足は小さい灰字。 */
.gl-term,.gl-note{display:inline-block;max-width:100%}
.gl-note{font-size:.62em;font-weight:700;color:var(--muted);letter-spacing:.01em}

/* ★ よくある間違い = 誤/正の比較カード。
   founder 2026-10-03 改定(旧 2026-09-05「並列二列で比較」= 広い幅で ✗左|✓右 の 2 欄 → 廃止):
   幅に依らず【常に縦積み】(✗ の行 → ✓ の行 → 解説)。3 行の文頭は同じ左端(記号は固定幅の列 · 折り返しも文字にそろう)。
   ✓ 行は太字にしない —— 太字は字幅が広がり、✗ と共通の前半が横にずれて「どこが違うか」が見えにくくなる。
   強調するのは差異トークン(片方にしか無い語)だけ。 */
.et-box{background:var(--amber-bg);border:1px solid #f0d9a8;border-radius:12px;padding:11px 15px;margin:0 0 12px;container-type:inline-size}
.et-head{display:flex;align-items:center;gap:6px;margin-bottom:7px;font-size:12px;font-weight:700;letter-spacing:.02em;color:var(--amber)}
.et-pair{display:grid;grid-template-columns:minmax(0,1fr);gap:3px;padding:11px 0;border-top:1px dashed #eadfc4}
.et-pair:first-of-type{border-top:0;padding-top:0}
.et-plain{font-size:13.5px;line-height:1.55;color:var(--ink-soft);overflow-wrap:anywhere}
.et-cell{display:flex;gap:7px;align-items:baseline;font-size:14px;line-height:1.55;min-width:0}
.et-mk{flex:none;font-weight:800;width:1.1em;text-align:center}
.et-wrong .et-mk{color:#c0392b}.et-right .et-mk{color:#1e8a4c}
.et-wrong .et-txt{color:#7a5a52}.et-right .et-txt{color:var(--navy)}
.et-txt{overflow-wrap:anywhere;min-width:0}
.et-note{grid-column:1/-1;font-size:11.5px;color:#9a8a6a;padding-left:calc(14px * 1.1 + 7px);margin-top:5px}   /* = .et-mk の幅(1.1em × .et-cell の 14px)+ gap 7px。em で書くと解説の小さい字号で計算され、文頭より 2〜3px 左にずれる(実測) */
.et-diff{background:none;font-weight:700}
.et-wrong .et-diff{color:#c0392b;text-decoration:line-through;text-decoration-color:#e0a0a0}
.et-right .et-diff{color:#1e8a4c;background:#e5f6ec;border-radius:3px;padding:0 2px}
/* 単元 1 つの見出し（番号/caret 無し）· unit-h と同じ縦リズム */
.vcard-sense-n{color:var(--cyan);font-size:13px;font-weight:800}
.vcard-sense-pos{flex:none;border:1px solid var(--cyan);color:var(--cyan);border-radius:4px;
  padding:0 6px;font-size:11px;font-weight:700;line-height:1.7}
/* per-grade 去重の首現級バッジ(design/vocab-per-grade-dedup.md)。継承义にだけ「5級」等を出す。
   pos チップ(cyan 枠)と混同しないよう navy 塗り。本級の义には出さない(gradeBadgeHtml が空を返す)。 */
.sense-grade{flex:none;border:1px solid var(--navy);background:var(--navy);color:#fff;border-radius:4px;
  padding:0 6px;font-size:11px;font-weight:700;line-height:1.7;min-width:2.8em;text-align:center;box-sizing:border-box}
.lu-fold .sense-grade{flex:none}
.vcard-sense-ja{font-size:19px;font-weight:800;color:var(--navy);text-align:center}   /* ★ 统一词义(founder 2026-09-23): 多义/検索の词义も居中(.qr-gloss と一致 · flex:1 の中で中央寄せ) */
/* 語義ごとに発音が割れる語(live /lɪv/ ↔ /laɪv/)の時だけ出る。同じなら出さない＝ノイズにしない。 */
.vcard-sense-ipa{color:var(--muted);font-size:12px;font-family:"Cascadia Code",Consolas,monospace}
/* ★ 同形異音語の義項 🔊(design/vocab-heteronym-sense-audio.md FR-VHS-7/8)。見出し行に収まる小さめ(28px)。
   再生中は顶部 .card-pron.playing と同じ強調。詳細面は折りたたみ button の【兄弟】として右に置く(.lu-sense-hrow)。
   ⚠ 各 vocab 頁の内联 style 要素にある .pron-ic の 30px 指定は本ファイルより【後】に来る → 同じ詳細度だと負ける。
     ∴ `.pron-ic.sense-pron` で詳細度を 1 段上げる(#543 Review N-2)。 */
.pron-ic.sense-pron{flex:none;width:28px;height:28px;align-self:center}
.pron-ic.sense-pron svg{width:15px;height:15px}
.pron-ic.sense-pron.playing{border-color:var(--cyan);background:var(--cyan-bg);box-shadow:inset 0 0 0 1px var(--cyan)}
.lu-sense-hrow{display:flex;align-items:center;gap:8px}
.lu-sense-hrow > .unit-h{flex:1;min-width:0}
/* 元の .vcard-example は `margin:14px auto 0` で**水平中央寄せ**。語義行の中に置くと、
   語義ごとに文の長さが違うぶん左端がバラバラにずれる（実測で気づいた）。左揃えに固定する。 */
.vcard-sense .vcard-example{margin:0;max-width:none}
/* ★ v1.2(founder 2026-10-08):語義の絵は【その語義の例文枠の中・先頭に幅いっぱい】(.ex-img · 🔍 詳細 / 四択揭示と
   同じ部品)。旧「絵 | 例文」の 2 段組(.vcard-sense-body / .vcard-sense-img · 120〜200px)は廃止。
   絵の無い語義は例文枠だけ(空の絵枠を置かない = 未作成と壊れているを取り違えさせない)。 */
.vcard-sense-ex{min-width:0}
/* ★ スポットライト(多義 · 今読んでいる語義)= 他義を淡色にするだけ。
   v1.2(founder 2026-10-08):画像の拡大(旧 2026-09-12:200→280px)は廃止 —— 拡大は下の内容を押し下げて画面が揺れ、
   「どの語義を読んでいるか」は淡色だけで既に伝わる(拡大の情報量はゼロ)。語義の絵は常に例文枠の幅いっぱい
   = 旧設計の狙い「各語義の絵を単義と同じ大きさに」は拡大しなくても常に満たされる。
   ⚠ この規則に width / height / grid-template-columns / transform を足さない(テストが守る)。 */
.vcard-senses.autoplaying .vcard-sense{transition:opacity .3s ease}
.vcard-senses.autoplaying .vcard-sense:not(.active-play){opacity:.32}
.vcard-usage{display:flex;align-items:baseline;justify-content:center;flex-wrap:wrap;gap:7px;margin:12px auto 0;
  padding:8px 11px;border-radius:10px;background:#f4f0ff;color:var(--violet)}
.vcard-usage span{font-size:11px;font-weight:700}.vcard-usage b{font-size:14px;font-family:"Cascadia Code",Consolas,monospace}
/* 詳細（辞書浮層）への導線。★ボタンにしない —— 主 CTA の「次へ」と視覚的に競合させないため。
   カードが短いことが学習効果の前提なので、この導線は「出口」であって「続き」ではない。 */
/* ══ 単語検索 / 語の詳細 オーバーレイ（CR-VC-15 · founder 指摘 2026-08-30）══════════════
   「iPad · iPhone · タブレット · PC どれでも視覚的に最適に」

   ★ 設計の芯: **最適 ≠ 目一杯広げる**。この面は文章が主なので、幅を増やしたぶんを
     そのまま行長に使うと読みにくくなる（英文の快適な行長は45〜75字）。
     ∴ **枠は端末なりに大きく取り、中身は「行長を保ったまま欄を増やす」**で幅を使う。
   ★ スクロールは1か所だけ。見出し（語 + ✕）は常に見えるよう固定し、本文だけが動く。
     以前は外側のカードと内側の .lookup-card/.lookup-list の両方に高さ制限があり、
     どちらを動かせばよいか分からない二重スクロールになっていた。
   ★ 高さは vh ではなく **dvh**。iOS Safari はアドレスバーの伸縮で vh がズレ、
     画面下の操作（✕ や最後の例文）が隠れる。 */
.settings-card.lookup-modal{
  display:flex;flex-direction:column;padding:0;overflow:hidden;
  /* ★min-width:0 が要る。オーバーレイは display:flex なのでカードは flex アイテムであり、
     既定の min-width:auto では**中身より狭くなれない** —— 中に横に広い塊が1つあるだけで
     カード全体が画面より広くなり、見出しの ✕ が画面外へ押し出される（iPhone で実際に起きた）。 */
  min-width:0;
  width:min(560px,94vw);max-height:92dvh}          /* 既定（小さめの窓）。下で端末別に上書き */
.lookup-modal .settings-head{flex:none;margin:0;padding:16px 18px 12px;border-bottom:1px solid var(--line)}
.lookup-body{flex:1;min-width:0;min-height:0;overflow:auto;overflow-wrap:anywhere;padding:16px 18px 20px;
  -webkit-overflow-scrolling:touch;overscroll-behavior:contain}
/* 内側の高さ制限は外す（本文が唯一のスクロール領域） */
.lookup-ovl .lookup-card,.lookup-ovl .lookup-list{max-height:none;overflow:visible;min-width:0}
/* 長い1語（URL 風の綴りや語根の表記）で行が伸びて横スクロールが生えるのを防ぐ */
.lookup-body .ex-en,.lookup-body .lu-hw,.lookup-body .vcard-sense-ja{overflow-wrap:anywhere}
/* ★ 2026-09-05: overflow-wrap は**継承しない** —— 上の .lookup-body 指定は入れ子の散文欄
   （使い分け・気づき・覚え方・語根・搭配…）に効かない。CJK 散文に埋まった英語の長い連なりが
   折れず、grid/flex アイテムの min-width:auto と相まって语义単元が視口を突き破っていた（実機幅で
   右端が切れる）。散文クラスに直接 overflow-wrap を効かせ、min-width:0 で狭くなれるようにする。 */
.lookup-body :where(.use-val,.use-key,.use-pair-note,.use-pair-ja,.col-chip,.wf-gloss,.wf-opaque,.rc-mean,.rc-chip,.rc-note,.aha-tip,.hook-tip,.core-tip,.fam-chip,.vcard-sense-en,.ck-expr){overflow-wrap:anywhere;min-width:0}
/* ★ .wf-part small は既定 white-space:nowrap（短い部品グロスを1行に保つため）。だが稀に
   グロスが長文の語（explore の -plore など）で視口を 2〜3px 突き破る。lookup-body 内でだけ
   より高い詳細度で折り返しを許し、部品チップを容器幅に収める（index.html の nowrap を上書き）。 */
.lookup-body .wf-part{max-width:100%}
.lookup-body .wf-part small{white-space:normal;overflow-wrap:anywhere}

/* スマホ: 全画面シート。ノッチ/ホームバーぶんを避ける（iPhone で ✕ や末尾が指に隠れる） */
@media (max-width:639px){
  .settings-overlay.lookup-ovl{padding:0}
  /* ★ 100vw ではなく 100% —— **100vw はスクロールバーの幅を含む**ので、可視幅より広くなり
     カードが右へはみ出して見出しの ✕ が画面外へ出る（実機の iPhone 幅で再現・実測で確認）。
     オーバーレイは inset:0 なので、100% がそのまま可視領域の幅になる。高さも同じ理由で 100%。 */
  .lookup-ovl .lookup-modal{width:100%;max-width:100%;height:100%;max-height:100%;border-radius:0}
  .lookup-modal .settings-head{padding-top:calc(14px + env(safe-area-inset-top))}
  .lookup-body{padding-bottom:calc(24px + env(safe-area-inset-bottom))}
}
/* タブレット縦 / iPad 縦: ほぼ全画面。周りの余白は「閉じられる」ことが分かる最小限だけ */
@media (min-width:640px) and (max-width:1023px){
  .settings-card.lookup-modal{width:94vw;max-height:94dvh}
}
/* iPad 横 / ノートPC */
@media (min-width:1024px) and (max-width:1279px){
  .settings-card.lookup-modal{width:min(900px,92vw);max-height:92dvh}
}
/* デスクトップ: これ以上広げても行が長くなるだけなので、幅は 1080px で止めて2欄に流す */
@media (min-width:1280px){
  .settings-card.lookup-modal{width:min(1080px,88vw);max-height:90dvh}
}
/* ★ 2026-09-05 founder: 深度層を折りたたみアコーディオン化したので 2欄 CSS multi-column は廃止。
   全幅アコーディオンバーを multi-column に流すと箱が割れて見える（founder 指摘）。全幅・単欄で統一。 */
.lu-deep > *{margin-bottom:10px}
.lu-deep > *:last-child{margin-bottom:0}

/* 詳細面の語義行（CR-VC-14）。カードと同じ切り方で見せる —— 同じ語がカードでは2語義・
   詳細では1行、では学習者がどちらを信じてよいか分からない。 */
.lu-senses{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;margin:10px 0 4px}
.lu-sense{display:grid;grid-template-columns:minmax(0,1fr);gap:7px}
.lu-sense + .lu-sense{border-top:1px dashed var(--line);padding-top:15px}
.lu-sense .examples-block{margin:0}
/* ★ 统一例文卡(founder 2026-09-23): 补齐裸奔的 .ex-*(检索/教学揭示) —— 此前 .ex-img 无 CSS 致图片拉宽变形。
   给图片响应式比例(aspect-ratio 3/2 · object-fit cover · min 宽度)+ 例文段短竖线(保留)+ 基础字号,与 .qr-*/.vcard 一致。 */
.ex-img{display:block;width:100%;aspect-ratio:3/2;object-fit:cover;border-radius:11px;border:1px solid var(--line);background:#eef3f8;margin:0 0 10px}   /* ★ 统一例文卡(founder 2026-09-23 v3): 图占满卡片(width:100%)·左对齐(margin:0 0 10px) —— 图文左边缘对齐·无空白·统一多义单词卡 .vcard-sense-img */
.ex-item{max-width:460px;background:var(--cyan-bg);border-left:3px solid var(--cyan);border-radius:0 12px 12px 0;padding:12px 14px;margin:0 0 12px}   /* ★ 统一例文卡(founder 2026-09-23 v3): 盒=一层(图+例文同盒·【一条】短竖线·修双 border-left"两条线"bug) + max-width:460(限宽·防大屏图孤悬) */
.ex-item.playing{box-shadow:0 0 0 2px #8fd0ec}
.ex-text{min-width:0}   /* ★ 纯文字·无独立盒(盒在 .ex-item 外层) —— 消除第二条竖线 */
.ex-en{color:var(--ink);line-height:1.55}
.ex-ja{margin-top:2px;color:var(--muted)}
/* ★ 例文の文字の大きさ(v1.2 · founder 2026-10-08「例文の字が小さい所がある · 画面幅に合わせて」)。
   3 面(単語カード / 四択揭示 / 🔍 詳細・教学揭示)を【1 本の規則】に:以前は 16/13 · 14/12 · 16/13(各級頁の内联が上書き)と割れていた。
   大きさは【例文枠の幅】で決める(cqi = 枠の幅の 1%)—— 画面幅(vw)ではない:同じカードが学習頁と検索浮層で
   違う幅に出るため。絵は枠の幅いっぱいなので、文字は絵と同じ比率で大きくなる(iPad で「絵は大きいのに字は小さい」を無くす)。
   手機の枠(~270px)= 英文 17px / 訳 14px · 枠が広がると最大 20px / 16px。cqi を解さない古いブラウザは直前の固定値。
   ⚠ 各級 index.html の内联 .ex-en / .ex-ja に字号を書き戻さない(内联が後に読まれて上書きする · テストが守る)。 */
.vcard-example,.qr-ex,.ex-item{container-type:inline-size}
.vcard-example-en,.qr-ex-en,.ex-en{font-size:17px;font-size:clamp(17px,calc(13px + 1.4cqi),20px)}
.vcard-example-ja,.qr-ex-ja,.ex-ja{font-size:14px;font-size:clamp(14px,calc(11.5px + .9cqi),16px)}
.ex-controls{margin-top:6px}
/* ★ 分型整理(founder 2026-09-09「合并·取最优·零丢失」の高附加価値層): 用法パターン別に例文を束ねる。
   ラベル=navy chip・意味=cyan・注記=muted。パターン群は左に細い罫で視覚的にグルーピング。 */
.examples-block.grouped .ex-pattern{border-left:3px solid #e2ebf5;padding-left:10px}
.examples-block.grouped .ex-pattern + .ex-pattern{margin-top:13px}
.ex-pat-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:8px;margin:0 0 2px}
.ex-pat-label{flex:none;background:var(--navy);color:#fff;border-radius:5px;padding:1px 8px;font-size:12px;font-weight:800}
.ex-pat-mean{color:var(--cyan);font-weight:700;font-size:13.5px;min-width:0}
.ex-pat-note{color:var(--muted);font-size:12px;margin:0 0 5px;line-height:1.55}

/* ★ 2026-09-05(founder承認): 多義語の語義単元を盒式アコーディオンに（右カレット・番号chip・カード枠）。
   単義(.lu-fold 無し)は従来どおり枠なしの見出し。深度層 .fold と同じ視覚言語・階層は重みで区別。 */
.lu-senses{gap:10px}
.lu-sense.lu-fold{border:1px solid var(--line);border-radius:12px;background:#fff;overflow:hidden;padding-top:0}
.lu-fold:not(.is-closed){border-color:#cfe0f5;box-shadow:0 1px 6px rgba(2,45,90,.05)}
.lu-fold .unit-h{padding:11px 14px;background:#fbfcfe;border-radius:0;gap:9px;flex-wrap:nowrap}
.lu-fold:not(.is-closed) .unit-h{background:#f4f9fd}
.lu-fold .unit-h:hover{background:#eef6fc}
.lu-fold .vcard-sense-n{flex:none;background:var(--cyan);color:#fff;min-width:20px;height:20px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:800}
.lu-senses .vcard-sense-ja{text-align:left}   /* ★ founder 2026-09-25: 検索/詳細面は solo 単義の词义も左对齐(多义 .lu-fold と揃える · 卡片面 .vcard-sense-ja=居中は不変·検索面のみ左) */
.lu-fold .vcard-sense-ja{flex:1;min-width:0;font-size:17px;text-align:left}   /* ★ founder 2026-09-23: 検索の折叠头词义は左对齐(跟着序号·folded header 是"行"非"大标题") */
.lu-fold .ck-expr{flex:1;min-width:0}   /* chunk(重要表現)の見出しも伸ばし、バッジ/星/カレットを右へ */
.lu-fold .vcard-sense-pos,.lu-fold .freq-stars,.lu-fold .vcard-sense-ipa{flex:none}
/* 右カレット: 下向▼(閉)→回転して上向(開)。border-triangle を作り直す(既存の左カレットを上書き) */
.lu-fold .unit-caret{flex:none;margin-left:2px;width:0;height:0;border-top:6px solid var(--muted);border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:0;transform:none;transition:transform .15s;align-self:center}
.lu-fold:not(.is-closed) .unit-caret{transform:rotate(180deg)}
.lu-fold .unit-body{padding:12px 14px 13px;border-top:1px solid var(--line)}
.lu-fold .unit-body>:first-child{margin-top:0}
.lu-deep-title{flex:1;min-width:0;font-weight:700;color:var(--navy);font-size:13.5px}   /* 深度アコーディオンの題（語のしくみ/気づき） */
.vcard-more{display:inline-flex;align-items:center;gap:4px;margin:14px auto 0;background:none;border:0;
  color:var(--cyan);font-size:12.5px;font-weight:600;cursor:pointer;padding:8px 10px;border-radius:9px;
  font-family:inherit;min-height:44px}
.vcard-more:hover{background:var(--cyan-bg)}
.vcard-more:focus-visible{outline:3px solid rgba(0,146,200,.28);outline-offset:2px}
.reveal-more{text-align:center;margin:6px 0 0}   /* 四択/adaptive 答題後の「この語をもっと詳しく →」導線を中央寄せ(vcard-more を流用 · FR 2026-09-07) */
.card-actions{display:flex;justify-content:center;gap:10px;margin-top:14px}.card-complete .card-back{display:block;margin-bottom:12px}
.card-done-count{font-size:13px;color:var(--cyan);font-weight:700;margin:-2px 0 10px}   /* ★ REC-LO-2/完成页: 完成感「刚看了 X 张卡」 */
.card-cta-lg{padding:13px 28px;font-size:16px}   /* ★ 完成页主 CTA 放大 */
/* 単語カード: 自動再生(聞き流し) pill(顶栏右端·頻出順/品詞別 の隣) + 前後ナビ (design/vocab-cards-hands-free.md) */
.autorun-slot{display:inline-flex;align-items:center;gap:8px;margin-left:auto}   /* ★ founder 2026-09-14: 自動再生を行右端へ(1/10 と右縁を揃える·全幅スタック時) */
/* OFF = 白地 + cyan アウトライン + cyan の▶アイコン(灰の未選択 chip とも、cyan-bg の選択済 chip とも別物 · アイコンで更に差別化)。
   ON = navy 実心(白文字)で「稼働中」を一目で。emphasized だが navy の主 CTA(意味を見る/次へ)とは別階層(アウトライン)。 */
.autorun-btn{display:inline-flex;align-items:center;gap:7px;min-height:40px;padding:7px 15px;border-radius:999px;
  border:1.5px solid var(--cyan);background:#fff;color:var(--navy);font-weight:700;font-size:13px;cursor:pointer;white-space:nowrap}
.autorun-btn .ic{display:inline-flex}.autorun-btn .ic svg{width:16px;height:16px;color:var(--cyan)}
.autorun-btn:hover{background:var(--cyan-bg)}
.autorun-btn.is-on{background:var(--navy);border-color:var(--navy);color:#fff}
.autorun-btn.is-on .ic svg{color:#fff}
.autorun-hint{white-space:nowrap;font-variant-numeric:tabular-nums}
.card-nav{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:16px;flex-wrap:wrap}
.card-nav .btn{min-width:96px}
.card-prev[disabled]{opacity:.4;pointer-events:none}
.card-notice{position:fixed;z-index:20;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));transform:translateX(-50%);
  width:max-content;max-width:calc(100vw - 32px);padding:10px 15px;border:1px solid #9dd9ed;border-radius:999px;
  background:var(--navy);color:#fff;box-shadow:0 8px 24px rgba(2,45,90,.22);font-size:13px;font-weight:700;text-align:center}

/* 録音 consent(SEC-VT-04)+ 誠実 notice(FR-VT-05/07) — 既存 .settings-overlay/.settings-card を再利用し、本文と操作列だけ最小定義 */
.vc-ai-msg{line-height:1.65;margin:6px 0 2px;font-size:14px}
.vc-ai-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end;margin-top:16px}
/* ★N-3:「確認中…」トーストだけ Turnstile widget(#vc-ts · fixed · bottom:16px · 高さ≒65px)の上へ退避。
   両者は同じ下中央スロットに【同時に】出る設計 → widget 優先(挑戦は到達可能でなければならない)のまま重なりを解消。 */
.card-notice.vc-notice-raised{bottom:calc(76px + env(safe-area-inset-bottom))}

@media(max-width:560px){
  .study-modes{grid-template-columns:1fr}.study-mode{padding:9px}.vcard{min-height:300px;padding:18px}
  .settle .stats,.buckets{grid-template-columns:repeat(2,minmax(0,1fr))}
  .card-actions,.weak-actions{flex-direction:column}.card-actions .btn,.weak-actions .btn{width:100%}
  .weak-summary-head,.weak-progress-title{flex-direction:column}.weak-counts{justify-content:flex-start}
  .weak-list li>span:first-child{flex-direction:column;align-items:flex-start;gap:0}
  .vcard-image-wrap{margin-top:13px}.vcard-word{font-size:38px}.card-library{padding:14px}.library-filter{padding:6px 10px}
  .card-library-top{flex-wrap:wrap}.card-library-meta{width:100%;justify-content:space-between;gap:8px}
  /* FR-VCH-05 · 手機では自動再生 pill を独立の全幅・大タップ行へ(筛選 chip の下に折返し) */
  .library-controls{justify-content:space-between}.autorun-slot{flex:1 1 100%}
  .autorun-btn{width:100%;justify-content:center;min-height:44px;font-size:14px}
  .card-audio-prefs{gap:7px}.card-pref{gap:3px}.card-pref-label{font-size:10px}
  .card-audio-prefs .pron-gseg .pg{width:44px}.card-audio-prefs .pron-gseg .pg-thumb{width:44px}
  .card-audio-prefs .pron-gseg.f .pg-thumb{transform:translateX(44px)}
  .qr-answer-grid.has-image{grid-template-columns:1fr}.qr-img{width:min(220px,100%);height:auto;aspect-ratio:3/2;margin:0 auto}
  .vcard-example{padding:11px 12px}
  /* 手機は .vcard の上余白が 18px しかなく、右上の「基礎にも収録」(高さ約 20px)が絵・見出しに触れる → 標記のあるカードだけ上を空ける */
  .vcard:has(>.also-in-foundation){padding-top:30px}
}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}
}

@media(min-width:600px) and (max-width:899px){
  .card-library{padding:24px}
}

@media(min-width:900px){
  .card-library{padding:24px 28px}
  /* ★ founder 2026-09-14: 制御域は 2 列グリッド廃止 → 全幅スタック。1/10(第一行右端)と 自動再生(末行右端)が
     同じ右縁で揃う(founder リクエスト)。下の .vcard.has-image グリッドは別物ゆえ不変。 */
  .vcard.has-image{min-height:440px;padding:26px 32px;display:grid;align-items:center;justify-content:stretch;
    grid-template-columns:minmax(300px,42%) minmax(0,1fr);grid-template-areas:
      "image word"
      "image ipa"
      "image pron"
      "image back";
    column-gap:38px;row-gap:4px}
  .vcard.has-image .vcard-image-wrap{grid-area:image;width:100%;height:280px;margin:14px 0 0;align-self:center}
  .vcard.has-image .vcard-word{grid-area:word;margin-top:18px;align-self:end;justify-self:center}
  .vcard.has-image .vcard-ipa{grid-area:ipa;justify-self:center;margin:2px 0 8px}
  .vcard.has-image .card-pron{grid-area:pron;justify-self:center}
  .vcard.has-image .card-reveal{grid-area:back;justify-self:center;align-self:start;margin-top:22px}
  .vcard.has-image .vcard-back{grid-area:back;align-self:start;margin-top:14px;padding-top:16px}
  /* 多義カードをめくった状態は**1欄**（頭の絵を隠すので2欄にする理由が無い · CR-VC-11）。
     ★ v1.2(founder 2026-10-08):旧「広い画面は語義欄を 700px に広げ、絵 150px を例文の左に」は廃止。
     絵は例文枠の中に幅いっぱいで入るので、700px では絵が 670px に膨らむ。語義欄は既定の 520px
     (= 単義の例文枠と同じ幅)のまま中央に置く。 */
}

/* ★ VTS 档 deck（design/vocab-tier-serving.md v3.0「一词一卡」· Q4）：義級の **grade バッジ**。
   一词一卡で複数级の义が同居する（take：取る5級/乗る4級/かかる3級）ので、各义に「何级で初出か」を
   小さく示す。品詞バッジの隣に置く house cyan の小ピル。per-grade deck の senses は grade を持たない →
   gradeBadgeHtml が空 → このバッジは档 deck でだけ現れる（per-grade 面は現状不変·最小改動）。
   ★ 旧「链回」(.link-sec/.lk-*) は R4′ 取消で削除。 */
.sense-grade{display:inline-block;font-size:10.5px;font-weight:700;line-height:1.5;color:var(--cyan);background:var(--cyan-bg,#e6f4fa);border:1px solid #cfe8f5;border-radius:6px;padding:1px 7px;margin-left:5px;white-space:nowrap;vertical-align:middle}

/* ── 3-language card (design/vocab-3lang-card.md) ── モード行(音声+モード+自動再生) + 聞き取り時の見出しプレースホルダ */
.tlang-row{align-items:center}
.tlang-mode{display:inline-flex;align-items:center;gap:6px}   /* モードの文字と下拉を離さない(手机の space-between でも 1 組) */
.tlab{font-size:10.5px;font-weight:600;letter-spacing:.02em;color:var(--muted,#6b7a8d);align-self:center}
/* 聞き取り(showWord OFF): ▢▢▢(豆腐)をやめ 🎧+淡ヒントで「音で当てる」意図を明示 */
.vcard-word-listen{display:inline-flex;flex-direction:column;align-items:center;gap:2px;line-height:1.15}
.vcard-listen-ic{font-size:.82em}
.vcard-listen-hint{font-size:14px;font-weight:600;letter-spacing:.05em;color:var(--muted,#6b7a8d)}

/* ── 自動再生 専注モード(focus mode · founder 2026-09-16) ─────────────────────────────
   ハンズフリー自動再生中(body.vc-autorun-focus)は顶部の控件を let路 → カード最大化 + 焦点が顶へ。
   .topbar/.card-library-top/.library-controls は非 sticky ゆえ純 class で畳める(opacity+margin+padding が
   主アニメ · max-height:0 は最終的に場所を取らせない為 · 起点の跳びは opacity 淡出が覆う)。
   .progress/.vcard/.card-nav は残す(進捗が見える · 停止後すぐ手動導航へ戻れる)。停止入口は .autorun-hud。 */
body.vc-autorun-focus .topbar,
body.vc-autorun-focus .card-library-top,
body.vc-autorun-focus .library-controls{
  max-height:0;opacity:0;margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0;
  overflow:hidden;pointer-events:none;
  transition:max-height .34s ease,opacity .22s ease,margin .34s ease,padding .34s ease;
}
/* 焦点スクロール:顶に貼り付けず少し余白(見やすさ · 悬浮 HUD と干渉しない)。
   v1.2:例文ブロック(単義カード / 四択の答え / 教学卡・詳細)も焦点になる(autoFocusScroll · 全画面共通)。 */
.vcard,.vcard-sense,.vcard-example,.qr-ex,.ex-item{scroll-margin-top:14px}
/* 悬浮 HUD:自動再生中だけ出す固定の極簡コントロール(停止 + 進捗)。navy 丸ピル · 画面下中央。 */
.autorun-hud{position:fixed;z-index:30;left:50%;bottom:calc(18px + env(safe-area-inset-bottom));transform:translateX(-50%);
  display:inline-flex;align-items:center;gap:10px;background:rgba(2,45,90,.94);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:999px;padding:7px 8px;
  box-shadow:0 6px 22px rgba(2,45,90,.30)}
.autorun-hud-btn{display:inline-flex;align-items:center;gap:7px;min-height:40px;padding:8px 18px;border-radius:999px;
  border:none;background:#fff;color:var(--navy);font:inherit;font-weight:800;font-size:14px;cursor:pointer;transition:filter .12s ease}
.autorun-hud-btn .ic{display:inline-flex}.autorun-hud-btn .ic svg{width:16px;height:16px;color:var(--cyan)}
.autorun-hud-btn:hover{filter:brightness(1.04)}
.autorun-hud-pos{color:#cfe0f5;font-size:13px;font-weight:700;padding-right:8px;font-variant-numeric:tabular-nums}
@media(max-width:560px){.autorun-hud{bottom:calc(13px + env(safe-area-inset-bottom))}.autorun-hud-btn{min-height:44px}}

/* ── 単語・熟語 統一検索(design/vocab-search-unified.md · 型分段 + 情境化 sort) ──────────
   ★ 新 lookup class は styles.css:664 の方針どおり**ここ 1 か所**(8 静的HTML は触らない · 全級に効く)。
     型分段は home の track-toggle と同じ pill 意匠(house 一貫)+ 計数バッジ。 */
.lookup-types{display:flex;gap:2px;width:fit-content;max-width:100%;flex-wrap:wrap;margin:0 0 10px;
  background:#eef2f6;border:1px solid var(--line);border-radius:999px;padding:3px}
.lookup-type{border:none;background:transparent;color:var(--muted);font-weight:700;font-size:13px;
  padding:7px 15px;min-height:40px;border-radius:999px;cursor:pointer;transition:.15s;white-space:nowrap;
  display:inline-flex;align-items:center;gap:6px;font-family:inherit}
.lookup-type:hover:not(.on){color:var(--navy)}
.lookup-type.on{background:#fff;color:var(--navy);box-shadow:0 1px 3px rgba(2,45,90,.12)}
.lookup-type .lt-c{font-size:11px;font-weight:700;color:#93a1b0;background:#fff;border:1px solid var(--line);
  border-radius:999px;padding:0 7px;line-height:17px}
.lookup-type.on .lt-c{color:var(--cyan);background:var(--cyan-bg);border-color:transparent}
.lookup-order-row{margin:0 0 12px}

/* ── 単語カード プレビュー(design/vocab-word-card-preview.md · 行アイコン + 詳細上部バー) ──────
   ★ 新 lookup class は styles.css:664 方針どおり**ここ 1 か所**(8 静的HTML は触らない)。 */
.lookup-row-wrap{display:flex;align-items:stretch;gap:6px}
.lookup-row-wrap .lookup-row{flex:1;min-width:0}
/* 2026-10-11:見出し語が釈義に押されて「la / st」と語の途中で折れていた(外側から overflow-wrap:anywhere を継承)。
   見出し語は語の途中で折らない(熟語は空白で折れる)· 折り返すのは釈義の側。検索と苦手の一覧で共通。 */
.lookup-row .lr-hw{overflow-wrap:normal}
.lookup-row-card{flex:none;width:46px;border:1px solid var(--line);background:#fff;border-radius:10px;
  color:var(--navy,#022d5a);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;font-family:inherit}
.lookup-row-card:hover{background:var(--cyan-bg,#e6f4fb);border-color:var(--cyan);color:var(--cyan)}
.lookup-detail-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
.lookup-detail-bar .lookup-back{margin-bottom:0}
.lookup-card-open{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--cyan);
  background:var(--cyan-bg,#e6f4fb);color:var(--navy,#022d5a);border-radius:10px;padding:7px 13px;
  font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;white-space:nowrap}
.lookup-card-open:hover{background:#d6ecf9}
.lookup-card-open svg{flex:none}

/* ── founder 単語ラボ(design/founder-word-lab.md Phase 1 · founder-only · 下書き面) ──────────
   ★ ここに置く理由:`.lookup-*` の一部は **8 枚の静的 vocab HTML の中に** 直書きされているが、
     それらは「触らない」(全級検索の注入と同じ方針)。共有 styles.css は 8 枚とも読むので、
     新しい class は**ここ 1 か所**に置けば全級に効く。 */
.lookup-lab-cta{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 8px 4px}
.lookup-lab{margin-top:14px;padding:14px;border:1px solid var(--line,#dbe4ee);border-radius:12px;background:#fbfdff}
/* 帯は常に出る(FR-FWL-07):これが製品内容と見分けが付かなくなる事を防ぐ唯一の視覚的手掛かり。 */
.lab-band{display:inline-block;margin-bottom:10px;padding:3px 10px;border-radius:999px;
  background:#fff4e5;border:1px solid #f0d2a6;color:#8a5205;font-size:11.5px;font-weight:800;letter-spacing:.02em}
.lab-hw{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin-bottom:6px}
.lab-hw b{font-size:19px;color:var(--navy,#022d5a)}
.lab-core{margin:6px 0 10px;padding:8px 11px;border-left:3px solid var(--cyan,#0092c8);background:#f2f9fd;border-radius:0 7px 7px 0;font-size:13px}
.lab-sense{padding:8px 0;border-top:1px dotted var(--line,#dbe4ee)}
.lab-sense-hd{font-size:13.5px;color:var(--navy,#022d5a);margin-bottom:3px}
.lab-ex{display:flex;flex-direction:column;gap:6px;margin:6px 0 12px}
.lab-ex .lookup-row{text-align:left;align-items:flex-start;gap:7px}
.lab-ex .lookup-row.selected{border-color:var(--cyan,#0092c8);background:#f2f9fd}
.lab-ul{margin:4px 0 10px;padding-left:20px;font-size:12.5px;color:#55687a}
.lab-ul li{margin:2px 0}
.lab-foot{display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  padding-top:11px;margin-top:6px;border-top:1px solid var(--line,#dbe4ee)}
/* ── 下書き一覧（Phase 1.5 · 取り出し口）────────────────────────────── */
.lab-list{display:flex;flex-direction:column;gap:6px;margin:10px 0}
.lab-row{display:flex;gap:8px;align-items:stretch}
.lab-row .lookup-row{flex:1 1 auto;text-align:left;align-items:center;gap:8px}
.lab-row .library-filter{flex:none;white-space:nowrap}
.lab-dup{flex:none;font-size:10.5px;font-weight:800;padding:1px 7px;border-radius:999px;
  background:#fdf2f1;border:1px solid #f0c5c1;color:#b3261e}

/* ── 設定パネル(2026-10-17 · founder 承認の再設計 · design/vocab-study-modes.md §11)────────────────
   分組タイトル + 白いリスト(iOS 設定 / Material 3 のリストと同じ形)。1 行 1 項目:名前は左、操作は右。
   二択 = スイッチ(行全体が押せる · 行の高さ 48px = 44px の触れる範囲)· 3〜5 択 = 分段(全体に淡い底色 · 選択中は白)。
   説明は各組の下(.sp-foot)。旧 .settings-sect / .ap-seg の入れ子の箱は使わない。
   ⚠ 各級 index.html の <style> が後から読まれるので、ボタンの上書きは .sp-card で特定度を上げる。
     .settings-card / .settings-head 自体は検索の浮層・録音の同意でも使う → .sp-card が付いた設定パネルだけに効かせる。 */
.sp-card > .settings-head{position:sticky;top:-18px;z-index:2;background:#fff;margin:-18px -18px 4px;padding:14px 18px 10px;border-bottom:1px solid var(--line)}
.sp-plan{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:12px;background:#f4f8fc;border:1px solid var(--line);margin-top:12px}
.sp-plan .sp-ic{color:var(--cyan);display:inline-flex;flex:none}
.sp-plan .sp-ic svg{width:18px;height:18px}
.sp-plan .sp-plan-t{flex:1;min-width:0;font-weight:700;font-size:15px;color:var(--ink);line-height:1.3}
.sp-plan .sp-plan-t small{display:block;font-weight:400;font-size:12px;color:var(--muted);margin-top:2px}
.sp-h{font-size:12px;font-weight:700;color:var(--muted);letter-spacing:.06em;margin:18px 4px 6px}
.sp-list{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.sp-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 12px;padding:10px 14px;min-height:48px;box-sizing:border-box;width:100%}
.sp-row + .sp-row{border-top:1px solid var(--line)}
.sp-row.sp-col{flex-direction:column;align-items:stretch}
.sp-lab{font-size:15px;font-weight:600;line-height:1.3;color:var(--ink);text-align:left}
.sp-lab small{font-weight:400;color:var(--muted);font-size:12px;margin-left:6px}
.sp-foot{font-size:12px;color:var(--muted);line-height:1.5;margin:6px 6px 0}
/* 二択 = スイッチ行(button[role=switch] が行そのもの) */
button.sp-row.sp-swrow{border:0;background:#fff;font:inherit;cursor:pointer;color:inherit;margin:0;border-radius:0;flex-wrap:nowrap}
.sp-row + button.sp-row.sp-swrow, button.sp-row.sp-swrow + .sp-row{border-top:1px solid var(--line)}
button.sp-row.sp-swrow:focus-visible{outline:2px solid var(--cyan);outline-offset:-2px}
.sp-sw{position:relative;flex:none;width:51px;height:31px;border-radius:999px;background:#cfd6e2;transition:background .15s}
.sp-sw::after{content:"";position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:left .15s}
.sp-sw.on{background:var(--cyan)}
.sp-sw.on::after{left:22px}
@media (prefers-reduced-motion:reduce){.sp-sw,.sp-sw::after{transition:none}}
/* 3〜5 択 = 分段(中身は既存の .btn.btn-primary / .btn.ghost のまま = テストと他の面の記法を変えない) */
.sp-seg{display:flex;background:#eef2f7;border-radius:10px;padding:2px;gap:2px}
.sp-card .sp-seg .btn{flex:1 1 0;min-width:0;min-height:40px;margin:0;padding:0 4px;border:0;border-radius:8px;background:transparent;color:var(--ink-soft);font-size:14px;font-weight:600;box-shadow:none;white-space:nowrap}
@media (hover:hover){.sp-card .sp-seg .btn:hover{background:rgba(255,255,255,.55);color:var(--navy)}}   /* iPhone の押した後に残るホバーで「2 つ選択中」に見えないように(#671 と同じ扱い) */
.sp-card .sp-seg .btn.btn-primary{background:#fff;color:var(--navy);box-shadow:0 1px 3px rgba(2,45,90,.18)}
.sp-inline{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.sp-card .sp-in{min-height:40px;box-sizing:border-box;font:inherit;font-size:15px;padding:6px 10px;border:1.5px solid var(--line);border-radius:10px;color:var(--ink);background:#fff}
.sp-card .sp-in:focus{border-color:var(--cyan);outline:none}
/* 新词/天のステッパー「− 20 語 +」(5 刻み · 端は aria-disabled で淡色 · 押しても値は動かない) */
.sp-step{display:inline-flex;align-items:stretch;border:1.5px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
.sp-step-btn{width:44px;min-height:40px;border:0;background:#fff;font:inherit;font-size:20px;font-weight:700;color:var(--navy);cursor:pointer;padding:0;line-height:1}
.sp-step-btn:hover{background:#f1f5fa}
.sp-step-btn:focus-visible{outline:2px solid var(--cyan);outline-offset:-2px}
.sp-step-btn[aria-disabled="true"]{color:#c3cad6;cursor:default;background:#fff}
.sp-step-val{display:flex;align-items:center;justify-content:center;min-width:64px;padding:0 6px;font-weight:700;font-size:15px;color:var(--ink);border-left:1px solid var(--line);border-right:1px solid var(--line)}
/* コーチ = 横並びの丸いボタン(画像 + 名前) */
.sp-card .sp-list .coach-pick{display:flex;gap:8px}
.sp-card .sp-list .cp{flex-direction:row;gap:6px;padding:4px 10px 4px 4px;border-radius:999px;min-height:44px}
.sp-card .sp-list .cp img{width:34px;height:34px;border-radius:50%}
.sp-card .sp-list .cp b{font-size:13px}

/* ── 2026-10-17(founder · 「今日」の口径統一 · FR-VSM-11 v1.4):首页 · 結果ページ · 学習進捗 ── */
/* 首页:🔥 連続日数は数の並びから外して右上へ */
.hero-top{position:relative}
.streak-badge{position:absolute;right:0;top:-6px;font-size:12px;font-weight:600;color:#7c4a03;background:#fff4e5;border:1px solid #f6d7a7;border-radius:999px;padding:2px 10px;white-space:nowrap}
/* 手机幅(≈ 520px 未満)では中央の「VOCABULARY COACH」と重なる(375px で実測)→ 見出しの上に中央寄せで 1 行に置く */
@media (max-width:520px){.hero-top{display:flex;flex-direction:column-reverse;align-items:center;gap:6px}.streak-badge{position:static}}
/* 今日の新しい語 d / q の進み具合(首页 · 学習進捗の「今日」で共用) */
.today-prog{max-width:280px;margin:-8px auto 16px;font-size:12px;color:var(--muted);text-align:left}
.tp-bar{display:block;height:7px;border-radius:999px;background:#e6edf4;overflow:hidden;margin-top:4px}
.tp-bar i{display:block;height:100%;background:var(--cyan);border-radius:999px}
.rounds-note{margin:8px 0 0}
/* 結果ページ:今日はあと … */
.today-left{margin:14px auto 4px;max-width:420px;padding:10px 12px;border:1px solid #bfe5d2;border-radius:12px;background:#eef8f3;color:#065f46;font-size:13px}
.today-left b{font-size:15px}
/* 学習進捗:区ごとの組 */
.progressview .pg-block{margin:14px 0 4px}
.progressview .pg-block .axtitle{margin:6px 0 8px}
.progressview .pg-line{font-size:13px;color:var(--ink-soft);margin-top:8px}
.progressview .pg-headline{font-size:14px;color:var(--ink-soft)}
.progressview .pg-headline b{font-size:20px;color:var(--navy)}
.progressview .pg-stack{display:flex;height:12px;border-radius:999px;overflow:hidden;background:#f0f2f7;margin:8px 0 2px}
.progressview .pg-stack i{display:block;height:100%}
.progressview .pg-stack i.mastered{background:var(--green)}
.progressview .pg-stack i.learning{background:var(--cyan)}
.progressview .pg-stack i.due{background:var(--amber)}
/* 学習の記録:4 週間 × 7 日(古い順 · 色 = その日の解答数) */
.progressview .pg-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;max-width:260px}
.progressview .pg-cal i{display:block;height:22px;border-radius:5px;background:#eef1f6}
.progressview .pg-cal i.lv1{background:#cfe9f5} .progressview .pg-cal i.lv2{background:#8fcfe8}
.progressview .pg-cal i.lv3{background:var(--cyan)} .progressview .pg-cal i.lv4{background:var(--navy)}
/* これから 7 日の復習:縦棒 */
.progressview .pg-fc{display:flex;gap:8px;align-items:flex-end;max-width:420px}
.progressview .pg-fc-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;min-width:0}
.progressview .pg-fc-n{font-size:12px;font-weight:700;color:var(--navy)}
.progressview .pg-fc-bar{display:flex;align-items:flex-end;width:100%;height:56px;background:#f4f7fb;border-radius:5px;overflow:hidden}
.progressview .pg-fc-bar i{display:block;width:100%;background:var(--cyan);border-radius:5px 5px 0 0}
.progressview .pg-fc-d{font-size:11px;color:var(--muted);white-space:nowrap}
/* 試験まで 1 日いくつ */
.exam-pace{margin:8px auto;max-width:420px;font-size:13px;color:var(--ink-soft)}
.exam-pace-btn{margin:8px 0 4px}
