.page {
min-width: 0;
}
/* モックはタイトルと検索欄を1行に並べる(d-watch-mock.jsx:1040)。
他画面と違い、この画面にはサブタイトルもStatCardも無い */
.header {
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
flex-wrap: wrap;
margin-bottom: 24px;
}
.title {
font-size: 22px;
font-weight: 700;
margin: 0;
}
.searchInput {
font-size: 12px;
padding: 6px 12px;
border-radius: 6px;
border: 1px solid var(--bd);
background: var(--sf-h);
color: var(--tx);
width: 180px;
}
.card {
background: var(--sf);
border: 1px solid var(--bd);
border-radius: 12px;
overflow: hidden;
}
.tableWrap {
overflow-x: auto;
}
.table {
width: 100%;
border-collapse: collapse;
/* 全列の幅の合計 = シリアル 160 + 施設名 190 + 曜日 112 + 時間 150 + 有効 88 */
min-width: 700px;
/* ★列幅を言語によらず固定する★(2026-10-01 ユーザー指摘「言語切り替え時に表などの位置も動く」)。
既定の auto は見出しの文字で列幅が決まるため、JP/EN を切り替えると列ごとに幅が動く。
幅は TSX の <colgroup> に付けた .col* で決める */
table-layout: fixed;
}
/*
* ---- 列幅(★JP と EN の見出しの広い方を下回らないこと★)----
* 見出しは 11px・太字・字間0.6px・左右余白 計24px・折り返し禁止(.th)。幅は余白込みの列幅。
* ★施設名列にも幅を付け、表の余った幅は全列に幅の比で配る★(ユーザー指示 2026-10-06
* 「3つとも同じように調整して」。D-167 追記)。旧: 施設名列だけ幅を付けず、余りを全部受け持っていた
* (最小時 700 - 510 = 190px。広い画面では施設名列だけが大きく空いていた)。
* ★列を広げたら min-width も同じだけ広げること★(横スクロールの境目がずれるため)。
* 見出しの訳語を変えたら、ここの幅も見直すこと(lib/i18n.ts)。
*/
/* 施設名 / FACILITY(D-167 追記)。旧来の最小幅 190px をそのまま使う(min-width は 700px のまま)。
長い施設名は .td の overflow-wrap で列の中で折り返す */
.colFacility {
width: 190px;
}
/* シリアル / SERIAL(見出し 約70px / 約71px)。中身は等幅12px で15桁(例 8111R5628060011)約132px */
.colSerial {
width: 160px;
}
/* 曜日 / DAYS(見出し 約47px / 約55px)。中身はサーバー生成のラベルで、
最長は曜日6つの連結(例「月火水木金土」)約102px */
.colDays {
width: 112px;
}
/* 時間 / TIME(見出し 約47px / 約55px)。中身は「02:00 - 翌04:30」で約126px */
.colTime {
width: 150px;
}
/* 有効 / ACTIVE(見出し 約47px / 約71px)。中身は ● / ○ のみ */
.colActive {
width: 88px;
}
.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;
}
.thCenter {
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: center;
}
.row {
border-bottom: 1px solid color-mix(in srgb, var(--bd) 13%, transparent);
}
/* 無効スケジュールは行全体を薄くする(モック: opacity: s.on ? 1 : 0.5)。
`.row` と併用する(AlertsScreen の statusBadge + statusResolved と同じ足し方)。
行を消さないのは、登録済みの台帳として「無効な状態で存在すること」を
見せる画面だから(lib/schedules/query.ts の filterSchedules も active で絞らない) */
.rowInactive {
opacity: 0.5;
}
/* 列幅を固定したので、長い英数字(空白の無い文字列)がセルからはみ出さないよう
どこでも折り返せるようにする(.td / .tdSerial) */
.td {
padding: 12px;
font-size: 13px;
color: var(--tx);
overflow-wrap: anywhere;
}
.tdSerial {
padding: 12px;
font-size: 12px;
font-family: var(--font-geist-mono), ui-monospace, monospace;
color: var(--tx);
overflow-wrap: anywhere;
}
/* 「有効」列。●/○ を大きめに出すのでフォントサイズはモック準拠(18px) */
.tdActive {
padding: 12px;
text-align: center;
font-size: 18px;
line-height: 1;
}
.activeOn {
color: var(--ok);
}
.activeOff {
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;
}