Newer
Older
client_dwatch / components / features / schedules / SchedulesScreen.module.css
.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;
}