/* =========================================================================
   Project Studio — 共通スタイル（P002 の正本）
   出自: input/deliverables/screen-design/mockups/style.css（P001）の写しから出発し、
   P002 のデザイン調整はこの file に直接入れる（P001 側は凍結）。PS 固有の部品は ps-app.css。
   ★フォントだけ Google Fonts を参照する（決定36）。ブランド資産は /brand/ の SVG。
   ========================================================================= */

/* ★決定36: Noto Sans JP（Google Fonts CDN）。届かない環境は body の後続フォントに落ちる */
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap");

/* ---- 1. デザイントークン ------------------------------------------------ */
:root {
  /* --- 配色：正本は Base/Images/KSP-002.png（運用100）。認証系の地は KSP-001.png --- */
  /* ★KSP のパレットは単一アクセント #4786b5 に統一されている。
     左メニューのマーカー／選択矢印／主ボタン／入力欄の下線／フッターの帯／
     ログインカードの枠が、実測ですべて同一の #4786b5 だった。 */
  --c-accent:         #4786b5;   /* KSP-002 主ボタン・下線・フッター帯 */

  --c-header-bg:      #ffffff;   /* KSP-002 アプリバーの地 */
  --c-header-fg:      #303030;   /* KSP-002 アプリバーの文字（実測 610px） */
  --c-header-border:  #e0e0e0;   /* KSP-002 パネルの枠 */

  --c-footer-bg:      #4786b5;   /* ★KSP-002 フッターの帯 */
  --c-footer-fg:      #ffffff;

  --c-pane-bg:        #ffffff;   /* KSP-002 コンテンツの地 */
  --c-left-bg:        #ffffff;   /* KSP-002 左メニューの地 */
  --c-section-bg:     #dce6f2;   /* ★導出（201-ItemList の帯は #eeeeee だが、KSP のアクセントと調和させた） */
  --c-section-fg:     #333333;   /* 201-ItemList 区画見出しの文字（実測 88px） */

  --c-text:           #303030;   /* KSP-002 本文 */
  --c-text-weak:      #767676;
  --c-link:           #4786b5;   /* ＝アクセント */
  --c-arrow:          #4786b5;   /* KSP-002 左メニューの選択矢印 */
  --c-leader:         #d6d6d6;   /* KSP-002 セクション見出しの縦棒（実測 22px） */

  --c-border:         #e5e5e5;   /* KSP-002 セクションの罫線 */
  --c-border-strong:  #e0e0e0;   /* KSP-002 パネルの枠 */
  --c-label-bg:       #f8f8f8;   /* KSP-002 表ヘッダーの地 */

  --c-btn-bg:         #4786b5;   /* ★主要操作は青地＋白文字（KSP-002 照会／Excel 出力） */
  --c-btn-fg:         #ffffff;
  --c-btn2-bg:        #ffffff;   /* 副次的な操作は白地＋アクセントの枠と文字（本書の導出） */
  --c-btn2-fg:        #4786b5;
  --c-btn-disabled:   #e8e8e8;   /* KSP-002 無効ボタン */
  --c-btn-disabled-fg:#9c9c9c;   /* ★導出（KSP-002 の無効ボタンは文字と地がほぼ同色で読めないため） */

  --c-row-selected:   #e4f1fd;   /* KSP-001 の地。選択行に用いる */
  --c-marker:         #4786b5;   /* KSP-002 左メニューの四角マーカー */
  /* ★KSP-001 認証画面の地。本モックアップ（課題画面）では使わないが、
     Phase 5 の認証系が使うため配色体系として定義しておく（意図的な未使用） */
  --c-auth-bg:        #e4f1fd;
  --c-row-hover:      #f4f9fe;   /* ★導出（選択行 #e4f1fd より淡い階調） */
  --c-row-zebra:      #fafcfe;   /* ★導出（交互色。同上のさらに淡い階調） */

  /* --- 入力欄の3状態（`B-4` の決着。§4.8） --- */
  --c-input-bg:       #fbfdff;   /* 編集可能: ごく淡い地。アクセントの最も薄い階調 */
  --c-input-focus-bg: #f2f8fd;   /* 編集可能・フォーカス時 */
  --c-error:          #c0392b;   /* エラー */
  --c-error-bg:       #fdf6f5;

  /* ★Status バッジ3色は 201-ItemList の実測値。★アクセントと同じ色を使わない（新B-3）
     アクセント #4786b5 は「操作できる・選ばれている」を表す。
     バッジは「状態」を表すため、別の色域を使う。 */
  --c-active:         #00a7ea;   /* 201-ItemList Active バッジ（実測 847px/領域） */
  --c-resolved:       #ebb800;   /* 201-ItemList Resolved バッジ（実測 832px/領域） */
  --c-closed:         #aaaaaa;   /* 201-ItemList Closed バッジ（実測 796px/領域） */
  --c-badge-fg:       #ffffff;

  /* 寸法 */
  --h-header:         40px;   /* ★機能メニューを載せるため 32px から拡大（2026-08-21） */
  --h-footer:         26px;

  /* ★KSP 風のパネル構成（2026-08-21 ユーザー指示）: 画面の地 #e4f1fe（KSP project-base.min.css の
     body 実測）の上に白いパネルを浮かべる。左右のガター 32px・パネル間の隙間 4px */
  --c-page-bg:        #e4f1fe;
  --w-gutter:         32px;
  --w-panelgap:       4px;
  /* ★決定109: ペイン境界は可動。既定値をここに置き、つまみが書き換える */
  --w-left:           230px;   /* 可動域 180〜400 */
  --w-right:          500px;   /* 可動域 420〜画面幅の 50%（決定89。上限は各型の data-ps-max） */
  --w-center-min:     560px;   /* ★中央の下限。件名が全角約10文字読める線 */
  --w-min:            1180px;  /* 180 + 560 + 420 + 罫線2 = 1162 から導いた */
  --fs-base:          13px;
  --fs-small:         12px;
  --fs-header:        14px;

  /* ボタンの角丸（2026-08-25 ユーザー指示。押せるものだけに、ごく浅く） */
  --r-btn:            3px;

  /* --- 一覧の表示密度（目標値。1920x760 で「なるべく多く」） ---
     ★下限ぎりぎりを狙わない。読める下限より上に置く（§4.2） */
  --h-filterbar:      44px;   /* 中央フィルター部（1段。★一度36px にしたが戻した） */
  --h-listhead:       30px;   /* 一覧の列見出し帯（★本体の行の高さ 30px に合わせた。2026-08-21） */
  /* ★1件の高さ30px・行間21px は .ps-row に直接書いてある（決定102 で1案に確定） */
}

/* ---- 2. リセットと土台 -------------------------------------------------- */
* { box-sizing: border-box; }

html, body {
  height: 100%;
  margin: 0;
  padding: 0;
  /* ★決定68-a/b: ページ全体は縦にも横にもスクロールしない */
  overflow: hidden;
}

body {
  /* ★決定36: Google Fonts の Noto Sans JP（全デバイスで同じ見た目）。
     届かない環境では OS 標準の日本語フォントに落ちる */
  font-family: "Noto Sans JP", "Meiryo", "メイリオ", "Hiragino Kaku Gothic ProN",
               "Yu Gothic UI", "Yu Gothic", "MS PGothic", sans-serif;
  font-size: var(--fs-base);
  color: var(--c-text);
  background: var(--c-pane-bg);
  min-width: var(--w-min);
}

/* ---- 3. 画面の骨格（3ペイン） ------------------------------------------ */
.ps-app {
  display: flex;
  flex-direction: column;
  height: 100vh;
  /* ★パネル構成: 地を出し、ヘッダー・見出し・一覧・詳細を白いパネルとして浮かべる */
  background: var(--c-page-bg);
}

.ps-main {
  flex: 1 1 auto;
  display: flex;
  min-height: 0;            /* ★これが無いと子のスクロールが効かない */
  margin: 0 var(--w-gutter) var(--w-panelgap) var(--w-gutter);
}
/* ★LT-1 は画面見出しを持たず .ps-main がヘッダーに直接続くので、
   他の型（.ps-pagehead の上余白）と同じ幅の隙間をここで作る */
.ps-header + .ps-main { margin-top: var(--w-panelgap); }

/* ---- 4. 固定ヘッダー（LY-01） ------------------------------------------ */
.ps-header {
  flex: 0 0 var(--h-header);
  height: var(--h-header);
  background: var(--c-header-bg);
  color: var(--c-header-fg);
  /* ★KSP の #idHeader（border-bottom: 2px solid）に合わせ、下端にプライマリの
     ラインを引いてコンテンツとの境界を明確にする（2026-08-25 ユーザー指示） */
  border-bottom: 2px solid var(--c-accent);
  display: flex;
  align-items: center;
  padding: 0 var(--w-gutter);   /* ★ロゴの開始・右端をパネルのガターに揃える */
  gap: 10px;
}
.ps-header__logo { display: flex; align-items: center; }
.ps-header__logo svg { display: block; height: 20px; width: auto; }
.ps-header__product {
  font-size: var(--fs-header);
  letter-spacing: .06em;
  font-weight: normal;
  margin: 0;
}
.ps-header__spacer { flex: 1 1 auto; }
.ps-header__menu { display: flex; gap: 2px; }
/* ★決定135・決定162: ヘッダーのメニューは 群0（業務系・全員）／群1（管理系・出し分け）／
   群2（個人系・全員）の3群。出し分けの単位が異なるので、見た目でも区切りを入れて
   別の群だと分かるようにする。 */
.ps-header__menu--work {
  margin-right: 8px;
  padding-right: 10px;
  border-right: 1px solid var(--c-border);
}
.ps-header__menu--personal {
  margin-left: 8px;
  padding-left: 10px;
  border-left: 1px solid var(--c-border);
}
.ps-header__menu button {
  background: transparent;
  border: 1px solid transparent;
  color: var(--c-header-fg);
  font-size: var(--fs-small);
  font-family: inherit;
  padding: 3px 9px;
  border-radius: var(--r-btn);
  cursor: pointer;
}
.ps-header__menu button:hover { border-color: var(--c-accent); color: var(--c-accent); }
.ps-header__user { font-size: var(--fs-small); }

/* ---- 5. 固定フッター（LY-06） ------------------------------------------ */
.ps-footer {
  flex: 0 0 var(--h-footer);
  height: var(--h-footer);
  background: var(--c-footer-bg);
  color: var(--c-footer-fg);
  border-top: 1px solid var(--c-border);
  display: flex;
  align-items: center;
  /* ★決定79: 左は空。右に powered by Leapcom ＋ version */
  justify-content: flex-end;
  padding: 0 var(--w-gutter);   /* ★version の右端をパネルのガターに揃える */
  font-size: var(--fs-small);
  gap: 32px;
}

/* ---- 6. 左ペイン（連動フィルター3段） ---------------------------------- */
.ps-left {
  flex: 0 0 var(--w-left);
  width: var(--w-left);
  background: var(--c-left-bg);
  overflow-y: auto;          /* ★画面内スクロール（決定68-c） */
  overflow-x: hidden;
  padding-bottom: 12px;
}
.ps-filter__head {
  background: var(--c-section-bg);
  color: var(--c-section-fg);
  font-size: var(--fs-base);
  padding: 5px 10px;
  margin: 10px 6px 6px 6px;
}
.ps-filter__list { list-style: none; margin: 0; padding: 0 10px; }
.ps-filter__item { margin: 0; }
.ps-filter__link {
  display: flex;
  align-items: baseline;
  gap: 4px;
  width: 100%;
  background: none;
  border: none;
  font: inherit;
  color: var(--c-text);
  text-align: left;
  padding: 5px 2px;
  cursor: pointer;
}
.ps-filter__link:hover { color: var(--c-link); }
.ps-filter__name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ps-filter__leader {
  flex: 1 1 auto;
  border-bottom: 1px dotted var(--c-leader);
  transform: translateY(-3px);
  min-width: 8px;
  visibility: hidden;
}
/* ★点線と ▶ は「選択中（＝一覧に出ている）」の印。未選択の行には出さない（2026-08-22 ユーザー指示。
   P001 の「選べる行の印」から意味を変えた。幅は visibility で確保したまま） */
.ps-filter__mark { color: var(--c-arrow); font-size: 11px; visibility: hidden; }
.ps-filter__link.is-selected .ps-filter__leader,
.ps-filter__link.is-selected .ps-filter__mark { visibility: visible; }
.ps-filter__link.is-selected { color: var(--c-link); }
.ps-filter__more {
  display: block;
  margin: 2px auto 0 auto;
  background: none; border: none; font: inherit;
  color: var(--c-text-weak); font-size: var(--fs-small);
  cursor: pointer; padding: 2px 8px;
}

/* ---- 7. 中央ペイン ------------------------------------------------------ */
.ps-center {
  flex: 1 1 auto;
  /* ★決定109: 中央ペインの下限。件名が全角約10文字読める線（§4.6） */
  min-width: var(--w-center-min);
  display: flex;
  flex-direction: column;
  background: var(--c-pane-bg);   /* ★パネル構成 */
}
/* ★縦の予算を稼ぐため1段にまとめた。軸ラベルは消していない */
.ps-center__bar {
  flex: 0 0 var(--h-filterbar);
  height: var(--h-filterbar);
  display: flex; align-items: center; gap: 18px;
  padding: 10px 10px;
}
.ps-search { display: flex; gap: 4px; flex: 0 0 auto; }
/* ★KSP-002 の入力欄は「枠を持たず下辺だけが青い線」である。実測で下線は #4786b5 */
.ps-search input[type="search"] {
  width: 240px; font: inherit; font-size: var(--fs-small);
  line-height: 18px; padding: 1px 4px;
  border: none; border-bottom: 1px solid var(--c-accent);
  background: transparent; outline: none;
}
.ps-search input[type="search"]:focus { border-bottom-width: 2px; padding-bottom: 2px; }
.ps-search button {
  width: 26px; height: 22px; border: none; padding: 0; border-radius: var(--r-btn);
  background: var(--c-btn-bg); color: var(--c-btn-fg); cursor: pointer;
}

.ps-toggles { display: flex; align-items: center; gap: 16px; flex: 1 1 auto; }
.ps-toggle__group { display: flex; align-items: center; gap: 6px; }
.ps-toggle__axis {           /* ★軸のラベル（申し送り1）。1段化のため横に置いた */
  font-size: var(--fs-small);
  color: var(--c-text-weak);
  white-space: nowrap;
}
.ps-toggle__set { display: flex; gap: 4px; }
/* ★決定95: トグル（状態）とアクションボタンを見分けられるようにした。
   トグルは塗らない（塗りはアクションボタンの印）。選択中は枠と文字がアクセント色＋太字、未選択は枠がグレー。 */
.ps-toggle {
  font: inherit; font-size: var(--fs-small);
  line-height: 18px; padding: 2px 12px; min-width: 42px;
  background: #fff; color: var(--c-text);
  border: 2px solid var(--c-border-strong);
  border-radius: var(--r-btn);
  cursor: pointer;
}
.ps-toggle[aria-pressed="true"] {
  color: var(--c-accent);
  background: #fff;
  border-color: var(--c-accent);
  font-weight: 700;
}
/* ★KSP-002 の「Excel 出力」ボタンは実測 #4786b5（緑ではない）。主ボタンと同じ扱いにした */
.ps-excel {
  margin-left: auto; flex: 0 0 auto;
  background: var(--c-btn-bg); color: var(--c-btn-fg);
  border: none; font: inherit; font-size: var(--fs-small);
  line-height: 18px; padding: 3px 16px; border-radius: var(--r-btn); cursor: pointer;
}

/* 一覧の列見出し（★軸ラベルを置くために追加した帯） */
.ps-list__head {
  flex: 0 0 var(--h-listhead);
  height: var(--h-listhead);
  display: grid;
  align-items: center;
  gap: 0 10px;
  padding: 3px 14px;
  border-bottom: 1px solid var(--c-border-strong);
  font-size: 11px;
  line-height: 15px;
  color: var(--c-text-weak);
}
.ps-list__wrap {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;          /* ★画面内スクロール（決定68-c） */
  padding: 0 10px;
}
.ps-list { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--c-border); }
/* =====================================================================
   一覧（決定102 — 1件1行に確定。案B・案Cは削除した）
   ===================================================================== */
.ps-row {
  display: grid;
  align-items: center;
  gap: 0 10px;
  /* ★プロジェクト列は「名前の先頭5文字程度」。全体は title でホバー表示。
     ★この幅は暫定であり、実物を見て調整してよい。
     ★決定106: 1プロジェクトだけに絞られている場合はこの列を隠す */
  /* ★決定152: 社内限定かどうかを課題1件ごとに示す。★印は社内限定のときだけ出すため、
     専用の列を持たない（件名の直前にインラインで置く）。列構成は 4-0-1 のままである */
  grid-template-columns: 9px 84px 76px 1fr 110px 74px;
  grid-template-areas: "m p n t a s";
  height: 30px;
  line-height: 21px;
  font-size: 13px;            /* ★一覧の文字。可読性の下限12px より上に置く */
  border-bottom: 1px solid var(--c-border);
  padding: 0 4px;
  cursor: pointer;
  overflow: hidden;
}
.ps-row:hover { background: var(--c-row-hover); }
/* 交互色。横に長い行を目で追いやすくする */
.ps-row:nth-child(even) { background: var(--c-row-zebra); }
.ps-row:nth-child(even):hover { background: var(--c-row-hover); }
.ps-row.is-selected,
.ps-row.is-selected:nth-child(even) { background: var(--c-row-selected); }

.ps-row__marker { grid-area: m; width: 9px; height: 9px; background: var(--c-marker); }
.ps-row__project,
.ps-row__no,
.ps-row__title,
.ps-row__assignee { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ps-row__project  { grid-area: p; }
.ps-row__no       { grid-area: n; color: var(--c-text-weak); }
.ps-row__title    { grid-area: t; }
.ps-row__assignee { grid-area: a; }
.ps-badge         { grid-area: s; }

/* ★社内限定の印（決定152）。社内限定のときだけ、件名の直前に出す。
   ★色域を持たない。地は表ヘッダーと同じ無彩色、枠線で本文と切り分ける。
   Status バッジの3色は使わない（状態の色域を侵さない）。 */
.ps-scope {
  display: inline-block;
  margin-right: 6px;
  padding: 0 4px;
  border: 1px solid var(--c-border-strong);
  background: var(--c-label-bg);
  color: var(--c-text);
  font-size: 11px;
  line-height: 16px;
  vertical-align: 1px;
}

/* 列見出し。本文の行と同じ列構成を使う */
.ps-list__head {
  grid-template-columns: 9px 84px 76px 1fr 110px 74px;
  grid-template-areas: "m p n t a s";
}
.ps-col--m { grid-area: m; }
.ps-col--p { grid-area: p; }
.ps-col--n { grid-area: n; }
.ps-col--t { grid-area: t; }
.ps-col--a { grid-area: a; }
.ps-col--s { grid-area: s; }

/* Status バッジ（3色） */
.ps-badge {
  text-align: center;
  color: var(--c-badge-fg);
  font-size: 11px;
  line-height: 18px;
  height: 18px;
}
.ps-badge--active   { background: var(--c-active); }
.ps-badge--resolved { background: var(--c-resolved); }
.ps-badge--closed   { background: var(--c-closed); }
.ps-col--status { text-align: center; }



/* ---- 7.5 ★ペイン境界のつまみ（決定109） ----------------------------------
   ★モックアップ専用の仕掛けではなく設計そのものである。
   ドラッグ中もページ全体はスクロールしない（決定68） */
.ps-splitter {
  flex: 0 0 var(--w-panelgap);
  width: var(--w-panelgap);
  /* ★パネル構成: つまみはパネル間の隙間そのもの。地の色のままにする */
  background: transparent;
  cursor: col-resize;
  position: relative;
  touch-action: none;
}
.ps-splitter:hover,
.ps-splitter.is-dragging { background: var(--c-accent); }
/* つまめることが分かるよう、中央に握り目を出す */
.ps-splitter::after {
  content: "";
  position: absolute;
  top: 50%; left: 1px;
  width: 3px; height: 28px;
  margin-top: -14px;
  background: repeating-linear-gradient(
    to bottom, var(--c-text-weak) 0 2px, transparent 2px 4px);
  opacity: .55;
}
.ps-splitter:hover::after,
.ps-splitter.is-dragging::after { background: var(--c-badge-fg); opacity: .9; }
/* ドラッグ中は文字選択を止める */
body.is-resizing { user-select: none; cursor: col-resize; }

/* ---- 8. 右ペイン -------------------------------------------------------- */
.ps-right {
  flex: 0 0 var(--w-right);
  width: var(--w-right);
  display: flex;
  flex-direction: column;
  min-height: 0;
  background: var(--c-pane-bg);   /* ★パネル構成 */
}
.ps-right__actions {         /* ★スクロールしない */
  flex: 0 0 auto;
  display: flex; justify-content: flex-end; gap: 6px;
  padding: 10px 10px 8px 10px;
}
.ps-action {
  font: inherit; font-size: var(--fs-small);
  min-width: 74px; padding: 5px 10px;
  background: var(--c-btn2-bg); color: var(--c-btn2-fg);
  border: 1px solid var(--c-accent); border-radius: var(--r-btn); cursor: pointer;
}
.ps-action--primary { background: var(--c-btn-bg); color: var(--c-btn-fg); }
.ps-action:disabled {
  color: var(--c-btn-disabled-fg); background: var(--c-btn-disabled);
  border-color: var(--c-btn-disabled); cursor: not-allowed;
}

.ps-attrs { flex: 0 0 auto; padding: 0 10px; }   /* ★スクロールしない */
.ps-attrs table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.ps-attrs th, .ps-attrs td {
  border: 1px solid var(--c-border-strong);
  padding: 5px 8px;
  font-weight: normal;
  font-size: var(--fs-base);
  vertical-align: top;
}
.ps-attrs th { background: var(--c-label-bg); text-align: right; width: 108px; white-space: nowrap; }
.ps-attrs td.is-status { background: var(--c-active); color: var(--c-badge-fg); }

/* ★画面内スクロール。
   ★4-0-3 で .ps-pane__body を同じ規則に加えた（LT-2 / LT-3 のペインの本文）。
   「右ペインの中だけが縦にスクロールする」という同一の領域であり、
   スクロールする領域の種類を増やしていない（layout-standard.md §9 の3種のまま）。 */
.ps-timeline,
.ps-pane__body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  padding: 0 10px;
  margin-top: 10px;
}
.ps-post { border-top: 1px solid var(--c-border); padding: 8px 2px; }
.ps-post__meta { display: flex; justify-content: space-between; color: var(--c-text-weak); font-size: var(--fs-small); }
.ps-post__body { margin: 8px 0; white-space: pre-line; }
.ps-post__change { text-align: right; color: var(--c-text-weak); font-size: var(--fs-small); border-top: 1px solid var(--c-border); padding-top: 5px; }

.ps-right__foot { flex: 0 0 auto; padding: 8px 10px 10px 10px; }  /* ★スクロールしない */
.ps-right__foot table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.ps-right__foot th, .ps-right__foot td {
  border: 1px solid var(--c-border-strong);
  padding: 5px 8px; font-weight: normal; font-size: var(--fs-base);
}
.ps-right__foot th { background: var(--c-label-bg); text-align: right; width: 108px; white-space: nowrap; }

/* ---- 9. 補助 ------------------------------------------------------------ */
.ps-visually-hidden {
  position: absolute; width: 1px; height: 1px;
  margin: -1px; padding: 0; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}


/* =====================================================================
   入力欄と共通部品（`B-4` の決着。正本: layout-standard.md §4.8）
   ★3状態を「色だけ」で分けない。地の有無・線の種類（実線/無し/点線）で分ける
   ===================================================================== */
.ps-field { display: flex; align-items: baseline; gap: 8px; margin-bottom: 8px; }
.ps-field__label {
  flex: 0 0 108px; text-align: right;
  font-size: var(--fs-small); color: var(--c-text);
}
.ps-field__label .ps-req { color: var(--c-error); font-weight: bold; margin-left: 2px; }
.ps-field__body { flex: 1 1 auto; min-width: 0; }
.ps-field__error {
  display: block; margin-top: 2px;
  font-size: 11px; color: var(--c-error);
}

/* ---- 編集可能: 淡い地 ＋ 下辺の実線 ------------------------------------- */
.ps-input {
  width: 100%; font: inherit; font-size: var(--fs-base);
  color: var(--c-text);
  background: var(--c-input-bg);
  border: none;
  border-bottom: 1px solid var(--c-accent);
  padding: 3px 6px;
  outline: none;
}
.ps-input:focus {
  background: var(--c-input-focus-bg);
  border-bottom-width: 2px;
  padding-bottom: 2px;
}
select.ps-input { padding: 2px 4px; }
textarea.ps-input { resize: vertical; min-height: 46px; }

/* ---- 読み取り専用: 地なし・線なし。文字だけ -----------------------------
   ★Phase 5 は .ps-readonly だけを使う。.ps-input[readonly] は使わない（決定229）。
   ★.ps-input[readonly] の側は 4-0 からそのまま引き継いでいる。撤去は総仕上げで行う。 */
.ps-input[readonly],
.ps-readonly {
  background: transparent;
  border-bottom: none;
  padding: 3px 6px;
  cursor: default;
}

/* ---- 無効: 灰の地 ＋ 下辺の点線（★線の種類が違う） ---------------------- */
.ps-input:disabled,
.ps-input[disabled] {
  background: var(--c-btn-disabled);
  border-bottom: 1px dotted var(--c-border-strong);
  color: var(--c-btn-disabled-fg);
  cursor: not-allowed;
}

/* ---- エラー ------------------------------------------------------------- */
.ps-field.is-error .ps-input {
  background: var(--c-error-bg);
  border-bottom: 2px solid var(--c-error);
  padding-bottom: 2px;
}

/* ---- 密集した配置（2列組。KSP-002 の詳細情報パネルと同じ形） ------------ */
.ps-fieldgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 20px; }

/* ---- カタログのページ枠 ------------------------------------------------- */
.ps-catalog { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 12px 16px; }
.ps-catalog h2 {
  font-size: var(--fs-base); margin: 18px 0 8px 0; padding: 4px 10px;
  background: var(--c-section-bg); color: var(--c-section-fg); font-weight: normal;
}
.ps-catalog h2:first-child { margin-top: 0; }
.ps-catalog__note { font-size: var(--fs-small); color: var(--c-text-weak); margin: 0 0 8px 0; }
.ps-catalog__box { border: 1px solid var(--c-border); padding: 10px 12px; margin-bottom: 6px; }
.ps-catalog__two { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.ps-catalog__cap { font-size: 11px; color: var(--c-text-weak); margin: 0 0 6px 0; }


/* =====================================================================
   4-0-3 レイアウト型のカタログで追加した部品
   正本: deliverables/screens/layout-types.md
   ★:root のデザイントークンは書き換えていない。色はすべて既存の CSS 変数を使う
   ★寸法・フォントも layout-standard.md §4・§5 の値をそのまま使う
   ===================================================================== */

/* ---- 画面見出し（.ps-pagehead。★LT-2 / LT-3 が使う。LT-1 は持たない） --- */
.ps-pagehead {
  flex: 0 0 auto;
  display: flex; align-items: baseline; gap: 14px;
  padding: 7px 14px 6px 14px;
  /* ★パネル構成: 見出しも1枚のパネル */
  margin: var(--w-panelgap) var(--w-gutter);
  background: var(--c-pane-bg);
}
.ps-pagehead__title { margin: 0; font-size: 15px; font-weight: normal; color: var(--c-text); }
.ps-pagehead__desc  { font-size: var(--fs-small); color: var(--c-text-weak); }

/* ---- ★決定152: プロジェクトコンテキストバーは廃止した ------------
   帯そのものは無くなったが、役割は消していない。
   「社内限定かどうか」は課題1件ごとに示す。★社内限定のときだけ、
   一覧では件名の直前に、右ペインでは件名の値の直前に、印（.ps-scope）を出す。
   ★社外可視のときは何も出さない。★色を1つも使わず、文字がそのまま値である。 */

/* ---- ペインの本文 ------------------------------------------------------
   ★スクロールの指定は 4-0-1 の .ps-timeline と同じ規則にまとめてある（§8）。
   ここでは余白だけを足す。★決定68 の min-height: 0 もそちらで効いている */
.ps-pane__body { margin-top: 4px; padding-bottom: 14px; }

/* ---- 下端の操作行（KSP-002 の「Excel 出力」「ラベル発行」と同じ位置） -- */
.ps-actionbar {
  flex: 0 0 auto;
  display: flex; justify-content: flex-end; align-items: center; gap: 6px;
  flex-wrap: wrap;              /* ★右ペインを狭めても押せなくならない */
  padding: 7px 10px;
  border-top: 1px solid var(--c-border);
}

/* ---- 区画見出し（KSP-002 の「検索フィルター」「結果リスト」の形） ------ */
.ps-section {
  display: flex; align-items: center; gap: 8px;
  margin: 14px 0 8px 0;
  font-size: var(--fs-base); font-weight: normal; color: var(--c-text);
}
.ps-section:first-child { margin-top: 4px; }
/* ★中央ペインの区画見出し（検索フィルター／結果リスト。KSP-002 と同じ構成）:
   バーやリストの左右 padding 10px に合わせる */
.ps-center > .ps-section { margin: 8px 10px 4px 10px; }
.ps-center > .ps-section:first-child { margin-top: 8px; }
.ps-section::before { content: ""; flex: 0 0 3px; width: 3px; height: 13px; background: var(--c-accent); }
.ps-section::after  { content: ""; flex: 1 1 auto; border-bottom: 1px solid var(--c-border); }

/* ---- マスタ一覧の表（LT-2 / LT-3 の一覧） ------------------------------ */
.ps-table { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: var(--fs-base); }
.ps-table th, .ps-table td {
  border-bottom: 1px solid var(--c-border);
  padding: 0 8px; height: 30px; line-height: 21px;
  text-align: left; font-weight: normal; vertical-align: middle;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ps-table thead th {
  position: sticky; top: 0; z-index: 1;
  height: var(--h-listhead); line-height: 15px;
  background: var(--c-label-bg); color: var(--c-text-weak);
  font-size: 11px;
  border-bottom: 1px solid var(--c-border-strong);
}
.ps-table tbody tr { cursor: pointer; }
.ps-table tbody tr:nth-child(even) { background: var(--c-row-zebra); }
.ps-table tbody tr:hover,
.ps-table tbody tr:nth-child(even):hover { background: var(--c-row-hover); }
.ps-table tbody tr.is-selected,
.ps-table tbody tr.is-selected:nth-child(even) { background: var(--c-row-selected); }
.ps-table .is-num { text-align: right; }
.ps-table__marker { display: inline-block; width: 9px; height: 9px; background: var(--c-marker); }
/* 右ペインの中に置く入れ子の表 */
.ps-table--sub th, .ps-table--sub td { height: 28px; font-size: var(--fs-small); }

/* ---- 列幅（table-layout: fixed の colgroup で使う） -------------------- */
.ps-c--mk  { width: 22px; }
.ps-c--xs  { width: 62px; }
.ps-c--sm  { width: 88px; }
.ps-c--md  { width: 132px; }
.ps-c--lg  { width: 190px; }
.ps-c--num { width: 96px; }
.ps-c--act { width: 150px; }

/* ---- 件数の表示（KSP-002 の「件数： 0」） ------------------------------ */
.ps-count { font-size: var(--fs-small); color: var(--c-text-weak); white-space: nowrap; }

/* ---- 注記（軸の定義など） --------------------------------------------- */
.ps-note { margin: 4px 0 0 0; font-size: 11px; color: var(--c-text-weak); }

/* ---- 表の行の中に置く小さい操作ボタン ---------------------------------- */
.ps-action--sm { min-width: 0; padding: 1px 8px; font-size: 11px; }

/* ---- ヘッダーメニューの現在地（どの管理画面にいるかを示す） ------------ */
.ps-header__menu button[aria-current="page"] {
  color: var(--c-accent);
  border-bottom-color: var(--c-accent);
}


/* =====================================================================
   4-0-3 で追加した部品
   正本: deliverables/screens/layout-types.md
   ★:root のデザイントークンは1つも増やしていない。色・寸法・フォントは
     layout-standard.md §3・§4・§5 の値をそのまま使う。
   ★スクロールする領域を増やしていない。LT-2 の中央リストは .ps-list__wrap、
     右ペインの本文は .ps-pane__body（4-0-3 で定義済み）をそのまま使う。
   ===================================================================== */

/* ---- 単一ペイン（LT-3）の中で入力フォームを読める幅に収める -------------
   ★画面幅いっぱいに入力欄を伸ばさない。ラベルと値が離れすぎて対応が読めなくなる。
   幅だけの指定であり、配色にも寸法トークンにも触れない。 */
.ps-formcol { max-width: 780px; }

/* ---- LT-2 の右ペイン（選んだ1件の詳細・編集） --------------------------
   ★右ペインは 500px（可動域 420〜900）。ラベル列を少しだけ詰める。
   ★LT-1 の右ペイン（課題の内容）と同じ .ps-right を使う。骨格は共通で、
     中に入るものが「課題の内容」か「選んだ1件の詳細・編集」かだけが違う。 */
.ps-right .ps-field__label { flex: 0 0 92px; }

/* ---- 別の画面へ進むための区画（管理画面どうしをつなぐ） ----------------
   ★決定136: 進む先を並べる場所であり、入力欄を置かない。
   ★狭い右ペインでも読めるよう、説明は名前とボタンの下の行へ折り返す */
.ps-gotolist { list-style: none; margin: 0; padding: 0; }
.ps-gotolist li {
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
  padding: 6px 0; border-bottom: 1px solid var(--c-border);
}
.ps-gotolist .ps-gotolist__name { flex: 1 1 auto; font-size: var(--fs-base); }
.ps-gotolist .ps-gotolist__desc { flex: 1 1 100%; font-size: 11px; color: var(--c-text-weak); }


/* =====================================================================
   Phase 5 / 5-0-2 で追加した部品
   正本: deliverables/screen-design/format.md ／ common.md
   ★4-0 の37トークンは1つも変えていない。Phase 5 で足したのは
     --c-modal-veil（モーダルの覆い。決定232 ②）の1つだけである。
   ★色・寸法・フォントは screens/layout-standard.md §3・§4・§5 の値をそのまま使う。
   ===================================================================== */

/* ---- Phase 5 で足した配色トークン ---------------------------------------
   ★4-0 の37トークンは1つも変えていない。足したのは次の1つだけである。
   ★モーダルの背後を覆う色（決定232 ②）。覆いは「重なった別の面である」ことを
     示す最小の手段であり、機能上避けられない。
   ★影は落とさない（決定232 ③）。4-0 の意匠に影は1つも無い。 */
:root {
  --c-modal-veil: rgba(48, 48, 48, .38);   /* --c-text #303030 の半透明 */
}

/* ---- ブランド資産（運用226・227） --------------------------------------
   ★ロゴマークとワードマークは brand/ の SVG をそのまま置く。
   ★ワードマークはアウトライン化した資産であり、CSS の文字では描かない（運用225）。
   ★<img> で読み込むため、SVG の中の var(--c-header-fg) は親ページに届かず、
     SVG が自ら持つ既定値 #303030 で描かれる。--c-header-fg と同値である。 */
/* ★ヘッダーのログインユーザーは値の表示（.ps-readonly）だが、
   32px の帯の中では欄の余白が要らない。地も線も無いのは同じである。 */
.ps-header__user.ps-readonly { padding: 0; }

.ps-header__logo img      { display: block; height: 20px; width: auto; }
.ps-header__wordmark      { display: flex; align-items: center; }
.ps-header__wordmark img  { display: block; height: 13px; width: auto; }

/* ---- hidden を確実に効かせる --------------------------------------------
   ★.ps-header__menu などクラスで display を指定した要素は、
     そのままでは hidden 属性が効かない。出し分けは hidden で表すため徹底する。 */
[hidden] { display: none !important; }

/* ---- ★群1（管理系）を出さないときは、群0 の右の区切り線も出さない ------
   決定135: 外部組織ユーザー（G）には群1 が丸ごと出ない。
   ★区切りの縦罫線が2本並ばないようにする。 */
.ps-header__menu--work:has(+ nav[hidden]) {
  border-right: none;
  margin-right: 0;
  padding-right: 0;
}

/* ---- ★読み取り専用の値（format.md §7 ／ 決定229） -----------------------
   ★読み取り専用の値は <input readonly> で描かない。値を出すだけの要素で描く。
     ①入力欄の形だと「編集できそう」に見え、決定110 の3状態の区別が弱まる
     ②<input> は置換要素であり、値が空のときに印を描き足せない
   ★下の .ps-input[readonly] / .ps-readonly の規則は 4-0 から引き継いだものである。
     読み取り専用に使うのは .ps-readonly（非置換要素）だけとする。

   ★値が空のとき — 地も線も足さない（決定110 を変えない）。値の位置に
     ダッシュを1文字描くだけ。文字は CSS で描き、要素の textContent は空のままにする。
     ブラウザ操作テストは「id の要素が在る」＋「文字が空」で値なしを判定でき、
     ダッシュを値と読み違えない。 */
.ps-readonly.is-empty::after,
.ps-attrs td.is-empty::after,
.ps-table td.is-empty::after {
  content: "\2014";
  color: var(--c-text-weak);
}

/* ---- LT-4 中央カード型 --------------------------------------------------
   ①認証の姿は地が --c-auth-bg（5-7 で使う）。②システムの姿は通常の地。
   ★カードが縦に溢れないことを設計の条件とする（スクロール領域を持たない）。 */
.ps-lt4 {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  overflow: hidden;
}
.ps-lt4--auth { background: var(--c-auth-bg); }
.ps-card {
  width: 100%;
  max-width: 520px;
  background: var(--c-pane-bg);
  /* ★KSP-001 実測どおりカードの枠はアクセント。モーダルの箱は中立なグレーのまま */
  border: 1px solid var(--c-accent);
  padding: 22px 26px;
}
.ps-card--wide { max-width: 720px; }
.ps-card__title {
  margin: 0 0 10px 0;
  font-size: 17px; font-weight: normal; color: var(--c-text);
}
.ps-card__message { margin: 0; font-size: var(--fs-base); line-height: 1.7; }
.ps-card__ref {
  margin-top: 16px; padding-top: 10px;
  border-top: 1px solid var(--c-border);
  display: flex; align-items: baseline; gap: 10px;
}
.ps-card__ref .ps-card__reflabel { font-size: var(--fs-small); color: var(--c-text-weak); }
.ps-card__ref .ps-card__refvalue { font-size: var(--fs-base); letter-spacing: .08em; }
.ps-card__guide { margin: 14px 0 0 0; font-size: var(--fs-small); color: var(--c-text-weak); }

/* ---- モーダルの骨格（format.md §6.1） ----------------------------------
   ★LT-3 の①フォームをそのままモーダルの中に入れた形である。
   ★題と下端の確定行は固定。溢れる分は本文の中だけがスクロールする。
   ★背後の画面はスクロールしない（決定68）。URL を持たない（決定108）。 */
.ps-modal {
  position: fixed; inset: 0;
  background: var(--c-modal-veil);
  display: flex; align-items: center; justify-content: center;
  padding: 32px;
  z-index: 100;
}
.ps-modal[hidden] { display: none; }
/* ★影を落とさない（決定232 ③）。面は罫線だけで分ける。 */
.ps-modal__box {
  display: flex; flex-direction: column;
  width: 100%;
  max-height: calc(100vh - 64px);
  background: var(--c-pane-bg);
  border: 1px solid var(--c-border-strong);
}
.ps-modal--sm .ps-modal__box { max-width: 480px; }
.ps-modal--lg .ps-modal__box { max-width: 900px; }

.ps-modal__head {
  flex: 0 0 auto;
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px 8px 14px;
  border-bottom: 1px solid var(--c-border);
}
.ps-modal__title { flex: 1 1 auto; margin: 0; font-size: 15px; font-weight: normal; }
.ps-modal__close {
  flex: 0 0 auto;
  width: 24px; height: 24px; padding: 0;
  background: none; border: 1px solid transparent;
  color: var(--c-text-weak); font: inherit; font-size: 15px; line-height: 1;
  border-radius: var(--r-btn);
  cursor: pointer;
}
.ps-modal__close:hover { border-color: var(--c-accent); color: var(--c-accent); }

/* ★本文だけがスクロールする（format.md §6.1） */
.ps-modal__body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  padding: 14px;
  font-size: var(--fs-base);
  line-height: 1.7;
}
.ps-modal__target {
  display: block;
  margin-bottom: 8px;
  padding: 5px 8px;
  background: var(--c-label-bg);
  border: 1px solid var(--c-border-strong);
}
.ps-modal__foot {
  flex: 0 0 auto;
  display: flex; justify-content: flex-end; align-items: center; gap: 6px;
  padding: 8px 10px;
  border-top: 1px solid var(--c-border);
}

/* =====================================================================
   Phase 5 / 5-1 で追加した分（課題一覧 SC-ISU-01 の画面本体）
   正本: deliverables/screen-design/issue-list.md
   ★配色トークンは1つも増やしていない。共通部品も増やしていない。
     足したのは補助のクラスだけである。
   ★寸法は screens/layout-standard.md §4 の値から計算している
     （issue-list.md §5.1）。
   ===================================================================== */

/* ---- ①フィルターの帯（44px）の中で、余りをキーワード欄が吸収する --------
   ★中央ペインは 560px まで狭くなる。固定分の合計は 472px であり、
     残り（560 のとき 88px）をキーワード欄が取る。溢れさせない。 */
.ps-center__bar .ps-search { flex: 1 1 auto; min-width: 0; }
.ps-center__bar .ps-search input[type="search"] { width: auto; flex: 1 1 240px; min-width: 0; }
.ps-center__bar .ps-toggles { flex: 0 0 auto; gap: 16px; }

/* ---- ②一覧のバー（32px） -----------------------------------------------
   詳細な条件 ／ 保存した検索条件 ／ 保存 ／ 件数 ／ 並び ／ 課題を登録 */
.ps-listbar {
  flex: 0 0 32px;
  height: 32px;
  display: flex; align-items: center; gap: 8px;
  padding: 0 8px;
  border-top: 1px solid var(--c-border);
}
.ps-listbar__sep { flex: 0 0 8px; }
.ps-listbar select.ps-input { flex: 1 1 auto; min-width: 90px; max-width: 180px; }
.ps-listbar .ps-count { flex: 0 0 auto; margin-left: 8px; }
.ps-listbar .ps-toggle__axis { flex: 0 0 auto; }
.ps-listbar .ps-excel { margin-left: auto; }

/* ---- 「詳細な条件」の折りたたみ（開いたとき 112px） ----------------------
   ★軸7〜11（filter-design.md §1.3）を3行に収める。 */
.ps-cond {
  flex: 0 0 auto;
  padding: 8px;
  border-top: 1px solid var(--c-border);
  background: var(--c-row-zebra);
}
.ps-cond[hidden] { display: none; }
.ps-cond__row {
  display: flex; align-items: center; gap: 6px;
  height: 26px; margin-bottom: 8px;
  flex-wrap: nowrap; overflow: hidden;
}
.ps-cond__row:last-child { margin-bottom: 0; }
.ps-cond__axis {
  flex: 0 0 auto;
  font-size: var(--fs-small); color: var(--c-text-weak); white-space: nowrap;
}
.ps-cond__row .ps-input { flex: 0 1 150px; min-width: 80px; }
.ps-cond__gap { flex: 0 0 14px; }

/* ---- 左ペイン：同姓同名の候補にだけ添えるメールアドレス -----------------
   ★区別に使うのはメールアドレスであり、所属組織ではない（INV-5・決定139）。
   ★同姓同名でない候補には出さない。 */
.ps-filter__mail {
  display: block;
  margin: -3px 0 3px 2px;
  font-size: 11px; line-height: 14px;
  color: var(--c-text-weak);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* ---- 一覧：プロジェクト列を隠したとき（決定106） ------------------------
   ★隠した列の幅（84px）と列間（10px）は件名がすべて吸収する
     （layout-standard.md §4.4 規則4）。 */
.ps-center.is-nopro .ps-row,
.ps-center.is-nopro .ps-list__head {
  grid-template-columns: 9px 76px 1fr 110px 74px;
  grid-template-areas: "m n t a s";
}
.ps-center.is-nopro .ps-row__project { display: none; }

/* ---- 一覧：自分の順序のときだけドラッグできる（FN-REF-22） -------------- */
.ps-list.is-sortable .ps-row { cursor: grab; }

/* ---- 0件のとき／何も選ばれていないとき ---------------------------------- */
.ps-list__empty,
.ps-right__empty {
  padding: 18px 14px;
  font-size: var(--fs-base);
  color: var(--c-text-weak);
}
.ps-right__empty { flex: 1 1 auto; min-height: 0; }

/* ---- 右ペイン：状態のセルの色（Status バッジの3色。色域を侵さない） ----- */
.ps-attrs td.is-status--active   { background: var(--c-active);   color: var(--c-badge-fg); }
.ps-attrs td.is-status--resolved { background: var(--c-resolved); color: var(--c-badge-fg); }
.ps-attrs td.is-status--closed   { background: var(--c-closed);   color: var(--c-badge-fg); }

/* ---- 右ペイン：時系列の3種（詳細／コメント／変更だけの記録） ------------
   ★詳細（Description）は課題の属性であり、コメントではない（決定37）。
     見え方だけを時系列の先頭に置く。 */
.ps-post--desc { border-top: none; }
.ps-post__label {
  display: inline-block;
  margin-bottom: 6px;
  padding: 0 6px;
  border: 1px solid var(--c-border-strong);
  background: var(--c-label-bg);
  font-size: 11px; line-height: 16px;
}
/* ★添付は親の種類（課題本体／コメント）で見せ方を分けない */
.ps-post__files { margin: 6px 0 0 0; padding: 0; list-style: none; }
.ps-post__files li { font-size: var(--fs-small); line-height: 20px; }
.ps-post__files a { color: var(--c-link); }
.ps-post--change .ps-post__body { display: none; }

/* ---- モックアップの状態切り替え（設計そのものではない） -----------------
   ★接頭辞 demo- の id を持つ。画面の一部ではない。 */
.ps-demo__switch {
  position: fixed; left: 8px; bottom: 34px; z-index: 50;
  display: flex; flex-direction: column; gap: 3px;
  padding: 6px 8px;
  background: var(--c-pane-bg);
  border: 1px dashed var(--c-border-strong);
}
.ps-demo__switch .ps-demo__cap { margin: 0 0 2px 0; }

/* ---- モックアップの説明用（設計そのものではない） ----------------------
   ★画面の一部ではない。5-0-2 の実物を並べて見るための枠だけに使う。 */
.ps-demo { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 12px 16px; }
.ps-demo h2 {
  font-size: var(--fs-base); margin: 18px 0 8px 0; padding: 4px 10px;
  background: var(--c-section-bg); color: var(--c-section-fg); font-weight: normal;
}
.ps-demo h2:first-child { margin-top: 0; }
.ps-demo__note { font-size: var(--fs-small); color: var(--c-text-weak); margin: 0 0 8px 0; }
.ps-demo__box { border: 1px solid var(--c-border); padding: 10px 12px; margin-bottom: 10px; }
.ps-demo__cap { font-size: 11px; color: var(--c-text-weak); margin: 0 0 6px 0; }
.ps-demo__frame { border: 1px dashed var(--c-border-strong); }
