/* 配色・タイポグラフィは参考モック（設計書 §6）から移植。
   P3 で Rails に移す際は、このファイルをそのまま app/assets/stylesheets/ に置ける。 */
:root{
  --bg:#EDEAE4; --surface:#FBFAF8; --surface-2:#F2EFE9;
  --ink:#1B1815; --muted:#6D665E; --line:#D8D2C8;
  --ember:#C0441A; --ember-soft:#F3DACF;
  --amber:#B07A05; --deep:#8A3411; --good:#2C7355; --warn:#A8471C;
  --shadow:0 18px 40px -22px rgba(40,26,16,.55);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --bg:#131110; --surface:#1E1A17; --surface-2:#262019;
    --ink:#F3EEE7; --muted:#A0968C; --line:#352D26;
    --ember:#FF7A45; --ember-soft:#3A2317;
    --amber:#E5A63C; --deep:#E06B3C; --good:#57BC91; --warn:#FF9A6E;
    --shadow:0 18px 40px -22px rgba(0,0,0,.8);
  }
}
:root[data-theme="dark"]{
  --bg:#131110; --surface:#1E1A17; --surface-2:#262019;
  --ink:#F3EEE7; --muted:#A0968C; --line:#352D26;
  --ember:#FF7A45; --ember-soft:#3A2317;
  --amber:#E5A63C; --deep:#E06B3C; --good:#57BC91; --warn:#FF9A6E;
  --shadow:0 18px 40px -22px rgba(0,0,0,.8);
}

*{box-sizing:border-box}
/* label.f{display:grid} などが hidden 属性の display:none を上書きしてしまうため、
   ここで明示的に勝たせる。 */
[hidden]{display:none !important}
html,body{overscroll-behavior-y:contain}
body{
  margin:0; background:var(--bg); color:var(--ink); line-height:1.7;
  font-family:"Zen Kaku Gothic New",-apple-system,"Hiragino Sans","Noto Sans JP",sans-serif;
  padding:max(10px,env(safe-area-inset-top)) 14px calc(20px + env(safe-area-inset-bottom));
  -webkit-text-size-adjust:100%;
}
.mono{font-family:"DM Mono",ui-monospace,"SFMono-Regular",Menlo,monospace;font-variant-numeric:tabular-nums}
.wrap{max-width:460px;margin:0 auto}

/* ── 共通パーツ ── */
.bar{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px}
.eyebrow{font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-weight:700}
.bean{font-weight:700;font-size:.95rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{font-size:.7rem;padding:3px 9px;border:1px solid var(--line);border-radius:999px;color:var(--muted);white-space:nowrap}
.chip.hot{border-color:var(--ember);color:var(--ember)}
.chip.ok{border-color:var(--good);color:var(--good)}
.screen{display:grid;gap:13px}
.screen[hidden]{display:none}

button{font:inherit;-webkit-tap-highlight-color:transparent}
/* 排出は長押しで確定するため、iOS が同時にテキスト選択とコンテキストメニューを
   立ち上げてしまう。焙煎中のボタンは文字を選択させる必要がないので全面的に禁じる。 */
button,.tapzone{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.big{font:inherit;font-weight:800;font-size:1.02rem;padding:19px 8px;border-radius:16px;cursor:pointer;
  border:1px solid var(--line);background:var(--surface);color:var(--ink);
  display:grid;gap:2px;justify-items:center;transition:transform .06s ease;position:relative;overflow:hidden}
.big small{font-size:.62rem;font-weight:600;color:var(--muted);letter-spacing:.06em}
.big:active{transform:scale(.97)}
.big:focus-visible{outline:2px solid var(--ember);outline-offset:2px}
.big[disabled]{opacity:.38}
.big.wide{grid-column:1/-1}
.big.primary{background:var(--ember);color:#fff;border-color:var(--ember)}
.big.primary small{color:rgba(255,255,255,.78)}
/* 押していない間は排出ボタンと同じ見た目にしておく。
   色を最初から付けてしまうと「もう押した」ように見え、押した後の変化も分からなくなる。
   色は打刻が記録済みかどうかだけを伝える役に徹させる。 */
.big.on{background:var(--ember);border-color:var(--ember);color:#fff}
.big.crack.on{background:var(--amber);border-color:var(--amber);color:#fff}
.big.crack2.on{background:var(--deep);border-color:var(--deep);color:#fff}
.big.on small{color:rgba(255,255,255,.82)}
.big .fill{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--ember-soft);z-index:0}
.big>span,.big>small{position:relative;z-index:1}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:9px}

.ghost{background:transparent;border:1px solid var(--line);color:var(--muted);
  border-radius:12px;padding:9px 14px;font-size:.78rem;font-weight:700;cursor:pointer}
.ghost.danger{color:var(--warn);border-color:var(--warn);justify-self:center;padding:9px 18px}

label.f{display:grid;gap:5px;font-size:.75rem;font-weight:700;color:var(--muted)}
input.f,textarea.f,select.f{font:inherit;color:var(--ink);background:var(--surface-2);
  border:1px solid var(--line);border-radius:12px;padding:11px 12px;width:100%;font-size:16px}
input.f:focus-visible,textarea.f:focus-visible,select.f:focus-visible{outline:2px solid var(--ember);outline-offset:1px}
textarea.f{min-height:96px;resize:vertical;line-height:1.75}
.summary{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.summary.three{grid-template-columns:1fr 1fr 1fr}
.cell{background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:10px 12px;min-width:0}
.cell .eyebrow{display:block;margin-bottom:2px}
.cell b{font-size:1.02rem;font-weight:500}
.cell b.na{color:var(--muted);font-weight:400}
.stat{background:var(--ember-soft);border:1px solid var(--ember);border-radius:16px;padding:14px 16px;
  display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.stat b{font-size:2rem;font-weight:500;color:var(--ember)}
/* 焙煎が終わった直後に最初に見たい数字は、投入から排出までの総時間。 */
.stat.hero{display:grid;gap:0;padding:16px 18px}
/* ── 焙煎後のブロック（設計書 v1.3 S3 ②〜④） ── */
.block{display:grid;gap:7px}
.summary.two{grid-template-columns:1fr 1fr}

/* 焙煎フェーズ軸: 投入 ─ 1ハゼ ─ 2ハゼ ─ 排出。
   区間幅は実時間に比例させない（42秒の区間が線1本に潰れて読めなくなるため）。 */
.phase{display:flex;align-items:flex-start;gap:5px;
  background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.pnode{font-size:.72rem;font-weight:700;line-height:14px;white-space:nowrap;color:var(--ink)}
.pnode.na{color:var(--muted);font-weight:400}
.pseg{flex:1;min-width:38px;display:grid;gap:3px;justify-items:center}
.pseg .line{display:block;width:100%;height:14px;position:relative}
.pseg .line::after{content:'';position:absolute;left:0;right:0;top:50%;height:1px;
  background:var(--muted);opacity:.45}   /* --line だと薄すぎて一本の軸に見えない */
.pseg b{font-size:.86rem;font-weight:500;color:var(--ink)}
.pseg b.na{font-size:.72rem;font-weight:400;color:var(--muted)}

/* 火力の帯。色は --ember の濃さ1段ずつ ＝ そのまま火力の強さに読める。
   新しい色相を足さないので、暗い/明るいどちらのテーマでも同じ意味で通る。
   帯の中に文字は置かない（弱の淡い地に白文字は読めないため）。段の名前と
   合計時間は下の凡例が持つ。 */
.hband{display:flex;width:100%;height:11px;gap:2px;margin-top:3px}
.hchip{display:block;min-width:3px;border-radius:3px;background:var(--ember)}
.hchip[data-h="0"]{opacity:.24}
.hchip[data-h="1"]{opacity:.55}
.hchip[data-h="2"]{opacity:1}
/* 火力の推移。切替時刻・段・その段が続いた長さ の3列 */
.trow.hchg{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center}
.hchg .at{font-size:.88rem;font-weight:500;color:var(--ink)}
.hchg .lv{display:flex;align-items:center;gap:7px;font-size:.8rem;font-weight:700;color:var(--ink)}
.hchg .lv i{width:16px;height:11px;border-radius:3px;flex:none}
.hchg .lv.end{color:var(--muted);font-weight:400}
.hchg .dur{font-size:.76rem;color:var(--muted)}
.hlegend{display:flex;flex-wrap:wrap;gap:5px 13px;padding:6px 2px 0}
.hleg{display:flex;align-items:center;gap:5px;font-size:.72rem;color:var(--muted)}
.hleg.ttl{font-weight:700}
.hleg i{width:14px;height:11px;border-radius:3px;flex:none}
.hleg b{font-size:.78rem;font-weight:500;color:var(--ink)}

/* イベント発生時刻 */
.times{display:grid;gap:0;background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:2px 12px}
.trow{display:flex;justify-content:space-between;align-items:baseline;gap:10px;
  padding:7px 0;font-size:.78rem;color:var(--muted)}
.trow + .trow{border-top:1px solid var(--line)}
.trow b{font-size:.88rem;font-weight:500;color:var(--ink)}
.trow b.na{font-size:.74rem;font-weight:400;color:var(--muted)}
.stat.hero b{font-size:3.1rem;line-height:1.06}
.stat .eyebrow{color:var(--ember)}
.howto{background:var(--surface-2);border:1px solid var(--line);border-radius:14px;padding:12px 14px;font-size:.78rem;color:var(--muted)}
.howto b{color:var(--ink);font-size:.8rem}
.howto ol{margin:6px 0 0;padding-left:1.1em;display:grid;gap:3px}
.note{font-size:.75rem;color:var(--muted);margin:0}

/* ── S1.2 予熱 / S2 焙煎中のタイマー ── */
.timerbox{background:var(--surface-2);border:1px solid var(--line);border-radius:18px;padding:16px;text-align:center}
.t-main{font-size:3.3rem;font-weight:500;letter-spacing:-.02em;line-height:1.05}
.t-main.sm{font-size:2.5rem}
.t-sub{margin-top:5px;font-size:.9rem;font-weight:700;min-height:1.5em}
.t-sub:empty{min-height:0;margin-top:0}
.t-sub.c1{color:var(--amber)} .t-sub.c2{color:var(--deep)}
.t-sub span{font-size:1.1rem}
/* 2ハゼからの経過は4段のうち最も目立たせる（設計書 §6 S2） */
.t-sub.c3{color:var(--ember);font-size:1.05rem;margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}
.t-sub.c3:empty{border-top:0;padding-top:0}
.t-sub.c3 span{font-size:2.1rem;font-weight:500;letter-spacing:-.02em}

/* 2ハゼを押したら、経過タイマーと主従を入れ替える。
   設計書 §6「4段のうち最も目立つ表示にすること（2ハゼ以降は経過タイマーより優先度が高い）」。
   この数字を見て煎り止めを判断するので、視線が最初に落ちる場所に置く。 */
.timerbox.sc .t-main{font-size:1.8rem;color:var(--muted);font-weight:400}
.timerbox.sc .t-sub.c1,.timerbox.sc .t-sub.c2{font-size:.78rem}
.timerbox.sc .t-sub.c3{font-size:.95rem;margin-top:10px;padding-top:10px}
.timerbox.sc .t-sub.c3 span{font-size:3.6rem;line-height:1.02;display:block;margin-top:2px}

.heat{display:grid;grid-template-columns:auto 1fr 1fr 1fr;gap:6px;align-items:center;
  background:var(--surface-2);border:1px solid var(--line);border-radius:14px;padding:8px}
.heat>.eyebrow{padding-left:6px}
.heat button{font-weight:800;font-size:.9rem;padding:11px 4px;border-radius:10px;
  border:1px solid var(--line);background:var(--surface);color:var(--muted);cursor:pointer}
.heat button[aria-pressed="true"]{background:var(--ember);border-color:var(--ember);color:#fff}

.mic{font-weight:800;padding:14px;border-radius:16px;cursor:pointer;width:100%;
  border:1px dashed var(--line);background:transparent;color:var(--muted);
  display:flex;gap:9px;align-items:center;justify-content:center}
.mic[aria-pressed="true"]{border-style:solid;border-color:var(--ember);color:var(--ember);background:var(--ember-soft)}
.dot{width:9px;height:9px;border-radius:50%;background:currentColor;flex:none}
.mic[aria-pressed="true"] .dot{animation:pulse 1.1s infinite}
@keyframes pulse{50%{opacity:.25}}
@media (prefers-reduced-motion:reduce){.mic[aria-pressed="true"] .dot{animation:none}}

.log{border-top:1px solid var(--line);padding-top:10px;max-height:190px;overflow-y:auto;display:grid;gap:2px}
.log .row{display:grid;grid-template-columns:58px 1fr;gap:10px;font-size:.82rem;padding:4px 2px;border-bottom:1px solid var(--line)}
.log .row:last-child{border-bottom:0}
.log time{color:var(--muted)}
.log .row.k-crack b{color:var(--amber)}
.log .row.k-crack2 b{color:var(--deep)}
.log .row.k-heat b{color:var(--ember)}
.log .row.k-warn b{color:var(--warn)}
.log .empty{color:var(--muted);font-size:.8rem;padding:6px 2px}

/* ── S1.5 投入待機：画面全体がタップ領域 ── */
.tapzone{min-height:62vh;display:grid;align-content:center;justify-items:center;gap:18px;padding:28px 20px;
  background:var(--ember-soft);border:0;border-radius:20px;width:100%;font:inherit;color:var(--ember);
  cursor:pointer;text-align:center;font-family:inherit}
.tapzone .lead{font-size:1.6rem;font-weight:900;line-height:1.3}
.tapzone .lead2{font-size:1.02rem;font-weight:800;opacity:.85;margin-top:-10px}
.tapzone .hint{font-size:.85rem;color:var(--ink);opacity:.7;max-width:24ch}
.tapzone .gap{font-size:2.6rem;font-weight:500}
.tapzone .gap.over{color:var(--warn)}
.tapzone .gaplabel{font-size:.68rem;letter-spacing:.14em;font-weight:700;opacity:.8}
.waitset{display:grid;gap:12px}   /* 横並びにすると火力ボタンが 52px まで痩せる。
                                     急ぐ場面ではないので縦に積んで押しやすさを取る */
.heat.sm{grid-template-columns:1fr 1fr 1fr;padding:0;border:0;background:transparent}
.heat.sm button{padding:9px 4px;font-size:.82rem}

/* ── 状態バナー ── */
.banner{border-radius:12px;padding:9px 12px;font-size:.76rem;font-weight:700;display:flex;gap:8px;align-items:center}
.banner.warn{background:var(--ember);color:#fff}
.banner.soft{background:var(--surface-2);border:1px solid var(--line);color:var(--muted);font-weight:600}

/* ── 3値の打刻状態（記録済み / 未記録 / 通っていない） ── */
.missing{display:grid;gap:7px;background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.missing .ttl{font-size:.8rem;font-weight:700}
.missing .acts{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.missing .acts.one{grid-template-columns:1fr}
.missing .acts button{font-size:.74rem;font-weight:700;padding:9px 4px;border-radius:10px;
  border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer}
.missing .acts button.sel{background:var(--good);border-color:var(--good);color:#fff}
details#editMarks{border:1px solid var(--line);border-radius:12px;background:var(--surface)}
details#editMarks[hidden]{display:none !important}
details#editMarks summary{cursor:pointer;padding:11px 14px;font-size:.78rem;font-weight:700;color:var(--muted);
  list-style:none;-webkit-user-select:none;user-select:none}
details#editMarks summary::-webkit-details-marker{display:none}
details#editMarks summary::before{content:"▸ "}
details#editMarks[open] summary::before{content:"▾ "}
details#editMarks #marksBox{display:grid;gap:8px;padding:0 10px 11px}
.missing .fixrow{display:grid;grid-template-columns:1fr auto;gap:6px;align-items:center}
/* 分・秒のピッカー。iOS は <select> をドラム式で出すので、指で回して選べる */
.missing .fixrow.pick{grid-template-columns:1fr 1fr auto}
.missing .unit{display:flex;align-items:center;gap:5px;font-size:.72rem;font-weight:700;color:var(--muted)}
.missing .unit select{flex:1;min-width:0;font:inherit;font-size:16px;font-weight:500;color:var(--ink);
  background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:9px 6px;text-align:center}
.missing .note.err{font-size:.72rem;color:var(--ember);margin:0}
.missing .fixrow input{font:inherit;font-size:16px;color:var(--ink);background:var(--surface);
  border:1px solid var(--line);border-radius:10px;padding:9px 10px;width:100%}
.missing .fixrow button{font-size:.74rem;font-weight:700;padding:10px 14px;border-radius:10px;
  border:1px solid var(--ember);background:var(--ember);color:#fff;cursor:pointer}
.resume{background:var(--ember-soft);border:1px solid var(--ember);border-radius:14px;padding:12px 14px;display:grid;gap:9px}
.resume .ttl{font-size:.85rem;font-weight:800;color:var(--ember)}
.resume .acts{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.resume .acts button{font-size:.78rem;font-weight:700;padding:11px 4px;border-radius:10px;cursor:pointer;
  border:1px solid var(--line);background:var(--surface);color:var(--ink)}
.resume .acts button.go{background:var(--ember);border-color:var(--ember);color:#fff}

/* ── 履歴 ── */
.hist{display:grid;gap:8px}
.hitem{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:11px 26px 11px 13px;
  display:grid;gap:5px;cursor:pointer;text-align:left;width:100%;font:inherit;color:inherit;position:relative}
.hitem .top{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.hitem .nums{display:flex;gap:12px;font-size:.78rem;color:var(--muted)}
.hitem .nums b{color:var(--ink);font-weight:500}
.hitem .go{position:absolute;right:11px;top:11px;color:var(--muted);font-size:1.1rem}

/* 左スワイプで削除ボタンが現れる。常時ボタンを置くと一覧の幅を食うため。
   .hitem は不透明な背景を持ち、閉じている間は .hdel を覆い隠す。 */
.hrow{position:relative;overflow:hidden;border-radius:14px}
.hdel{position:absolute;right:0;top:0;bottom:0;width:88px;border:0;border-radius:14px;
  background:var(--ember);color:#fff;font-size:.82rem;font-weight:800;cursor:pointer;
  visibility:hidden}   /* 閉じている間は角の丸みから色が滲まないよう隠す */
.hrow.open .hdel,.hrow.dragging .hdel{visibility:visible}
.hitem{position:relative;transition:transform .18s ease;will-change:transform;
  touch-action:pan-y}   /* 縦スクロールは端末に任せ、横だけ自前で扱う */
.hitem.dragging{transition:none}
.hrow.open .hitem{transform:translateX(-88px)}

/* ── アプリ内の確認シート（confirm() の置き換え） ──
   iOS のホーム画面 PWA ではネイティブダイアログが黙って抑制されることがあり、
   このプロジェクトでは既に2度それに当たっている。自前なら必ず画面に出る。 */
.sheetback{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:22px;
  background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.sheet{width:100%;max-width:340px;display:grid;gap:14px;padding:18px;border-radius:18px;
  background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow)}
.sheet .msg{margin:0;font-size:.9rem;line-height:1.6;color:var(--ink);white-space:pre-line}
.sheet .acts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sheet .acts button{font-size:.85rem;font-weight:800;padding:13px 4px;border-radius:12px;cursor:pointer;
  border:1px solid var(--line);background:var(--surface-2);color:var(--ink);
  -webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.sheet .acts button.danger{background:var(--ember);border-color:var(--ember);color:#fff}
.sheet .acts button.go{background:var(--good);border-color:var(--good);color:#fff}
