/*
 * 共通テスト学習管理 — 計器盤のスタイル
 *
 * 約束事（引き継ぎ仕様書 §7）:
 *   計器盤であって学習アプリではない。励まさない、祝わない。数字を正確に静かに出す。
 *   角丸は2pxまで／カードに影を付けない（境界線で区切る）／数字は tabular-nums
 *   タップ領域は最低34px、主要ボタンは42px
 */
:root{
  --paper:#E7ECF1; --card:#F7FAFC; --card2:#EFF3F7;
  --ink:#132339; --ink2:#4F647D; --ink3:#7C8EA3;
  --rule:#C1CEDA; --rule2:#D8E1E9;
  --gain:#1C6B59; --gap:#AE7119; --alert:#95372A; --mark:#132339;
  --grid:rgba(19,35,57,.055);
  --focus:#1C6B59;
  box-sizing:border-box;
  padding-top:env(safe-area-inset-top,0px);
  padding-bottom:env(safe-area-inset-bottom,0px);
}
:root:not([data-theme="light"]){
  @media (prefers-color-scheme: dark){
    --paper:#0E1723; --card:#16212F; --card2:#1B2836;
    --ink:#E3EBF2; --ink2:#9FB2C4; --ink3:#73879B;
    --rule:#2E3F52; --rule2:#253445;
    --gain:#4FB99C; --gap:#D9A44E; --alert:#D97A66; --mark:#E3EBF2;
    --grid:rgba(227,235,242,.05);
    --focus:#4FB99C;
  }
}
:root[data-theme="dark"]{
  --paper:#0E1723; --card:#16212F; --card2:#1B2836;
  --ink:#E3EBF2; --ink2:#9FB2C4; --ink3:#73879B;
  --rule:#2E3F52; --rule2:#253445;
  --gain:#4FB99C; --gap:#D9A44E; --alert:#D97A66; --mark:#E3EBF2;
  --grid:rgba(227,235,242,.05);
  --focus:#4FB99C;
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-padding-top:env(safe-area-inset-top,0px);-webkit-text-size-adjust:100%}
body{
  margin:0; background:var(--paper); color:var(--ink);
  font-family:"Zen Kaku Gothic New",-apple-system,"Hiragino Kaku Gothic ProN","Noto Sans JP",system-ui,sans-serif;
  font-size:15px; line-height:1.65; font-variant-numeric:tabular-nums;
  background-image:
    repeating-linear-gradient(to right, var(--grid) 0 1px, transparent 1px 26px),
    repeating-linear-gradient(to bottom, var(--grid) 0 1px, transparent 1px 26px);
}
.wrap{max-width:1040px;margin:0 auto;padding:0 16px 96px}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
[hidden]{display:none!important}

/* ---- header / hero ---- */
header{padding:22px 0 10px}
.titlebar{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:18px}
h1{font-size:17px;font-weight:700;margin:0;letter-spacing:.02em}
.countdown{margin-left:auto;font-size:13px;color:var(--ink2)}
.countdown b{font-size:22px;font-weight:900;color:var(--ink);margin:0 3px}
.theme-btn{background:none;border:1px solid var(--rule);border-radius:2px;padding:3px 9px;font-size:12px;color:var(--ink2)}
.sync{font-size:11.5px;color:var(--ink3);border:1px solid var(--rule2);border-radius:2px;padding:2px 8px}
.sync[data-s="off"]{color:var(--gap);border-color:var(--gap)}
.sync[data-s="err"]{color:var(--alert);border-color:var(--alert)}

.hero{background:var(--card);border:1px solid var(--rule);padding:18px 18px 10px}
.hero-top{display:flex;align-items:flex-end;gap:18px;flex-wrap:wrap;margin-bottom:6px}
.pred{display:flex;align-items:baseline;gap:8px}
.pred .n{font-size:46px;font-weight:900;line-height:1;letter-spacing:-.02em}
.pred .d{font-size:14px;color:var(--ink2)}
.deficit{margin-left:auto;text-align:right;font-size:13px;color:var(--ink2);line-height:1.4}
.deficit b{display:block;font-size:24px;font-weight:900;color:var(--gap)}
.deficit b.ok{color:var(--gain)}
.scale{width:100%;height:auto;display:block;margin-top:4px}
.legend{display:flex;gap:18px;flex-wrap:wrap;font-size:12px;color:var(--ink2);padding:6px 0 4px;border-top:1px solid var(--rule2);margin-top:6px}
.legend i{display:inline-block;width:10px;height:10px;margin-right:5px;vertical-align:-1px}

/* ---- tabs ---- */
nav.tabs{display:flex;gap:0;margin:18px 0 0;border-bottom:1px solid var(--rule);overflow-x:auto}
nav.tabs button{
  background:none;border:none;border-bottom:3px solid transparent;
  padding:11px 16px;font-size:14px;font-weight:500;color:var(--ink2);white-space:nowrap;min-height:46px
}
nav.tabs button[aria-selected="true"]{color:var(--ink);font-weight:700;border-bottom-color:var(--gain)}
nav.tabs .badge{display:inline-block;margin-left:6px;background:var(--alert);color:#fff;border-radius:9px;padding:0 7px;font-size:11px;font-weight:700}
section[role=tabpanel]{padding-top:20px}
section[hidden]{display:none}

/* ---- generic ---- */
.panel{background:var(--card);border:1px solid var(--rule);padding:16px;margin-bottom:16px}
.panel h2{font-size:14px;font-weight:700;margin:0 0 12px;letter-spacing:.02em}
.panel p.note{font-size:13px;color:var(--ink2);margin:0 0 12px}
.empty{font-size:14px;color:var(--ink2);padding:22px 4px;text-align:center}
.hr{border:none;border-top:1px solid var(--rule2);margin:14px 0}

/* ---- impact list ---- */
.impact{display:grid;gap:7px}
.impact-row{display:grid;grid-template-columns:96px 1fr 58px;align-items:center;gap:10px;font-size:13px}
.impact-bar{height:16px;background:var(--card2);position:relative;border:1px solid var(--rule2)}
.impact-bar i{position:absolute;inset:0 auto 0 0;background:var(--gain)}
.impact-bar u{position:absolute;top:0;bottom:0;background:var(--gap);text-decoration:none;opacity:.5}
.impact-row b{text-align:right;font-weight:700;color:var(--gap)}

/* ---- unit table ---- */
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.chip{background:var(--card);border:1px solid var(--rule);border-radius:2px;padding:7px 13px;font-size:13px;color:var(--ink2);min-height:38px}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink);font-weight:700}
.grp{margin-bottom:8px}
.grp-head{display:flex;align-items:baseline;gap:10px;padding:10px 4px 6px;border-bottom:2px solid var(--ink)}
.grp-head h3{margin:0;font-size:14px;font-weight:700}
.grp-head span{font-size:12px;color:var(--ink2);margin-left:auto}
.u{border-bottom:1px solid var(--rule2);padding:10px 4px}
.u-main{display:grid;grid-template-columns:1fr auto;gap:6px 12px;align-items:center}
.u-name{font-size:14px;font-weight:500;line-height:1.4}
.u-name em{font-style:normal;font-size:12px;color:var(--ink3);margin-left:7px}
.u-ctrl{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.seg{display:flex;border:1px solid var(--rule);border-radius:2px;overflow:hidden}
.seg button{background:var(--card);border:none;border-right:1px solid var(--rule);padding:5px 9px;font-size:12px;color:var(--ink2);min-height:34px}
.seg button:last-child{border-right:none}
.seg button[aria-pressed="true"]{background:var(--ink);color:var(--paper);font-weight:700}
.rate{display:flex;align-items:center;gap:8px;min-width:190px}
.rate input[type=range]{flex:1;accent-color:var(--gain);height:34px}
.rate output{width:42px;text-align:right;font-weight:700;font-size:13px}
.rec-btn{background:var(--card);border:1px solid var(--ink);border-radius:2px;padding:6px 12px;font-size:12px;font-weight:700;min-height:34px}
.u-meta{font-size:11.5px;color:var(--ink3);margin-top:3px}
.u-meta .due{color:var(--alert);font-weight:700}
.u-meta .decayed{color:var(--gap)}
.u-form{background:var(--card2);border:1px solid var(--rule);padding:12px;margin-top:10px;display:grid;gap:10px}
.f-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;font-size:13px}
.f-row label{color:var(--ink2)}
.f-row input[type=number],.f-row input[type=date],.f-row input[type=text]{
  background:var(--card);border:1px solid var(--rule);border-radius:2px;padding:7px 9px;min-height:38px;width:84px}
.f-row input[type=text]{width:170px}
.f-row input[type=date]{width:150px}
.err-opts{display:flex;gap:6px;flex-wrap:wrap}
.err-opts button{background:var(--card);border:1px solid var(--rule);border-radius:2px;padding:6px 10px;font-size:12px;min-height:36px}
.err-opts button[aria-pressed="true"]{background:var(--alert);color:#fff;border-color:var(--alert);font-weight:700}
.save{background:var(--gain);color:#fff;border:none;border-radius:2px;padding:9px 18px;font-weight:700;font-size:13px;min-height:42px}
.ghost{background:none;border:1px solid var(--rule);border-radius:2px;padding:9px 14px;font-size:13px;color:var(--ink2);min-height:42px}
.mini{min-height:34px;padding:5px 10px;font-size:12px}

/* ---- review ---- */
.rv{display:flex;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid var(--rule2);flex-wrap:wrap}
.rv .when{font-size:12px;font-weight:700;width:92px}
.rv .when.od{color:var(--alert)}
.rv .nm{flex:1;min-width:180px;font-size:14px}
.rv .nm small{display:block;color:var(--ink3);font-size:11.5px}
.rv .acts{display:flex;gap:8px}

/* ---- log ---- */
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:8px 6px;border-bottom:1px solid var(--rule2)}
th{font-size:11.5px;color:var(--ink2);font-weight:500;border-bottom:1px solid var(--rule)}
td.num{text-align:right}
.sum-row{display:flex;gap:22px;flex-wrap:wrap;font-size:13px;color:var(--ink2);margin-bottom:12px}
.sum-row b{color:var(--ink);font-weight:700;font-size:17px}
.del-btn{background:none;border:none;color:var(--ink3);font-size:15px;line-height:1;padding:4px 8px;min-height:34px}
.del-btn:hover{color:var(--alert)}

/* ---- weekly review ---- */
.wk{display:grid;gap:9px;font-size:13px}
.wk-row{display:grid;grid-template-columns:20px 1fr;gap:9px;align-items:start}
.wk-row i{font-style:normal;font-weight:900;text-align:center}
.wk-row.ok i{color:var(--gain)}
.wk-row.warn i{color:var(--gap)}
.wk-row.bad i{color:var(--alert)}
.wk-row b{font-weight:700}

/* ---- trend ---- */
.chart{width:100%;height:auto;display:block}
.mock-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:9px}
.mock-grid label{font-size:11.5px;color:var(--ink2);display:block}
.mock-grid input{width:100%;background:var(--card);border:1px solid var(--rule);border-radius:2px;padding:7px 9px;min-height:38px}

/* ---- settings ---- */
.set-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:11px}
.set-grid label{font-size:12px;color:var(--ink2);display:block;margin-bottom:3px}
.set-grid input,.set-grid select{width:100%;background:var(--card);border:1px solid var(--rule);border-radius:2px;padding:8px 9px;min-height:40px}
.subj-table td,.subj-table th{padding:7px 6px}
.subj-table input[type=number]{width:74px;background:var(--card);border:1px solid var(--rule);border-radius:2px;padding:6px 8px;min-height:36px;text-align:right}
.subj-table .sw{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--ink2)}
.danger{color:var(--alert);border-color:var(--alert)}
.check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink2);min-height:34px}
.check input{width:18px;height:18px;accent-color:var(--gain)}
.status{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(18px + env(safe-area-inset-bottom,0px));
  background:var(--ink);color:var(--paper);padding:9px 18px;border-radius:2px;font-size:13px;z-index:50;opacity:0;pointer-events:none;transition:opacity .2s;max-width:92vw;text-align:center}
.status.on{opacity:1}

/* ---- アプリ化の案内（催促ダイアログ） ---- */
.modal{position:fixed;inset:0;background:rgba(19,35,57,.55);display:grid;place-items:center;z-index:60;padding:16px}
.modal-box{background:var(--card);border:1px solid var(--rule);max-width:420px;width:100%;padding:18px}
.modal-box h2{font-size:15px;font-weight:700;margin:0 0 10px}
.modal-box p{font-size:13.5px;color:var(--ink2);margin:0 0 14px;line-height:1.7}
.modal-box .acts{display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end}
.modal-icon{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.modal-icon img{width:48px;height:48px;border-radius:9px;display:block}
.modal-icon b{font-size:14px;color:var(--ink)}

/* インストール済みの端末では導線を出さない（JSの実行前にちらつかせない） */
@media (display-mode: standalone){
  #pwaPanel, #pwaModal{display:none!important}
}

/* ---- setup (初回) ---- */
.setup{max-width:660px;margin:0 auto}
.preset{display:block;width:100%;text-align:left;background:var(--card);border:1px solid var(--rule);border-radius:2px;padding:14px;margin-bottom:10px}
.preset[aria-pressed="true"]{border-color:var(--gain);border-width:2px;padding:13px}
.preset b{display:block;font-size:14px;font-weight:700}
.preset small{display:block;color:var(--ink2);font-size:12px;margin-top:3px;line-height:1.5}
.preset .tot{float:right;font-size:13px;font-weight:900;color:var(--gain)}

@media (max-width:640px){
  .u-main{grid-template-columns:1fr}
  .impact-row{grid-template-columns:74px 1fr 50px;font-size:12px}
  .pred .n{font-size:38px}
  .subj-table{font-size:12px}
  .subj-table input[type=number]{width:62px}
}
