/* 内製CRM スタイル — 配色「海図（ライト）」
   docs/design.md §11。色は必ずこの :root のトークンを通す。直接 hex を書かない。 */
:root{
  /* 01 海図（ライト）— 水路図の配色。地は冷たい紙、主色は藍、サービスは等深線の階調 */
  --bg:#E7EEF2; --surface:#FFFFFF; --surface-2:#DCE7ED; --surface-3:#F3F7F9;
  --line:#BFD1DB; --line-soft:#E3EDF1;
  --ink:#0E2130; --ink-2:#4E6675; --ink-3:#6A8492;
  --accent:#1E5F7E; --accent-ink:#FFFFFF; --accent-soft:#D3E4EE; --accent-line:#84AEC6;
  --good:#2A6B54; --good-soft:#D8E8E1;
  --warn:#8E5F18; --warn-soft:#F2E7D3;
  --crit:#9C3A2C; --crit-soft:#F4DED9;
  /* サービスは浅瀬→深場の階調。BuddyDive だけ階調の外（砂） */
  --sv-dwg:#4E6E3F;    --sv-dwg-bg:#DFE9D8;
  --sv-umiban:#276B69; --sv-umiban-bg:#D5E8E6;
  --sv-okaban:#1E5F7E; --sv-okaban-bg:#D3E4EE;
  --sv-dhp:#4A5580;    --sv-dhp-bg:#DEE1EF;
  --sv-bd:#7A5529;     --sv-bd-bg:#EFE4D4;
  /* 事業のチップの色（2026-09-21 秋元さん決定）。見本は枝 tonmana-colors（77bbc56、未 push）の
     mockup/core-colors.html で、この枝の mockup/ には無い。
     グラフの色と同じ色相で、文字は OKLCH の明るさ 0.43・彩度＝事業の色×0.85（上限 0.13）、
     地は明るさ 0.955・彩度＝事業の色×0.30。
     **--sv-* とは別に持つ。**--sv-* はチップのほかに取込元の印（.src.okaban / .src.umiban / .src.dwg）と
     連携先の登録の印（.pill.reg）にも使っており、まとめて差し替えると取込元の印どうしが
     見分けにくくなる（OKABAN-陸番- と BowNow の文字の色差が 3.8 → 1.0）。
     **サービス別の契約の棒（src/index.php）は、チップと同じ枠に並ぶので --chip-* に揃えた**
     （2026-09-21 秋元さん決定。見本が「差し替えるときに決める」と残した宿題）。
     これで --sv-* を使うルールは4つ（.src.okaban / .src.dwg / .src.umiban / .pill.reg）だけになった。
     ghost（その他）の棒は --chip-ghost も --sv-ghost も無いので transparent に落ちて見えない（前からの不具合）。
     MORIBITO-守り人- のチップは作らない——contracts.service の ENUM に moribito が無いので
     ショップの「利用サービス」には出ない。ただし サービスとプランの画面（src/index.php 4070 付近）は
     services() を回してプラン0件でもチップを出すので、そこでは .chip.ghost（灰色）で描かれる。
     --sv-dhp / --sv-dhp-bg / --sv-bd / --sv-bd-bg は、この差し替えで var() から参照されなくなる
     （残して使っているのは okaban / umiban / dwg の3つだけ）。消すかは別の判断 */
  --chip-okaban:#025872; --chip-okaban-bg:#DEF5FE;
  --chip-umiban:#1C4F8E; --chip-umiban-bg:#E7F1FF;
  --chip-dhp:#035F43;    --chip-dhp-bg:#DBF8EA;
  --chip-dwg:#6D4704;    --chip-dwg-bg:#FEEDD9;
  --chip-bd:#4D477E;     --chip-bd-bg:#EFEEFD;
  /* レポートのグラフの色（2026-09-15 秋元さん決定）。事業は「1 パステル」、区分は見本の4案から B（赤＋深緑）。
     上の --sv-*（「海図」の暗い色）はチップの文字色に使っていてグラフでは見分けられないので、別に持つ。
     灰色は3つとも文字色に使わない（白地で 4.5:1 に届かない）。塗りのすぐ下の地は白にする */
  --g-house:#9D0900;   --g-okaban:#61C2E7;  --g-umiban:#3E7CCB;   --g-dhp:#5CC99D;
  --g-dwg:#C18D44;     --g-bd:#8882C9;      --g-moribito:#C36574; --g-jutaku:#0F641D;
  --g-hoka:#C9D2D8;    --g-other:#A3B3BD;   --g-none:#6E7A85;
  --shadow:0 1px 2px rgba(14,33,48,.06),0 4px 14px rgba(14,33,48,.05);
  --r:6px;
  --f-ui:"Zen Kaku Gothic New",-apple-system,"Hiragino Kaku Gothic ProN","Noto Sans JP",sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
}

*{box-sizing:border-box}
/* hidden は常に効かせる。display を直に当てた要素（display:flex など）が
   ブラウザ既定の [hidden]{display:none} に勝ってしまい、
   ラベルだけ消えて中身が残る、という崩れ方をする。 */
[hidden]{display:none!important}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font-family:var(--f-ui); font-size:14px; line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3{margin:0; text-wrap:balance; font-weight:700; line-height:1.35}
p{margin:0}
a{color:var(--accent)}
button{font:inherit; color:inherit; cursor:pointer}
:focus-visible{outline:2px solid var(--accent); outline-offset:2px; border-radius:3px}
@media (prefers-reduced-motion:reduce){*{animation:none!important; transition:none!important}}

.num{font-family:var(--f-mono); font-variant-numeric:tabular-nums}

/* ---------- notice ---------- */
.notice{
  background:var(--warn-soft); color:var(--warn); border-bottom:1px solid var(--line);
  padding:7px 20px; font-size:12px; letter-spacing:.02em; display:flex; gap:10px; align-items:center; flex-wrap:wrap;
}
.notice b{font-weight:700}

/* ---------- shell ---------- */
.shell{display:grid; grid-template-columns:216px 1fr; min-height:100vh}
.rail{
  background:var(--surface); border-right:1px solid var(--line);
  display:flex; flex-direction:column; gap:2px; padding:16px 10px; position:sticky; top:0; height:100vh; overflow:auto;
}
.brand{padding:4px 10px 16px; display:flex; flex-direction:column; gap:2px}
.brand .bn{font-weight:700; font-size:15px; letter-spacing:.01em}
.brand .bs{font-size:11px; color:var(--ink-3); font-family:var(--f-mono)}
/* いまいる領域（CRM / MA / 管理）。名前から CRM が消えたぶんをここで示す */
.brand .ba{font-size:11px; font-weight:600; letter-spacing:.06em;
           color:var(--ink-2); font-family:var(--f-mono)}
/* ローカルだけ色を変える。本番と取り違えないための印 */
.brand .bs.dev{color:var(--accent)}
.railgroup{font-size:10px; letter-spacing:.14em; color:var(--ink-3); padding:14px 10px 6px; font-weight:500}
.navb{
  display:flex; align-items:center; gap:9px; width:100%; text-align:left;
  background:none; border:0; padding:8px 10px; border-radius:var(--r); color:var(--ink-2); font-size:13px;
}
.navb:hover{background:var(--surface-2); color:var(--ink)}
.navb[aria-current="true"]{background:var(--accent-soft); color:var(--accent); font-weight:500}
.navb .dot{width:6px; height:6px; border-radius:50%; background:currentColor; opacity:.55; flex:none}
.navb .cnt{margin-left:auto; font-family:var(--f-mono); font-size:11px; color:var(--ink-3)}
.navb[aria-current="true"] .cnt{color:var(--accent)}
/* ダッシュボードの新着の件数（087）。赤い丸に白い数字。幅が狭いとき（スマホ）も出す（2026-09-14、秋元さん決定） */
.navb .cnt.alert{min-width:19px; height:19px; padding:0 5px; border-radius:99px; background:var(--crit); color:#fff;
  display:inline-flex; align-items:center; justify-content:center; font-weight:600; line-height:1}
.navb[aria-current="true"] .cnt.alert{color:#fff}
/* 件数そのものが別の行き先を持つ項目（業務日報の入力漏れ → 入力漏れのタブ）。リンクの中にリンクは置けないので、
   項目のリンクと件数のリンクを .navi に並べ、件数を右端に重ねる。見た目は上の .navb .cnt.alert と同じ */
.navi{position:relative}
.navi > .navb{padding-right:40px}
.navi > .cnt.alert{position:absolute; right:10px; top:50%; transform:translateY(-50%);
  min-width:19px; height:19px; padding:0 5px; border-radius:99px; background:var(--crit); color:#fff;
  display:inline-flex; align-items:center; justify-content:center; font-family:var(--f-mono); font-size:11px; font-weight:600; line-height:1;
  text-decoration:none}
.navi > .cnt.alert:hover{filter:brightness(.9)}

.main{min-width:0; display:flex; flex-direction:column}
.topbar{
  display:flex; align-items:center; gap:14px; padding:16px 26px; border-bottom:1px solid var(--line);
  background:var(--surface); position:sticky; top:0; z-index:5; flex-wrap:wrap;
}
.topbar h1{font-size:17px}
.topbar .sub{font-size:12px; color:var(--ink-3)}
.spacer{flex:1}
.tgl{
  display:flex; align-items:center; gap:7px; font-size:12px; color:var(--ink-2);
  background:var(--surface-2); border:1px solid var(--line); padding:5px 11px; border-radius:99px;
}
.tgl input{accent-color:var(--accent); margin:0}
.body{padding:22px 26px 60px; display:flex; flex-direction:column; gap:20px}
/* カードを包む form の中でも、ページと同じ間隔でカードを並べる（.body の gap は直下の子にしか効かない） */
.stack{display:flex; flex-direction:column; gap:20px}

/* ---------- field annotation ---------- */
.fld{display:none}
body.showfld .fld{
  display:inline-block; font-family:var(--f-mono); font-size:9.5px; line-height:1.5;
  background:var(--accent-soft); color:var(--accent); border:1px solid var(--accent-line);
  padding:0 4px; border-radius:3px; margin-left:5px; vertical-align:middle; white-space:nowrap;
}
body.showfld th .fld,body.showfld .k .fld{display:block; margin:2px 0 0}

/* ---------- cards ---------- */
.card{background:var(--surface); border:1px solid var(--line); border-radius:9px; box-shadow:var(--shadow)}
.card>header{
  padding:13px 16px; border-bottom:1px solid var(--line-soft); display:flex; align-items:center; gap:10px; flex-wrap:wrap;
}
.card>header h2{font-size:13px; letter-spacing:.03em}
.card>header .hint{font-size:11px; color:var(--ink-3)}
/* 見出しの右端に寄せる。**.hint 全部には効かせない**——全画面のカードの
   見出しが動いてしまうため、付けたところだけに効かせる */
.card>header .hint.right{margin-left:auto}

/* 表の一番上に置く合計の行。
   th は既に position:sticky（top:0）なので、2行目もそのままだと月の見出しと重なる。
   **貼り付くのは月の見出しだけ**にして、合計は普通の行として一番上に置く。 */
.sumrow th{
  position:static; background:var(--surface-2); color:var(--ink);
  font-size:12px; letter-spacing:0; font-weight:700;
}
.sumrow th .smeta{font-weight:400}
.card .pad{padding:16px}

.tiles{display:grid; grid-template-columns:repeat(auto-fit,minmax(158px,1fr)); gap:12px}
.tile{background:var(--surface); border:1px solid var(--line); border-radius:9px; padding:14px 15px; display:flex; flex-direction:column; gap:3px; box-shadow:var(--shadow)}
.tile .lb{font-size:11px; color:var(--ink-3); letter-spacing:.03em}
.tile .vl{font-family:var(--f-mono); font-size:25px; font-weight:600; letter-spacing:-.02em; line-height:1.2}
.tile .df{font-size:11px; color:var(--ink-3)}
.tile.hl{border-color:var(--accent-line); background:linear-gradient(180deg,var(--accent-soft),var(--surface) 70%)}
.tile.hl .vl{color:var(--accent)}

/* ---------- chips ---------- */
.chip{
  display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:500;
  padding:2px 8px; border-radius:99px; border:1px solid transparent; white-space:nowrap;
}
.chip.okaban{color:var(--chip-okaban); background:var(--chip-okaban-bg)}
.chip.umiban{color:var(--chip-umiban); background:var(--chip-umiban-bg)}
.chip.dhp{color:var(--chip-dhp); background:var(--chip-dhp-bg)}
.chip.dwg{color:var(--chip-dwg); background:var(--chip-dwg-bg)}
.chip.bd{color:var(--chip-bd); background:var(--chip-bd-bg)}
.chip.ghost{color:var(--ink-3); background:transparent; border-color:var(--line)}
.chip b{font-weight:600}
.chip i{font-style:normal; margin-left:7px; padding-left:7px; position:relative; font-weight:400}
.chip i::before{content:""; position:absolute; left:0; top:14%; bottom:14%; width:1px; background:currentColor; opacity:.38}
.chip.off{opacity:.5}
.svc{display:flex; flex-direction:column; gap:3px; align-items:flex-start}

.st{display:inline-flex; align-items:center; gap:6px; font-size:11.5px; font-weight:500; white-space:nowrap}
.st::before{content:""; width:7px; height:7px; border-radius:2px; background:currentColor}
.st.active{color:var(--good)} .st.prospect{color:var(--warn)}
.st.lead{color:var(--ink-3)} .st.churned{color:var(--crit)} .st.paused{color:var(--ink-3)}
.st.excluded{color:var(--ink-3); text-decoration:line-through}
tbody tr:has(.st.excluded){opacity:.55}

.pill{font-size:10.5px; font-family:var(--f-mono); padding:1px 6px; border-radius:4px; background:var(--surface-2); color:var(--ink-2); border:1px solid var(--line-soft)}
.pill.co{background:var(--accent-soft); color:var(--accent); border-color:var(--accent-line)}
.pill.miss{background:var(--crit-soft); color:var(--crit); border-color:transparent}
.pill.ok{background:var(--good-soft); color:var(--good); border-color:transparent}
/* 良し悪しではなく「承知のうえ」。◯希望しない（配信停止を承知で送ったぶん）に使う */
.pill.warn{background:var(--warn-soft); color:var(--warn); border-color:transparent}
/* 押すと一覧から出し入れする欄。外したものは**取り消し線**で示す——
   色を薄くするだけだと、0 件で押せない欄（opacity を落としてある）と見分けが付かない */
button.pill.pf{cursor:pointer; font-family:var(--f-mono)}
button.pill.pf:hover{filter:brightness(.95)}
button.pill.pf[aria-pressed="false"]{
  background:var(--surface-2); color:var(--ink-3); border-color:var(--line);
  text-decoration:line-through;
}
/* 取込元。どのシステム由来の値かを示す。
   2つ並ぶことが多い（kintone と BowNow の両方から来た店舗が403件）ので、
   隣り合っても1語に見えないよう間隔と枠をはっきりさせる。 */
.src{
  display:inline-flex; align-items:center; font-family:var(--f-mono); font-size:9.5px;
  letter-spacing:.03em; padding:1px 6px; border-radius:3px; white-space:nowrap;
  border:1px solid; vertical-align:middle; line-height:1.5;
}
.src.kintone{color:#6B5416; background:#F5EDD6; border-color:#D6C089}
.src.bownow{color:#14556F; background:#D2E6F0; border-color:#8FBBD1}
.src.okaban{color:var(--sv-okaban); background:var(--sv-okaban-bg); border-color:var(--sv-okaban)}
.src.dwg{color:var(--sv-dwg); background:var(--sv-dwg-bg); border-color:var(--sv-dwg)}
.src.umiban{color:var(--sv-umiban); background:var(--sv-umiban-bg); border-color:var(--sv-umiban)}
.src.manual{color:var(--accent); background:var(--accent-soft); border-color:var(--accent-line)}
.src.other{color:var(--ink-3); background:var(--surface-2); border-color:var(--line)}
.srcs{display:inline-flex; gap:5px; flex-wrap:wrap; align-items:center}

/* 要確認のチェック。押した時点で保存するので、保存できたことが分かるようにする */
td.chk{text-align:center; vertical-align:top; padding-top:12px}
td.chk input{accent-color:var(--accent); width:15px; height:15px; cursor:pointer}
td.chk.saved{background:var(--good-soft); transition:background .2s}
td.chk.failed{background:var(--crit-soft)}
/* ショップ一覧の「まとめて操作」。1件以上選んだときだけ出す。
   hidden で消すので、display はここに書く（インラインだと hidden に勝ってしまう） */
.bulkbar{
  display:flex; gap:9px; flex-wrap:wrap; align-items:center;
  background:var(--surface-2); border-bottom:1px solid var(--line-soft);
}
.bulkbar[hidden]{display:none}

/* まとめて操作のために選んだ行 */
tbody tr:has(.selbox:checked){background:var(--warn-soft)}
tbody tr:has(.selbox:checked):hover{background:var(--warn-soft); filter:brightness(.98)}

/* ---------- table ---------- */
.tw{overflow-x:auto}
table{border-collapse:collapse; width:100%; font-size:13px; min-width:760px}
th{
  text-align:left; font-size:10.5px; letter-spacing:.09em; color:var(--ink-3); font-weight:500;
  padding:9px 12px; border-bottom:1px solid var(--line); background:var(--surface-3); position:sticky; top:0;
}
td{padding:10px 12px; border-bottom:1px solid var(--line-soft); vertical-align:top}
/* 未送信の候補。**まだ記録ではなく見込み**なので、記録された行と見分けが付くようにする。
   背景では示さない——tbody tr:hover が同じ層を使っていて、なぞると消える */
tbody tr.cand>td:first-child{box-shadow:inset 3px 0 0 var(--line)}
tbody tr:hover{background:var(--surface-3)}
tbody tr:last-child td{border-bottom:0}
td.n{font-family:var(--f-mono); font-variant-numeric:tabular-nums; text-align:right; white-space:nowrap}
.sname{font-weight:500}
.smeta{font-size:11px; color:var(--ink-3)}

/* ---------- filter bar ---------- */
.filters{display:flex; gap:8px; flex-wrap:wrap; align-items:center; padding:12px 16px; border-bottom:1px solid var(--line-soft)}
.sel,.inp{
  background:var(--surface-3); border:1px solid var(--line); color:var(--ink);
  padding:5px 10px; border-radius:6px; font:inherit; font-size:12.5px;
  box-sizing:border-box; max-width:100%;
}
.inp{min-width:190px}
.btn{background:var(--accent); color:var(--accent-ink); border:0; padding:6px 14px; border-radius:6px; font-size:12.5px; font-weight:500}
.btn.sec{background:var(--surface-2); color:var(--ink-2); border:1px solid var(--line)}
.btn:hover{filter:brightness(1.08)}
/* 案件月別の CSV の帯（月のチェックとボタン） */
.csvbar form{display:flex; gap:12px; flex-wrap:wrap; align-items:center}
.csvbar label{display:inline-flex; gap:4px; align-items:center; font-size:12.5px; white-space:nowrap}
.csvbar{background:var(--surface-2); border-bottom:1px solid var(--line-soft)}
/* Redmine の URL。長いので折り返す。段を落とすのは `<br>` の役目（重ねない） */
.rmurl{word-break:break-all; line-height:1.35}
/* 案件月別の表の列幅。見出しの1行目だけで決まる（本文と合計行は同じ列に従う）。
   `width` は「この幅にしたい」、`min-width` は下限。両方書かないと、月が少ないときは
   数字の列に余りが回り、月が多いときは下限より潰れる */
.mtx thead tr:first-child th:first-child{min-width:340px}
.mtx thead tr:first-child th.num{width:86px; min-width:86px}
.mtx thead tr:first-child th.num.sum{width:92px; min-width:92px}
/* 請求書タブの月の一覧（094）。列幅と、確定の印 */
.mlist{min-width:560px}
.mlist .mly{width:150px} .mlist .mln{width:80px} .mlist .mle{width:100px} .mlist .mlk{width:120px}
.st.fixedm{color:var(--good)}
/* 案件の編集の、月別の見積 */
.emlist{min-width:420px}
.emlist .emd{width:170px} .emlist .emm{width:150px} .emlist .emv{width:110px}
a.btn{display:inline-block; text-decoration:none; line-height:1.55}

.fold summary{
  display:flex; align-items:center; gap:10px; cursor:pointer; list-style:none;
  padding:11px 16px; border-bottom:1px solid transparent;
}
.fold summary::-webkit-details-marker{display:none}
.fold summary::before{content:'▸'; color:var(--ink-3); font-size:11px}
.fold[open] summary::before{content:'▾'}
.fold[open] summary{border-bottom-color:var(--line-soft)}
.fold summary h2{margin:0; font-size:13px; font-weight:600}
.fold summary:hover{background:var(--surface-2)}

/* 契約の編集。列幅を指定どおりにするため table-layout を固定する。
   auto のままだと、日付入力が実寸で広がった分だけサービス列が潰れる。 */
table.fixed{table-layout:fixed}
/* .inp の min-width:190px が効くと、150px の列からはみ出して切れる */
table.fixed .sel,table.fixed .inp{width:100%; min-width:0}
/* 日付・時刻の入力はブラウザ既定の実寸が広い。固定幅からはみ出さないように締める */
table.fixed input[type="date"],table.fixed input[type="time"]{min-width:0; padding-right:4px}
table.fixed th,table.fixed td{overflow:hidden}
table.fixed textarea.inp{resize:vertical; line-height:1.5; min-height:30px}

/* プランは主、オプションは従。行の強さで区別する */
tr.optrow td{color:var(--ink-3); font-size:11.5px; border-top:1px dashed var(--line-soft)}
tr.optrow td.n{color:var(--ink-2)}

.who{display:flex; gap:8px; align-items:center; font-size:12px; color:var(--ink-2)}
/* ヘッダーの氏名。ホバーで権限・二要素認証・ログアウトを出す。キーボードで選んでも開く（:focus-within）。
   指で触る端末は押して開く（core.js が .open を付ける） */
.me{position:relative}
.mebtn{font:inherit; font-size:12px; color:var(--ink-1); background:none; border:1px solid transparent; border-radius:6px;
  padding:3px 8px; cursor:pointer; display:inline-flex; align-items:center; gap:5px}
.mebtn::after{content:"▾"; font-size:10px; color:var(--ink-3)}
.me:hover .mebtn,.me.open .mebtn{border-color:var(--line); background:var(--surface-3)}
/* 上に 6px の透明な帯を持たせる。ボタンからメニューへマウスを動かすあいだにホバーが切れて閉じないように */
.memenu{display:none; position:absolute; right:0; top:100%; z-index:30; padding-top:6px; min-width:160px}
.me:hover .memenu,.me:focus-within .memenu,.me.open .memenu{display:block}
.memenu>div{background:var(--surface); border:1px solid var(--line); border-radius:8px; box-shadow:0 12px 30px rgba(16,32,48,.16);
  padding:10px; display:flex; flex-direction:column; gap:8px; align-items:flex-start}
.memenu form{margin:0; width:100%}
.memenu .btn{width:100%}
.navfind{position:relative}
.navfind .inp{min-width:0; width:270px; font-size:12px; padding:4px 10px}
.navfind .inp:focus{outline:2px solid var(--accent-line); outline-offset:-1px}
.navfind .hits{
  position:absolute; right:0; top:calc(100% + 5px); z-index:20; width:330px; max-height:320px;
  background:var(--surface); box-shadow:0 12px 30px rgba(16,32,48,.16); margin:0;
}
.hit.on{background:var(--accent-soft)}

/* URL は折り返さず1行。長いものは見切れてよい（リンクで開ければ足りる） */
.kv .v.oneline{white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
/* メモは改行をそのまま出す */
.kv .v.pre{white-space:pre-wrap}

/* ---------- モーダル ---------- */
.dlg{
  border:1px solid var(--line); border-radius:12px; padding:0; width:min(520px, calc(100vw - 32px));
  background:var(--surface); color:var(--ink); box-shadow:0 18px 50px rgba(16,32,48,.18);
}
.dlg::backdrop{background:rgba(16,32,48,.34)}
/* .pad は「.card .pad」でしか効かないので、モーダルの中にも同じ余白を与える */
.dlg .pad{padding:20px 22px}
.dlg header{padding:16px 22px; border-bottom:1px solid var(--line-soft)}
.dlg header h2{font-size:14px; font-weight:600}
.dlg label.smeta{display:block; margin-bottom:4px}
.hits{max-height:190px; overflow-y:auto; margin-top:5px}
.hits:not(:empty){border:1px solid var(--line); border-radius:6px}
.hit{display:flex; flex-direction:column; gap:1px; padding:6px 10px; cursor:pointer; font-size:12.5px}
.hit+.hit{border-top:1px solid var(--line-soft)}
.hit:hover,.hit:focus{background:var(--accent-soft); outline:0}
.hit.none{color:var(--ink-3); cursor:default}
.hit.none:hover{background:transparent}

/* 業務日報の案件選び。候補の窓は画面基準で出す——表は .tw（overflow-x:auto）の中にあり、
   中に置くと窓が切れる。位置と幅は JS が入力欄に合わせる */
.pickhits{
  position:fixed; z-index:30; max-height:320px; margin:0;
  background:var(--surface); box-shadow:0 12px 30px rgba(16,32,48,.16);
}
/* 名前を打ったまま候補から選んでいない。保存すると「案件なし」になるので止める */
.inp.ng{border-color:var(--crit); background:var(--crit-soft)}

/* ---------- タスク（104） ---------- */
/* 登録の1段目。**横いっぱいに均等**（2026-10-02、秋元さん指示）。
   ラベルは必ず1行——2行になると、その欄だけ下にずれて隣に重なる */
.taskrow{display:grid; gap:10px; align-items:end; margin-bottom:10px}
.taskrow.one{grid-template-columns:repeat(6, 1fr)}
/* 編集のときは**ステータスと実工数が増えて8列**（2026-10-09、秋元さん指示
   「すべての項目を編集可能にして」→ 上のフォームにまとめる）。
   **パネルの中では2列**（下の `.drawer`） */
.taskrow.one.eight{grid-template-columns:repeat(8, 1fr)}

/* ---- 右から出る編集のパネル（2026-10-09、秋元さん指示）----
   「編集を押したことが分かりづらい」。`<dialog>` を右端に寄せてスライドさせる。
   **PHP は `open` を付けて出すだけ**なので、JS が無くても中身は読めて保存もできる
   （そのときは背景が暗くならず、右端に貼り付いた形で出る）。 */
.drawer{position:fixed; inset:0 0 0 auto; margin:0; padding:0; border:0;
        width:min(520px, 100%); max-width:100%; height:100%; max-height:100%;
        background:var(--surface); border-left:1px solid var(--line);
        box-shadow:-14px 0 34px rgba(16,32,40,.16); overflow:auto;
        /* **スライドは `@starting-style` で。**`display` が切り替わる要素なので、
           `transition` だけでは効かない（開いた瞬間にもう最終位置にいる） */
        transform:translateX(0);
        transition:transform .2s ease, overlay .2s allow-discrete, display .2s allow-discrete}
@starting-style{ .drawer[open]{transform:translateX(100%)} }
.drawer:not([open]){transform:translateX(100%)}
.drawer::backdrop{background:rgba(16,32,40,.34)}
/* 見出しは上に貼り付ける。長い欄を下までたどっても「やめる」が見える */
.drawer .dhead{position:sticky; top:0; z-index:2; display:flex; align-items:center; gap:10px;
               padding:13px 16px; background:var(--surface-2); border-bottom:1px solid var(--line)}
.drawer .pad{padding:16px}
/* **パネルの中は2列**（520px に8つ並べると1つ 60px になる）。内容は横いっぱい */
.drawer .taskrow.one, .drawer .taskrow.one.eight{grid-template-columns:repeat(2, 1fr)}
.drawer .taskrow.two{grid-template-columns:1fr}
.drawer .taskrow.two .btn{justify-self:start}
.drawer textarea.inp{min-height:84px}
/* 2段目は 案件:内容 を 1:2 で。登録のボタンは中身ぶん */
/* **案件と内容は同じ幅**（2026-10-09、秋元さん指示「案件（任意）は、横幅を内容と揃えて」） */
.taskrow.two{grid-template-columns:1fr 1fr auto}
.taskrow label{display:flex; flex-direction:column; gap:3px; font-size:11px; color:var(--ink-3); min-width:0}
.taskrow label > .inp, .taskrow label > .sel, .taskrow label > .taskpick{width:100%; min-width:0}
.taskrow textarea.inp{resize:vertical}
/* 案件を探す欄。候補は下に重ねる（.pick は案件月別のチェックボックスで使っているので名前を分ける） */
.taskpick{position:relative; display:block}
.taskpick .hits{position:absolute; z-index:30; left:0; right:0; background:var(--surface);
  box-shadow:0 12px 30px rgba(16,32,48,.16)}
/* 候補から選んでいないときに出す断り（業務日報と同じ場面で、同じことを言う） */
.taskpickmsg{display:block; color:var(--crit); margin-top:3px}
/* `<select>` を、絞り込みのボタン（.msbtn）と同じ見た目にそろえる（2026-10-02、秋元さん指示）。
   `.msbtn` は `::after` で ▾ を出すが、**`<select>` に `::after` は効かない**ので背景で描く。
   **色だけは直接書いている**——`url()` の中では CSS 変数が使えない。`--ink-3`（#6A8492）と
   同じ値にしてある。パレットを変えるときは、ここも直すこと。
   **タスクの画面だけに当てる**（`.sel` 全部に当てると、CRM の全画面の <select> が変わる） */
.selpill{
  appearance:none; -webkit-appearance:none;
  padding-right:25px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='5' viewBox='0 0 8 5'><path d='M0 0l4 5 4-5z' fill='%236A8492'/></svg>");
  background-repeat:no-repeat; background-position:right 9px center;
}
.selpill::-ms-expand{display:none}

.taskfilt{display:flex; gap:7px; flex-wrap:wrap; align-items:center; margin-bottom:12px}
/* **`<select>` は `.sel`、文字の欄は `.inp`**（?p=shops と同じ。`.inp` だけ min-width:190px）。
   絞り込みの欄は少し小さく詰める */
.taskfilt .inp, .taskfilt .sel{font-size:12px; padding:3px 8px}
/* **`.selpill` の右の余白を取り戻す。**上の `.taskfilt .sel`（詳細度 0,2,0）が
   `.selpill`（0,1,0）に勝って、▾ と文字が重なっていた（検証の指摘、2026-10-02） */
.taskfilt .selpill{padding-right:25px}
.taskfilt .inp{min-width:150px}
/* 完了した行はうすく。消してはいない */
tr.taskdone{opacity:.6}
/* ステータスと担当者は**折り返さない**（2026-10-02、秋元さん指示）。
   狭くしすぎると、見出しも中身も1文字ずつ縦に並ぶ */
.tasknw{white-space:nowrap}

/* タスク一覧の幅。`table-layout:fixed`（`.fixed`）で、**幅を書いていない「内容」の列が
   残りを取る**（ここで `width` を書かないこと）。

   **2026-10-09**：秋元さん指示「横スクロールはなくして、工数と案件の width は固定にして、
   内容のみを可変にして」→ `min-width:0` にして `table{min-width:760px}` を外した。
   **2026-10-15**：秋元さん指示「横にスライドする仕様にしてください。ブラウザが狭い人が
   内容が狭くなりすぎてた」→ **下限を入れて、狭いときだけスライドする**ようにした。

   幅を書いた列の合計は **683px**（46+90+90+40+72+56+100+89+100。同じ日に6列を縮めた）。
   下限 1100px なので、**内容に最低 417px 残る**。これを下回ると `.tw{overflow-x:auto}` が
   横のスライドを出す。

   画面の幅で言うと、サイドバー 216px と `.body{padding:22px 26px 60px}` の左右 52px を
   引いた残りが表の幅なので、**1368px より狭いとスライドが出る**
   （1368 でちょうど収まり、1367 で出る。ヘッドレス Chrome で実測）。
   **縦のスクロールバーが場所を取る環境では、しきい値はさらに 15〜17px 上がる。**
   列を縮める前は、1280px の画面で内容が 154px まで潰れていた（1024px では 0px）——そこが「狭くなりすぎ」の正体。 */
.tasktbl{min-width:1100px}
/* `table.fixed th,td{overflow:hidden}` が効くので、**折り返さないと切れる**。
   内容（長い URL）と案件名（「ダイビングHP（シーベル/SEABELL）」）は
   **切らずに折り返す**——切ると、どの案件か分からなくなる */
.tasktbl td.taskbody, .tasktbl td.taskproj{overflow-wrap:anywhere}
/* **編集中の行**（2026-10-09）。どの行を直しているかが、ひと目で分かるように */
.tasktbl tr.editing > td{background:var(--surface-3)}
/* 一覧から欄（select・input）が消えたので、**文字が入るぶんに戻す**
   （2026-10-09。幅は `app/task.php` の `<th>` 側で指定している） */

/* 操作の列。**「編集」「完了」は横に並べる**（2026-10-09、秋元さん指示）。
   **完了した行だけ折り返す**——ボタンが3つ（編集・戻す・業務日報に入れる）になり、
   横1列では収まらずに切れる（`table.fixed td{overflow:hidden}` で見えなくなる） */
.tasktbl td.taskops{white-space:nowrap}
.tasktbl tr.taskdone td.taskops{white-space:normal; line-height:2.1}
/* **高さをそろえる**（2026-10-15、秋元さん指摘「戻すのボタンの高さを、他に合わせて」）。
   この列は **`<a>` と `<button>` が混ざる**——「編集」「業務日報」は `<a class="btn">`、
   「完了」「戻す」は `<button class="btn">`。`<a>` は inline のままだと**上下の padding が
   行の高さに出ない**ので、並べると背景の箱の高さが違って見える。`inline-block` にして、
   `line-height` も明に書いてそろえる。
   **`.sec` でない側（完了）には透明な border を1px 置く**——`.sec` には
   `border:1px solid var(--line)` があるので、無い側だけ上下あわせて 2px 低くなる。
   `:not(.sec)` で書くのは、`.sec` の border を上書きしないため（こちらの詳細度が高い） */
.tasktbl td.taskops .btn{display:inline-block; vertical-align:middle; padding:3px 6px; line-height:1.5}
.tasktbl td.taskops .btn:not(.sec){border:1px solid transparent}
/* **100px に収めるために、セルの左右の余白を詰める**（2026-10-15、秋元さん指示「width:100px」）。
   `td{padding:10px 12px}` のままだと**内側が 76px しかなく**、未完了の行の
   「編集」＋「完了」（約 85px）が入らない。`.taskops{white-space:nowrap}` なので
   折り返さず、`table.fixed td{overflow:hidden}` で**黙って切れる**（実測して気づいた）。
   左右 6px にすると内側 88px。ボタンの左右の padding も 9px→**6px** にして、
   「編集 完了」で **85.81px**（ボタン 39.00px が2つ＋あいだの空白 7.81px。ヘッドレス Chrome で実測）。
   `overflow:hidden` が切るのはパディングボックスの端なので、**切れ始めるまでの余りは 8.2px**。
   ここの文字を増やす・ボタンを足すなら、幅も一緒に見直すこと */
.tasktbl td.taskops{padding-left:6px; padding-right:6px}
/* 「業務日報」は、操作の列が 100px になって**2行目に回る**。上に隙間を空ける
   （2026-10-15、秋元さん指示）。`inline-block` なので `margin-top` が効く */
.tasktbl td.taskops .tasktime{margin-top:4px}
/* **編集中の行は折り返す**（2026-10-15、検証の指摘）。この行だけ「編集中」のピルと
   「完了」が**両方**出るので 92px になり、内側 88px に入らない。
   `overflow:hidden` が切るのはパディングボックスの端なので、いまはぎりぎり切れていないが
   （残り 1.7px）、フォントが 2% 変わると切れる */
.tasktbl tr.editing td.taskops{white-space:normal}

/* 実工数を入れる欄（105）。**3桁は見切れずに入る幅**
   （2026-10-09、秋元さん指示「工数の実工数が見切れているので、inputを長くして」）。
   **`table.fixed .inp{width:100%}`（詳細度 0,2,1）に勝つ形で書く**——`.taskact` だけだと
   負けて列いっぱいに広がり、「h」ごとセルからはみ出していた（2026-10-09 に実測） */
table.fixed .taskact, .taskact{width:62px; min-width:62px; padding:2px 5px; font-size:12px}

/* ---- 業務日報との連動（105、2026-10-02）---- */
/* 日報の行に付くタスクの印。案件の欄の下に小さく置く */
.timetask{margin-top:3px; line-height:1.3}
.timetask a{white-space:nowrap}
/* 「業務日報に入れる」から足した下書きの行。**まだ保存されていない**ことが見て分かるように */
tr.timedraft{background:var(--surface-3)}
tr.timedraft td:first-child{box-shadow:inset 3px 0 0 var(--warn)}

/* ---------- タブ ---------- */
.tabs{display:flex; gap:2px; margin-bottom:18px; border-bottom:1px solid var(--line)}
.tabs a{
  padding:7px 15px; font-size:12.5px; color:var(--ink-3); text-decoration:none;
  border:1px solid transparent; border-bottom:0; border-radius:6px 6px 0 0; margin-bottom:-1px;
}
.tabs a:hover{color:var(--ink-2); background:var(--surface-2)}
.tabs a[aria-current="true"]{
  color:var(--ink); font-weight:500; background:var(--surface);
  border-color:var(--line); border-bottom-color:var(--surface);
}

/* ---------- 編集フォーム ---------- */
#edit .inp{width:100%; box-sizing:border-box}
#edit textarea.inp{resize:vertical; line-height:1.65; font-size:12.5px}
#edit label.k{font-size:12.5px}

/* ---------- detail ---------- */
.grid2{display:grid; grid-template-columns:minmax(0,1.55fr) minmax(0,1fr); gap:20px; align-items:start}
/* ダッシュボード上部の2カラム（活動履歴・新規案件。087）は同じ幅 */
.grid2.even{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
@media (max-width:1020px){.grid2,.grid2.even{grid-template-columns:1fr}}
/* 左右の高さをそろえる。10件で収まらなければカードの中でスクロール（2026-09-14、秋元さん） */
.grid2.even > .card{height:600px; display:flex; flex-direction:column}
.grid2.even > .card > .feed{flex:1; min-height:0; overflow-y:auto}
.feed .row{display:grid; grid-template-columns:92px minmax(0,1fr); gap:10px; padding:8px 0; border-bottom:1px solid var(--line-soft)}
.feed .row:last-child{border-bottom:0}
.feed .at{font-family:var(--f-mono); font-size:12px; color:var(--ink-3); white-space:nowrap}
.feed .at.today{font-weight:700; color:var(--ink)}
.feed .ti{display:flex; flex-wrap:wrap; align-items:center; gap:6px; min-width:0}
.feed .tb{font-size:12px; color:var(--ink-2); overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
/* まだダッシュボードで見ていない行。赤地に白（2026-09-14、秋元さん） */
.newtag{font-size:10px; font-family:var(--f-mono); font-weight:600; letter-spacing:.04em; background:var(--crit); color:#fff;
  border-radius:3px; padding:0 5px}
/* タスクの「直された」（106）。**`.newtag` と同じ形で色だけ変える**——並んだときに
   どちらも「印」だと分かり、赤（新しく来た）と青（直された）で中身が分かれる */
.updtag{font-size:10px; font-family:var(--f-mono); font-weight:600; letter-spacing:.04em; background:var(--accent); color:#fff;
  border-radius:3px; padding:0 5px}
.kv{display:grid; grid-template-columns:112px 1fr; gap:9px 14px; font-size:13px}
.kv .k{color:var(--ink-3); font-size:12px}
.kv .v{min-width:0; word-break:break-word}
.crumb{font-size:12px; color:var(--ink-3); display:flex; gap:7px; align-items:center; flex-wrap:wrap}
.hero{display:flex; gap:14px; align-items:flex-start; flex-wrap:wrap}
.hero h1{font-size:21px}
.aliases{display:flex; gap:6px; flex-wrap:wrap; margin-top:4px}

.tl{display:flex; flex-direction:column}
.tl .it{display:grid; grid-template-columns:80px 1fr; gap:12px; padding:11px 0; border-bottom:1px solid var(--line-soft)}
.tl .it:last-child{border-bottom:0}
.tl .dt{font-family:var(--f-mono); font-size:11.5px; color:var(--ink-3)}
.tl .ti{font-size:13px; font-weight:500; display:flex; gap:8px; align-items:center; flex-wrap:wrap}
.tl .tb{font-size:12px; color:var(--ink-2); margin-top:2px; white-space:pre-line}

.srcrow{display:grid; grid-template-columns:88px 1fr 96px 62px; gap:10px; align-items:center; padding:8px 0; border-bottom:1px solid var(--line-soft); font-size:12px}
.srcrow:last-child{border-bottom:0}
.srcrow .fname{color:var(--ink-3); font-family:var(--f-mono); font-size:11px}
.bar{height:5px; border-radius:3px; background:var(--surface-2); overflow:hidden}
.bar>i{display:block; height:100%; background:var(--accent); border-radius:3px}
.win{color:var(--good); font-size:10.5px; font-weight:500}

/* ---------- merge ---------- */
.mrg{display:grid; grid-template-columns:1fr 1fr; gap:0; border:1px solid var(--line); border-radius:9px; overflow:hidden}
@media (max-width:760px){.mrg{grid-template-columns:1fr}}
.mrg>div{padding:14px 16px; background:var(--surface)}
.mrg>div+div{border-left:1px solid var(--line)}
@media (max-width:760px){.mrg>div+div{border-left:0; border-top:1px solid var(--line)}}
.mrow{display:grid; grid-template-columns:78px 1fr; gap:10px; padding:6px 0; font-size:12.5px; border-bottom:1px solid var(--line-soft)}
.mrow:last-child{border-bottom:0}
.mrow .k{color:var(--ink-3); font-size:11.5px}
.same{background:var(--good-soft); border-radius:4px; padding:0 5px; margin:0 -5px}
.diff{background:var(--warn-soft); border-radius:4px; padding:0 5px; margin:0 -5px}
.mhead{display:flex; align-items:center; gap:10px; padding:11px 16px; background:var(--surface-3); border-bottom:1px solid var(--line); flex-wrap:wrap}
.score{font-family:var(--f-mono); font-size:12px; color:var(--accent); background:var(--accent-soft); padding:1px 8px; border-radius:5px; border:1px solid var(--accent-line)}

/* ---------- segment ---------- */
.cond{display:flex; gap:8px; align-items:center; flex-wrap:wrap; padding:9px 0; border-bottom:1px dashed var(--line)}
.cond:last-of-type{border-bottom:0}
.cond .lbl{font-size:11px; color:var(--ink-3); width:92px; flex:none}
.count{display:flex; align-items:baseline; gap:9px}
.count .big{font-family:var(--f-mono); font-size:31px; font-weight:600; color:var(--accent); letter-spacing:-.02em}
.excl{font-size:12px; color:var(--ink-2); display:flex; flex-direction:column; gap:3px}
.excl span{display:flex; gap:8px; justify-content:space-between}

.ms{position:relative}
.msbtn{display:inline-flex; align-items:center; gap:7px; cursor:pointer}
.msbtn::after{content:"▾"; font-size:10px; color:var(--ink-3)}
.msbtn[aria-expanded="true"]{border-color:var(--accent-line); background:var(--accent-soft); color:var(--accent)}
.mspanel{
  display:none; position:absolute; z-index:20; top:calc(100% + 5px); left:0; min-width:236px;
  background:var(--surface); border:1px solid var(--line); border-radius:8px; box-shadow:var(--shadow); padding:7px;
}
.ms.open .mspanel{display:block}
.mspanel label{
  display:flex; align-items:center; gap:9px; padding:6px 8px; border-radius:6px; font-size:12.5px; cursor:pointer;
}
.mspanel label:hover{background:var(--surface-3)}
.mspanel input{accent-color:var(--accent); margin:0; flex:none}
.mspanel .c{margin-left:auto; font-family:var(--f-mono); font-size:11px; color:var(--ink-3)}
.msfoot{display:flex; gap:8px; align-items:center; border-top:1px solid var(--line-soft); margin-top:5px; padding:7px 8px 2px}
.seg2{display:inline-flex; border:1px solid var(--line); border-radius:6px; overflow:hidden}
.seg2 button{background:var(--surface-3); border:0; padding:4px 11px; font-size:11.5px; color:var(--ink-2)}
.seg2 button[aria-pressed="true"]{background:var(--accent-soft); color:var(--accent); font-weight:500}
.seg2 button+button{border-left:1px solid var(--line)}
/* ラジオで組んだ場合（いずれか / すべて含む） */
.seg2 label{display:inline-flex; align-items:center; gap:5px; padding:4px 10px; font-size:11.5px;
  color:var(--ink-2); background:var(--surface-3); cursor:pointer; white-space:nowrap}
.seg2 label+label{border-left:1px solid var(--line)}
.seg2 label:has(input:checked){background:var(--accent-soft); color:var(--accent); font-weight:500}
.seg2 input{accent-color:var(--accent); margin:0}
.mspanel .msfoot label:hover{background:var(--surface-2)}
.note{font-size:12px; color:var(--ink-2); background:var(--surface-3); border-left:2px solid var(--accent-line); padding:9px 13px; border-radius:0 6px 6px 0}
.note b{color:var(--ink)}
.qs{font-size:12px; color:var(--ink-2); background:var(--warn-soft); border-left:2px solid var(--warn); padding:9px 13px; border-radius:0 6px 6px 0}
.qs b{color:var(--warn)}

.scr{display:none} .scr.on{display:flex; flex-direction:column; gap:20px}

@media (max-width:840px){
  .shell{grid-template-columns:1fr}
  .rail{position:static; height:auto; flex-direction:row; overflow-x:auto; border-right:0; border-bottom:1px solid var(--line); padding:10px}
  .brand,.railgroup{display:none}
  .navb{width:auto; white-space:nowrap}
  /* 件数の数字は隠すが、**赤い丸（.cnt.alert）はスマホでも出す**（2026-09-14、秋元さん決定。ダッシュボードも業務日報も）。
     隠す指定は赤い丸でないものだけに当てる。業務日報の丸は右端に重ねるので、文字と重ならない余白を取る */
  .navb .cnt:not(.alert){display:none}
  .navi > .navb{padding-right:36px}
  .body{padding:16px}
  .topbar{padding:13px 16px}
}

/* 並べ替えの ▲▼。行の右端に小さく置く */
.ord{display:inline-flex; gap:3px}
.ordb{
  font:inherit; font-size:11px; line-height:1; cursor:pointer;
  padding:4px 7px; border-radius:5px;
  color:var(--ink-2); background:var(--surface-2); border:1px solid var(--line);
}
.ordb:hover:not(:disabled){color:var(--ink-1); background:var(--surface-1); border-color:var(--ink-3)}
.ordb:disabled{opacity:.32; cursor:default}

/* 議事録・プロジェクトシートのリンク。種類の名称、または URL そのもの。
   クリックできることが分かるよう下線を明示する */
.doclink{text-decoration:underline}
/* 種類が分からない URL は 1 行で見切る。折り返さない */
.oneline{
  display:inline-block; max-width:100%; vertical-align:bottom;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}

/* 連携先の本番に登録されているアドレスの印。
   2つ以上並ぶことがある（UMIBAN-海番- と Diving Web Guide の両方など）ので、
   くっつかないよう左に余白を置く。行が変わってもそろうよう上下も少し空ける */
.pill.reg{
  color:var(--sv-umiban); background:var(--sv-umiban-bg); border-color:var(--sv-umiban);
  display:inline-block; margin:2px 0 2px 5px;
}

/* ---------- 案件・工数（proj / time） ---------- */
/* 見積に対する消化。80% を越えたら注意、100% を越えたら警告の色にする */
.pbar{display:inline-block; width:84px; height:8px; background:var(--surface-2);
      border:1px solid var(--line); border-radius:99px; overflow:hidden; vertical-align:middle}
.pbar-in{display:block; height:100%}
.pbar-in.good{background:var(--good)}
.pbar-in.warn{background:var(--warn)}
.pbar-in.crit{background:var(--crit)}
.fact{background:var(--surface-3); border:1px solid var(--line); border-radius:var(--r);
      padding:8px 13px; min-width:92px}
.fact b{display:block; font-family:var(--f-mono); font-size:17px; line-height:1.3}

/* 業務日報の「勤務日｜休日」（088）。見出しの日付の横に置く。押している方が塗られる */
.daykind{display:inline-flex; align-self:center; border:1px solid var(--line); border-radius:6px; overflow:hidden; margin:0 4px}
.daykind button{font:inherit; font-size:12px; line-height:1.6; padding:1px 12px; border:0; border-right:1px solid var(--line);
  background:var(--surface); color:var(--ink-2); cursor:pointer}
.daykind button:last-child{border-right:0}
.daykind button[aria-pressed="true"]{background:var(--accent); color:#fff; font-weight:500}
/* 業務日報の開始・終業の欄。上の行より早い時刻（翌日）に「翌」を入力欄の横に並べる（下へ回り込ませない） */
.startcell{display:flex; align-items:center; gap:6px}
.startcell .inp{flex:1 1 auto; min-width:0}
.startcell .nextday{flex:none; font-weight:600; color:var(--ink-2)}
/* 業務日報の行を消すボタン（× 。押すと画面から消え、保存で DB に反映される） */
.timedel{padding:2px 9px; font-size:13px; line-height:1.3}
/* レポート（管理者だけ）。上の操作・凡例・名前・ツールチップ */
/* 案件の全レコード（日付 × 担当者）（2026-09-17）。kintone 時代の入力を人が読んで分け直すための表。
   **横に長い**ので、既定の table（width:100%／min-width:760px／広い padding）を上書きする。
   32インチで広げて使う前提（秋元さん）。担当者は動いていない日も列を残す。 */
.recgrid{width:auto; min-width:0; font-size:12px}
.recgrid th,.recgrid td{border-right:1px solid var(--line-soft)}
.recgrid thead th{white-space:nowrap; padding:7px 9px; z-index:3}
.recgrid thead th b{display:block; font-size:12.5px; letter-spacing:0; color:var(--ink); font-weight:600}
.recgrid td{padding:5px 9px; width:190px}
.recgrid td.e{background:var(--surface-3)}          /* その日に動いていない人のマス */
/* 日付の列は左に貼り付ける。横に送っても、どの日かを見失わない */
.recgrid .d{position:sticky; left:0; z-index:4; background:var(--surface-3); white-space:nowrap; width:98px;
  font-family:var(--f-mono); font-variant-numeric:tabular-nums; font-size:11.5px; letter-spacing:0; color:var(--ink-2)}
.recgrid thead .d{z-index:5}
.recgrid .rec+.rec{margin-top:4px; padding-top:4px; border-top:1px dotted var(--line)}
/* マスの時間。押すと、その日のその担当者の業務日報へ飛ぶ（2026-09-18） */
.recgrid .rec .hh{font-family:var(--f-mono); font-variant-numeric:tabular-nums; color:var(--accent);
  font-weight:600; text-decoration:none}
.recgrid .rec .hh:hover{text-decoration:underline}
.recgrid .rec .smeta{display:block; word-break:break-all}
.recgrid .sum{text-align:right; white-space:nowrap; background:var(--surface-3); width:78px;
  font-family:var(--f-mono); font-variant-numeric:tabular-nums}
.recgrid tfoot th,.recgrid tfoot td{background:var(--surface-2); font-weight:600}
/* 見出しを押すと並べ替える。日付＝元の日付順にもどす／担当者＝その人に入力のある日を上へ集める
   （集めた中も日付順のまま）。いま押している見出しに印を付ける */
.recgrid thead th[data-sort]{cursor:pointer; user-select:none}
.recgrid thead th[data-sort]:hover{background:var(--accent-soft)}
.recgrid thead th[aria-current="true"]{background:var(--accent-soft); box-shadow:inset 0 -3px 0 var(--accent)}
/* 日付は、その日の業務日報へのリンク */
.recgrid tbody .d a{color:var(--accent); text-decoration:none}
.recgrid tbody .d a:hover{text-decoration:underline}
/* 並べ替えたとき、上に集まったかたまりと、その下の残りの境目を出す */
.recgrid tbody tr.brk>*{border-top:2px solid var(--accent-line)}
/* 「この案件のままでよい」の確定（093、2026-09-18）。
   **確定したものは、その場で表から消える**（読み込み直しても出てこない。2026-09-18 秋元さん依頼）。
   取り消すための「確定したものも見る」（?all=1）でだけ、薄くして残す。
   マスの**左上**の四角は**ただの選択**で、押しても保存しない（2026-09-18 秋元さん依頼）。
   選んでから、上の帯（.recbar）でまとめて変える。右上にあるのは確定済みの印（.fixed） */
.recgrid .rec{position:relative; padding:2px 4px 2px 22px; border-radius:5px}
.recgrid .rec .pick{position:absolute; left:3px; top:3px; width:15px; height:15px; margin:0;
  cursor:pointer; accent-color:var(--accent)}
/* 日付の欄の四角は「その日を全部選ぶ」。**日付のリンクとは別に置く**——右クリックだけに
   していたとき、リンクを避けると押す場所がほとんど残らなかった（2026-09-18 に実測） */
.recgrid tbody .d .rowpick{width:14px; height:14px; margin:0 5px 0 0; vertical-align:-2px;
  cursor:pointer; accent-color:var(--accent)}
/* 取込元のキーが無い行（source='app'。external_id が NULL）。**まとめて変えられない**ので
   四角を出さず、代わりにここに印を置く。出すと押しても何も起きないのに画面から消える */
.recgrid .rec .nokey{position:absolute; left:5px; top:2px; color:var(--ink-3); font-size:12px; cursor:help}
.recgrid .rec.sel{background:var(--accent-soft); box-shadow:inset 0 0 0 1px var(--accent-line)}
/* 確定済みの印。?all=1 でだけ出る（既定の表からは落ちているため） */
.recgrid .rec .fixed{position:absolute; right:2px; top:1px; font-size:10.5px; color:var(--good); font-weight:700}
.recgrid .rec.done{opacity:.5; padding-right:18px}
.recgrid .rec.done .hh{color:var(--ink-3); font-weight:400}
/* 整理の進み具合。残り件数と、確定のぶんの帯 */
.revbar{height:7px; background:var(--surface-2); border-radius:4px; overflow:hidden; margin:8px 0 14px}
.revbar i{display:block; height:100%; background:var(--good); transition:width .2s}
.revstat{display:flex; gap:18px; flex-wrap:wrap; font-size:12.5px; align-items:baseline}
.revstat b{font-family:var(--f-mono); font-variant-numeric:tabular-nums; font-size:15px; color:var(--accent)}
.revstat .dn b{color:var(--good)}
/* 「整理中だけ｜確定したものも見る」。**画面の中の切り替えではなく行き先が別**なので、
   button ではなく a。seg2 の見た目はそのまま使う（押している側は aria-current） */
.revstat .seg2 a{display:inline-block; padding:5px 11px; text-decoration:none; color:var(--ink-2);
  background:var(--surface-3)}                        /* .seg2 button の指定は a には当たらないので書く */
.revstat .seg2 a+a{border-left:1px solid var(--line)}  /* 2つの間の仕切り（button+button と同じ） */
.revstat .seg2 a[aria-current="true"]{background:var(--accent-soft); color:var(--accent); font-weight:600}
/* 「表示中を全部選ぶ」。**帯の外**に置く——帯は選択が 0 件のとき隠れるので、中に入れると
   1件も選んでいないときに押せない。右クリックはタッチ端末に無いので、iPad ではこれが唯一の手立て */
.revstat #rv-all{font:inherit; font-size:12px; padding:4px 10px; border-radius:6px; color:var(--ink-2);
  border:1px solid var(--line); background:var(--surface); cursor:pointer}
.revstat #rv-all:hover{border-color:var(--accent); color:var(--accent)}
/* 選んだときに出る操作の帯（2026-09-18、A案）。**画面の上に貼り付く**ので、1,534行を下まで
   送っても操作が消えない。選択が 0 件のときは hidden で消える（属性なので display は触らない） */
.recbar{position:sticky; top:0; z-index:20; display:flex; gap:10px; align-items:center; flex-wrap:wrap;
  padding:9px 12px; margin:0 0 12px; background:var(--accent-soft);
  border:1px solid var(--accent-line); border-radius:8px}
.recbar b{font-family:var(--f-mono); font-variant-numeric:tabular-nums; font-size:16px; color:var(--accent)}
.recbar .sp{flex:1}
.recbar button{font:inherit; font-size:12.5px; padding:6px 12px; border-radius:6px;
  border:1px solid var(--line); background:var(--surface); cursor:pointer; color:var(--ink)}
.recbar button:hover:not(:disabled){border-color:var(--accent); color:var(--accent)}
.recbar #bk-move{background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600}
.recbar #bk-review{background:var(--good); border-color:var(--good); color:#fff; font-weight:600}
/* 取り消しは ?all=1 にだけ出る。確定と**取り違えないよう**、塗らずに輪郭だけにする */
.recbar #bk-unreview{border-color:var(--warn); color:var(--warn)}
.recbar #bk-unreview:hover:not(:disabled){border-color:var(--warn); color:var(--warn); background:var(--surface-2)}
.recbar button:disabled{opacity:.45; cursor:default}
.recbar input[type=search]{font:inherit; font-size:12.5px; padding:6px 10px; border:1px solid var(--line);
  border-radius:6px; width:240px; background:var(--surface)}
/* 移し先の候補。**完了した案件も出す**ので、それと分かる印を付ける */
.recbar .cand{position:relative}
.recbar .cand ul{position:absolute; left:0; top:calc(100% + 4px); z-index:30; margin:0; padding:4px;
  list-style:none; background:var(--surface); border:1px solid var(--line); border-radius:8px;
  width:340px; max-height:260px; overflow:auto; box-shadow:0 8px 24px rgba(0,0,0,.12)}
.recbar .cand li{padding:6px 9px; border-radius:5px; cursor:pointer; font-size:12.5px}
.recbar .cand li:hover{background:var(--accent-soft)}
.recbar .cand li.none{color:var(--ink-3); cursor:default}
.recbar .cand li .c{color:var(--ink-3); font-size:11.5px; margin-left:6px}
.recbar .cand li .st{color:var(--warn); font-size:11px; margin-left:6px}

.rctl{display:flex; flex-wrap:wrap; align-items:center; gap:12px}
.rctl .grp{display:flex; align-items:center; gap:6px}
.rctl .lbl{font-size:12px; color:var(--ink-2)}
.rctl .navbtn{padding:4px 10px}
.rctl .navbtn.off{opacity:.4; pointer-events:none}
.legend{flex-basis:100%; display:flex; flex-wrap:wrap; align-items:center; gap:6px; font-size:12px;
  color:var(--ink-2); padding-top:8px; border-top:1px solid var(--line-soft)}
.key{display:inline-flex; align-items:center; gap:5px; padding:3px 9px; font-size:12px; cursor:pointer;
  border:1px solid var(--line); border-radius:999px; background:var(--surface); color:var(--ink-2)}
.key i{width:10px; height:10px; border-radius:2px; display:inline-block}
.key[aria-pressed="false"]{opacity:.45; text-decoration:line-through}
.people{display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin-bottom:10px}
.tv{margin-top:10px} .tv summary{cursor:pointer; font-size:12px; color:var(--ink-2)}
.rtip{position:absolute; z-index:50; min-width:180px; padding:8px 10px; border:1px solid var(--line);
  border-radius:6px; background:var(--surface); box-shadow:0 6px 18px rgba(0,0,0,.12); font-size:12px}
.rtip .ttl{font-weight:600; margin-bottom:4px}
.rtip .row{display:flex; align-items:center; gap:6px} .rtip .row b{margin-left:auto}
.rtip .row i{width:10px; height:10px; border-radius:2px; display:inline-block}
.rtip .foot{margin-top:4px; padding-top:4px; border-top:1px solid var(--line-soft); color:var(--ink-2)}
/* 休日で行が無い日に、たたんだ1日の帯の代わりに出す */
.dayoff-note{display:flex; align-items:center; gap:12px; flex-wrap:wrap; padding:12px 14px; border:1px dashed var(--line);
  border-radius:6px; background:var(--surface-3); color:var(--ink-2); font-size:13px}

/* ---------- MORIBITO の支援金（109、2026-10-29）----------
   縦が支援、横が12か月。**月のセルは押すと直せる**（秋元さん「クリックしたら、
   編集できるようにして、数値を変更したい」）。
   列の幅は**固定**にする——auto のままだと、お名前が1文字ずつ縦に潰れたり、
   使われない余白が状態の列に溜まったりする（見本で両方踏んだ） */
.mpaytbl{table-layout:fixed}
.mpaytbl td,.mpaytbl th{font-size:12px; padding:4px 6px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.mpaytbl tr.sum td{background:var(--surface-2); font-weight:700}
/* 支援先ごとの合計。**振り込む先ごとに分かれていないと使えない** */
.mpaytbl tr.psum td{background:var(--accent-soft); color:var(--ink)}
.mpaytbl td.mpayout{color:var(--ink-3); text-align:right}
/* セルは丸ごと押せる。約束どおりの月は枠を出さない */
.mpaytbl td.mpaycell{padding:0}
.mpaytbl td.mpaycell .cb{display:block; width:100%; padding:4px 6px; border-radius:4px;
  text-align:right; color:inherit; text-decoration:none}
.mpaytbl td.mpaycell a.cb:hover{background:var(--accent-soft); box-shadow:inset 0 0 0 1px var(--accent-line)}
.mpaytbl td.mpaycell a.cb:focus-visible{outline:2px solid var(--accent); outline-offset:-2px}
/* 手で直した月だけ色がつく。赤＝入金なし、黄＝約束と違う */
.mpaytbl td.mpaycell.moved .cb{background:var(--warn-soft); color:var(--warn); font-weight:600}
.mpaytbl td.mpaycell.zero  .cb{background:var(--crit-soft); color:var(--crit); font-weight:600}
/* セルの下と、お名前の下に添える小さい字 */
.xn{display:block; font-size:9px; line-height:1.3; font-weight:400; opacity:.85}
.mpaytbl td:first-child .xn{color:var(--ink-3)}

/* ---------- MORIBITO の支援金明細（111、2026-10-30）----------
   縦が項目、横が支援先。**決済代行会社手数料だけは支援先で分けない**ので、
   別のカードに置いて合計の1列だけにしてある */
.mstbl th,.mstbl td{padding:6px 11px; font-size:12.5px}
.mstbl thead th{background:var(--surface-2); font-weight:700; white-space:nowrap}
.mstbl td:first-child,.mstbl th:first-child{text-align:left}
.mstbl td.n,.mstbl th.n{text-align:right; white-space:nowrap}
.mstbl tr.grp td{background:var(--surface-2); font-weight:700; font-size:12px}
.mstbl tr.sub td{color:var(--ink-2)}
.mstbl tr.big td{font-weight:700; border-top:2px solid var(--line)}
/* 協会へ振り込む額。**いちばん見るところ** */
.mstbl tr.out td{background:var(--good-soft); color:var(--good); font-weight:700}
.mstbl tr.rev td{background:var(--accent-soft); font-weight:700}
.mstbl .cnt{color:var(--ink-3); font-size:11px; margin-right:7px}
.mstbl .fx{font-size:11px; color:var(--ink-3); font-weight:400}
