/* Hallmark · macrostructure: Workbench（計器盤スタック） · tone: utilitarian／現場計器
 * theme: studied-DNA (source: 02_UIモック 01〜06.png) · studied: yes
 * observed-brand: #0746a1  observed-accent: #0047b3  observed-tints: #e6ecfa/#e6f7ed/#fdf4ec/#feeceb/#f0f1f5
 * observed-fonts: 端末内蔵JPゴシックのみ（外部CDN禁止＝設計正本 §3。フォント対でなく字重・寸法・等幅数字で階層を作る）
 * pre-emit critique: P5 H5 E4 S5 R4 V4
 *
 * ZipFlow Field — 屋外・直射日光下前提のUI規約（この4本は意匠より優先する）
 *  - 最小フォント 17px（本文18px）／主要ボタン最小高60px／コントラスト4.5:1以上
 *  - 白背景＋黒文字固定。淡いグレー文字は使わない
 *  - Webフォントを読まない＝端末内蔵フォントのみ（CDN0本・オフラインで字が消えない）
 *  - 絵文字を使わない。アイコンは app/icons.js の自作SVG
 *  - 色の検証: python3 tools/check_contrast.py（--c-* を読んで対白の比を計算する。
 *    よって**文字に使う色だけ --c-* と名付ける**。地色・罫色は --bg-* / --ico-* に置く）
 */
:root{
  /* -- 文字に使う色（対白 4.5:1 以上・機械検証あり） -- */
  --c-bg:      #ffffff;
  --c-fg:      #111111;   /* 本文 */
  --c-fg-sub:  #444444;   /* 補助文字。これより薄い文字は作らない */
  --c-line:    #767676;   /* 罫線（文字には使わない＝3:1判定） */
  --c-brand:   #0746a1;   /* 見出し・ワードマーク（モック実測） */
  --c-now:     #0047b3;   /* 現在・主操作（モック実測） */
  --c-done:    #0b7a38;   /* 完了 */
  --c-warn:    #a8490b;   /* 注意 */
  --c-pdf:     #b3261e;   /* PDF の印だけに使う赤（図・資料タブ PDF 面）。
                            文字には使わない＝注意（--c-warn）と読み分けられなくなる。 */
  --c-alert:   #b3261e;   /* 異常・員数不足・未送信 */

  /* -- 地色・罫色・アイコン色（非テキスト。--c-* にしないこと） -- */
  --bg-sunken:  #f7f8fc;  /* カード内の沈み面 */
  --bg-track:   #f0f1f3;  /* 進捗の溝 */
  --bg-neutral: #f0f1f5;  /* 予定バッジ */
  --bg-hair:    #e6eaf1;  /* 髪罫（面は影と併用＝罫は淡く） */
  --bg-hair-2:  #d2dae6;  /* やや強い髪罫 */
  --bg-brand:   #0746a1;  /* 主計器の面 */
  --bg-brand-d: #063b88;  /* 主計器の沈み面 */
  --bg-now:     #e6ecfa;  /* 現在の淡色面（モック実測） */
  --bg-done:    #e6f7ed;  /* 完了の淡色面（モック実測） */
  --bg-warn:    #fdf4ec;  /* 注意の淡色面（モック実測） */
  --bg-alert:   #feeceb;  /* 異常の淡色面（モック実測） */
  --ico-warn:   #e8590c;  /* 注意アイコンの塗り（非テキスト＝3:1で足りる） */
  --ico-done:   #0b7a38;
  --ink-brand:  #c7d6f0;  /* 主計器の面上のラベル文字（対 --bg-brand 6.0:1） */
  --ink-num:    #ffab52;  /* 主計器の面上の大数字（対 --bg-brand 4.7:1・モックの#fe8536を規約まで持ち上げた） */

  --hdr-h:  72px;   /* 送信ボタン(60px)＋上下余白 */
  --nav-h:  76px;   /* アイコン26px＋ラベル17px */
  --r-card: 16px;
  --r-pill: 999px;
  --sp:     12px;
  --ease-out: cubic-bezier(.2,.7,.3,1);
  /* 影は2段だけ（浮きすぎない・iOS調の柔らかい持ち上がり）。色付き影は使わない */
  --shadow-1: 0 1px 2px rgba(16,24,40,.05), 0 1px 3px rgba(16,24,40,.07);
  --shadow-2: 0 3px 6px rgba(7,70,161,.10), 0 8px 24px rgba(7,70,161,.14);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,71,179,.14)}
[hidden]{display:none!important}
#btn-send{display:none!important}
html,body{margin:0;padding:0;background:var(--c-bg);color:var(--c-fg);overflow-x:clip}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Hiragino Kaku Gothic ProN","Noto Sans JP","Yu Gothic",Meiryo,sans-serif;
  font-size:18px;line-height:1.55;font-weight:500;
  -webkit-text-size-adjust:100%;
  padding-top:calc(var(--hdr-h) + env(safe-area-inset-top));
  padding-bottom:calc(var(--nav-h) + env(safe-area-inset-bottom));
}
h1,h2,h3{margin:0;line-height:1.28;letter-spacing:-.01em}
h1{font-size:28px;font-weight:800}
h2{font-size:19px;font-weight:800}
h3{font-size:18px;font-weight:800}
p{margin:0}
p,li,td,th,label{font-size:18px}
small,.small{font-size:17px;color:var(--c-fg-sub);line-height:1.4}  /* 17px が下限 */
.ico{display:block;flex:0 0 auto}
/* 時刻・件数はすべて等幅数字。桁が揺れると一覧で時刻が読み取れない */
.num,.t,.pill,.stat-v,.hero-num,.ring-v,.row-t{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}

/* ================= ZipFlow Ops 共通ヘッダー（LIVEを正本） ================= */
.hdr{
  position:fixed;top:0;left:0;right:0;z-index:20;
  height:calc(var(--hdr-h) + env(safe-area-inset-top));
  padding:env(safe-area-inset-top) max(12px,calc((100vw - 640px)/2 + 16px)) 0;
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  background:rgba(255,255,255,.98);border-bottom:1px solid #edf0f5;
  box-shadow:0 2px 10px rgba(15,36,68,.025);overflow:visible;
}
.shell-brand{font-size:20px;font-weight:850;letter-spacing:-.03em;white-space:nowrap;color:#10203f;flex:0 0 auto}
.shell-brand span:last-child{color:#1256cf;font-weight:700}
.shell-meta{display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:0;flex:0 1 auto}
.shell-share,.shell-pack,.shell-settings{
  appearance:none;height:40px;border:1px solid #d8e1ee;border-radius:12px;background:#fff;color:#1256cf;
  display:inline-flex;align-items:center;justify-content:center;gap:5px;font:inherit;font-size:17px;font-weight:850;cursor:pointer;padding:0;
}
.shell-share,.shell-settings{width:40px;flex:0 0 40px}
/* 1行に収まらなくなったら**パック切替のラベルだけ**が縮む（…で切れる）。同期状態のチップは
 * 縮ませない＝「オフライン」を潰して読めなくしない（min-width:0 のままだと先にチップが潰れる実測）。 */
.shell-pack{max-width:148px;min-width:56px;padding:0 10px;color:#10203f}
.shell-share[hidden],.shell-pack[hidden],.shell-settings[hidden]{display:none!important}
.shell-share:active,.shell-pack:active,.shell-settings:active{background:#f2f6fc}
.shell-pack>.ico{color:#1256cf}.shell-pack-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}
.chip{height:38px;padding:0 11px;border:1px solid #dce4ef;border-radius:12px;background:#fff;display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;font-size:17px;line-height:1;font-weight:850;white-space:nowrap;color:#10203f}
.chip::before{content:"";flex:0 0 auto;width:9px;height:9px;border-radius:50%;background:currentColor}.chip-body{display:flex;align-items:center;min-width:0}.chip-state{white-space:nowrap}.chip-why{display:none}
.chip[data-sync="fresh"]{color:#09863f}.chip[data-sync="update"]{color:#a75a12;background:#fff8ef}.chip[data-sync="offline"]{color:#5f6978}
.unsent{appearance:none;position:absolute;right:max(12px,calc((100vw - 640px)/2 + 16px));top:calc(env(safe-area-inset-top) + 55px);z-index:21;min-height:30px;padding:4px 9px;border:1px solid #efc9c2;border-radius:999px;background:#fff6f4;color:#9b4034;font:inherit;font-size:17px;line-height:1;font-weight:850;white-space:nowrap;cursor:pointer}
.unsent[hidden],.btn-send[hidden]{display:none!important}
/* UI7 S0d（REWORK#5で app/ の実行時CSSから**正本のここへ**移設）:
 * 固定ヘッダを 320〜600px の全幅で1行にする。従来は ≤500px で
 * 「ブランド＋共有＋⚙」／「同期チップ（＋未送信）」の2段グリッドだったが、豊さんの本番f
 * （390/470px）で同期チップが2行目に落ちるので「1行・高さ56px」に組み替えた。
 *   ・並びは 左=ブランド ／ 右=共有・⚙・未送信・同期チップ
 *   ・日付は日付帯（全タブ共通）が持つので、ヘッダのパック切替ボタンは出さない
 *   ・同期チップは状態語だけ。括弧の理由（rev・確認時刻）はタップで出す（main.js の ensureUi3Shell）
 *   ・360px未満はチップを丸だけ（色で状態）／未送信がある狭い端末でも語を落として1行を守る
 * .shell-meta は display:contents でフレックスに溶かす＝index.html のDOMは触らずに配置だけ変える。
 * 未送信は absolute（本文の上に浮く）をやめ、1行の実体として置く＝本文と重ならない。
 * 高さの定数 --hdr-h:56px は app/views/timeline-board.js の :root（日付帯の貼り付き位置と同じ定数）。 */
/* UI8 O9: ボタン間は8px（左右の余白16pxは index.html の意匠層が持つ＝後勝ちで効く方に書く）。 */
.hdr{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;row-gap:0;padding-left:16px;padding-right:16px}
.shell-meta{display:contents}
.shell-brand{order:0;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:19px}
.shell-share{order:2;flex:0 0 38px;width:38px;height:38px;border-radius:10px}
.shell-settings{order:3;flex:0 0 38px;width:38px;height:38px;border-radius:10px}
/* UI10「最新」: 現在の工程が画面外の間だけ出る（旧・会場見出しの◎の置き場所）。
 * 常に出さない＝320pxでヘッダの1行を壊さない。 */
/* 2026-09-12 豊さん「言葉かマークか」「表示位置も」→ マークだけ・右下に浮かせる（地図アプリの現在地ボタンと同じ場所）。
 * ヘッダの器（.shell-meta）に置いたまま position:fixed で右下へ。現在の工程が画面外の間だけ出る条件は従来どおり。 */
.shell-latest{position:fixed;right:max(14px,calc((100vw - 640px)/2 + 14px));bottom:calc(var(--nav-h) + env(safe-area-inset-bottom) + 14px);z-index:22;
  width:56px;height:56px;padding:0;border:1px solid var(--bg-hair-2);border-radius:50%;background:#fff;color:var(--c-now);
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 14px rgba(19,35,63,.18)}
.shell-latest>.ico{color:var(--c-now);width:26px;height:26px}
.shell-latest>span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.shell-latest[hidden]{display:none!important}
.shell-latest:active{background:#f2f6fc}
/* ［最新］が出ている間はワードマークを引っ込める（場所は空けたまま）。
 * 390pxで［最新］を足すと 'ZipFlow Ops' が 'Z…' に潰れるので、**アプリ名より帰り道**を採る。
 * ヘッダそのものが隠れる下スクロール中（#28）と同じ考え方＝現場に要る物だけを残す。 */
.shell-pack{display:none!important}
/* 詳細度を上げる＝progress.js が実行時に差し込む .p4-pending{position:absolute;top:58px}
 * （後勝ちで .unsent を上書きする）に負けないため。absolute のままだとチップに重なる。 */
.hdr .unsent{order:4;position:static;top:auto;right:auto;justify-self:auto;flex:0 0 auto;display:inline-flex;align-items:center;min-height:0;height:34px;padding:0 8px}
.hdr .chip{order:5;justify-self:auto;flex:0 0 auto;height:34px;padding:0 12px;cursor:pointer}   /* UI8 O9: 同期チップの左右余白12px */
.hdr .chip .chip-why{display:none}
@media(max-width:479px){.hdr.hdr-unsent .chip .chip-state{display:none}.hdr.hdr-unsent .unsent{padding:0 6px}}
@media(max-width:359px){.hdr .chip .chip-state{display:none}.hdr{gap:6px}.shell-brand{font-size:17px}}

/* ================= 9/15 mock6 ヘッダー（6のモック・豊さん「今、画像に忠実に」） =================
 * 変えたのは**見た目だけ**。並び（共有・⚙・同期札）・押した先・読み上げ・隠す条件は1つも触らない。
 *   ・地      … ほんのり青のグラデーション（index.html の意匠層）＋薄い斜めの帯1本（::before）
 *   ・左      … ワードマーク26px の直下にタグライン（12〜13px・添え字なので17px床の例外）
 *   ・右      … 44×44 の白い角丸（枠1px #dfe6f0・角丸12px）が3つ＝共有・⚙・「● 最新」札
 *   ・同期札  … 上段「● 最新」／下段に小さく「HH:MM 更新」。下段は **CSSの content** で出す
 *               ＝チップの textContent は packsync の文言のまま（test/verify_packsync.py (e)）
 * 高さ 80px は --hdr-h（app/views/timeline-board.js の :root）が持つ＝日付帯の貼り付き位置と連動。
 * 後から宣言して勝たせる（上の UI7/UI8 の節は書き換えない＝変えた所だけを読める形で残す）。 */
.hdr{gap:8px;align-items:center;border-bottom:0;box-shadow:none}
/* 薄い斜めの帯を1本だけ（派手にしない）。z-index:-1 ＝ .hdr の地の上・中身の下に敷く
 * （.hdr は position:fixed + z-index で積み重ね文脈を作っているので外へは抜けない）。
 * 押せる物の上に乗らないよう当たり判定は殺す。 */
.hdr::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(118deg,rgba(255,255,255,0) 36%,rgba(255,255,255,.62) 45%,
    rgba(255,255,255,.62) 56%,rgba(255,255,255,0) 65%)}
/* ワードマーク＋タグラインの2段。2語は .shell-word の中で1行に保つ（縮む時は…で切る）。 */
.hdr .shell-brand{order:0;flex:1 1 auto;min-width:0;display:flex;flex-direction:column;
  align-items:flex-start;justify-content:center;gap:1px;overflow:hidden;
  font-size:24px;font-weight:900;letter-spacing:-.03em;line-height:1.1;color:#1a2b5a}
.hdr .shell-brand>.shell-word{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 「Ops」だけを青にする。.shell-brand span:last-child（UI7 の節）だとタグラインも拾うので、
 * ワードマークの器（.shell-word）の中に限る。 */
.hdr .shell-word>span:last-child{color:#0047b3;font-weight:900}
.hdr .shell-brand>span.shell-tagline{color:#5f6d83;font-weight:600}
/* タグラインは「読む字」ではなく添え字＝17px床の例外（発注で明示）。 */
.hdr .shell-brand>.shell-tagline{max-width:100%;font-size:13px;font-weight:600;letter-spacing:0;
  line-height:1.15;color:#5f6d83;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 右の3つは同じ形（44×44・角丸12px・白地・枠1px）。並び順（order）は UI7 の節のまま。 */
.hdr .shell-share,.hdr .shell-settings{flex:0 0 44px;width:44px;height:44px;
  border-radius:12px;border:1px solid #dfe6f0;background:#fff}
/* 同期札。上段＝丸＋状態語／下段＝最終同期時刻。高さは他の2つと同じ44px。 */
.hdr .chip{height:44px;min-width:44px;padding:0 10px;border-radius:12px;border:1px solid #dfe6f0;
  background:#fff;display:grid;grid-template-columns:auto auto;align-items:center;
  justify-items:center;column-gap:6px;row-gap:1px;line-height:1.05}
.hdr .chip::before{width:9px;height:9px}
.hdr .chip .chip-body{grid-column:2}
.hdr .chip .chip-state{font-size:17px;font-weight:900}
/* 「10:50 更新」。attr() で出す＝el.chip.textContent には入らない（上の節の理由）。
 * 11px は時刻の添え字＝17px床の例外（発注で明示）。 */
.hdr .chip::after{content:attr(data-when);grid-column:1 / -1;font-size:11px;font-weight:700;
  letter-spacing:0;color:#5f6d83;white-space:nowrap;font-variant-numeric:tabular-nums}
.hdr .chip:not([data-when])::after{display:none}
.hdr .chip[data-sync="update"]{background:#fff8ef}
/* 狭い端末（オフラインの長い状態語＋3つの的）でワードマークが潰れすぎないように字を落とす。
 * タグラインは12px＝発注の下限。 */
/* 375px はワードマーク（23px）とタグライン（12px）で横幅ぴったり。タグラインは字間を詰めて
 * 「現場を、もっとスムーズに」を…にせず収める（12字×12px＝144px / 使える幅 132px）。 */
@media(max-width:389px){.hdr .shell-brand{font-size:23px}
  .hdr .shell-brand>.shell-tagline{font-size:12px;letter-spacing:-.055em}}
/* 8検収 9/15: 375px で状態語が長い時（オフライン・更新あり）にワードマークが「ZipFlow…」に潰れた。
 * 状態語だけ 14px に落として同期札を細くする（「最新」の時は 17px のまま）。 */
.hdr .chip:not([data-sync="fresh"]) .chip-state{font-size:14px}
.hdr .chip:not([data-sync="fresh"]){padding:0 8px}
@media(max-width:359px){.hdr .shell-brand{font-size:20px}.hdr .chip{padding:0 8px}}

/* ================= ボタン（主要ボタンは60px以上） ================= */
.btn{
  appearance:none;background:var(--c-bg);color:var(--c-fg);
  border:1.5px solid var(--bg-hair-2);border-radius:14px;
  font:inherit;font-size:18px;font-weight:700;
  min-height:60px;padding:0 16px;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  text-decoration:none;                       /* <a class="btn"> の下線が文字を横切るのを止める */
  box-shadow:var(--shadow-1);
  transition:transform .12s var(--ease-out),background-color .12s var(--ease-out),box-shadow .12s var(--ease-out);
}
.btn>.ico{color:var(--c-now)}
.btn:active{background:var(--bg-sunken);transform:translateY(1px);box-shadow:none}
.btn:disabled{color:var(--c-fg-sub);border-color:var(--bg-hair);background:var(--bg-sunken);cursor:default;box-shadow:none}
.btn:disabled>.ico{color:var(--c-fg-sub)}
.btn-primary{background-color:var(--c-now);background-image:linear-gradient(180deg,#0a51b8,var(--c-now));
             color:#fff;border-color:transparent;
             font-weight:800;box-shadow:0 2px 5px rgba(0,71,179,.24),0 6px 16px rgba(0,71,179,.18)}
.btn-primary>.ico{color:#fff}
.btn-primary:active{background:var(--bg-brand)}
.btn-primary:disabled{background:var(--bg-sunken);color:var(--c-fg-sub);border-color:var(--bg-hair)}
.btn-danger{color:var(--c-alert);border-color:var(--c-alert)}
.btn-block{display:flex;width:100%;margin:8px 0}
.btn-row{display:flex;gap:8px}
.btn-row>.btn{flex:1 1 0;min-width:0}
.btn-row>.btn-2{flex:2 1 0}
:focus-visible{outline:3px solid var(--c-now);outline-offset:2px}
.btn-primary:focus-visible{outline-color:var(--c-fg)}

/* ================= 本文の器 ================= */
.view{padding:0 12px 28px;min-height:60vh}
.loading{padding:28px 0;font-weight:700}

/* 画面の頭（モックの「ZipFlow Field」＋大見出し＋文脈チップ）。
 * ヘッダに入れず本文の先頭に置く＝スクロールで送れる。固定領域は計器だけに使う。 */
.head{padding:18px 2px 14px}
.head-brand{
  font-size:17px;font-weight:800;color:var(--c-brand);letter-spacing:.01em;margin-bottom:2px;
}
.head-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.head-row h1{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.head-chips{display:flex;gap:6px;flex:0 1 auto;min-width:0;max-width:100%;flex-wrap:wrap;justify-content:flex-end}
.hchip{
  display:inline-flex;align-items:center;gap:5px;
  font-size:17px;font-weight:700;line-height:1;padding:9px 13px;border-radius:var(--r-pill);
  background:var(--c-now);color:#fff;white-space:nowrap;text-decoration:none;
  box-shadow:0 1px 3px rgba(0,71,179,.22);
}
.hchip>.ico{color:#fff}
.hchip-out{background:var(--c-bg);color:var(--c-fg);border:1.5px solid var(--bg-hair-2)}
.hchip-out>.ico{color:var(--c-now)}


/* ================= パック切替（LIVE / タイムライン / 台本 共通） ================= */
.pack-switch-btn{
  appearance:none;border:1.5px solid var(--bg-hair-2);border-radius:13px;background:#fff;color:var(--c-fg);
  min-height:44px;padding:0 11px;display:inline-flex;align-items:center;justify-content:center;gap:7px;
  font:inherit;font-size:17px;font-weight:800;line-height:1;white-space:nowrap;cursor:pointer;box-shadow:var(--shadow-1);
}
.pack-switch-btn>.ico{color:var(--c-now)}
.pack-switch-btn:active{background:var(--bg-sunken);transform:translateY(1px)}
.pack-switch-label{font-variant-numeric:tabular-nums}
.pack-switch-btn-compact{height:38px;min-height:38px;border-radius:12px;padding:0 9px;gap:5px;box-shadow:none}
.pack-viewing-banner{
  margin:0 0 12px;padding:10px 12px;border:1px solid #e3b96d;border-radius:14px;background:#fff8e9;
  display:flex;align-items:center;justify-content:space-between;gap:10px;color:#6f4500;
}
.pack-viewing-copy{display:flex;align-items:center;gap:8px;min-width:0}
.pack-viewing-copy>.ico{flex:0 0 auto;color:#9a5d00}
.pack-viewing-copy strong{font-size:17px;line-height:1.3;overflow-wrap:anywhere}
.pack-today-btn{
  appearance:none;flex:0 0 auto;min-height:44px;padding:0 11px;border:1px solid #d7a34a;border-radius:11px;
  background:#fff;color:#6f4500;font:inherit;font-size:17px;font-weight:850;display:inline-flex;align-items:center;gap:6px;cursor:pointer;
}
.pack-today-btn>.ico{color:#8a5300}
/* ---- G2 シートが出ている間は下の画面を動かさない（発注 2026-09-04） ----
 * 段の数を持つ app/dom.js が html と body の両方に付ける。html にも掛けるのは、表示領域の
 * スクロールが**根**の overflow で決まるため（この html は overflow-x:clip なので body からは
 * propagation しない＝body だけでは止まらない）。overscroll-behavior はブラウザ側の
 * pull-to-refresh を切る＝下スワイプが「更新」に取られない。
 * touch-action は触らない＝中身の縦スクロール・天気の帯の横流しを潰さない（発注 G2）。 */
html.zff-sheet-open,body.zff-sheet-open{overflow:hidden;overscroll-behavior:contain}
body.pack-picker-open{overflow:hidden}
.pack-picker-overlay{
  position:fixed;inset:0;z-index:100;background:rgba(12,24,43,.42);display:flex;align-items:flex-end;justify-content:center;
  padding:18px 12px max(12px,env(safe-area-inset-bottom));overscroll-behavior:contain;
}
.pack-picker-sheet{
  width:min(640px,100%);max-height:min(82vh,760px);overflow:hidden;border-radius:22px 22px 16px 16px;background:#fff;
  border:1px solid #dce3ed;box-shadow:0 18px 56px rgba(10,31,65,.25);display:flex;flex-direction:column;
  overscroll-behavior:contain;
}
.pack-picker-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:17px 16px 14px;border-bottom:1px solid var(--bg-hair)}
.pack-picker-head>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.pack-picker-head strong{font-size:21px;line-height:1.25}
.pack-picker-head span{font-size:17px;color:var(--c-fg-sub)}
.pack-picker-close{appearance:none;width:44px;height:44px;flex:0 0 44px;border:1px solid var(--bg-hair-2);border-radius:12px;background:#fff;color:var(--c-fg);font-size:28px;line-height:1;cursor:pointer}
.pack-picker-return{appearance:none;margin:12px 14px 0;min-height:52px;border:1.5px solid #9db9e9;border-radius:13px;background:#f4f8ff;color:var(--c-now);font:inherit;font-size:17px;font-weight:850;display:flex;align-items:center;justify-content:center;gap:7px;cursor:pointer}
.pack-picker-list{overflow:auto;padding:12px 14px 16px;overscroll-behavior:contain}
.pack-picker-group+.pack-picker-group{margin-top:16px}
.pack-picker-date{height:36px;display:flex;align-items:center;gap:8px;padding:0 4px 5px;border-bottom:1px solid var(--bg-hair)}
.pack-picker-date strong{font-size:18px;font-weight:900;font-variant-numeric:tabular-nums}
.pack-picker-today{padding:4px 8px;border-radius:999px;background:var(--bg-now);color:var(--c-now);font-size:17px;font-weight:800;line-height:1}
.pack-picker-row{
  appearance:none;width:100%;min-height:64px;padding:8px 10px;border:0;border-bottom:1px solid var(--bg-hair);background:#fff;color:var(--c-fg);
  display:grid;grid-template-columns:72px minmax(0,1fr) auto;align-items:center;gap:10px;text-align:left;font:inherit;cursor:pointer;
}
.pack-picker-row:last-child{border-bottom:0}
.pack-picker-row:active{background:var(--bg-sunken)}
.pack-picker-row.is-current{background:#f1f6ff}
.pack-picker-row:disabled{opacity:1;cursor:default}
.pack-picker-team{font-size:18px;font-weight:900;color:var(--c-now)}
.pack-picker-main{min-width:0;display:flex;align-items:baseline;gap:8px}
.pack-picker-main strong{font-size:18px;font-weight:850}
.pack-picker-main small{font-size:17px;color:var(--c-fg-sub)}
.pack-picker-current{font-size:17px;font-weight:850;color:var(--c-now);white-space:nowrap}
/* UI16: チーム切替の行は「チーム名」＋右端の合図（＞／表示中）の2列だけ。 */
.pack-picker-row.is-team{grid-template-columns:minmax(0,1fr) auto;min-height:60px;padding:8px 12px}
.pack-picker-row.is-team .pack-picker-team{font-size:20px;color:var(--c-fg)}
.pack-picker-row.is-team.is-current .pack-picker-team{color:var(--c-now)}
.pack-picker-row>.ico{color:var(--c-now)}
.pack-picker-empty{padding:18px 6px;font-size:17px;color:var(--c-fg-sub)}
/* ---- UI18: シートは2段（上段＝イベント／下段＝チーム） ----
 * 段の見出しは小さな灰の1行（17px床は「押す物・読む字」に掛かる規約なので、区切りの
 * ラベルはそれより小さくてよい／ここでは 17px を保って字を落とさない）。
 * 1イベントしか無い現場では上段ごと出ないので、この節は1px も画面に出ない。 */
.pack-picker-sec+.pack-picker-sec{margin-top:14px}
.pack-picker-sec-head{padding:0 4px 6px;font-size:17px;font-weight:900;color:var(--c-fg-sub)}
.pack-picker-row.is-event{grid-template-columns:minmax(0,1fr) auto;min-height:60px;padding:8px 12px}
.pack-picker-event{font-size:20px;font-weight:900;color:var(--c-fg);min-width:0;overflow:hidden;text-overflow:ellipsis}
.pack-picker-row.is-event.is-current .pack-picker-event{color:var(--c-now)}
/* 「その他」シートの行（下タブが6つ以上のプロファイルでだけ出る＝いまは出ない）。 */
.pack-picker-row.is-more{grid-template-columns:minmax(0,1fr) auto;min-height:60px;padding:8px 12px;text-decoration:none}
.pack-picker-more{display:flex;align-items:center;gap:9px;min-width:0;font-size:20px;font-weight:900;color:var(--c-fg)}
.pack-picker-more>.ico{color:var(--c-now);flex:0 0 auto}
/* 下タブは a だけでなく button も取り得る（「その他」・重ねて出す画面）。素の button の
 * 地色と枠を消して a と同じ見え方にする＝タブの並びに継ぎ目が出ない。 */
button.nav-item{appearance:none;background:none;border:0;font:inherit;font-size:17px;font-weight:800;letter-spacing:-.03em;cursor:pointer}
@media(max-width:430px){
  .pack-switch-btn{max-width:100%;padding:0 9px}.pack-switch-btn-compact{max-width:126px}.pack-switch-label{overflow:hidden;text-overflow:ellipsis}
  .pack-viewing-banner{align-items:stretch;flex-direction:column}.pack-today-btn{width:100%;justify-content:center;min-height:48px}
  .pack-picker-overlay{padding-left:0;padding-right:0;padding-bottom:0}.pack-picker-sheet{max-height:88vh;border-radius:22px 22px 0 0;border-bottom:0}
  .pack-picker-row{grid-template-columns:64px minmax(0,1fr) auto}.pack-picker-row.is-team{grid-template-columns:minmax(0,1fr) auto}.pack-picker-main{flex-direction:column;align-items:flex-start;gap:0}
  .pack-picker-row.is-event,.pack-picker-row.is-more{grid-template-columns:minmax(0,1fr) auto}
}

/* ================= 移動支援シート（Phase 1・純正ナビ／Google Maps） =================
 * 経路アイコンを押すと下から出る。ボタンは2つだけ・52px以上・17px以上・線画アイコン。
 * 第一ボタン（左上＝最初に目が行く位置）は Google Maps＝今まで1タップで開けていたものを探させない。
 */
body.travel-open{overflow:hidden}
.travel-overlay{
  position:fixed;inset:0;z-index:1100;background:rgba(10,23,45,.34);
  display:flex;align-items:flex-end;justify-content:center;overscroll-behavior:contain;
}
.travel-sheet{
  width:min(430px,100%);padding:9px 16px calc(14px + env(safe-area-inset-bottom));
  border-radius:14px 14px 0 0;background:#fff;border-top:1px solid var(--bg-hair-2);
  box-shadow:0 -6px 18px rgba(8,24,48,.13);display:grid;gap:8px;max-height:88vh;overflow:auto;
  overscroll-behavior:contain;
}
.travel-grabber{width:36px;height:3px;margin:0 auto 3px;border-radius:2px;background:var(--bg-hair-2)}
.travel-title{font-size:21px;font-weight:900;line-height:1.25;color:var(--c-fg);padding-bottom:6px;border-bottom:2px solid var(--c-brand)}
.travel-addr{font-size:17px;line-height:1.4;color:var(--c-fg-sub)}
.travel-btns{display:grid;gap:8px}
.travel-btn{
  min-height:56px;padding:0 12px;border:1.5px solid #b9c9e2;border-radius:11px;background:#fff;
  color:var(--c-now);font:inherit;font-size:18px;font-weight:900;text-decoration:none;
  display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;
}
.travel-btn:active{background:var(--bg-sunken)}
.travel-btn.is-navicon{border-color:#9db9e9;background:#f4f8ff}
.travel-none{min-height:52px;display:flex;align-items:center;font-size:17px;line-height:1.4;color:var(--c-fg-sub)}
.travel-more:empty{display:none}
/* 移動支援の天気は補助1行だけ（モック v13 の .drive-context）。橙は白地で 4.5:1 を満たす色。 */
.drive-context{display:flex;align-items:center;gap:8px;padding-top:11px;
  color:var(--c-fg-sub);font-size:17px;font-weight:800;line-height:1.35}
.drive-context>.ico{flex:0 0 19px;color:#8f3e09}
.drive-context .weather{color:#8f3e09;font-weight:900;white-space:nowrap}
.travel-close{min-height:52px;border:0;border-radius:10px;background:transparent;color:var(--c-fg-sub);font:inherit;font-size:17px;font-weight:900;cursor:pointer}
.travel-sheet a:focus-visible,.travel-sheet button:focus-visible{outline:3px solid var(--c-now);outline-offset:2px}
/* ---- UI10「目的地を選ぶ移動支援」（6のモック v13 ②・豊さん 2026-09-03） ----
 * 上段クイック入口のナビ矢印から開く形。既定（経路アイコンから開く1行き先の形）は上のまま。
 * 節は罫で区切る（カードを積まない）。値はパックから引けるものだけ出す。
 */
.travel-btn.is-maps{background:var(--c-now);color:#fff;border-color:var(--c-now)}
.travel-btn.is-maps>.ico{color:#fff}
.travel-sheet.is-picker{gap:2px}
.travel-dest{padding:5px 0 12px;border-bottom:1px solid var(--bg-hair-2)}
.travel-dest-title{font-size:18px;font-weight:900;line-height:1.3;margin-bottom:8px}
.travel-dest-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.travel-dest-btn{
  min-height:54px;padding:0 11px;border:1px solid var(--bg-hair-2);border-radius:10px;background:#fff;
  color:var(--c-fg);font:inherit;font-size:17px;font-weight:900;text-align:left;cursor:pointer;
  display:flex;align-items:center;gap:7px}
.travel-dest-btn>.ico{color:var(--c-now);flex:0 0 auto}
.travel-dest-btn>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.travel-dest-btn.is-selected{border-color:var(--c-now);background:#eef4fd;color:var(--c-now)}
.travel-mode{display:grid;grid-template-columns:64px 1fr 1fr;gap:8px;align-items:center;margin-top:10px}
.travel-mode-label{font-size:17px;font-weight:900;color:var(--c-fg-sub)}
.travel-mode-btn{
  min-height:52px;border:1px solid var(--bg-hair-2);border-radius:9px;background:#fff;
  color:var(--c-fg-sub);font:inherit;font-size:17px;font-weight:900;cursor:pointer}
.travel-mode-btn.is-selected{border-color:var(--c-now);background:#eef4fd;color:var(--c-now)}
.travel-picked{padding:12px 0 10px;border-bottom:1px solid var(--bg-hair-2)}
.travel-picked-name{font-size:20px;font-weight:900;line-height:1.3}
.travel-sheet.is-picker .travel-addr{margin:2px 0 0}
.travel-eta{
  display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end;
  padding:12px 0;border-bottom:1px solid var(--bg-hair-2)}
.travel-eta-main{font-size:26px;font-weight:900;line-height:1.2;color:var(--c-now);font-variant-numeric:tabular-nums}
.travel-eta-diff{font-size:17px;font-weight:900;line-height:1.3;text-align:right;white-space:nowrap}
.travel-eta-diff.is-late{color:var(--c-warn)}
.travel-eta-diff.is-early{color:var(--c-done)}
.travel-eta-sub{font-size:17px;color:var(--c-fg-sub);font-weight:800;line-height:1.3;text-align:right;white-space:nowrap}
.travel-section{padding:13px 0;border-bottom:1px solid var(--bg-hair-2)}
.travel-section-head{margin:0 0 8px;font-size:18px;font-weight:900;line-height:1.3;color:var(--c-fg)}
.travel-section .travel-btns{gap:8px}
.travel-stops{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
.travel-stop{
  min-height:52px;border:1px solid var(--bg-hair-2);border-radius:9px;background:#fff;
  color:var(--c-now);font:inherit;font-size:17px;font-weight:900;text-decoration:none;
  display:flex;align-items:center;justify-content:center;cursor:pointer}
.travel-stop:active{background:var(--bg-sunken)}
.travel-hint{font-size:17px;color:var(--c-fg-sub);font-weight:700;line-height:1.45;margin:8px 0 0}
/* ---- 寄り先（ルート沿いを動的に検索・整理メモ #54・2026-09-03） ----
 * 種別は3列2段（給油の隣に銘柄）＝5種類ぜんぶが一目に入る。押せる所は52px以上・字は17px以上。
 * 結果が無いときは .travel-stop-list ごとDOMに出さない（空の枠を置かない）。
 */
.travel-kinds{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
/* 3列×390px＝1列105px。「コンビニ」（17px太字で約68px）＋線画19px が入るよう
 * 余白は詰める（縦スクロールバーが出る端末でも文字を削らない）。 */
.travel-kind{
  min-height:52px;padding:0 5px;border:1px solid var(--bg-hair-2);border-radius:9px;background:#fff;
  color:var(--c-now);font:inherit;font-size:17px;font-weight:900;cursor:pointer;
  display:flex;align-items:center;justify-content:center;gap:4px}
.travel-kind>.ico{flex:0 0 auto}
.travel-kind>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.travel-kind:active{background:var(--bg-sunken)}
.travel-kind.is-selected{border-color:var(--c-now);background:#eef4fd}
/* 銘柄ボタンの ▾ は chev を90度倒して作る（新しいアイコンを増やさない）。 */
.travel-kind.is-brand{color:var(--c-fg-sub);font-size:17px}
.travel-kind-chev{transform:rotate(90deg)}
.travel-brands{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-top:7px}
.travel-brand{
  min-height:52px;padding:0 8px;border:1px solid var(--bg-hair-2);border-radius:9px;background:#fff;
  color:var(--c-fg);font:inherit;font-size:17px;font-weight:900;cursor:pointer;
  display:flex;align-items:center;justify-content:center}
.travel-brand.is-selected{border-color:var(--c-now);background:#eef4fd;color:var(--c-now)}
/* 1列のgridは既定で max-content＝行の中の nowrap（店名・寄り道分・営業）が畳めず、
 * シートごと横スクロールする（390pxで実測 sw394/cw360）。上の .travel-kinds 等と
 * 同じ minmax(0,1fr) を入れて列を器の幅に留める。 */
.travel-stop-list{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;margin-top:9px}
/* 2026-09-11: 食事の行は下に 店ページ／ぐるなび／食べログ を並べる＝`<a>` の入れ子は作れない
 * ので、行そのものを div（縦積み）にして中の `<a>` を分けた。枠・角丸・当たり判定（52px）は
 * 行が持ち、押せる面の余白は中の .travel-stop-main へ移しただけ＝食事以外の見た目は変わらない。 */
.travel-stop-row{
  min-height:52px;border:1px solid var(--bg-hair-2);border-radius:9px;background:#fff;
  color:var(--c-fg);font:inherit;font-size:17px;font-weight:900;text-decoration:none;
  display:flex;flex-direction:column;align-items:stretch;overflow:hidden}
.travel-stop-main{
  min-height:52px;padding:0 11px;color:inherit;font:inherit;text-decoration:none;
  display:flex;align-items:center;gap:8px}
.travel-stop-main:active,.travel-stop-row:active{background:var(--bg-sunken)}
/* 閉店中の行は既存の淡色（これより薄い文字は作らないと決めてある色）で引く＝新しい色は作らない。 */
.travel-stop-main.is-shut{color:var(--c-fg-sub)}
/* 「探しています…」と、0件・通信不可・会場から探した理由の1行。理由は折り返して全部読ませる。 */
.travel-stop-row.is-busy{padding:0 11px;color:var(--c-fg-sub);font-weight:800;
  flex-direction:row;align-items:center}
.travel-stop-row.is-note{display:block;padding:12px 11px;color:var(--c-fg-sub);font-weight:800;
  line-height:1.45}
.travel-stop-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.travel-stop-rate{flex:0 0 auto;color:var(--c-fg-sub);font-variant-numeric:tabular-nums;white-space:nowrap}
.travel-stop-meta{flex:0 0 auto;color:var(--c-now);font-variant-numeric:tabular-nums;white-space:nowrap}
.travel-stop-open{flex:0 0 auto;color:var(--c-done);white-space:nowrap}
.travel-stop-open.is-shut{color:var(--c-fg-sub)}
/* 外部リンクの段。3列×52px＝1つ約115px（「ぐるなび」は17px太字で約68px）＝折れない。 */
.travel-stop-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  border-top:1px solid var(--bg-hair-2)}
.travel-stop-link{
  min-height:52px;padding:0 4px;color:var(--c-now);font:inherit;font-size:17px;font-weight:900;
  text-decoration:none;display:flex;align-items:center;justify-content:center;
  min-width:0;overflow:hidden}
.travel-stop-link>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.travel-stop-link+.travel-stop-link{border-left:1px solid var(--bg-hair-2)}
.travel-stop-link:active{background:var(--bg-sunken)}
.travel-stop-fallback{
  min-height:52px;margin-top:9px;border:1px solid var(--bg-hair-2);border-radius:9px;background:#fff;
  color:var(--c-now);font:inherit;font-size:17px;font-weight:900;text-decoration:none;
  display:flex;align-items:center;justify-content:center;gap:7px}
.travel-stop-fallback:active{background:var(--bg-sunken)}
@media(max-width:359px){
  .travel-mode{grid-template-columns:52px 1fr 1fr;gap:6px}
  .travel-stops{gap:5px}
  .travel-kinds,.travel-brands{gap:5px}
  .travel-kind{padding:0 5px;gap:3px}
  .travel-eta-main{font-size:24px}
}

/* ================= カード ================= */
.card{
  border:1px solid var(--bg-hair);border-radius:var(--r-card);background:var(--c-bg);
  padding:16px;margin:0 0 14px;box-shadow:var(--shadow-1);
}
.card-hd{display:flex;align-items:center;gap:9px;margin:0 0 10px}
.card-hd>.ico{color:var(--c-now)}
/* 見出しを値に従属させる（豊さん 2026-08-30 本番当日:「見出しのテキストが コンテンツを
 * 邪魔してる気がする」→「短く＋小さく薄くして従属させる」に「そうですあってます」）。
 * 本文18px/500・値19〜31px に対して、カード見出しは 17px（UI規約の下限）・700・--c-fg-sub。
 * --c-fg-sub は「これより薄い文字は作らない」と決めてある既存の補助色（対白 9.7:1）＝
 * 直射日光下で読める範囲のいちばん引いた所。新しい色・寸法・クラスは作っていない。 */
.card-hd h2,.card-hd h3{flex:1 1 auto;min-width:0;font-size:17px;font-weight:700;color:var(--c-fg-sub)}
.card-ct{                                     /* カード見出しの右端バッジ（0/3 完了 など） */
  flex:0 0 auto;font-size:17px;font-weight:800;line-height:1;
  padding:7px 11px;border-radius:8px;background:var(--bg-now);color:var(--c-now);
}
.card-warn{background:var(--bg-warn);border-color:#f2dcc4}
.card-warn .card-hd>.ico{color:var(--ico-warn)}
.card-warn .card-hd h2{color:var(--c-warn)}
.card-warn .card-ct{background:var(--c-bg);color:var(--c-warn);border:1.5px solid #eccfae;
                    display:inline-flex;align-items:center;gap:5px}
.card-warn .card-ct>.ico{color:var(--ico-warn)}
.card-tight{padding:14px 14px 4px}
.card-flush{padding:14px 0 2px}              /* 行が縁まで伸びるカード */
.card-flush>.card-hd{padding:0 14px}
/* カードの中の区分ラベル（会場「現場で追加した注意」・記録「手動で切り替える」）も同じ扱い。 */
.card h3{font-size:17px;font-weight:700;color:var(--c-fg-sub)}
/* ただし行の中身（.body）に置いた h3 は見出しではなく**値**（現調の種別名）＝従属させない。 */
.card .body h3{font-size:18px;font-weight:800;color:var(--c-fg)}

/* 箇条書き（注意事項）。中黒は疑似要素で作る＝行頭が揃う */
.bul{list-style:none;margin:0;padding:0}
.bul>li{position:relative;padding:5px 0 5px 17px;font-size:18px;line-height:1.45}
.bul>li::before{content:"";position:absolute;left:2px;top:15px;width:6px;height:6px;border-radius:50%;
                background:currentColor;opacity:.65}
.card-warn .bul>li{color:var(--c-fg)}

/* ================= 主計器（進行画面の紺パネル・モック01の再現） ================= */
.hero{
  background-color:var(--bg-brand);   /* 検証器と非対応環境の正。gradientは上掛け */
  background-image:linear-gradient(168deg,#0b54b8 0%,var(--bg-brand) 46%,var(--bg-brand-d) 100%);
  color:#fff;border-radius:18px;padding:16px;margin:0 0 14px;box-shadow:var(--shadow-2);
}
.hero-top{display:flex;align-items:stretch;gap:12px}
.hero-cell{flex:1 1 0;min-width:0}
.hero-cell+.hero-cell{border-left:1px solid rgba(255,255,255,.28);padding-left:12px}
.hero-k{display:flex;align-items:center;gap:5px;font-size:17px;font-weight:700;color:var(--ink-brand);margin-bottom:3px}
.hero-k>.ico{color:var(--ink-brand)}
.hero-v{font-size:26px;font-weight:800;line-height:1.15;letter-spacing:-.02em;overflow-wrap:anywhere}
.hero-phase{                                  /* 「搬入・設営中」の白枠 */
  display:inline-block;font-size:21px;font-weight:800;line-height:1.15;
  border:1.5px solid rgba(255,255,255,.85);border-radius:11px;padding:7px 11px;margin-top:2px;
}
.hero-div{height:1px;background:rgba(255,255,255,.28);margin:13px 0 11px}
/* 残り時間は全幅1行（390pxで右2枠と同居させると「あと3日…」が縦に潰れる＝実測）。
 * 時刻2枠はその下の段で左右に並べる＝モック01の3計器を縦2段に組み替えた現場版 */
.hero-stats{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;row-gap:12px}
.hero-count{flex:1 1 100%;min-width:0}
.hero-num{font-size:46px;font-weight:800;line-height:1;letter-spacing:-.03em;color:var(--ink-num)}
.hero-numline{display:flex;align-items:baseline;gap:4px;font-size:19px;font-weight:800;flex-wrap:wrap}
.hero-stat{flex:1 1 0;min-width:0;text-align:left}
.hero-stat+.hero-stat{border-left:1px dashed rgba(255,255,255,.3);padding-left:12px}
.stat-k{font-size:17px;font-weight:700;color:var(--ink-brand)}
.stat-v{font-size:24px;font-weight:800;line-height:1.1;letter-spacing:-.02em}
.hero-note{margin-top:10px;font-size:17px;font-weight:700;color:var(--ink-brand)}

/* ================= 行リスト ================= */
.rows{list-style:none;margin:0;padding:0}
.rows>li{
  display:flex;gap:10px;align-items:center;
  min-height:60px;padding:11px 14px;border-top:1px solid var(--bg-hair);
}
.card-flush>.rows>li:first-child,.rows.rows-plain>li:first-child{border-top:none}
.rows.rows-plain>li{padding-left:0;padding-right:0}
.body{flex:1 1 auto;min-width:0}
.row-t{flex:0 0 auto;font-weight:800;font-size:19px;letter-spacing:-.01em}
.row-title{font-size:18px;font-weight:700;line-height:1.35;overflow-wrap:anywhere}
.t{flex:0 0 4.6em;font-weight:800}
.chev{flex:0 0 auto;color:var(--bg-hair-2)}
/* 行全体を叩ける導線（60px確保）。<a>にも<button>にも付く */
.tap{
  display:flex;gap:10px;align-items:center;width:100%;min-height:60px;
  padding:11px 14px;border:none;background:none;font:inherit;color:inherit;
  text-align:left;text-decoration:none;cursor:pointer;
}
.tap:active{background:var(--bg-sunken)}
.rows>li.li-tap{padding:0}
.now-row{background:#eef3fd}

/* ================= 状態バッジ（モックのピル） ================= */
.pill{
  display:inline-flex;align-items:center;gap:5px;flex:0 1 auto;max-width:100%;
  font-size:17px;font-weight:700;line-height:1;padding:6px 10px;border-radius:8px;
  background:var(--bg-neutral);color:var(--c-fg);white-space:nowrap;
}
.pill-now{background:var(--c-now);color:#fff}
.pill-done{background:var(--bg-done);color:var(--c-done)}
.pill-warn{background:var(--bg-warn);color:var(--c-warn)}
.pill-alert{background:var(--bg-alert);color:var(--c-alert)}
.pill-brand{background:var(--bg-now);color:var(--c-now)}
/* 紺の面の上に置く反転バッジ（台本の「現在」） */
.pill-invert{background:var(--c-bg);color:var(--c-now)}
.pill-line{background:transparent;border:1.5px solid var(--bg-hair-2)}
/* ツール名のように長い値を持つバッジ。切り詰めない＝品名を隠さない */
.pill-long{white-space:normal;text-align:left;max-width:100%}
.pill>.ico{color:currentColor}
.pill-wrap{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
/* 行頭の小さな印（必須・重要）。右の列を占有させず、長いラベルに幅を譲る */
.mark{display:inline-block;font-size:17px;font-weight:800;line-height:1;padding:3px 6px;border-radius:6px;
      margin-right:6px;vertical-align:2px;background:var(--bg-alert);color:var(--c-alert)}
/* 状態別の文字色（一覧の時刻・見出しに乗る） */
.s-planned{color:var(--c-fg)}
.s-in_progress{color:var(--c-now)}
.s-completed{color:var(--c-done)}
.s-skipped{color:var(--c-fg-sub)}
.s-blocked,.alert{color:var(--c-alert)}
.warn{color:var(--c-warn)}
.hard{display:inline-flex;align-items:center;gap:4px;border:1.5px solid var(--c-alert);border-radius:8px;
      padding:5px 8px;font-size:17px;font-weight:800;color:var(--c-alert);line-height:1}
.unconfirmed{color:var(--c-warn);font-weight:800}
.src{font-size:17px;color:var(--c-fg-sub)}
/* 予定が変わった行の併記（14:20（元14:30・rev 2変更））。淡くしない＝見落とさせない。 */
.chg{color:var(--c-warn);font-weight:800;font-size:17px}
/* 差分のパス（timeline_items[id=…].planned_at）は長いので途中で折り返す＝画面外へ出さない */
.diff{overflow-wrap:anywhere}

/* ================= タイムラインの軌条（モック02） ================= */
.tl{list-style:none;margin:0;padding:0}
.tl>li{position:relative;display:flex;gap:11px;align-items:flex-start;padding:0 0 0 4px}
.tl-rail{position:relative;flex:0 0 26px;display:flex;justify-content:center;padding-top:17px}
.tl-rail::before,.tl-rail::after{                 /* 上下の連結線 */
  content:"";position:absolute;left:50%;width:2px;margin-left:-1px;background:var(--bg-hair-2);
}
.tl-rail::before{top:0;height:17px}
.tl-rail::after{top:43px;bottom:0}
.tl>li:first-child .tl-rail::before{display:none}
.tl>li:last-child .tl-rail::after{display:none}
.tl-dot{position:relative;z-index:1;background:var(--c-bg);border-radius:50%}
.tl-dot.d-completed{color:var(--ico-done)}
.tl-dot.d-in_progress{color:var(--c-now)}
.tl-dot.d-planned,.tl-dot.d-skipped{color:var(--bg-hair-2)}
.tl-dot.d-warn{color:var(--ico-warn);background:none}
.tl-main{flex:1 1 auto;min-width:0;border-bottom:1px solid var(--bg-hair);padding:0}
.tl>li:last-child .tl-main{border-bottom:none}
.tl-row{display:flex;gap:9px;align-items:flex-start;width:100%;min-height:60px;padding:10px 8px 10px 0;
        border:none;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer}
.tl-head{display:flex;gap:9px;align-items:baseline;flex-wrap:wrap}
.tl-head .row-t{flex:0 0 auto}
.tl-head .row-title{flex:1 1 auto;min-width:0}
.tl-row:active{background:var(--bg-sunken)}
/* 工程ごとの1タップ行動（経路・図・台本・現調）。寸法は LIVE の .p4-current-links と同じ40pxのチップ。
 * 狭い端末では落とさずに折り返す＝320pxでも動線を1つも失わない。 */
.tl-acts{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:0 8px 10px 0}
.tl-act{min-height:40px;padding:0 10px;border:1px solid var(--bg-hair-2);border-radius:10px;
        display:inline-flex;align-items:center;gap:4px;background:var(--c-bg);color:var(--c-now);
        font:inherit;font-size:17px;font-weight:800;text-decoration:none;cursor:pointer}
.tl-act:active{background:var(--bg-sunken)}
.tl-act>.ico{color:var(--c-now)}
.tl-now .tl-main{background:var(--bg-now);border-radius:10px;border-bottom-color:transparent;
                 box-shadow:inset 0 0 0 2px var(--c-now)}
.tl-now .tl-row{padding-left:9px}
.tl-legend{display:flex;justify-content:center;gap:14px;flex-wrap:wrap;padding:14px 0 2px}
.tl-legend>span{display:inline-flex;align-items:center;gap:5px;font-size:17px;font-weight:700}
.tl-sub{padding:0 8px 12px 0}

/* ================= 進捗計（記録画面・モック05） ================= */
.gauge{display:flex;align-items:center;gap:16px}
.gauge-ring{position:relative;flex:0 0 auto;color:var(--c-now)}
.ring{display:block}
.ring-lbl{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
          line-height:1.05}
.ring-v{font-size:28px;font-weight:800;letter-spacing:-.02em}
.ring-v small{font-size:19px;font-weight:800;color:var(--c-fg)}
.ring-k{font-size:17px;font-weight:700}
.gauge-body{flex:1 1 auto;min-width:0}
.bar{height:12px;border-radius:var(--r-pill);background:var(--bg-track);overflow:hidden;margin-top:9px}
.bar-fill{height:100%;border-radius:var(--r-pill);background:var(--c-now);transition:width .3s var(--ease-out)}
.cbx{flex:0 0 auto;color:var(--c-now)}
.cbx.off{color:var(--bg-hair-2)}

/* ================= 4連タイル（進行画面のショートカット） ================= */
.tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0 0 12px}
.tiles-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.tile{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  min-height:92px;padding:10px 4px;border:1px solid var(--bg-hair);border-radius:14px;
  background:var(--c-bg);color:var(--c-fg);text-decoration:none;
  font-size:17px;font-weight:700;line-height:1.2;text-align:center;
  box-shadow:var(--shadow-1);
}
.tile>.ico{color:var(--c-now)}
.tile:active{background:var(--bg-sunken)}
.tile-on{background:var(--c-now);color:#fff;border-color:var(--c-now)}
.tile-on>.ico{color:#fff}

/* 「次の会場」帯（モック01下段）。左に緑の会場記号 */
.nextv{display:flex;align-items:center;gap:12px;width:100%;min-height:76px;padding:12px 14px;
       border:1px solid var(--bg-hair);border-left:5px solid var(--c-done);border-radius:14px;
       background:var(--c-bg);color:inherit;text-decoration:none;box-shadow:var(--shadow-1)}
.nextv:active{background:var(--bg-sunken)}
.avatar{flex:0 0 auto;width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;
        background:var(--c-done);color:#fff}
.avatar-brand{background:var(--bg-now);color:var(--c-now)}

/* ================= 区分けタブ（担当者フィルタ・会場/フェーズ選択・台本セグメント） ================= */
/* 折り返さず横スクロールの1行にする。項目が5個・8個でも帯の高さは60pxのまま＝一覧が押し出されない。
 * 余りがあれば伸びる(flex-grow:1)が、文字幅より縮まない(flex-shrink:0)。 */
.segs{display:flex;gap:6px;padding:4px;margin:0 0 12px;background:var(--bg-sunken);
      border:1px solid var(--bg-hair);border-radius:14px;
      overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.segs::-webkit-scrollbar{display:none}
/* 右端をわずかにぼかして「まだ続きがある」ことを示す（矢印を足さずに済ませる） */
.segs{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 22px),transparent);
      mask-image:linear-gradient(90deg,#000 calc(100% - 22px),transparent)}
.seg{
  flex:1 0 auto;min-width:max-content;min-height:60px;padding:0 14px;
  display:inline-flex;align-items:center;justify-content:center;
  border:none;border-radius:10px;background:transparent;color:var(--c-fg);
  font:inherit;font-size:17px;font-weight:800;white-space:nowrap;cursor:pointer;
}
.seg[aria-pressed="true"]{background:var(--c-now);color:#fff;box-shadow:0 1px 4px rgba(0,71,179,.28)}
.segs-wrap{flex-wrap:wrap;overflow:visible}
.segs-wrap>.seg{flex:1 1 45%}
.segs+.segs{margin-top:-4px}

/* ================= 手順の帯（現調モード・モック06） ================= */
.steps{display:flex;align-items:center;gap:2px}
.step{flex:1 1 0;min-width:0;display:flex;align-items:center;justify-content:center;gap:5px;
      min-height:52px;padding:0 2px;border:1.5px solid var(--bg-hair);border-radius:var(--r-pill);
      font-size:17px;font-weight:800;background:var(--c-bg);white-space:nowrap}
.step-n{flex:0 0 auto;width:23px;height:23px;border-radius:50%;background:var(--bg-neutral);color:var(--c-fg);
        display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:800;line-height:1}
.step-on{border-color:var(--c-now);background:var(--bg-now);color:var(--c-now)}
.step-on .step-n{background:var(--c-now);color:#fff}
.step-sep{flex:0 0 auto;color:var(--bg-hair-2);margin:0 -1px}

/* ================= 空状態・エラー ================= */
.empty{
  display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px;
  padding:20px 16px;border:1px solid var(--bg-hair);border-radius:var(--r-card);background:var(--bg-sunken);
  margin:0 0 12px;
}
.empty-ico{width:56px;height:56px;border-radius:50%;background:var(--c-bg);border:1px solid var(--bg-hair);
           display:flex;align-items:center;justify-content:center;color:var(--c-now)}
.empty h2{font-size:19px}
.empty p{font-size:18px;max-width:30ch;line-height:1.4}
.empty .btn{margin-top:4px}
.empty-warn{background:var(--bg-warn);border-color:#f2dcc4}
.empty-warn .empty-ico{color:var(--ico-warn);border-color:#eccfae}
.err{border:2px solid var(--c-alert);background:var(--bg-alert);color:var(--c-alert);
     border-radius:var(--r-card);padding:14px;font-weight:800;margin:0 0 12px}
/* 技術的な詳細（404の一覧・スタック）は畳んで隠す＝現場に生ログを見せない */
.det{border:1px solid var(--bg-hair);border-radius:12px;background:var(--c-bg);margin:0 0 12px}
.det>summary{min-height:60px;display:flex;align-items:center;gap:8px;padding:0 14px;
             font-size:17px;font-weight:800;cursor:pointer;list-style:none;color:var(--c-fg)}
.det>summary::-webkit-details-marker{display:none}
.det>summary>.ico{color:var(--c-fg-sub)}
.det[open]>summary{border-bottom:1px solid var(--bg-hair)}
.det-body{padding:12px 14px}
.det-body code,.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:17px;
                     overflow-wrap:anywhere}
.stub{border:1px solid var(--bg-hair);border-radius:12px;background:var(--bg-sunken);
      padding:12px 14px;color:var(--c-fg-sub);font-size:17px;margin:0 0 12px;
      display:flex;gap:9px;align-items:flex-start}
.stub>.ico{color:var(--c-fg-sub)}

/* ================= 重要更新バナー（全画面の先頭） ================= */
.banner{
  border:2px solid var(--c-warn);border-radius:var(--r-card);background:var(--bg-warn);
  padding:12px;margin:12px 0;display:flex;gap:10px;align-items:center;flex-wrap:wrap;
}
.banner>.ico{color:var(--ico-warn)}
.banner-text{flex:1 1 60%;min-width:0;font-size:18px;color:var(--c-warn);font-weight:800}
.banner .btn{flex:0 0 auto;min-width:132px}

/* ================= UI15-C 現場の終了状態（読めるが書けない） =================
 * 豊さん 2026-09-08「全部消す必要あるかな」→消さない。書く口だけを閉じる。
 * 帯は**全画面のヘッダ直下**（#view の先頭）に同じ形で出る。灰地・黒字・17px・絵文字なし。
 * 押せなくした的は「押せない顔」にする＝薄い字にはしない（屋外で読める字のまま灰色の面）。
 */
.closed-banner{
  margin:0 0 12px;padding:13px 14px;border:1px solid #c9ccd3;border-radius:var(--r-card);
  background:#e9ebef;color:var(--c-fg);font-size:17px;font-weight:800;line-height:1.4;
}
[data-zff-closed="1"] .is-room-closed{
  background:#e3e5ea!important;border-color:#c9ccd3!important;color:var(--c-fg-sub)!important;
  box-shadow:none!important;cursor:default!important;
}
[data-zff-closed="1"] .is-room-closed svg{color:var(--c-fg-sub)!important}

/* ================= トースト ================= */
.toast{
  position:fixed;left:12px;right:12px;z-index:30;
  bottom:calc(var(--nav-h) + env(safe-area-inset-bottom) + 12px);
  background:var(--c-fg);color:var(--c-bg);border-radius:12px;
  padding:14px;font-size:18px;font-weight:800;
  box-shadow:0 10px 30px rgba(17,17,17,.24);
  animation:toast-in .22s var(--ease-out);
}
.toast[hidden]{display:none}
@keyframes toast-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ================= 下部ナビ（「進行」が正。旧「いま」は使わない） ================= */
.nav{
  position:fixed;left:0;right:0;bottom:0;z-index:20;
  height:calc(var(--nav-h) + env(safe-area-inset-bottom));
  padding-bottom:env(safe-area-inset-bottom);
  display:flex;background:var(--c-bg);border-top:1px solid var(--bg-hair-2);
}
.nav-item{
  flex:1 1 auto;min-width:0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  min-height:var(--nav-h);padding:0 2px;position:relative;
  font-size:17px;font-weight:800;letter-spacing:-.03em;white-space:nowrap;
  color:var(--c-fg-sub);text-decoration:none;
}
.nav-item>.ico{color:var(--c-fg-sub)}
.nav-item[aria-current="page"]{color:var(--c-now)}
.nav-item[aria-current="page"]>.ico{color:var(--c-now)}
.nav-item[aria-current="page"]::before{           /* 上端の在位バー（モック02の青線） */
  content:"";position:absolute;top:0;left:14%;right:14%;height:3px;border-radius:0 0 3px 3px;
  background:var(--c-now);
}
/* 2026-09-16 共有: 下タブの未読（赤丸＋数）。読む字ではなく印なので 17px 床の外
 * （曜日の1字・注意の！と同じ扱い）。0件のときは要素ごと消える＝空の丸は出ない。 */
.nav-badge{
  position:absolute;top:4px;left:calc(50% + 7px);min-width:20px;height:20px;padding:0 5px;
  border-radius:999px;background:#b3261e;color:#fff;
  font-size:13px;font-weight:900;line-height:20px;text-align:center;
  font-variant-numeric:tabular-nums;
}
.nojs{padding:24px;font-weight:800}

/* ================= 現調モード（工程3） =================
 * 屋外・軍手・片手前提。種別7択は2列の大ボタン（1タップの的を大きく取る）。 */
.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.photo-btn{min-height:76px;font-size:20px}
.cat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0}
.cat-grid>.cat{
  position:relative;width:100%;min-height:64px;padding:0 10px;font-size:17px;
  justify-content:flex-start;gap:9px;text-align:left;
}
.cat.btn-primary::after{                          /* 選択中の丸チェック（モック06） */
  content:"";position:absolute;top:-7px;right:-7px;width:23px;height:23px;border-radius:50%;
  background:var(--c-now);border:2.5px solid #fff;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.6 12.4 10 15.8 17.4 8.4' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-size:100%;
}
.thumbs{list-style:none;margin:0;padding:0}
.thumbs>li{display:flex;gap:11px;align-items:center;padding:9px 0;border-top:1px solid var(--bg-hair)}
.thumbs>li:first-child{border-top:none}
.thumb{width:76px;height:76px;object-fit:cover;border:1px solid var(--bg-hair);border-radius:10px;
       background:var(--bg-track);flex:0 0 auto}
.thumb-lg{width:126px;height:96px}
/* 保存済み写真のサムネ（追加済み一覧・会場画面）。押すと拡大する。
 * 読み込み前・端末に写真が無いときは .thumb-ph のアイコン枠のまま（fail-soft）。 */
.thumb-ph{display:flex;align-items:center;justify-content:center;color:var(--c-fg-sub)}
.thumb-tap{position:relative;flex:0 0 auto;padding:0;border:0;background:none;line-height:0;cursor:pointer}
.thumb-tap:active{opacity:.72}
.thumb-n{                                        /* 2枚目以降の枚数（先頭1枚＋「+N」） */
  position:absolute;right:4px;bottom:4px;padding:2px 6px;border-radius:8px;
  background:rgba(11,26,51,.82);color:#fff;font-size:17px;font-weight:800;line-height:1.25;
}
.thumb-grid{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}

/* 図・写真の拡大＝全画面。豊さん 2026-08-29（本番中・逐語）:
 *   「pdf見れるようになったのはいいけど、表示枠が小さいよね」
 * v20260829b までは「暗幕＋白いシート」の器の中に図を置いていたので、シートの余白・角丸・
 * 閉じるボタンの分だけ実際に図が映る面積が減っていた（390×844で画面の16%）。
 * 図面は細部（駐車枠の番号・パネル寸法）を読むための紙面なので、面積がそのまま実用性になる。
 *
 * 器をやめて画面いっぱいに出す。控えめな約束:
 *   - 操作（×・［−／等倍／＋］・前へ／次へ）は図に被せない。図の外の帯／柱に置く。
 *   - 縦向きは上に見出し・下に操作（図は横長なので上下に必ず余白ができる＝図は削らない）。
 *   - 横向きは右に柱をまとめる（横幅を使い切るのが目的なので、上下は使わない）。
 *   - 出典（元PDFと頁）は消さない。縦向きは図の下、横向きは見出しを兼ねて図の下に小さく1行。
 *   - .btn は60px・白地黒文字のまま（UI規約7）。変えるのは器だけ。
 */
body.photo-view-open{overflow:hidden}
.photo-view{position:fixed;inset:0;z-index:10000;background:#0a1730;padding:0}
.photo-view-sheet{
  position:absolute;inset:0;
  /* 縦向きは図の横幅が命なので左右の余白を0にする（余白は帯の側が持つ）。
   * ノッチ・ホームバーの下に潜らせない分だけは端末から貰う。 */
  padding:env(safe-area-inset-top) env(safe-area-inset-right)
          calc(6px + env(safe-area-inset-bottom)) env(safe-area-inset-left);
  display:grid;gap:6px;
  grid-template-columns:minmax(0,1fr);
  grid-template-rows:auto minmax(0,1fr) auto auto;   /* 見出し／図／出典／操作 */
  background:none;border-radius:0;box-shadow:none;
}
.photo-view-head{display:flex;align-items:center;gap:10px;padding:6px 10px 0;color:#fff}
.photo-view-head strong{flex:1 1 auto;min-width:0;font-size:19px;line-height:1.3;overflow-wrap:anywhere;
                        display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.photo-view-n{flex:0 0 auto;font-size:17px;color:rgba(255,255,255,.82);white-space:nowrap}
.photo-view-close{
  width:44px;height:44px;flex:0 0 44px;border:1.5px solid rgba(255,255,255,.5);border-radius:50%;
  background:rgba(255,255,255,.14);color:#fff;font:inherit;font-size:28px;line-height:1;cursor:pointer;
}
.photo-view-close:active{background:rgba(255,255,255,.3)}

/* 図が映る面。ここが画面いっぱいになるのが今回の主目的。 */
.photo-view-stage{position:relative;min-width:0;min-height:0}
.photo-view-zoom{position:absolute;inset:0;overflow:hidden;
                 display:flex;align-items:center;justify-content:center}
.photo-view-zoom[data-zoomed="1"]{touch-action:none;cursor:grab}
.photo-view-img{display:block;max-width:100%;max-height:100%;width:auto;height:auto;
                transform-origin:0 0}
.photo-view-cap{margin:0;padding:0 10px;color:rgba(255,255,255,.86);overflow-wrap:anywhere}
.photo-view-cap-title{display:none}                /* 縦向きは見出しに出ているので重ねない */
.photo-view-zoombar{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;padding:0 6px}
.photo-view-zoombar>.btn{padding:0 6px;font-size:19px}   /* 高さは .btn の60pxのまま（UI規約7） */
.photo-view-nav{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:0 6px}

/* 横向き（端末を横にして図面を読む）。高さが足りないので操作は右の柱にまとめ、
 * 図には画面の横幅と高さをそのまま渡す。 */
@media (orientation:landscape){
  .photo-view-sheet{
    padding:calc(6px + env(safe-area-inset-top)) calc(6px + env(safe-area-inset-right))
            calc(6px + env(safe-area-inset-bottom)) calc(6px + env(safe-area-inset-left));
    grid-template-columns:minmax(0,1fr) 140px;      /* 柱140px＝［前へ］［次へ］が1行に収まる幅 */
    grid-template-rows:auto auto minmax(0,1fr) auto;
  }
  .photo-view-stage  {grid-area:1 / 1 / 4 / 2}
  .photo-view-cap    {grid-area:4 / 1 / 5 / 3;padding:0 2px}
  .photo-view-head   {grid-area:1 / 2 / 2 / 3;padding:0}
  .photo-view-zoombar{grid-area:2 / 2 / 3 / 3;grid-template-columns:1fr;padding:0}
  .photo-view-nav    {grid-area:3 / 2 / 4 / 3;grid-template-columns:1fr 1fr;padding:0;align-self:start}
  .photo-view-head strong{display:none}            /* 140pxの柱には入らない。題は出典行が兼ねる */
  .photo-view-cap{font-size:17px;line-height:1.35} /* 17px床（8裁定 REWORK#5・例外なし）。図の高さを削らないための1〜2行 */
  .photo-view-cap-title{display:inline}
  .photo-view-cap-title::after{content:' ／ '}
  .photo-view-nav>.btn{padding:0 4px;gap:3px;font-size:17px;letter-spacing:-.04em}
}

/* 会場図の一覧（会場画面「現場で見る図」）。図は横長なので写真の76px角ではなく面で見せる。 */
.fig-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:10px}
.fig-grid>li{min-width:0}
.fig-tile{
  width:100%;display:flex;flex-direction:column;gap:7px;align-items:stretch;
  padding:8px;border:1.5px solid var(--bg-hair-2);border-radius:14px;background:var(--c-bg);
  font:inherit;color:var(--c-fg);text-align:left;cursor:pointer;box-shadow:var(--shadow-1);
}
.fig-tile:active{background:var(--bg-sunken);transform:translateY(1px);box-shadow:none}
.fig-tile-off{cursor:default;box-shadow:none;background:var(--bg-sunken)}
.fig-thumb{display:block;width:100%;aspect-ratio:16/10;object-fit:cover;object-position:center;
           border:1px solid var(--bg-hair);border-radius:9px;background:var(--bg-track)}
.fig-thumb-ph{display:flex;align-items:center;justify-content:center;color:var(--c-fg-sub)}
.fig-label{display:flex;gap:6px;align-items:flex-start;font-size:17px;line-height:1.25;font-weight:800;
           overflow-wrap:anywhere}
.fig-label>.ico{flex:0 0 auto;color:var(--c-now)}
.fig-note{font-size:17px;line-height:1.2;color:var(--c-fg-sub);font-weight:700}
@media (max-width:359px){.fig-grid{grid-template-columns:1fr}}
/* 資料PDF（kind=doc_pdf）の1行。会場ブロックの図の一覧の上と、全体資料の各行に出る。
 * 的の寸法・字は app/views/script.js の .script-pdf（原本PDF）と同じ値にそろえ、
 * 色だけ共通トークンで引き直す（--sp-* は .script-paper の中でしか生きない）。 */
.doc-rows{list-style:none;margin:0 0 10px;padding:0;display:flex;flex-direction:column;gap:8px}
.doc-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}
.doc-row-title{flex:1 1 auto;min-width:0;font-size:17px;line-height:1.3;font-weight:800;
               overflow-wrap:anywhere}
.doc-row-act{margin-top:8px}
.doc-pdf{flex:0 0 auto;min-height:60px;padding:0 9px;border:1px solid var(--bg-hair-2);
  border-radius:10px;background:var(--c-bg);color:var(--c-now);display:inline-flex;
  align-items:center;gap:5px;font:inherit;font-size:17px;font-weight:900;
  text-decoration:none;white-space:nowrap;cursor:pointer}
.doc-pdf:active{background:var(--bg-sunken);transform:translateY(1px)}
/* 取り込み前は押せない札（ボタンの形にしない＝押せる的と見分けられる）。 */
.doc-wait{flex:0 0 auto;display:inline-flex;align-items:center;gap:5px;min-height:60px;
  padding:0 9px;font-size:17px;line-height:1.2;font-weight:700;color:var(--c-fg-sub)}
.doc-wait>.ico{color:var(--c-fg-sub)}
/* ［写真を追加］のシート（下タブ図・資料）。器・摘み・閉じるは盤面の .timeline-sheet を
 * そのまま使い回す（新しい意匠を作らない）。足すのは高さの逃げ道だけ＝会場チップ・種類チップ・
 * メモ・写真の4段が入るので、背の低い端末（667px）でシートの中を送れるようにする。 */
.photoadd-sheet{max-height:86vh;overflow-y:auto}
.photoadd-sheet .segs{margin:0}
.photoadd-sheet .lbl{margin:0}
/* 下タブ「図・資料」の群れの見出し（全体資料／会場の図）。カードの外に立つ小見出しなので
 * 箱は作らず、寸法・色は .card-hd をそのまま踏襲する＝新しい意匠を増やさない。 */
.figtab-group{display:flex;align-items:center;gap:9px;margin:20px 2px 10px}
.figtab-group>.ico{color:var(--c-now)}
.figtab-group h2{flex:1 1 auto;min-width:0;font-size:17px;font-weight:700;color:var(--c-fg-sub)}

/* ================= 下タブ「図・資料」の3面（6のモック 2026-09-16） =================
 * 豊さん 9/16 13:0x「PDF が増えたら図まで辿り着けない」→ PDF／図／写真 を面で分ける。
 *
 * 【要確認・8裁定待ち】モックの指定は「枚数は13px灰」「頁数」など**13px**だが、
 * UI原則25 と このファイルの 17px 床（8裁定 REWORK#5「例外なし」）と食い違う。
 * ここは**床（17px）を守る側**に置き、切替を1行にしてある（--figtab-sub）。
 * 13px にすると決まったら次の1行だけを 13px に直せばよい。 */
.figures-controller{--figtab-sub:17px}

/* 面の切替は**下線タブ**（会場画面の節タブ .v11-tab と同じ文法＝文字＋下に3pxの線）。
 * 選ぶ物は札・見せる面の切替は下線、と形で役目を分ける（UI原則26）。 */
.figtab-faces{display:flex;align-items:stretch;height:56px;margin:0 0 12px;
  border-bottom:1px solid var(--bg-hair);overflow-x:auto;scrollbar-width:none}
.figtab-faces::-webkit-scrollbar{display:none}
.figtab-face{flex:0 0 auto;position:relative;height:55px;min-width:max-content;padding:0 14px;
  display:flex;align-items:center;gap:4px;font:inherit;font-size:17px;font-weight:900;
  color:var(--c-fg-sub);text-decoration:none;white-space:nowrap;cursor:pointer}
.figtab-face.is-active{color:var(--c-brand)}
.figtab-face.is-active::after{content:"";position:absolute;left:13px;right:13px;bottom:0;
  height:3px;background:var(--c-brand)}
.figtab-face-n{font-weight:800}

/* 3面に共通の丸い印（PDF面＝種類／図・写真面＝会場）。モックの「丸い青地のアイコン」。 */
.figtab-badge{flex:0 0 auto;width:34px;height:34px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;background:var(--c-brand)}
.figtab-badge>.ico{color:#fff}
/* この3面のカード見出しは「選ぶ物の名前」なので、.card-hd の従属（17px・薄字）を外して
 * モックどおり 20px・本文色にする。他のカードの見出しには効かない（.figtab-hd 限定）。 */
.figtab-hd h2{font-size:20px;font-weight:900;color:var(--c-fg);line-height:1.25;
  flex:1 1 9.5em}
/* 会場名が長い日（「瑞穂区 名古屋市博物館→瑞穂公園南ひろば」）に、右の的が名前を細く
 * 折らないようにする＝名前が入らなければ的だけ次の行へ落ちる（名前が4行に割れない）。 */
.figtab-hd{flex-wrap:wrap;row-gap:2px}
.figtab-hd-act{flex:0 0 auto;margin-left:auto;display:flex;align-items:center;gap:8px}
/* 「19枚 ›」「すべて見る ›」＝押すと開く的。数字と開いた先を一致させる（UI原則27）。 */
.figtab-all{flex:0 0 auto;min-height:52px;padding:0 2px 0 8px;border:0;background:none;
  display:inline-flex;align-items:center;gap:2px;font:inherit;font-size:17px;font-weight:800;
  color:var(--c-now);white-space:nowrap;cursor:pointer}
.figtab-all>.ico{color:currentColor}
.figtab-all:active{opacity:.6}
.figtab-back{display:inline-flex;align-items:center;gap:5px;min-height:52px;margin:0 2px 6px;
  font-size:17px;font-weight:800;color:var(--c-now);text-decoration:none}
.figtab-back>.ico{color:currentColor}

/* ---- ① PDF 面。1行＝1本。行ぜんぶが「開く」の的で、［送る］だけがその上に乗る ---- */
.pdf-rows{list-style:none;margin:0;padding:0}
.pdf-row{position:relative;display:flex;align-items:center;gap:4px;padding:0 8px 0 14px;
  border-top:1px solid var(--bg-hair)}
.pdf-rows>li:first-child{border-top:none}
.pdf-open{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:12px;padding:10px 0;
  text-decoration:none;color:inherit}
/* 行の端から端まで（›まで）を開く的にする。［送る］は z-index でこの上。 */
.pdf-open::after{content:"";position:absolute;inset:0}
.pdf-ico{flex:0 0 auto;width:56px;height:56px;border-radius:14px;background:var(--bg-sunken);
  display:inline-flex;align-items:center;justify-content:center;color:var(--c-pdf)}
.pdf-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:3px}
.pdf-title{font-size:17px;line-height:1.3;font-weight:800;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.pdf-sub{font-size:var(--figtab-sub);line-height:1.2;font-weight:700;color:var(--c-fg-sub)}
.pdf-send{position:relative;z-index:1;flex:0 0 auto;width:52px;height:52px;border:0;
  border-radius:12px;background:none;color:var(--c-now);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center}
.pdf-send>.ico{color:currentColor}
.pdf-send:active{background:var(--bg-sunken)}
.pdf-chev{flex:0 0 auto;display:inline-flex;color:var(--c-line)}
.pdf-row:not(.is-wait):active{background:var(--bg-sunken)}
/* まだ端末に無い行は灰にして、頁数の代わりに「取り込み中…」（押せる顔にしない）。 */
.pdf-row.is-wait .pdf-ico,.pdf-row.is-wait .pdf-title{color:var(--c-fg-sub)}
.pdf-row.is-wait .pdf-title{font-weight:700}
.pdf-row.is-wait .pdf-open{cursor:default}

/* ---- ② 図 面。会場カード → 種類の塊（2列） → その種類の一覧 → 拡大 ---- */
.fig-kinds{list-style:none;margin:0;padding:0 14px 12px;display:grid;
  grid-template-columns:1fr 1fr;gap:10px}
.fig-kinds>li{min-width:0}
.fig-kind{display:flex;flex-direction:column;gap:7px;padding:8px;background:var(--c-bg);
  border:1.5px solid var(--bg-hair-2);border-radius:14px;box-shadow:var(--shadow-1);
  text-decoration:none;color:var(--c-fg)}
.fig-kind:active{background:var(--bg-sunken);transform:translateY(1px);box-shadow:none}
.fig-kind-thumb{display:block;width:100%;aspect-ratio:16/10;object-fit:cover;
  object-position:center;border:1px solid var(--bg-hair);border-radius:9px;
  background:var(--bg-track)}
.fig-kind-ph{display:flex;align-items:center;justify-content:center;color:var(--c-fg-sub)}
.fig-kind-cap{display:flex;align-items:baseline;gap:6px;min-width:0;flex-wrap:wrap}
.fig-kind-label{font-size:17px;line-height:1.25;font-weight:900;overflow-wrap:anywhere}
.fig-kind-n{flex:0 0 auto;font-size:var(--figtab-sub);line-height:1.2;font-weight:700;
  color:var(--c-fg-sub)}

/* ---- ③ 写真 面。会場カードの中は3列。各枚の下に 時刻・班札・一言 ---- */
.photo-grid{list-style:none;margin:0;padding:0 14px 12px;display:grid;
  grid-template-columns:repeat(3,1fr);gap:8px}
.photo-grid>li{min-width:0}
.photo-cell{width:100%;display:flex;flex-direction:column;gap:5px;padding:0;border:0;
  background:none;font:inherit;color:var(--c-fg);text-align:left;cursor:pointer}
.photo-cell.is-off{cursor:default}
.photo-cell:not(.is-off):active{opacity:.7}
.photo-thumb{display:block;width:100%;aspect-ratio:1;object-fit:cover;border-radius:10px;
  border:1px solid var(--bg-hair);background:var(--bg-track)}
.photo-thumb-ph{display:flex;align-items:center;justify-content:center;color:var(--c-fg-sub)}
.photo-cap{display:flex;flex-direction:column;gap:3px;min-width:0}
.photo-cap-top{display:flex;align-items:center;gap:5px;min-width:0;flex-wrap:wrap}
.photo-time{font-size:var(--figtab-sub);line-height:1.2;font-weight:800}
.photo-team{flex:0 0 auto;font-size:var(--figtab-sub);line-height:1;font-weight:800;
  padding:3px 6px;border-radius:6px;background:var(--bg-now);color:var(--c-now)}
.photo-memo{font-size:var(--figtab-sub);line-height:1.25;font-weight:700;color:var(--c-fg-sub);
  overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;
  -webkit-line-clamp:2;overflow:hidden}
@media (max-width:359px){.photo-grid{gap:6px;padding:0 10px 12px}.fig-kinds{padding:0 10px 12px}}
.ico-back{transform:rotate(180deg)}
/* 入力欄は本文と同じ18px。iOSは16px未満だとフォーカス時に勝手に拡大する */
.ta,.ti{
  width:100%;font:inherit;font-size:18px;line-height:1.45;color:var(--c-fg);background:var(--bg-sunken);
  border:1.5px solid var(--bg-hair-2);border-radius:10px;padding:11px;margin:0;
}
.ta{min-height:60px;resize:vertical}
.ti{min-height:60px}
.ta:focus,.ti:focus{background:var(--c-bg);border-color:var(--c-now)}
.ta::placeholder,.ti::placeholder{color:var(--c-fg-sub)}
.field{margin:0 0 10px}
.field>label,.lbl{display:block;font-size:17px;font-weight:800;margin:0 0 6px}
/* 「現場入力」バッジ: パック原本値と現場で入れた値を見分けるための唯一の印 */
.tag{display:inline-flex;align-items:center;font-size:17px;font-weight:800;line-height:1;
     border-radius:8px;padding:6px 9px;margin-right:6px;background:var(--bg-neutral);color:var(--c-fg)}
.tag.onsite,.tag.warn{background:var(--bg-warn);color:var(--c-warn)}
.tag.s-completed{background:var(--bg-done);color:var(--c-done)}
.tag.alert{background:var(--bg-alert);color:var(--c-alert)}
.survey h3{margin-top:2px}

/* 会場の動線図（駐車場→搬入口→会場）。地点データが2件以上ある時だけ描く＝作り話をしない */
.route{display:flex;align-items:center;gap:4px;padding:12px;background:var(--bg-sunken);
       border:1px solid var(--bg-hair);border-radius:12px;margin-top:10px;overflow-x:auto}
.route-n{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:5px;
         min-width:80px;padding:9px 8px;border-radius:10px;background:var(--c-bg);
         border:1px solid var(--bg-hair);font-size:17px;font-weight:800;text-align:center}
.route-n>.ico{color:var(--c-now)}
.route-n.route-goal{background:var(--bg-done);border-color:#bfe6cf}
.route-n.route-goal>.ico{color:var(--c-done)}
.route-a{flex:0 0 auto;color:var(--c-now)}

/* 375px級で種別ボタンが2行に折れるのを防ぐ（字は縮めない・字送りと余白だけ） */
@media (max-width:374px){
  .cat-grid>.cat{letter-spacing:-.03em;padding:0 6px;gap:6px}
}
/* 狭い端末（iPhone SE 第1世代 320px 等）。字は縮めない＝余白と行間だけ詰める。 */
@media (max-width:359px){
  .tiles{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hero-num{font-size:40px}
  h1{font-size:25px}
  /* 字を17px未満にはしない（UI規約）。詰めるのは余白と字送りだけ。 */
  .btn{padding:0 10px;gap:6px;letter-spacing:-.035em}
  .cat-grid>.cat{padding:0 4px;gap:4px;letter-spacing:-.045em}
  .cat-grid>.cat>.ico{width:20px;height:20px}
  .view{padding-left:10px;padding-right:10px}
  .card{padding:12px}
  .card-flush>.card-hd{padding:0 12px}
  .rows>li,.tap{padding-left:12px;padding-right:12px}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}


/* ================= 台本: 全体台本 + 自チーム現在地 ================= */
.script-ops-context{
  margin:0 0 12px;padding:13px 14px;border:1.5px solid #b9cff3;border-radius:15px;background:#f5f8ff;
  color:var(--c-fg);display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;align-items:center;
}
.script-ops-title{display:flex;align-items:center;gap:10px;min-width:0}
.script-ops-pin{width:42px;height:42px;flex:0 0 42px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:#e6efff;color:var(--c-now)}
.script-ops-title>div{display:flex;flex-direction:column;min-width:0}
.script-ops-title small{font-size:17px;color:var(--c-fg-sub);font-weight:700}
.script-ops-title strong{font-size:24px;line-height:1.15;color:var(--c-now);overflow-wrap:anywhere}
.script-ops-meta{grid-column:1 / -1;display:flex;gap:8px 16px;flex-wrap:wrap;font-size:17px;line-height:1.35}
.script-ops-meta b{font-weight:850}
.script-scope-loading{grid-column:1 / -1;font-size:17px;color:var(--c-fg-sub);display:flex;align-items:center;gap:5px}
.script-browse-note,.script-readonly{
  margin:0 0 10px;padding:9px 11px;border-radius:12px;display:flex;align-items:center;gap:7px;font-size:17px;line-height:1.35;
}
.script-browse-note{border:1px solid #e1bd72;background:#fff8ea;color:#724800}
.script-readonly{border:1px solid var(--bg-hair-2);background:var(--bg-sunken);color:var(--c-fg-sub)}
.script-scope-error{margin-top:10px}
@media(max-width:430px){
  .script-ops-context{grid-template-columns:1fr;padding:12px}.script-ops-title strong{font-size:22px}.script-ops-meta{flex-direction:column;gap:3px}
}

/* ---- 台本: キューの縦並び（豊さん 2026-08-28 指摘2/3） ----
 * セリフ（原本台本の逐語引用）が主役。要約・担当・機材は補足に下げる。
 * 17px以下の小要素を並べない＝現場は本文を読む。字は本文18pxより上に置く。 */
.script-cue-hd{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.script-cue-t{font-size:23px;line-height:1.25;overflow-wrap:anywhere}
.script-quote-wrap{margin-top:9px}
.script-quote{                                  /* セリフ本体。読む物なので本文より大きく行間も広い */
  font-size:20px;line-height:1.75;font-weight:600;color:var(--c-fg);
  white-space:pre-line;overflow-wrap:anywhere;
  padding:2px 0 0 12px;border-left:4px solid var(--bg-hair-2);
}
.script-quote-src{font-size:17px;line-height:1.4;color:var(--c-fg-sub);margin-top:5px;padding-left:12px}
.script-cue-sum{margin-top:9px}                 /* 要約（.small と併用＝17px・補助色） */
.script-cue-plain{font-size:18px;line-height:1.55;margin-top:7px;overflow-wrap:anywhere}
/* 紺の盤面＋直下の白カードは1つの塊。間を詰めて「現在」を一体に見せる */
.script-cue-now>.hero{margin-bottom:8px}


/* ================= UI19 隊列（parade・app/views/formation.js） =================
 * 意匠の正本 = handoffs/zipflow_ops_ui19_formation_mock_v10_20260909.html（6作・豊さん採用）。
 * 全体図とクローズアップは同じ升目を高さ違いで並べただけ＝幅の比が自動でそろう。
 * 表示範囲枠がその比で動くので、枠の位置は実際の閲覧位置と一致する。
 *   --fm-close-h  クローズアップの絵の高さ（JS の CLOSE_H と同じ数）
 *   --fm-mini-h   全体図の絵の高さ（JS の MINI_H と同じ数）
 *   --fm-tile-w   小絵の無い単位のタイル幅（JS の TILE_W と同じ数）
 * この3つを直すときは app/views/formation.js の定数も一緒に直す（比がずれると枠がずれる）。 */
#formation-view{--fm-close-h:250px;--fm-mini-h:44px;--fm-tile-w:46px;--fm-paper:#252525}
/* v10 の面は左右10pxで置かれている。この画面の器（.view）は12pxなので2pxだけ戻す
 * ＝紙の幅と札の折り返しが v10 と同じになる。 */
#formation-view>.fm-places,#formation-view>.fm-visual,#formation-view>.fm-formation{
  margin-left:-2px;margin-right:-2px;
}
/* --fm-paper = v10 の --paper-line。隊列詳細だけで使う「紙の罫」の色（面と線・文字には使わない）。 */

/* ---- ① 地点の切替 ---- */
.fm-places{padding:0;overflow:hidden}
.fm-rail{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding:10px 12px 8px}
.fm-rail::-webkit-scrollbar{display:none}
.fm-chip{
  min-height:52px;flex:0 0 auto;border:1px solid var(--bg-hair-2);border-radius:11px;
  background:var(--c-bg);color:var(--c-fg-sub);padding:0 14px;font:inherit;font-size:17px;
  font-weight:800;white-space:nowrap;
}
.fm-chip[aria-pressed="true"]{background:var(--c-now);border-color:var(--c-now);color:#fff}
.fm-summary{
  min-height:46px;border-top:1px solid var(--bg-hair);display:flex;align-items:center;
  gap:8px;padding:0 14px;font-weight:800;
}
.fm-summary-place{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:17px}
.fm-summary strong{margin-left:auto;color:var(--c-now);font-size:18px;white-space:nowrap}
/* v10 の要約は**組数と長さ**の2値。長さは仮の目安（app/views/formation.js の UNIT_LEN_M）。 */
.fm-summary-len{flex:0 0 auto;color:var(--c-fg-sub);font-size:17px;white-space:nowrap}

/* ---- ② 全体図（縮小した隊列＋表示範囲枠） ---- */
.fm-visual{padding:0}
/* v10 の見出しは字だけ（アイコンを付けない）。クローズアップの札と同じ字組にそろえる。 */
.fm-visual-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px 7px}
.fm-visual-head h2{margin:0;font-size:17px;font-weight:800;line-height:1.3}
.fm-mini-stage{padding:7px 10px 9px;background:var(--bg-sunken);border-top:1px solid var(--bg-hair)}
.fm-mini-wrap{position:relative;width:max-content;max-width:100%;margin:0 auto}
.fm-mini-track{display:flex;align-items:flex-start;width:max-content;background:var(--c-bg);border:1px solid var(--bg-hair-2)}
.fm-window{
  position:absolute;top:-1px;bottom:-1px;left:0;min-width:28px;
  border:2px solid var(--c-now);background:rgba(0,71,179,.03);border-radius:4px;
  pointer-events:none;z-index:2;
}

/* ---- ③ クローズアップ（横スクロール） ---- */
.fm-close-wrap{position:relative;border-top:1px solid var(--bg-hair);border-bottom:1px solid var(--bg-hair);background:var(--bg-track)}
/* 端のフェード＝「まだ先がある」を説明文なしで言う（豊さん 2026-09-09）。 */
.fm-close-wrap::before,.fm-close-wrap::after{
  content:"";position:absolute;top:0;bottom:0;width:26px;z-index:2;pointer-events:none;
}
.fm-close-wrap::before{left:0;background:linear-gradient(to right,var(--bg-track) 18%,rgba(240,241,243,0))}
.fm-close-wrap::after{right:0;background:linear-gradient(to left,var(--bg-track) 18%,rgba(240,241,243,0))}
.fm-cue{
  position:absolute;top:50%;transform:translateY(-50%);width:22px;height:22px;border-radius:11px;
  background:rgba(255,255,255,.94);border:1px solid rgba(0,71,179,.18);color:var(--c-now);
  display:flex;align-items:center;justify-content:center;z-index:3;pointer-events:none;
  box-shadow:var(--shadow-1);
}
.fm-cue-l{left:6px}.fm-cue-r{right:6px}
/* v10 と同じ小見出し（何が下にあるかの札。操作の説明ではない）。 */
.fm-close-cap{padding:9px 14px 6px;border-top:1px solid var(--bg-hair)}
.fm-close-cap h2{margin:0;font-size:17px;font-weight:800;line-height:1.3}
.fm-close-scroll{overflow-x:auto;scrollbar-width:none;padding:8px 0}
.fm-close-scroll::-webkit-scrollbar{display:none}
/* 絵が届く前でも高さが変わらない（届いた瞬間に下の隊列詳細が跳ねない）＝v10 の min-height。 */
.fm-close-track{display:flex;align-items:flex-start;width:max-content;padding:0 10px;
  min-height:calc(var(--fm-close-h) + 14px)}

/* ---- 升目（全体図とクローズアップで同じ物・高さだけ違う） ---- */
.fm-cell{position:relative;flex:0 0 auto;background:var(--c-bg);border-right:1px solid var(--bg-hair)}
.fm-cell>img{display:block;height:var(--fm-close-h);width:auto;max-width:none;background:var(--c-bg)}
/* 小絵の無い単位。原図の枠と見分けが付く地色にする（真っ白だと帯の「穴」に見える）。 */
.fm-cell>.fm-tile{
  width:var(--fm-tile-w);height:var(--fm-close-h);background:var(--bg-neutral);
  border-left:3px solid var(--bg-hair-2);border-right:1px solid var(--bg-hair-2);
  display:flex;align-items:center;justify-content:center;overflow:hidden;
}
/* 名前は縦書き（隊列図の枠と同じ向き）。字は17px床を割らない。 */
.fm-cell>.fm-tile>span{
  writing-mode:vertical-rl;font-size:17px;font-weight:800;line-height:1.2;color:var(--c-fg-sub);
  max-height:calc(var(--fm-close-h) - 16px);overflow:hidden;
}
.fm-cell-mini{border-right:0}
.fm-cell-mini>img{height:var(--fm-mini-h)}
/* 全体図側のタイルは同じ比で縮める＝枠の目盛りが狂わない（46 × 44/250）。 */
.fm-cell-mini>.fm-tile{
  width:calc(var(--fm-tile-w) * var(--fm-mini-h) / var(--fm-close-h));
  height:var(--fm-mini-h);border-left-width:2px;
}
/* 未合流＝薄く。合流したて＝薄い青地＋上辺の細い青線（太枠も「この地点」の札も使わない）。 */
.fm-cell.is-future{opacity:.34;filter:grayscale(.35)}
.fm-cell.is-just{background:var(--bg-now);box-shadow:inset 0 3px 0 var(--c-now);z-index:1}

/* ---- ④ 隊列詳細（v10 の紙の隊列表） ----
 * v10 の .formation をそのまま写す（上下の二重罫・左の縦レール・節点○・1単位1枚の箱）。
 * 位置の数（26/48・-24/-30・-34/-40）は v10 の実測値。○はレールの**左に掛ける**（線が
 * ○の右端を通る）＝図の読み口が v10 と同じになる。字だけは17px床に合わせて持ち上げた。 */
.fm-formation{
  position:relative;margin:9px 0 12px;padding:12px 8px 16px 42px;background:var(--c-bg);
  border-top:4px double var(--fm-paper);border-bottom:4px double var(--fm-paper);
  box-shadow:var(--shadow-1);
}
/* 縦のレール（先頭→後尾）。節点はここに掛かる。 */
.fm-formation::before{
  content:"";position:absolute;left:26px;top:48px;bottom:20px;width:3px;background:var(--fm-paper);
}
.fm-formation-label{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  border-bottom:1px solid var(--fm-paper);padding:0 2px 8px;margin-bottom:10px;
}
.fm-formation-label h2{margin:0;font-size:18px;font-weight:800;line-height:1.25}
.fm-formation-label>span{font-size:17px;font-weight:700;color:var(--c-fg-sub);white-space:nowrap}
/* 進む向き＝「先頭」と↓。レールの頭に乗せる（白地で罫を切る）。 */
.fm-dir{
  position:absolute;left:2px;top:11px;width:42px;text-align:center;background:var(--c-bg);
  font-size:17px;font-weight:800;line-height:1.1;z-index:1;
}
.fm-dir::after{content:"↓";display:block;font-size:21px;line-height:1;margin-top:1px}

.fm-group{position:relative;margin:0 0 10px}
.fm-group::before{
  content:"";position:absolute;left:-24px;top:30px;width:24px;height:3px;background:var(--fm-paper);
}
.fm-node{
  position:absolute;left:-30px;top:24px;width:15px;height:15px;border:3px solid var(--fm-paper);
  background:var(--c-bg);border-radius:50%;z-index:2;
}
/* 「この地点で合流」は箱の上辺に乗る丸札（右端の札の列には入れない＝v10）。 */
.fm-join-now{
  position:absolute;right:8px;top:-13px;z-index:3;background:var(--c-now);color:#fff;
  border-radius:var(--r-pill);padding:2px 9px;font-size:17px;font-weight:800;line-height:1.3;
}
.fm-section-cap{
  margin:14px 0 8px;padding:7px 10px;border:1px solid var(--fm-paper);background:var(--bg-neutral);
  font-size:17px;font-weight:800;color:var(--c-fg);
}
.fm-section-sep{
  display:flex;align-items:center;gap:8px;margin:16px 0 9px;
  color:var(--c-fg-sub);font-size:17px;font-weight:800;
}
.fm-section-sep::before,.fm-section-sep::after{content:"";height:1px;background:var(--bg-hair-2);flex:1}

/* 合流地点ごとの束。束の頭に「◯◯で合流」の札を置き、束の中の節点は青にする。 */
.fm-branch{position:relative;margin:2px 0 10px;padding-left:10px;border-left:4px solid var(--c-now)}
.fm-branch-label{
  display:inline-block;margin:0 0 7px -10px;padding:5px 9px;background:var(--c-now);color:#fff;
  font-size:17px;font-weight:800;line-height:1.25;
}
.fm-branch .fm-group::before{left:-34px;width:34px;background:var(--c-now)}
.fm-branch .fm-node{left:-40px;border-color:var(--c-now)}
/* まだ来ていない束は青にしない（青＝いま隊列に居る、を薄めない）。 */
.fm-branch.is-future{border-left-color:var(--bg-hair-2)}
.fm-branch.is-future .fm-branch-label{
  background:var(--bg-neutral);color:var(--c-fg-sub);border:1px solid var(--bg-hair-2);
}
.fm-branch.is-future .fm-group::before{background:var(--fm-paper)}
.fm-branch.is-future .fm-node{border-color:var(--fm-paper)}

/* ---- 単位の箱 ---- */
.fm-unit{
  position:relative;border:1.7px solid var(--fm-paper);border-radius:3px;background:var(--c-bg);
  overflow:hidden;
}
.fm-unit>summary{
  min-height:60px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;
  padding:8px 11px;cursor:pointer;list-style:none;
}
.fm-unit>summary::-webkit-details-marker{display:none}
.fm-unit-main{min-width:0}
.fm-unit-name{display:block;font-size:18px;font-weight:800;line-height:1.25}
.fm-unit-sub{display:block;margin-top:3px;color:var(--c-fg-sub);font-size:17px;font-weight:700;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fm-unit-side{display:flex;align-items:center;gap:6px;flex:0 0 auto}
/* ▼で開く（v10 の #i-down）。自作アイコンは右向きなので既定で90度倒し、開いたら上を向く。 */
.fm-chev{transform:rotate(90deg);transition:transform .15s var(--ease-out)}
.fm-unit[open] .fm-chev{transform:rotate(-90deg)}
.fm-unit-body{border-top:1px solid var(--fm-paper)}
.fm-roles,.fm-staff{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
.fm-roles>li,.fm-staff>li{
  min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:6px;
  padding:6px 11px;border-top:1px solid var(--bg-hair-2);font-size:17px;font-weight:700;
}
.fm-roles>li:nth-child(odd),.fm-staff>li:nth-child(odd){border-right:1px solid var(--bg-hair-2)}
.fm-roles b,.fm-staff b{font-size:18px;font-weight:800}
.fm-unit-meta{
  min-height:42px;display:flex;align-items:center;gap:8px;padding:7px 11px;
  border-top:1px solid var(--bg-hair-2);color:var(--c-fg-sub);font-size:17px;font-weight:700;
}
.fm-join{margin-left:auto;color:var(--c-now);font-weight:800;white-space:nowrap}
.fm-note{padding:8px 11px 10px;border-top:1px solid var(--bg-hair-2);font-size:17px;line-height:1.5;color:var(--c-fg-sub)}
/* 札は v10 と同じ角ばった小箱（丸くしない）。 */
.fm-tag{
  min-height:30px;display:inline-flex;align-items:center;padding:0 8px;border-radius:3px;
  font-size:17px;font-weight:800;white-space:nowrap;
}
.fm-tag-mine{border:1px solid var(--c-now);color:var(--c-now);background:var(--bg-now)}
.fm-tag-kago{border:1px solid var(--fm-paper);color:var(--c-fg);background:var(--c-bg)}
/* 自分の持ち場＝青の枠線（v10 は 3px＋薄い青の外側影）。 */
.fm-unit.is-mine{border:3px solid var(--c-now);box-shadow:0 0 0 2px rgba(0,71,179,.08)}
.fm-unit.is-just{border-color:var(--c-now);box-shadow:0 0 0 3px rgba(0,71,179,.10)}
/* 未合流の行は薄くするが、文字色は薄くしない（UI規約: 淡いグレー文字を作らない）＝
 * 地色と罫だけを引かせ、押せる的としては残す。v10 の opacity:.33 は採らない。 */
.fm-unit.is-future{background:var(--bg-sunken);border-style:dashed}
.fm-unit.is-future .fm-unit-name,.fm-unit.is-future .fm-unit-sub{color:var(--c-fg-sub)}
/* 班の色は左の帯だけ（塗り面に字を乗せない＝コントラストの検査対象を増やさない）。 */
.fm-band>summary{padding-left:20px}
.fm-band .fm-roles>li:nth-child(odd),.fm-band .fm-staff>li:nth-child(odd),
.fm-band .fm-unit-meta,.fm-band .fm-note{padding-left:20px}
.fm-band::before{content:"";position:absolute;left:0;top:0;bottom:0;width:7px;z-index:1}
.fm-band-yellow::before{background:#f0c62c}
.fm-band-red::before{background:#d84a44}
.fm-band-pink::before{background:#e79ab2}
.fm-band-aqua::before{background:#8fd6e8}
.fm-band-green::before{background:#60a86a}
@media (max-width:359px){
  /* 全体図の高さは JS が幅に合わせて縮める（--fm-mini-h はここでは触らない）。 */
  #formation-view{--fm-close-h:216px}
  .fm-rail{padding-left:10px;padding-right:10px}
  /* 320px では紙の右の余白だけ詰める（左のレールの幅は変えない＝節点と線がずれない）。 */
  .fm-formation{padding-right:6px}
}


/* ================= UI24 ルート（parade・app/views/paraderoute.js） =================
 * 豊さん 2026-09-09 18:1x「往路と帰路があるのでそれぞれタブで切り替えたい。
 * 自分の班によってそれを見たい」。
 *
 * 器は既にある物だけを使う（新しい意匠を増やさない）:
 *   ・上のタブ  = 会場画面の節タブ（.v11-tabs / .v11-tab）と同じ字組・同じ青の下線
 *   ・班のチップ = 隊列画面の地点チップ（.fm-chip）と同じ寸法・同じ選択色
 *   ・班の色    = 隊列画面の帯（.fm-band-*）と同じ値（画面をまたいで班の色が変わらない）
 *   ・「あと◯分」= 盤面の .row-left と同じ 17px・--tl-blue
 * 貼り付き位置は盤面と同じ変数から出す（ヘッダ --tl-top ＋ 日付帯 --tl-rail）。
 */
#route-view{--pr-vpad:12px;--pr-tab:52px;--pr-time:56px;color:var(--c-fg);font-size:17px}
@media(max-width:359px){#route-view{--pr-vpad:10px;--pr-time:52px}}
/* 面は .view の左右余白のぶんだけ外へ伸ばす（帯が画面の端まで届く）。 */
#route-view>.pr-tabs,#route-view>.pr-rail,#route-view>.pr-list{
  width:calc(100% + var(--pr-vpad) * 2);
  margin-left:calc(-1 * var(--pr-vpad));margin-right:calc(-1 * var(--pr-vpad));
}

/* ---- ① 往路／帰路のタブ（52px） ---- */
.pr-tabs{
  position:sticky;top:calc(var(--tl-top) + var(--tl-rail));z-index:12;
  height:var(--pr-tab);display:flex;align-items:stretch;background:#fff;
  border-bottom:1px solid var(--bg-hair);transition:top .16s ease;
}
.pr-tab{
  flex:1 1 0;position:relative;min-width:0;height:calc(var(--pr-tab) - 1px);
  border:0;background:#fff;color:var(--c-fg-sub);font:inherit;font-size:17px;font-weight:900;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.pr-tab.is-active{color:var(--c-now)}
.pr-tab.is-active::after{
  content:"";position:absolute;left:16px;right:16px;bottom:0;height:3px;background:var(--c-now);
}

/* ---- ② 班のチップ（帰路だけ・本隊＋一〜五班） ---- */
.pr-rail{
  position:sticky;top:calc(var(--tl-top) + var(--tl-rail) + var(--pr-tab));z-index:11;
  display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;background:#fff;
  padding:9px var(--pr-vpad);border-bottom:1px solid var(--bg-hair);transition:top .16s ease;
}
.pr-rail::-webkit-scrollbar{display:none}
.pr-chip{
  min-height:52px;flex:0 0 auto;border:1px solid var(--bg-hair-2);border-radius:11px;
  background:var(--c-bg);color:var(--c-fg-sub);padding:0 14px;font:inherit;font-size:17px;
  font-weight:800;white-space:nowrap;display:flex;align-items:center;gap:8px;cursor:pointer;
}
.pr-chip[aria-pressed="true"]{background:var(--c-now);border-color:var(--c-now);color:#fff}
/* 班色の丸。隊列画面の帯（.fm-band-*）と同じ値。選択中は白い縁で地の青から浮かせる。 */
.pr-dot{width:14px;height:14px;border-radius:50%;flex:none;box-shadow:inset 0 0 0 1px rgba(17,17,17,.24)}
.pr-chip[aria-pressed="true"] .pr-dot{box-shadow:inset 0 0 0 1px rgba(255,255,255,.7)}
.pr-dot-yellow{background:#f0c62c}
.pr-dot-red{background:#d84a44}
.pr-dot-pink{background:#e79ab2}
.pr-dot-aqua{background:#8fd6e8}
.pr-dot-green{background:#60a86a}

/* ---- ③ 時系列の一覧 ---- */
.pr-list{padding:0;overflow:hidden}
.pr-summary{
  min-height:46px;display:flex;align-items:center;gap:8px;
  padding:0 var(--pr-vpad);border-bottom:1px solid var(--bg-hair);font-weight:800;
}
.pr-summary-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:17px}
.pr-summary-span{flex:0 0 auto;margin-left:auto;color:var(--c-fg-sub);font-size:17px;white-space:nowrap;font-variant-numeric:tabular-nums}
.pr-summary-n{flex:0 0 auto;color:var(--c-now);font-size:17px;white-space:nowrap}
/* 1行＝時刻｜停留先名（＋但し書き）｜右の札。押せる行（会場つき）だけが a になる。 */
.pr-stop{
  display:flex;align-items:flex-start;gap:10px;min-height:60px;
  padding:9px var(--pr-vpad);border-top:1px solid var(--bg-hair);
  color:var(--c-fg);text-decoration:none;
}
.pr-list>.pr-stop:first-of-type{border-top:0}
.pr-time{
  flex:0 0 var(--pr-time);font-size:17px;font-weight:800;line-height:1.45;
  font-variant-numeric:tabular-nums;color:var(--c-fg-sub);
}
.pr-body{min-width:0;flex:1 1 auto;display:flex;flex-direction:column}
.pr-name{font-size:18px;font-weight:800;line-height:1.4;overflow-wrap:anywhere}
.pr-note{font-size:17px;line-height:1.45;color:var(--c-fg-sub);margin-top:2px;overflow-wrap:anywhere}
.pr-side{flex:0 0 auto;display:flex;align-items:center;gap:6px;padding-top:1px}
.pr-chev{color:var(--c-now);flex:none}
/* 「あと◯分」は盤面の .row-left と同じ 17px・青（対白 8.6:1）。押せる印にはしない。 */
.pr-left{font-size:17px;font-weight:900;color:var(--c-now);white-space:nowrap}
/* 進行中の行は太く（盤面の現在行と同じ考え＝地色と左の太い罫で言う）。 */
.pr-stop.is-current{background:var(--bg-now);box-shadow:inset 4px 0 0 var(--c-now)}
.pr-stop.is-current .pr-time,.pr-stop.is-current .pr-name{color:var(--c-now);font-weight:900}
.pr-stop.is-next .pr-time{color:var(--c-fg)}
/* 種別チップ。地色だけで分け、文字は本文色のまま（薄いグレー文字を作らない）。 */
.pr-kind{
  min-height:30px;display:inline-flex;align-items:center;padding:0 8px;border-radius:4px;
  font-size:17px;font-weight:800;white-space:nowrap;color:var(--c-fg);background:var(--bg-neutral);
  border:1px solid var(--bg-hair-2);
}
.pr-kind-join{background:var(--bg-now);border-color:#a9c3ec;color:var(--c-now)}
.pr-kind-give{background:var(--bg-done);border-color:#a9d9bd;color:var(--c-done)}
.pr-kind-meet{background:var(--bg-warn);border-color:#e5c8a8;color:var(--c-warn)}
.pr-kind-end{background:var(--bg-alert);border-color:#eab8b4;color:var(--c-alert)}
@media(max-width:359px){
  /* 320px では右の札が題の桁を潰すので、但し書きを1行に畳んで幅を譲る。 */
  .pr-note{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .pr-stop{gap:8px}
}
