/*
* D-Security アラート(`/ds-alerts`)。
* ★編集モードの見た目はエラー一覧(`ErrorsScreen.module.css`)から写す★(指示書AX 段階5-2。新しい共通部品は作らない)。
* ★`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;
/* エラー一覧・アラートと同じ16px。★直す前もマージンの相殺で16px だった★(.header 4px と .subtitle 16px は足し算にならない。D-181) */
margin-bottom: 16px;
gap: 12px;
flex-wrap: wrap;
}
.title {
font-size: 22px;
font-weight: 700;
margin: 0 0 4px;
}
.subtitle {
font-size: 13px;
color: var(--tx-d);
}
/* 見出しの右: 編集モードのボタン */
.headerRight {
display: flex;
align-items: center;
gap: 8px;
}
/*
* ★編集モードのボタン★(`ErrorsScreen.module.css` の .editButton 等と同じ)。
* ★幅は固定★ — 「編集」/ "Edit"・「保存(12件)」/ "Save (12)"・「保存中…」・「キャンセル」/ "Cancel" で
* 位置が動かないように。
*/
.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;
}
.statGrid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12px;
margin-bottom: 16px;
}
/* ★`<fieldset>` で書いている★(編集中に中の絞り込みをまとめて無効にするため)。既定の枠・余白は消す */
.toolbar {
margin: 0 0 16px;
min-width: 0;
border: 0;
padding: 0;
display: flex;
gap: 10px;
flex-wrap: wrap;
align-items: center;
}
.select {
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(ホバー)で読む */
.masterSelect {
width: 180px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.statusButtons {
display: flex;
gap: 6px;
}
/* 編集中(`.toolbar` の fieldset が disabled)は絞り込み全体を薄くする(アラートと同じ。D-181) */
.toolbar:disabled {
opacity: 0.5;
}
/* ★select だけは薄さを戻す★ — Chromium の UA スタイルが `select:disabled` に opacity 0.7 を付けるため、
fieldset の 0.5 と掛け算になって 0.35 まで薄くなる(input / textarea / button には UA の opacity は無い。D-181) */
.toolbar:disabled select {
opacity: 1;
}
/* 編集中は中の部品すべてを押せない見た目にする(`AlertsScreen.module.css` と同じ)。
★ページ送りは `button` を足して詳細度を上げる★ — `.pagerFieldset:disabled *` だけだと
`Pagination.module.css` の `.step:disabled { cursor: default }` と詳細度が同じで、CSS の読み込み順で勝ち負けが変わるため */
.toolbar:disabled *,
.pagerFieldset:disabled button,
.pagerFieldset:disabled * {
cursor: not-allowed;
}
/* 編集モードの案内(絞り込み・ページ送りが無効な理由)と、保存に失敗した件数 */
.editNotice {
display: flex;
flex-wrap: wrap;
gap: 4px 16px;
margin-bottom: 12px;
font-size: 12px;
color: var(--tx-m);
}
.editNoticeError {
color: var(--ng);
font-weight: 600;
}
/* ページ送りを包む `<fieldset>`(編集中に無効にするため)。既定の枠・余白は消す */
.pagerFieldset {
margin: 0;
padding: 0;
min-width: 0;
border: 0;
}
.pagerFieldset:disabled {
opacity: 0.5;
}
.list {
display: flex;
flex-direction: column;
gap: 12px;
}
.itemCard {
background: var(--sf);
border: 1px solid var(--bd);
border-radius: 12px;
border-left: 3px solid var(--severity-color, var(--bd));
padding: 16px 20px;
}
/* ★編集モードで変えたカードの目印★(背景は `ErrorsScreen.module.css` の .rowChanged と同じ色。アラートも同じ形。D-181)。
左の枠は種別の色(inline style)なので、背景と残りの枠で示す */
.itemCardChanged {
background: var(--sf-h);
border-top-color: var(--ac);
border-right-color: var(--ac);
border-bottom-color: var(--ac);
}
.itemRow {
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: wrap;
gap: 12px;
}
.itemMain {
flex: 1;
min-width: 250px;
}
.itemBadges {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 6px;
}
.serial {
font-size: 12px;
font-family: var(--font-geist-mono), ui-monospace, monospace;
color: var(--tx-m);
}
.facility {
font-size: 14px;
font-weight: 600;
color: var(--tx);
}
.section {
font-size: 12px;
font-weight: 400;
color: var(--tx-m);
}
.detectedLine {
font-size: 11px;
color: var(--tx-m);
margin-top: 4px;
}
.noteLine {
font-size: 12px;
color: var(--tx-m);
margin-top: 6px;
padding: 6px 10px;
background: var(--sf-h);
border-radius: 6px;
border-left: 2px solid var(--bd);
overflow-wrap: anywhere;
}
/*
* カード右の対応状況(通常モードはバッジ、編集モードはプルダウン。解消のときは下に解消日時)。
* ★両モードで幅 120px 固定★ — 切り替えで左の本文の幅が変わり、文字の折り返しが動かないように(アラート画面と同じ。D-181)。
* ★備考の入力欄はここに出さない★(左の本文の `.noteInput`。指示書BA 項4)
*/
.statusColumn {
flex-shrink: 0;
width: 120px;
}
/*
* ★対応状況のプルダウン★(`ErrorsScreen.module.css` の .statusSelect と同じ)。
* 色分けは `.statusResolved` 等を重ねて付ける。★幅は 120px 固定★(バッジと同じ。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);
}
/* ★通常モードの対応状況(表示だけ。押しても何も起きない)★ — ★編集モードのプルダウンと同じ 120px・同じ高さ★(`AlertsScreen.module.css` の .statusBadge + .statusBadgeFixed と同じ。D-181。旧: min-width 110px・右寄せ — 指示書AZ 4b) */
.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 {
margin-top: 2px;
font-size: 12px;
color: var(--tx-m);
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);
}
.noteInput {
display: block;
width: 100%;
/* 通常モードの備考の行(.noteLine)と同じ位置から始める */
margin-top: 6px;
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;
/* ★大きさは固定★ — 2行ぶんの高さ・幅は左の本文いっぱい。長い入力は中でスクロールし、つまみで広げさせない */
box-sizing: border-box;
height: calc(2 * 1.5em + 12px);
overflow-y: auto;
resize: none;
}
.noteInput:focus {
outline: none;
border-color: var(--ac);
}
.noteInput:disabled {
opacity: 0.6;
cursor: progress;
}
/* 保存に失敗したカード(カードの中身の直下) */
.rowError {
margin-top: 8px;
font-size: 11px;
color: var(--ng);
}
.empty {
padding: 24px 20px;
font-size: 13px;
color: var(--tx-m);
text-align: center;
background: var(--sf);
border: 1px solid var(--bd);
border-radius: 12px;
}
.error {
padding: 16px 20px;
font-size: 13px;
color: var(--ng);
}
.loading {
padding: 24px 20px;
font-size: 13px;
color: var(--tx-m);
text-align: center;
}