/*
 * エラー一覧（`/errors`。D-160 / 指示書AW 段階5-3）。
 * ★見た目は既存画面から借りる★: ツールバー・カードは `DetailLogScreen.module.css`、
 *   固定幅の表は `CleanLogTable.module.css`、状態の色分け・備考は `AlertsScreen.module.css`。
 * ★`font-family` を独自に宣言しないこと★ — 宣言すると和文フォントが落ちて漢字が中華字形になる（CLAUDE.md §0-3）。
 *   ボタン・select・textarea の `font-family: inherit` だけは書く（globals.css のスタックを継がせるため。既存画面と同じ）。
 * ★色は app/globals.css の CSS 変数だけを使う★（新しい色を作らない）。
 */
.page {
  min-width: 0;
}

.header {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  margin-bottom: 16px;
  gap: 12px;
  flex-wrap: wrap;
}

.title {
  font-size: 22px;
  font-weight: 700;
  margin: 0;
}

.subtitle {
  font-size: 13px;
  color: var(--tx-d);
  margin-top: 4px;
}

.count {
  font-size: 13px;
  color: var(--tx-d);
  white-space: nowrap;
}

/* 見出しの右: 件数と編集モードのボタン（D-165） */
.headerRight {
  display: flex;
  align-items: center;
  gap: 8px;
}

/*
 * ★編集モードのボタン（ユーザー指示 2026-10-06。D-165）★
 * ★幅は固定★ — 「編集」/ "Edit"・「保存（12件）」/ "Save (12)"・「保存中…」・「キャンセル」/ "Cancel" で
 *   位置が動かないように（12px・太字。最も長い「保存（12件）」≒72px + 左右の padding 28px）。
 * 主ボタンの見た目は `SystemScreen.module.css` の .saveButton / .resetButton（もとは `DetailLogScreen` の .csvBtn）に揃える
 */
.editButton {
  box-sizing: border-box;
  font-size: 12px;
  font-weight: 600;
  padding: 6px 14px;
  border-radius: 6px;
  cursor: pointer;
  white-space: nowrap;
  text-align: center;
  overflow: hidden;
  text-overflow: ellipsis;
}

.editButton:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

.startButton {
  width: 88px;
  border: 1px solid var(--bd);
  background: transparent;
  color: var(--tx);
}

.saveButton {
  width: 120px;
  border: 1px solid transparent;
  background: var(--pr-d);
  color: var(--pr);
}

.cancelButton {
  width: 100px;
  border: 1px solid var(--bd);
  background: transparent;
  color: var(--tx-d);
}

.saveButton:disabled,
.cancelButton:disabled {
  cursor: progress;
}

.card {
  background: var(--sf);
  border: 1px solid var(--bd);
  border-radius: 12px;
  overflow: hidden;
}

/* ★`<fieldset>` で書いている★（編集中に中の絞り込みをまとめて無効にするため。D-165）。既定の枠・余白は消す */
.toolbar {
  margin: 0;
  min-width: 0;
  border: 0;
  padding: 16px 20px;
  border-bottom: 1px solid var(--bd);
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}

.dateGroup {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.dateInput {
  font-size: 12px;
  padding: 6px 10px;
  border-radius: 6px;
  border: 1px solid var(--bd);
  background: var(--sf-h);
  color: var(--tx);
  /* 枠のどこを押してもカレンダーが開くので、枠全体を押せる見た目にする（ユーザー指示 2026-10-06。D-162） */
  cursor: pointer;
}

.dateSep {
  font-size: 12px;
  color: var(--tx-m);
}

.select,
.searchInput {
  font-size: 12px;
  padding: 6px 10px;
  border-radius: 6px;
  border: 1px solid var(--bd);
  background: var(--sf-h);
  color: var(--tx);
}

/* ★分類（ホールディングス / 顧客）のセレクトは固定幅（ユーザー指示 2026-10-06。D-162）★ —
   選んだ名前の長さで幅が変わらないように。はみ出す名前は「…」で切り、全文は `title`（hover）で読む */
.masterSelect {
  width: 180px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ★入力欄は固定幅★（placeholder が JP/EN で変わっても幅が動かないように。指示書AW 4-17） */
.searchFacility {
  width: 140px;
}

.searchType {
  width: 140px;
}

.checkLabel {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--tx-d);
  cursor: pointer;
  white-space: nowrap;
}

/* 編集中（`.toolbar` の fieldset が disabled）は絞り込みを薄くして押せない見た目にする（D-165）。
   ★子要素ごと（`> *`）に薄くする★ — fieldset 自体に opacity をかけると、カードの区切り線（`.toolbar` の border-bottom）まで薄くなるため。
   「～」「指定なし（全期間）」も含めて全部薄くする（アラート・D-Sec と同じ見た目。D-181） */
.toolbar:disabled > * {
  opacity: 0.5;
}

/* 中の部品すべてを禁止カーソルにする（`.dateInput` / `.checkLabel` の `cursor: pointer` より詳細度が高い。アラート・D-Sec と同じ） */
.toolbar:disabled * {
  cursor: not-allowed;
}

/* 編集モードの案内（絞り込み・ページ送りが無効な理由）と、保存に失敗した件数（D-165） */
.editNotice {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 16px;
  padding: 8px 20px;
  font-size: 12px;
  color: var(--tx-m);
  border-bottom: 1px solid var(--bd);
}

.editNoticeError {
  color: var(--ng);
  font-weight: 600;
}

/* ページ送りを包む `<fieldset>`（編集中に無効にするため。D-165）。既定の枠・余白は消す */
.pagerFieldset {
  margin: 0;
  padding: 0;
  min-width: 0;
  border: 0;
}

.pagerFieldset:disabled {
  opacity: 0.5;
}

/* 編集中はページ送りの部品すべてを押せない見た目にする（`AlertsScreen.module.css` / `DsAlertsScreen.module.css` と同じ）。
   ★`button` を足して詳細度を上げる★ — `.pagerFieldset:disabled *` だけだと
   `Pagination.module.css` の `.step:disabled { cursor: default }` と詳細度が同じで、CSS の読み込み順で勝ち負けが変わるため */
.pagerFieldset:disabled button,
.pagerFieldset:disabled * {
  cursor: not-allowed;
}

/* ★狭い画面では表だけを横スクロールさせる★（ページ全体を横にはみ出させない） */
.tableWrap {
  overflow-x: auto;
}

/*
 * ★列幅を固定する（`table-layout: fixed`）★ — JP/EN の切替で列幅や位置が動かないように
 * （`CleanLogTable.module.css` と同じ作法。2026-10-01 ユーザー指摘「言語切り替え時に表などの位置も動いてしまいます」）。
 *
 * ★9列★（2026-10-27 ユーザー指示で、種類の2行目だったエラー内容を「詳細」の列として備考の左に出す。指示書BE §12）。
 * ★詳細の列だけ幅を指定しない★（`<col>` に class なし）— 表の残りの幅を受け持ち、広い画面ほど詳細が広がる。
 * ★施設名は表の幅の 9%・種類は 12%★ — 広い画面では少し広がる（D-166 の「右が空く」「施設名が細る」を避ける）。
 *   ★却下した配分★: 施設名・種類・詳細の3列で等分（狭い画面で詳細が 133px しか取れない）／
 *   詳細を 200px 固定にして施設名・種類で等分（広い画面で種類の列だけが空いて広がる）／
 *   D-166 以前の、備考が残りを受け持つ・施設名だけが残りを受け持つ配分。
 * ほかの列は px で固定する。値は ★言語によらず同じ★。
 *
 * 幅の決め方: 「JP / EN の見出しの大きい方」と「セルの中身」の大きい方 + 余裕。
 *   見出しは 11px・太字・大文字化・字間 0.6px、左右の padding 12px ずつ（`.th`）を含む。★見出しは折り返さない★。
 *   文字の幅は 2026-10-27 にブラウザ（canvas の measureText。globals.css のフォントスタック）で測った値。
 *   - 検知時刻 120 : 見出し EN「DETECTED AT」≒113 / 中身「10/5 19:05」(13px) ≒70
 *   - 施設名 9%（表が最小幅のとき ≒102）: 見出し EN「FACILITY」≒75 / 長い店名は列の中で折り返す
 *   - シリアル 140 : 見出し ≒66 / 中身「8111R5628060033」(13px・15文字) ≒111 + padding 24 = 135（旧 160 は 134 + 余裕の見積もり）
 *   - 種類 12%（表が最小幅のとき ≒136。1440px で ≒137）: 見出し EN「TYPE」≒53 / 中身は生値で長さが読めない（「D-S_CONTROL_FAILURE」≒149）。
 *     ★長い値は「_」の後ろで折り返す★（画面が `<wbr>` を入れる。「D-S_CONTROL_」「FAILURE」の2行）。
 *     ★2026-10-27 ユーザー指示「詳細を少し縮めて、種類を長くして」★（9% では「D-」「S_CONTROL_FAILU」「RE」の3行に割れていた）
 *   - レベル 90    : 見出し EN「LEVEL」≒63 / 中身「CRITICAL」≒86
 *   - 紐づく予定 110 : 見出し EN「SCHEDULE」≒87 / 中身「事前チェック」≒62・「（30分前）」≒69 の2行に折り返す（旧 150）
 *   - 対応状況 150 : 見出し EN「STATUS」≒76 / 中身はバッジ・プルダウンとも 120px 固定（下の `.statusBadge` / `.statusSelect`。D-181）＋ 左右の padding 24
 *                   （"In progress" ＋ ▼ ≒110 が収まる）。★列の幅（150）は変えない★（D-165）
 *   - 詳細（残り。表が最小幅のとき 60 以上。1440px で ≒67）: 見出し EN「DETAILS」≒72 / 中身はエラー内容（日英）。★長い文字は折り返す（「…」で切らない）★
 *   - 備考 223     : 見出し EN「NOTE」≒55 / 中身は通常モードが1行（「…」で切る）、編集モードが2行の入力欄（旧 160 → 120 → 180 → 238 → 247 → 223）
 *     ★2026-10-27 ユーザー指示★ ①「もう少し備考欄を大きくして、詳細欄との空白を埋めて」で備考 120 → 180・詳細の最小 196 → 136
 *     ②「詳細の長さは今の6割くらいに」で、1440px での詳細 ≒144 → ≒86 にし、空いた分を備考へ（180 → 238）
 *     ③「もう10％縮めて」で、1440px での詳細 ≒86 → ≒77、備考 238 → 247
 *     ④「詳細を少し縮めて、種類を長くして」で、種類 9% → 12%（1440px で ≒103 → ≒137）・詳細 ≒77 → ≒67・備考 247 → 223（固定列の合計 857 → 833）
 *
 * ★表の最小幅 = (固定列の合計 + 詳細の最小幅) ÷ (1 − 施設名と種類の割合の合計)★（`min-width` の calc）
 *   = (833 + 60) ÷ (1 − 0.21) = 893 ÷ 0.79 ≒ 1130px（旧 1132・1129・1130px。D-180 項10 の「1440×900 で横スクロールが出ない」を保つ。
 *   そのときの表の入れ物は縦スクロールバーありで ≒1139px）。★割合（9% / 12%）を変えたら 0.79 も直すこと★。
 *   表が最小幅のとき: 施設名 ≒101.7px・種類 ≒135.6px・詳細 ≒60px。
 * これより狭い画面では、包んでいる `.tableWrap`（`overflow-x: auto`）が横スクロールになる。
 */
.table {
  --col-detected: 120px;
  --col-facility: 9%;
  --col-serial: 140px;
  --col-type: 12%;
  --col-level: 90px;
  --col-schedule: 110px;
  --col-status: 150px;
  --col-detail-min: 60px;
  --col-note: 223px;
  width: 100%;
  border-collapse: collapse;
  table-layout: fixed;
  min-width: calc(
    (
        var(--col-detected) + var(--col-serial) + var(--col-level) + var(--col-schedule) +
          var(--col-status) + var(--col-note) + var(--col-detail-min)
      ) / 0.79
  );
}

.colDetected {
  width: var(--col-detected);
}

.colFacility {
  width: var(--col-facility);
}

.colType {
  width: var(--col-type);
}

.colSerial {
  width: var(--col-serial);
}

.colLevel {
  width: var(--col-level);
}

.colSchedule {
  width: var(--col-schedule);
}

.colStatus {
  width: var(--col-status);
}

.colNote {
  width: var(--col-note);
}

.th {
  padding: 10px 12px;
  font-size: 11px;
  color: var(--tx-m);
  text-transform: uppercase;
  letter-spacing: 0.6px;
  border-bottom: 1px solid var(--bd);
  white-space: nowrap;
  font-weight: 600;
  text-align: left;
}

.row {
  border-bottom: 1px solid var(--bd);
}

/* ★編集モードで変えた行の目印（D-165）★ — 背景を薄く色付けし、行の左端に色の帯を出す。
   帯は box-shadow で描く（border を足すと固定幅の列がずれる） */
.rowChanged {
  background: var(--sf-h);
}

.rowChanged > td:first-child {
  box-shadow: inset 3px 0 0 var(--ac);
}

/* ★固定レイアウトでは列が中身に合わせて広がらない★ので、長い値は列の中で折り返す（隣の列に重ねない） */
.td {
  padding: 12px;
  font-size: 13px;
  color: var(--tx);
  vertical-align: top;
  overflow-wrap: anywhere;
}

.tdMuted {
  color: var(--tx-d);
}

.tdNowrap {
  white-space: nowrap;
}

/*
 * ★対応状況のプルダウン（ユーザー指示 2026-10-06。D-161）★
 * 色分けは `.statusResolved` 等を重ねて付ける（`AlertsScreen.module.css` の .statusBadge と同じ配色）。
 * ★幅は 120px 固定★（「対応中」と "In progress" で幅が変わらないように。バッジと同じ幅。アラート・D-Sec と同じ。D-181）。
 * ブラウザ既定の見た目は外し、▼ を自前で描く（`currentColor` なので状態の文字色に揃う）。
 */
.statusSelect {
  display: block;
  width: 120px;
  font-size: 12px;
  /* 右の padding は ▼ のぶん */
  padding: 4px 24px 4px 8px;
  border-radius: 6px;
  font-weight: 600;
  font-family: inherit;
  border: 1px solid transparent;
  cursor: pointer;
  appearance: none;
  background-image:
    linear-gradient(45deg, transparent 50%, currentColor 50%),
    linear-gradient(135deg, currentColor 50%, transparent 50%);
  background-position:
    calc(100% - 13px) 50%,
    calc(100% - 9px) 50%;
  background-size: 4px 4px;
  background-repeat: no-repeat;
}

.statusSelect:hover {
  border-color: currentColor;
}

.statusSelect:focus-visible {
  outline: 2px solid var(--ac);
  outline-offset: 1px;
}

.statusSelect:disabled {
  opacity: 0.6;
  cursor: progress;
}

/* 開いた一覧の選択肢は色分けしない（OS の一覧に状態の背景色が乗ると読みにくい） */
.statusSelect option {
  background: var(--sf);
  color: var(--tx);
}

/* ★通常モードの対応状況（表示だけ。D-165）★ — ★編集モードのプルダウン（.statusSelect）と同じ 120px・同じ高さ★（モードを切り替えても形が変わらない。アラート・D-Sec と同じ。D-181） */
.statusBadge {
  display: block;
  box-sizing: border-box;
  width: 120px;
  padding: 4px 8px;
  border: 1px solid transparent;
  text-align: center;
  font-size: 12px;
  border-radius: 6px;
  font-weight: 600;
  white-space: nowrap;
}

/* 解消のときだけバッジ・プルダウンの下に出す解消日時。★左寄せ（3画面とも。D-181）★ */
.statusTime {
  /* 11px では読みにくいので 12px（ユーザー指示 2026-10-06。D-162） */
  font-size: 12px;
  color: var(--tx-m);
  margin-top: 2px;
  white-space: nowrap;
}

/* ★`background` の一括指定にしないこと★ — `.statusSelect` の ▼（background-image）が消える */
.statusResolved {
  background-color: var(--ok-d);
  color: var(--ok);
}

.statusInProgress {
  background-color: var(--wn-d);
  color: var(--wn);
}

.statusUnresolved {
  background-color: var(--ng-d);
  color: var(--ng);
}

/* ★備考の表示（通常モード。D-165）★ — 文字だけで、押しても何も起きない。
   ★文字の長さで枠の大きさを変えない（ユーザー指示 2026-10-06。D-162 / D-164）★ —
   幅は列いっぱい・高さは1行ぶん（line-height × 1 + 上下の枠）に固定する。列幅（`--col-note`）からはみ出す分は
   「…」で切り、全文は `title`（hover）で読む。空のときは枠だけ（文字は出さない） */
.noteText {
  box-sizing: border-box;
  width: 100%;
  max-width: 100%;
  line-height: 1.5;
  min-height: calc(1.5em + 2px);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  /* 枠は透明で確保しておく（もとの備考ボタンと同じ位置に文字を置く） */
  border: 1px solid transparent;
  padding: 0 4px;
}

.noteInput {
  display: block;
  width: 100%;
  font-size: 12px;
  /* textarea は globals.css の font-family: inherit の対象外。指定しないと日本語がブラウザ既定フォントに落ちる */
  font-family: inherit;
  line-height: 1.5;
  padding: 5px 7px;
  color: var(--tx);
  background: var(--sf);
  border: 1px solid var(--bd);
  border-radius: 6px;
  /* ★大きさは固定（D-162 / D-165）★ — 2行ぶんの高さ。長い入力は中でスクロールし、つまみで広げさせない */
  box-sizing: border-box;
  height: calc(2 * 1.5em + 12px);
  overflow-y: auto;
  resize: none;
}

.noteInput:focus {
  outline: none;
  border-color: var(--ac);
}

/* その他（note_required）で備考が空のあいだは警告色（指示書BE §6）。フォーカス中も維持する */
.noteInputRequired,
.noteInputRequired:focus {
  border-color: var(--ng);
}

/* 「詳細」の列（エラー内容。指示書BE §3 / §12）。★長い文字は折り返す（「…」で切らない）★ —
   日本語は自然に折り返し、英語や識別子のような長い綴りは `overflow-wrap: anywhere` で列の中で切る（隣の列に重ねない） */
.errorContentText {
  white-space: normal;
  overflow-wrap: anywhere;
}

/* 「-」（選べない行）・「未選択」・「不明(id)」は薄い色 */
.errorContentMuted {
  color: var(--tx-m);
}

/* 編集モードのボタン。★列幅いっぱい・左寄せ・文字は折り返す★（高さは中身に合わせて伸びる） */
.errorContentButton {
  display: block;
  box-sizing: border-box;
  width: 100%;
  padding: 3px 8px;
  font-size: 12px;
  color: var(--tx-d);
  background: var(--sf);
  border: 1px solid var(--bd);
  border-radius: 6px;
  text-align: left;
  white-space: normal;
  overflow-wrap: anywhere;
  cursor: pointer;
}

.errorContentButton:hover {
  border-color: var(--ac);
}

.errorContentButton:focus-visible {
  outline: 2px solid var(--ac);
  outline-offset: 1px;
}

.errorContentButton:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

.noteInput:disabled {
  opacity: 0.6;
  cursor: progress;
}

/* 保存に失敗した行（その行の直後の <tr>） */
.rowError {
  padding: 4px 12px 10px;
  font-size: 11px;
  color: var(--ng);
  border-bottom: 1px solid var(--bd);
}

.empty {
  padding: 24px 20px;
  font-size: 13px;
  color: var(--tx-m);
  text-align: center;
}

.error {
  padding: 16px 20px;
  font-size: 13px;
  color: var(--ng);
}

.loading {
  padding: 24px 20px;
  font-size: 13px;
  color: var(--tx-m);
  text-align: center;
}
