/*!*****************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[3]!./src/app/globals.css ***!
  \*****************************************************************************************************************************************************************************************************************************************************************/
/* Bridge UI — モック (bridge_mock.html) のトークン体系を継承 */
:root{
  --bg:#f4f6f6; --panel:#ffffff; --panel2:#eef1f1; --line:#d9dfdf; --ink:#1d2726; --ink2:#5b6b69; --ink3:#8a9997;
  --accent:#0f766e; --accent-soft:#e0f0ee; --accent-ink:#0b5d57;
  --ok:#16a34a; --ok-soft:#e3f4e8; --warn:#b45309; --warn-soft:#fbeedd; --crit:#dc2626; --crit-soft:#fde5e5;
  /* pilot-042: 稼働中コアが脈打って光る緑の光彩色。footprintを持たない box-shadow なので
     レーダーリング(下)の内側に収め、pilot-039 の重なり対策を壊さない(DoD3)。 */
  --ok-glow:rgba(22,163,74,.6);
  --idle:#9aa8a6; --chip:#eef1f1; --shadow:0 1px 3px rgba(29,39,38,.08);
  /* ステータス配色 (pilot-029): 全7状態に固有の色相を割り当てる唯一の出所。
     pill(一覧/チャット)・依存グラフ・凡例・依存チップが全部ここを参照し、画面ごとに色を発明しない。
     -soft=バッジ背景(淡色) / -ink=文字と枠(濃色)。どの2状態も色相が被らない:
     open=グレー waiting=紫 ready=ティール running=緑 review=琥珀 done=青 impacted=赤 */
  --st-open-soft:#e9edf0; --st-open-ink:#546274;
  --st-waiting-soft:#efe8fb; --st-waiting-ink:#7c3aed;
  --st-ready-soft:#d3efeb; --st-ready-ink:#0b6f66;
  --st-running-soft:#dbf3e2; --st-running-ink:#15803d;
  --st-review-soft:#fbecd4; --st-review-ink:#b45309;
  --st-done-soft:#dfe8fb; --st-done-ink:#2563eb;
  --st-impacted-soft:#fbdede; --st-impacted-ink:#dc2626;
}
@media (prefers-color-scheme: dark){:root{
  --bg:#111817; --panel:#1a2322; --panel2:#141c1b; --line:#2a3635; --ink:#e6edec; --ink2:#9fb0ae; --ink3:#6d7d7b;
  --accent:#2dd4bf; --accent-soft:#12312e; --accent-ink:#7fe7da;
  --ok:#4ade80; --ok-soft:#12301c; --warn:#fbbf24; --warn-soft:#33260e; --crit:#f87171; --crit-soft:#3a1414;
  --ok-glow:rgba(74,222,128,.65);
  --idle:#5c6b69; --chip:#243130; --shadow:0 1px 3px rgba(0,0,0,.4);
  /* 暗い背景でも -ink(明るい濃色)が -soft(暗い淡色)の上で読めるコントラストを確保 (pilot-029 DoD1) */
  --st-open-soft:#1e2a33; --st-open-ink:#9fb3c4;
  --st-waiting-soft:#251a3f; --st-waiting-ink:#c4b5fd;
  --st-ready-soft:#0e3833; --st-ready-ink:#5eead4;
  --st-running-soft:#103021; --st-running-ink:#4ade80;
  --st-review-soft:#3a2a0c; --st-review-ink:#fbbf24;
  --st-done-soft:#172a52; --st-done-ink:#93c5fd;
  --st-impacted-soft:#3a1414; --st-impacted-ink:#f87171;
}}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--ink);font-family:"Hiragino Sans","Hiragino Kaku Gothic ProN","Yu Gothic UI",system-ui,sans-serif;font-size:13.5px;line-height:1.65}
.mono{font-family:ui-monospace,"SF Mono",Menlo,monospace;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}
.num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}
button{font:inherit;cursor:pointer}
input,textarea,select{font:inherit;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:7px 10px}
input:focus-visible,textarea:focus-visible,select:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}

/* height:100vh 固定 = ページ全体は縦スクロールせず、.main の中だけがスクロールする
   (上メニュー/タブ/左メニューは常に画面に貼り付く。たろう要望 2026-08-02)。
   max-width はウィンドウ追従の上限 (超ワイドで一行が伸びすぎない塩梅・上限ありで確定)。 */
.app{max-width:1680px;margin:0 auto;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);overflow:hidden;height:100vh;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:14px;padding:10px 18px;border-bottom:1px solid var(--line)}
/* スマホ用メニュー(ハンバーガー)ボタン (pilot-200)。PC幅では隠す(サイドバー常時表示のため不要)。
   スマホ幅の media query でのみ表示に切り替える。 */
.nav-toggle{display:none;flex:none;border:1px solid var(--line);background:var(--panel);color:var(--ink);
  border-radius:8px;width:38px;height:34px;font-size:17px;line-height:1;align-items:center;justify-content:center}
/* サイドバー引き出し中の背景幕 (pilot-200)。PC幅では出さない(下の media query でのみ表示)。 */
.nav-backdrop{display:none}
.brand{display:flex;align-items:baseline;gap:8px}
.brand .name{font-weight:800;font-size:16px;letter-spacing:.04em}
.brand .sub{color:var(--ink3);font-size:11px}
.topbar .spacer{flex:1 1}
.weekmeta{font-size:11.5px;color:var(--ink2)}
.tabs{display:flex;gap:2px;padding:0 12px;border-bottom:1px solid var(--line);overflow-x:auto}
.tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:none;color:var(--ink2);font-weight:600;padding:10px 14px;border-bottom:2px solid transparent;white-space:nowrap}
.tab[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--accent)}
.tab .badge{display:inline-block;min-width:16px;padding:0 5px;margin-left:5px;border-radius:9px;background:var(--crit);color:#fff;font-size:10.5px;text-align:center}
.layout{display:flex;flex:1 1;min-height:0}
.sidebar{width:230px;flex:none;border-right:1px solid var(--line);background:var(--panel2);padding:12px 0;overflow-y:auto}
.side-h{padding:4px 14px;font-size:10.5px;font-weight:700;letter-spacing:.08em;color:var(--ink3)}
.agent{display:flex;align-items:center;gap:8px;padding:5px 14px;font-size:12.5px}
/* pilot-039: 稼働中のレーダーパルス(下の .dot.active::after)は 8px のドットを大きく超えて広がる。
   その広がりぶんの余地を margin-right で確保し、パルスが右隣の名前に被らないようにする
   (たろう実機: パルスが名前に接触して崩れて見えた)。ドット自体は動かさず名前だけ右へ逃がす。 */
.dot{width:8px;height:8px;border-radius:50%;flex:none;position:relative;margin-right:6px}
.dot.active{background:var(--ok)} .dot.idle{background:var(--warn)} .dot.down{background:var(--crit)} .dot.human{background:var(--idle)}
/* 稼働中のドットだけ、緑のリングが広がって消えるレーダー風パルスを出す。
   状態が idle/down に変わると .dot.active が外れて自動で止まる=「作業が終わったら止まる」(DoD2)。 */
.dot.active::after,.run-dot::after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--ok);
  animation:dotpulse 1.6s ease-out infinite}
@keyframes dotpulse{0%{transform:scale(1);opacity:.5}70%{opacity:0}100%{transform:scale(3.4);opacity:0}}
/* pilot-042: 稼働中のコア(ドット本体)自体も緑に脈打って光らせる=「ピコピコ」の視覚的な強さを足す。
   たろう要望: 稼働中の表示が地味 → 一目で「動いている」と分かる緑の脈動に。上のレーダーリングは据え置き、
   ここは box-shadow(緑の光彩)と brightness(明滅)を1.6sで呼吸させる。box-shadow はレイアウトを押し広げない=
   リングの内側に収まり pilot-039 の重なり対策を壊さない(DoD3)。アイドル/停止(.idle/.down)は静止のまま=
   色(緑/琥珀/赤)と動き(脈動/静止)の両方で一目で見分けられる(DoD2)。 */
.dot.active,.run-dot{animation:dotcore 1.6s ease-in-out infinite}
@keyframes dotcore{0%,100%{box-shadow:0 0 2px 0 var(--ok-glow);filter:brightness(1)}
  50%{box-shadow:0 0 6px 1px var(--ok-glow);filter:brightness(1.4)}}
/* タスク一覧の実行中(running)タスクに付ける、左枠と同じ緑パルスのドット(pilot-026)。
   左枠の .dot.active と同じ dotpulse を共有し、別の点滅を発明しない=見た目を統一する。 */
.run-dot{width:8px;height:8px;border-radius:50%;background:var(--ok);position:relative;flex:none;display:inline-block}
/* pilot-029: 実行中パルスの緑を running バッジの色トークンに合わせ、同じ「実行中」を同色で示す */
.run-dot,.run-dot::after{background:var(--st-running-ink)}
/* 依存グラフのSVGノード用パルス。CSSアニメで拡大&フェードし、上のドットと同じ呼吸に揃える。
   transform-box:fill-box で図形中心を基準にスケールさせる(SVGの原点ズレを防ぐ)。 */
.node-pulse{transform-box:fill-box;transform-origin:center;animation:nodepulse 1.6s ease-out infinite}
@keyframes nodepulse{0%{transform:scale(1);opacity:.5}70%{opacity:0}100%{transform:scale(2.8);opacity:0}}
/* タブが非表示の間はアニメを止めてCPUを食わせない(DoD4/pilot-026 DoD5)。可視に戻ると再開する。 */
body.tab-hidden .dot.active::after,body.tab-hidden .run-dot::after,body.tab-hidden .node-pulse,
body.tab-hidden .dot.active,body.tab-hidden .run-dot,
body.tab-hidden .typing .dots i{animation-play-state:paused}
/* 状態取得が切れている間(鮮度切れ)は、実際は止まっているかもしれないので動きを止める。
   「凍りついたまま動いて見える」偽の生存表示を作らない(pilot-026 DoD4)。パルスは消して静止ドットだけ残す。 */
body.data-stale .run-dot::after,body.data-stale .node-pulse{animation:none;opacity:0}
/* pilot-042: 鮮度切れの間はコアの脈動(光彩/明滅)も止め、静止した緑ドットだけ残す=
   「凍りついたまま光って動いて見える」偽の生存表示を作らない。 */
body.data-stale .run-dot,.sidebar.stale .agent .dot.active{animation:none;box-shadow:none;filter:none}
/* 動きを減らす設定の利用者にはパルスを出さない(色/ラベルで状態は判別できる) */
@media (prefers-reduced-motion:reduce){.dot.active::after,.run-dot::after,.node-pulse{animation:none;opacity:0}
  /* 動きを減らす設定では脈動を止め、静止した緑ドット(＋控えめな光彩)で状態は色/ラベルから判別できる */
  .dot.active,.run-dot{animation:none;box-shadow:0 0 3px 0 var(--ok-glow);filter:none}}
/* 左枠の自動更新インジケータ。切れている間は表示を薄くして「古い情報」を新鮮に見せない(DoD3)。 */
.live-ind{margin-left:auto;font-size:9.5px;font-weight:700;letter-spacing:0;white-space:nowrap}
.live-ind.on{color:var(--ok)} .live-ind.off{color:var(--warn)}
.sidebar.stale .agent .st{opacity:.45} .sidebar.stale .agent .dot{opacity:.5}
/* pilot-028: タスク一覧・依存グラフも自動更新が切れたら薄くし、古い表示を新鮮に見せない(DoD2) */
.tasksplit.stale,.graphwrap.stale{opacity:.55;transition:opacity .2s}
/* pilot-039: 長い表示名は折り返して2行になり状態ラベルへ食い込む。名前は余った幅ぶんだけ使い、
   はみ出す分は…(省略記号)で1行に畳む。min-width:0 が無いと flex 要素は縮まず折り返してしまう。 */
.agent .nm{font-weight:600;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* pilot-039: 状態ラベルは「状態/今週」の2行だけに固定。flex:none で縮まされず、white-space:nowrap で
   「停止 45分」が「停止」と「45分」に割れて3行に化けるのを防ぐ(<br> の1回だけが改行)。 */
.agent .st{flex:none;margin-left:auto;color:var(--ink3);font-size:10.5px;text-align:right;line-height:1.3;white-space:nowrap}
.agent .st .bad{color:var(--crit);font-weight:700}
.chan{display:block;width:100%;text-align:left;border:0;background:none;color:var(--ink2);padding:4px 14px 4px 22px;font-size:12.5px}
.chan.active{color:var(--ink);font-weight:700;background:var(--panel);border-right:2px solid var(--accent)}
/* チャンネル並べ替え (pilot-032): 選択ボタン + ▲▼。▲▼は普段は薄く、行に触れた時だけ濃く出す */
.chan-row{display:flex;align-items:center}
.chan-row .chan{flex:1 1;min-width:0}
.chan-move{display:flex;flex-direction:column;padding-right:8px;opacity:.35;transition:opacity .12s}
.chan-row:hover .chan-move{opacity:1}
.chan-arrow{border:0;background:none;color:var(--ink3);cursor:pointer;font-size:8px;line-height:1;padding:1px 2px}
.chan-arrow:hover:not(:disabled){color:var(--accent)}
.chan-arrow:disabled{opacity:.25;cursor:default}
.main{flex:1 1;min-width:0;padding:16px 18px;overflow-y:auto}
/* チャット表示中: main 自体は固定し、会話リストだけをスクロールさせ、入力欄を下に固定する */
.main.chatmode{display:flex;flex-direction:column;overflow:hidden}
.main.chatmode h2{flex:none}
h2{font-size:14px;margin:0 0 10px}
.sec{margin-bottom:22px}

.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));grid-gap:10px;gap:10px;margin-bottom:20px}
.tile{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.tile .k{font-size:11px;color:var(--ink2)}
.tile .v{font-size:22px;font-weight:800;line-height:1.2}
.tile.crit{border-color:var(--crit)} .tile.crit .v{color:var(--crit)}

.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px}
table{border-collapse:collapse;width:100%;min-width:600px;font-size:12.5px}
th{font-size:10.5px;letter-spacing:.06em;color:var(--ink3);text-align:left;font-weight:700;padding:8px 12px;border-bottom:1px solid var(--line);background:var(--panel2);white-space:nowrap}
td{padding:8px 12px;border-bottom:1px solid var(--line);vertical-align:top}
tr:last-child td{border-bottom:0}
/* ステータスバッジ (pilot-029)。色は上の --st-* トークンが唯一の出所。
   色だけに頼らない: 各状態に固有の形マーカー(::before)を前置し、日本語ラベルも全部別語。
   → 色覚特性のある人や単色印刷でも、形とラベルで7状態を判別できる。 */
.pill{display:inline-flex;align-items:center;gap:4px;padding:1px 8px;border-radius:20px;font-size:11px;font-weight:700;white-space:nowrap;line-height:1.5}
.pill::before{font-size:9px;line-height:1;opacity:.9}
.pill.open{background:var(--st-open-soft);color:var(--st-open-ink)}
.pill.open::before{content:"○"}
.pill.waiting{background:var(--st-waiting-soft);color:var(--st-waiting-ink)}
.pill.waiting::before{content:"□"}
.pill.ready{background:var(--st-ready-soft);color:var(--st-ready-ink)}
.pill.ready::before{content:"▷"}
.pill.running{background:var(--st-running-soft);color:var(--st-running-ink)}
/* running の形マーカーは緑パルスの run-dot(下)が担うので ::before は出さない(二重ドット回避) */
.pill.review{background:var(--st-review-soft);color:var(--st-review-ink)}
.pill.review::before{content:"◆"}
.pill.done{background:var(--st-done-soft);color:var(--st-done-ink)}
.pill.done::before{content:"✓"}
.pill.impacted{background:var(--st-impacted-soft);color:var(--st-impacted-ink)}
.pill.impacted::before{content:"▲"}
/* RED差し戻し後の ready (pilot-048)。初回の「着手可能」(緑系▷)と色も形もラベルも別にして、
   「一度不合格になって修正待ちに戻った」ことが一目で分かる。危険色系 + ↩ マーカー。 */
.pill.redreturn{background:var(--st-impacted-soft);color:var(--st-impacted-ink)}
.pill.redreturn::before{content:"↩"}
.tid{color:var(--ink3);font-size:11px}
.elapsed{font-weight:700} .elapsed.hot{color:var(--crit)}

.alertrow{display:flex;gap:10px;align-items:flex-start;padding:9px 12px;border:1px solid var(--line);border-left:3px solid var(--crit);border-radius:8px;margin-bottom:8px;background:var(--crit-soft)}
.alertrow .t{font-weight:700;font-size:12.5px}
.alertrow .when{margin-left:auto;flex:none;font-size:11px;color:var(--ink3)}

.hours{display:grid;grid-template-columns:auto 1fr auto;grid-gap:4px 12px;gap:4px 12px;align-items:center;max-width:560px}
.hours .nm{font-size:12.5px;font-weight:600;white-space:nowrap}
.hours .bar{height:8px;border-radius:4px;background:var(--chip);overflow:hidden}
.hours .bar i{display:block;height:100%;background:var(--accent);border-radius:4px}
.hours .hv{font-size:12px;color:var(--ink2)}

.segbtns{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.segbtns button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:var(--panel);color:var(--ink2);font-size:12px;font-weight:600;padding:5px 12px}
.segbtns button+button{border-left:1px solid var(--line)}
.segbtns button.on{background:var(--accent-soft);color:var(--accent-ink)}
h2 .btn.ghost{margin-left:auto;font-size:12px;padding:5px 12px}
.graphbar{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin-bottom:10px;font-size:11.5px;color:var(--ink2)}
.graphbar label{display:inline-flex;align-items:center;gap:5px;cursor:pointer}
.graphbar .legend{display:inline-flex;gap:12px;flex-wrap:wrap}
.graphbar .legend span{display:inline-flex;align-items:center;gap:4px}
.graphbar .legend i{width:13px;height:13px;border-radius:3px;border:1px solid;display:inline-flex;align-items:center;justify-content:center;font-size:8px;font-style:normal;line-height:1}
.graphbar .hint{margin-left:auto;color:var(--ink3)}
/* pilot-033: 2段ズームのパンくず(まとまり全体 ▸ 個別まとまり)と、戻る/小ボタン */
.graphbar .crumbs{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink)}
.graphbar .crumb-sep{color:var(--ink3)}
.crumb-link{background:none;border:none;padding:0;color:var(--accent-ink);font-weight:700;cursor:pointer;text-decoration:underline;font-size:12px}
.crumb-link:hover{opacity:.8}
.btn.ghost.sm{font-size:11.5px;padding:4px 10px;margin-left:0}
.grouptag{display:inline-block;padding:2px 8px;border-radius:12px;background:var(--accent-soft);color:var(--accent-ink);border:1px solid var(--accent-ink);font-size:11px;font-weight:700}
.graphwrap{overflow:auto;border:1px solid var(--line);border-radius:10px;background:var(--panel2);padding:6px;max-height:64vh}
.tasksplit{display:flex;gap:14px;align-items:flex-start}
.tasklist{flex:1 1;min-width:0}
.taskrow{display:flex;gap:10px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;background:none;width:100%;text-align:left;color:var(--ink)}
.taskrow.sel{border-color:var(--accent);background:var(--accent-soft)}
.taskrow .ttl{font-weight:600;font-size:12.5px;flex:1 1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.detail{width:340px;flex:none;border:1px solid var(--line);border-radius:10px;background:var(--panel2);padding:14px}
.detail h3{margin:0 0 2px;font-size:13.5px}
.kv dt{font-size:10.5px;letter-spacing:.06em;color:var(--ink3);font-weight:700;margin:10px 0 3px}
.kv dd{margin:0;font-size:12.5px}
.dep{display:flex;align-items:center;gap:6px;padding:4px 8px;border:1px solid var(--line);border-radius:6px;background:var(--panel);margin-bottom:4px;font-size:12px}
.dep.depcol{flex-direction:column;align-items:stretch;gap:2px}
.depresult{font-size:11px;color:var(--ink2);background:var(--ok-soft);border-radius:5px;padding:3px 7px;border-left:2px solid var(--ok)}
.detail-actions{display:flex;flex-wrap:wrap;gap:6px}
.detail-actions .btn{font-size:11.5px;padding:5px 10px}
.impactbox{border:1px solid var(--crit);border-radius:8px;padding:8px 10px;background:var(--crit-soft);margin-bottom:6px}
.impactbox .ib-h{font-weight:700;font-size:11.5px;margin-bottom:4px}
.impactbox .ib-before{font-size:11.5px;color:var(--ink2);padding:3px 7px;background:var(--panel);border-radius:5px;margin-bottom:3px}
.impactbox .ib-after{font-size:11.5px;color:var(--ink);padding:3px 7px;background:var(--panel);border-radius:5px;border-left:2px solid var(--crit);margin-bottom:3px}
.evd{display:flex;gap:6px;align-items:center;font-size:12px;margin-bottom:3px}
/* 差し戻し理由ボックス (pilot-048・DoD1)。RED差し戻しの「なぜ」を詳細の最上部に目立たせる。
   影響確認(impactbox)と同じ危険色系だが、↩ヘッダと note 全文で「レビュー差し戻し」と分かる。 */
.redbox{border:1px solid var(--crit);border-left:4px solid var(--crit);border-radius:8px;
  background:var(--crit-soft);padding:9px 11px;margin:8px 0 4px}
.redbox-h{font-weight:800;font-size:12.5px;color:var(--crit);margin-bottom:5px}
.redbox-note{font-size:12.5px;line-height:1.55;color:var(--ink);white-space:pre-wrap;
  background:var(--panel);border-radius:6px;padding:6px 9px}
.redbox-ev{margin-top:5px;font-size:11.5px;color:var(--ink2)}
.redbox-ev>div{padding:2px 0}
.redbox-meta{margin-top:6px;font-size:11px;color:var(--ink2)}
/* イベント履歴の展開行 (pilot-048・DoD2)。行をクリックで payload の要旨(裁定/理由/結果/証拠)を開く。 */
.evd-row{border-bottom:1px solid var(--line)}
.evd-row:last-child{border-bottom:none}
.evd-head{display:flex;gap:6px;align-items:center;width:100%;background:none;border:none;
  padding:4px 2px;cursor:pointer;font-size:12px;color:var(--ink);text-align:left}
.evd-head:hover{background:var(--chip);border-radius:5px}
.evd-caret{color:var(--ink3);font-size:9px;width:10px;flex:none}
.evd-verdict.red{color:var(--crit);font-weight:800}
.evd-verdict.green{color:var(--ok);font-weight:800}
.evd-payload{padding:5px 9px 8px 20px;font-size:11.5px}
.evd-payload.raw{white-space:pre-wrap;color:var(--ink2);font-family:ui-monospace,monospace}
.evd-kv{display:flex;gap:8px;padding:2px 0;align-items:baseline}
.evd-kv .evd-k{flex:none;min-width:64px;color:var(--ink3);font-weight:700}
.evd-kv .evd-v{color:var(--ink);white-space:pre-wrap;word-break:break-word}
.pv{display:inline-flex;gap:12px;flex-wrap:wrap;font-size:12.5px}
.pv b{font-weight:700}
.formhint{border:1px dashed var(--line);border-radius:10px;padding:12px 14px;font-size:12.5px;color:var(--ink2);margin-top:14px}
.formhint .err{color:var(--crit);font-weight:700}
.form{display:flex;flex-direction:column;gap:8px;max-width:560px}
.form label{font-size:11px;font-weight:700;color:var(--ink3);letter-spacing:.05em}
.btn{border:1px solid var(--accent);background:var(--accent);color:#fff;font-weight:700;border-radius:8px;padding:7px 16px}
.btn.ghost{background:none;color:var(--accent-ink)}
.err-msg{color:var(--crit);font-size:12px;font-weight:600}

.chat{display:flex;flex-direction:column;gap:12px;max-width:1050px;flex:1 1;min-height:0;overflow-y:auto;padding-right:6px}
.msg{display:flex;gap:10px}
.msg .who{width:30px;height:30px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:700}
.msg .meta{font-size:11px;color:var(--ink3);margin-bottom:2px}
.msg .meta b{color:var(--ink);font-size:12px}
.bubble{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:8px 12px;font-size:13px;max-width:min(100%,72ch);white-space:pre-wrap;word-break:break-word}
.attach{display:inline-flex;align-items:center;gap:8px;margin-top:6px;border:1px solid var(--line);border-radius:8px;padding:6px 10px;background:var(--panel);font-size:12px;color:var(--accent-ink);text-decoration:none}
.taskcard{border:1px solid var(--accent);border-radius:10px;padding:8px 12px;background:var(--accent-soft);max-width:440px;font-size:12.5px;margin-top:6px}
/* 「ここから未読」の区切り線 (pilot-027)。既読と未読の境界を見た目で示す。 */
.unread-sep{display:flex;align-items:center;gap:8px;color:var(--crit);font-size:11px;font-weight:700;margin:2px 0}
.unread-sep::before,.unread-sep::after{content:"";height:1px;background:var(--crit);flex:1 1;opacity:.55}
.unread-sep span{white-space:nowrap;letter-spacing:.02em}
.composer{display:flex;gap:8px;align-items:flex-end;border-top:1px solid var(--line);padding:12px 0 0;margin-top:10px;flex:none;max-width:1050px;position:relative}
/* ドラッグ&ドロップ添付: ファイルを重ねている間だけ枠を強調してドロップ先を示す */
.composer.dragging{outline:2px dashed var(--accent,#5b8def);outline-offset:4px;border-radius:8px}
.composer .dropzone-hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--panel) 82%,transparent);border-radius:8px;font-size:12.5px;font-weight:600;color:var(--ink2);pointer-events:none;z-index:10}
/* 返事待ちの「書いています…」表示 (送信直後に出し、相手の返信が届いたら消す) */
.typing{display:flex;gap:10px;align-items:center;color:var(--ink3);font-size:12px}
.typing .who{width:30px;height:30px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:700}
.typing .dots i{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--ink3);margin-right:3px;animation:typebounce 1.2s infinite}
.typing .dots i:nth-child(2){animation-delay:.15s}
.typing .dots i:nth-child(3){animation-delay:.3s}
@keyframes typebounce{0%,60%,100%{transform:translateY(0);opacity:.5}30%{transform:translateY(-4px);opacity:1}}
/* 送信前の添付予定ファイル(コピペ/選択どちらも)のチップ */
.pendfiles{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.pendfiles .pf{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:8px;padding:3px 8px;background:var(--panel2);font-size:11.5px}
.pendfiles .pf img{width:26px;height:26px;object-fit:cover;border-radius:4px}
.pendfiles .pf button{border:0;background:none;color:var(--ink3);padding:0 2px;font-size:13px}
.composer-input{position:relative;flex:1 1;display:flex;flex-direction:column}
.composer textarea{flex:1 1;width:100%;resize:vertical;min-height:44px}
/* 添付アイコンボタン (pilot-200)。生の file input の代わりに📎の正方ボタンへ畳み、横幅を食わない。
   隠した実体の <input type=file> を内包し、ラベルクリックでファイル選択を開く。送信ボタンと同じ
   高さ(下端)に揃える。ホバー/フォーカスで枠を強調。 */
.attach-btn{flex:none;align-self:flex-end;display:inline-flex;align-items:center;justify-content:center;
  width:40px;height:40px;border:1px solid var(--line);border-radius:8px;background:var(--panel);
  color:var(--ink2);font-size:18px;line-height:1;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}
.attach-btn:hover{border-color:var(--accent);color:var(--accent-ink)}
.attach-btn:focus-within{outline:2px solid var(--accent);outline-offset:1px}
.mention-pop{position:absolute;bottom:calc(100% + 4px);left:0;min-width:220px;max-height:220px;overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);z-index:20;padding:4px}
.mention-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:0;background:none;color:var(--ink);padding:6px 8px;border-radius:6px;font-size:12.5px}
.mention-item.on{background:var(--accent-soft)}
.mention-item .dot{width:8px;height:8px;border-radius:50%;flex:none}
.mention-item .mono{margin-left:auto;color:var(--ink3);font-size:11px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}

.card{border:1px solid var(--line);border-radius:10px;margin-bottom:10px;overflow:hidden}
.card summary{list-style:none;display:flex;gap:10px;align-items:center;padding:10px 14px;cursor:pointer;font-weight:600;font-size:13px}
.card summary::-webkit-details-marker{display:none}
.card summary .who{font-size:11px;font-weight:700;padding:1px 8px;border-radius:20px;background:var(--chip);color:var(--ink2);flex:none}
.card summary .due{margin-left:auto;flex:none;font-size:11.5px;color:var(--warn);font-weight:700}
.card .inner{border-top:1px solid var(--line);padding:12px 14px;background:var(--panel2);font-size:12.5px}
.card .inner h4{margin:8px 0 3px;font-size:11px;letter-spacing:.06em;color:var(--ink3)}
.card .inner p{margin:0 0 4px;white-space:pre-wrap}

/* 版ずれ再読み込み促しバナー (pilot-038)。最上部に帯で出し、押すと再読み込み。
   琥珀系(review色)で「対応が要るが危険ではない」を色でも示す。 */
.update-banner{display:flex;align-items:center;gap:12px;padding:9px 16px;
  background:var(--st-review-soft);color:var(--st-review-ink);border-bottom:1px solid var(--warn);
  font-size:12.5px;line-height:1.5}
.update-banner .ub-icon{font-size:17px;flex:none;line-height:1}
.update-banner .ub-text{min-width:0}
.update-banner .ub-text b{color:var(--ink)}
.update-banner .ub-note{display:block;color:var(--ink2);font-size:11.5px;margin-top:1px}
.update-banner .ub-btn{margin-left:auto;flex:none;background:var(--warn);color:#fff;border:none;
  border-radius:8px;padding:7px 16px;font-weight:700;box-shadow:var(--shadow)}
.update-banner .ub-btn:hover{filter:brightness(1.06)}

.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center}
.login-box{background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:28px;width:320px;display:flex;flex-direction:column;gap:10px}
/* ── スマホ幅対応 (pilot-200) ─────────────────────────────────────────────
   以前は .sidebar を display:none で丸ごと隠していたため、スマホでは一番上のチャンネルしか
   見られず切替できなかった。ここでサイドバーを「左から引き出すドロワー」に作り替え、☰ボタンと
   背景幕で開閉できるようにする。チャットの入力欄も、添付を📎アイコンに畳んで textarea を主役にする。 */
@media (max-width:900px){
  /* メニューボタンを出す(PC幅では非表示のまま) */
  .nav-toggle{display:inline-flex}
  /* サイドバーはドロワー化: 既定で画面左外へ引っ込め、.open で滑り込ませる。
     position:fixed なので .app の overflow:hidden に切られず全高で出る。 */
  .sidebar{position:fixed;top:0;left:0;bottom:0;z-index:60;width:min(84vw,300px);
    display:block;overflow-y:auto;transform:translateX(-100%);transition:transform .22s ease;
    background:var(--panel2);border-right:1px solid var(--line)}
  .sidebar.open{transform:translateX(0);box-shadow:2px 0 18px rgba(0,0,0,.28)}
  /* 引き出し中の背景幕(触ると閉じる)。ドロワーより下・本文より上に敷く。 */
  .nav-backdrop{display:block;position:fixed;inset:0;z-index:55;background:rgba(0,0,0,.38)}
  /* 動きを減らす設定ではスライドアニメを切る(表示/非表示は保つ) */
  .tasksplit{flex-direction:column}
  .detail{width:100%}
  /* 本文の左右余白を詰めて表示領域を稼ぐ */
  .main{padding:12px 12px}
  /* 入力欄を主役に: 添付は📎(40px固定)・送信は詰める・すき間も詰めて textarea に幅を回す。 */
  .composer{gap:6px}
  .composer .btn{padding:8px 12px}
}
@media (max-width:900px) and (prefers-reduced-motion:reduce){.sidebar{transition:none}}

