/* ビルメンAIオフィス 顧客ポータル — デザイン部品
   ------------------------------------------------------------------
   画面はすべてこのファイルの部品で作る。テンプレートに色やサイズを
   直接書かないこと。色はこの先頭にある変数だけで管理する。
   部品の見本は docs/styleguide.html にある。

   配色・部品は保守サイト(bilmen-hoshu)と共通の土台。
   顧客ごとに変えるのは顧客名と有効アプリだけで、ロゴ・配色は全顧客共通。
   ------------------------------------------------------------------ */

/* ===== 1. 色・書体・寸法（ここだけで一元管理） ===== */
:root{
  /* ブランド色 */
  --brand:            #2b5fd9;
  --brand-dark:       #1d47ab;
  --brand-light:      #3f8cff;
  --brand-pale:       #eaf1ff;
  --brand-pale-line:  #d5e3ff;

  /* サイドバー（濃紺） */
  --side-bg:          #101a2b;
  --side-text:        #aeb9cb;
  --side-label:       #5c6a82;
  --side-on-text:     #7ab5ff;
  --side-on-bg:       rgba(63,140,255,.16);
  --side-hover-bg:    rgba(255,255,255,.06);

  /* 面と罫線 */
  --page-bg:          #f4f6f9;
  --surface:          #ffffff;
  --line:             #e5e8ee;
  --line-soft:        #f0f2f6;
  --line-softest:     #f5f7fa;

  /* 文字 */
  --ink:              #16212e;  /* 見出し */
  --ink-body:         #3c4656;  /* 本文 */
  --ink-sub:          #4b5566;  /* やや弱い本文 */
  --ink-muted:        #6b7585;  /* 補助 */
  --ink-faint:        #8a93a3;  /* さらに弱い */
  --ink-faintest:     #98a1b1;  /* 最も弱い（日付など） */

  /* 状態色 */
  --danger:           #a02c2c;
  --danger-bg:        #fdeded;
  --danger-mark:      #e04f4f;  /* 通知バッジの赤 */

  /* アプリの色（アプリの manifest.json の color で選ぶ） */
  --app-blue-bg:   #eaf1ff;  --app-blue-fg:   #2b5fd9;
  --app-green-bg:  #e8f8f1;  --app-green-fg:  #0ea77f;
  --app-orange-bg: #fff4e5;  --app-orange-fg: #d97a08;
  --app-purple-bg: #f1ecff;  --app-purple-fg: #7c5cd9;
  --app-cyan-bg:   #e6f6fb;  --app-cyan-fg:   #0b8bab;
  --app-gray-bg:   #f0f2f6;  --app-gray-fg:   #6b7585;

  /* タグの色 */
  --tag-info-bg:    #eaf1ff;  --tag-info-fg:    #2b5fd9;
  --tag-warn-bg:    #fff4e5;  --tag-warn-fg:    #b56a10;
  --tag-neutral-bg: #f0f2f6;  --tag-neutral-fg: #6b7585;

  /* 書体（フォントはサーバー同梱。読めない環境ではPC標準へ） */
  --font-body: 'Noto Sans JP', 'Yu Gothic UI', 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif;
  --font-head: 'Zen Kaku Gothic New', 'Noto Sans JP', 'Yu Gothic UI', Meiryo, sans-serif;

  /* 角の丸み */
  --r-sm: 4px;
  --r-md: 6px;
  --r-lg: 8px;
  --r-xl: 10px;
  --r-pill: 99px;

  /* 影 */
  --shadow-hover: 0 4px 14px rgba(16,26,43,.10);

  /* 寸法 */
  --header-h: 58px;
  --side-w:   230px;

  /* 入力欄の文字の大きさ（スマホ用）
     iPhone の Safari は「文字が 16px より小さい入力欄」を指でタップすると、
     読みにくいと判断して画面を勝手に拡大する。しかも拡大したまま戻らないため、
     利用者が毎回、指で縮め直すことになる。
     ＝ 16px 以上にしておけば、この勝手な拡大は起きない。
     16px「以上」が条件なので、これを下回る値には絶対にしないこと。
     （拡大を禁止する maximum-scale は使わない。目が悪い方が自分で
       拡大できなくなり、かえって使いにくくなるため）
     2026-08-26 岡本さんのご指摘「入力項目をクリックすると画面が拡大になる」への対応 */
  --input-font-mobile: 16px;

  /* 入力欄の文字の大きさ（パソコン用）
     これまで .c-field__input は 15px、.c-input は 13.5px と、それぞれの場所に
     数値を直に書いていた。数値の直書きだと、あとから作った部品（時刻のドラムなど）が
     同じ値を書き写せず、字の大きさがずれる原因になる。
     2026-08-26 岡本さんのご指摘「字体、濃さ、大きさが他と違う」への対応として、
     ここで一度だけ決めて、入力欄も時刻の札も同じ変数を見るようにした。 */
  --input-font:       15px;  /* ふつうの入力欄（.c-field__input） */
  --input-font-sm:    13.5px;/* 詰まった画面の入力欄（.c-input） */
  /* 入力欄の字の濃さ・色。時刻の札もこれと同じにする */
  --input-weight:     400;
  --input-color:      var(--ink);
}

/* ===== 2. 土台 ===== */
*{ box-sizing:border-box }

body{
  margin:0;
  background:var(--page-bg);
  color:var(--ink-body);
  font-family:var(--font-body);
  font-size:14px;
  line-height:1.7;
  display:flex;
  flex-direction:column;
  min-height:100vh;
}

a{ color:var(--brand); text-decoration:none }
a:hover{ color:var(--brand-dark) }

/* ===== 3. ヘッダー ===== */
.c-header{
  display:flex; align-items:center; gap:14px;
  background:var(--surface);
  border-bottom:1px solid var(--line);
  padding:0 24px;
  height:var(--header-h);
  flex:none;
  /* 中身が横へはみ出さないようにする。はみ出すと画面ごと横に広がり、
     右端の「パスワード変更」「ログアウト」が画面の外へ出て押せなくなる
     （2026-08-23 岡本さん指摘） */
  min-width:0;
}
/* 製品ロゴ「ビルメンAIオフィス」。全顧客共通で、顧客ごとの差し替えはしない */
/* ロゴを押すとホームへ戻る。リンクだが見た目は画像のまま（下線・色を付けない） */
.c-header__home{display:inline-flex; align-items:center; text-decoration:none; border:0; min-width:0}
.c-header__home:hover{opacity:.85}

/* 場所が足りないときはロゴが先に縮む。ボタンより優先度が低いため */
.c-header__logo{ height:38px; width:auto; display:block; max-width:100%; object-fit:contain }
.c-header__sub{
  font-size:11px; color:var(--ink-faint);
  border-left:1px solid var(--line); padding-left:14px;
  white-space:nowrap;
}
.c-header__right{ margin-left:auto; display:flex; align-items:center; gap:16px; min-width:0 }
/* 利用者の名前が長いときは、名前のほうを縮めて「…」にする。
   ボタン（flex:none）は縮めない＝いつでも押せるようにするため */
.c-user{ min-width:0 }
.c-user__name{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap }

/* 三本線（≡）。狭い画面でだけ出て、左メニューを開く。
   PC幅では左メニューが常に見えているので出さない（下の 15.スマホ で出す）。
   指で押せるように 44px 角を確保する。 */
.c-header__menu{
  display:none;
  width:44px; height:44px; flex:none;
  align-items:center; justify-content:center;
  background:transparent; border:1px solid var(--line);
  border-radius:var(--r-md);
  color:var(--ink-muted); font-size:18px; line-height:1;
  font-family:inherit; cursor:pointer; padding:0;
}
.c-header__menu:hover{ border-color:var(--brand); color:var(--brand) }
/* 見本帳でだけ使う。実際の画面では狭いときにしか出ないため、
   見本では常に見えるようにしておく（画面側では使わないこと） */
.c-header__menu--demo{ display:flex }
.c-header__menu:focus-visible{ outline:2px solid var(--brand-light); outline-offset:2px }

/* 左メニューを開いているときに、後ろの画面を覆う幕。
   ここを押すと閉じる（＝「他の場所を押したら消える」）。
   PC幅では左メニューが常に見えているので、幕は出さない。 */
.c-backdrop{ display:none }

.c-user{ display:flex; align-items:center; gap:9px }
.c-user__avatar{
  width:30px; height:30px; border-radius:50%;
  background:var(--brand); color:#fff;
  display:grid; place-items:center;
  font-weight:700; font-size:12px;
  flex:none;
}
.c-user__text{ min-width:0 }
.c-user__name{ display:block; font-size:12px; line-height:1.3; color:var(--ink); font-weight:500 }
.c-user__role{ display:block; font-size:10px; line-height:1.3; color:var(--ink-faintest) }

.c-logout{ margin:0; flex:none }
.c-logout__btn{
  background:transparent; color:var(--ink-muted);
  border:1px solid var(--line); border-radius:var(--r-md);
  padding:5px 12px; font-size:12px; font-family:inherit; cursor:pointer;
  /* 文字を折り返さない。折り返すとヘッダーの高さに収まらず、
     「パスワード変更」が縦に潰れて読めなくなる（2026-08-23 岡本さん指摘） */
  white-space:nowrap;
  display:inline-flex; align-items:center; justify-content:center;
  text-decoration:none; flex:none;
}
.c-logout__btn:hover{ border-color:var(--brand); color:var(--brand) }

/* --- ヘッダーの右上に置くボタン（c-headerbtn） -------------------------
   2026-08-26 追加。「お問い合わせ」をここへ置くために作った部品。
   もとは画面の右下に丸いボタン（c-fab）で出していたが、
   「確認・出力へ」など画面の中のボタンに重なって押せなくなっていた
   （岡本さんご指摘）。ヘッダーはどの画面にも出るので、
   右下のときと同じく、どの画面からでも押せる。

   高さは 44px にそろえる（指で押せる大きさ。ヘッダーは 58px なので入る）。 */
.c-headerbtn{
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  min-height:44px; padding:0 14px; flex:none;
  border:1px solid var(--line); border-radius:var(--r-md);
  /* 白いボタンにする（2026-08-26 岡本さんご指摘「青い枠ではなく、白いボタン」）。
     ヘッダーの背景はもともと白なので、透明ではなく白を指定しても見た目は同じだが、
     「白いボタン」であることを指定として残しておく。
     枠線と文字の色は、メニューの中の「パスワード変更」「ログアウト」と同じ系統に
     そろえてある（隣り合っても浮いて見えないようにするため）。 */
  background:var(--surface); color:var(--ink-muted);
  font-family:inherit; font-size:12.5px; font-weight:500; line-height:1;
  /* 文字を折り返さない。折り返すとヘッダーの高さに収まらず、
     縦に潰れて読めなくなる（2026-08-23 岡本さん指摘と同じ理由） */
  white-space:nowrap;
  text-decoration:none; cursor:pointer;
}
.c-headerbtn:hover{ border-color:var(--brand); color:var(--brand) }
.c-headerbtn:focus-visible{ outline:2px solid var(--brand-light); outline-offset:2px }
/* 2026-08-26 「目立たせる（青く塗る）」形（.c-headerbtn--accent）は取りやめた。
   ヘッダーの背景が白いところに青い塗りがあると、そこだけ浮いて見え、
   隣の「パスワード変更」「ログアウト」ともそろわないため
   （岡本さんご指摘「見栄えが悪い」「青い枠ではなく、白いボタン」）。
   押せることは、枠線と、指を乗せたときに枠と文字が青くなることで分かるようにする。 */

/* --- 利用者の名前を押すと開くメニュー（c-usermenu） --------------------
   2026-08-26 追加（岡本さんご判断「利用者名を押すと出す」）。
   もとは右上に「パスワード変更」（鍵の記号）と「ログアウト」を並べていたが、
   お問い合わせの場所を空けるため、この中へ入れ直した。

   JavaScript が動かない環境でもパスワード変更へ行けるように、
   :focus-within（キーボードの Tab で中の項目に移ったとき）でも開くようにする。

   閉じているときに display:none にはしない。display:none にすると
   中の「パスワード変更」に Tab で移れなくなり、:focus-within が
   いつまでも効かず、JavaScript が動かない環境で行き止まりになるため。
   代わりに、場所を取らず目にも見えない形（clip）で置いておく。 */
.c-usermenu{ position:relative; flex:none; min-width:0 }
.c-usermenu__button{
  display:flex; align-items:center; gap:9px;
  min-height:44px; padding:0 8px; min-width:0;
  background:transparent; border:1px solid transparent; border-radius:var(--r-md);
  font-family:inherit; cursor:pointer; color:inherit; text-align:left;
}
.c-usermenu__button:hover{ border-color:var(--line); background:var(--line-softest) }
.c-usermenu__button:focus-visible{ outline:2px solid var(--brand-light); outline-offset:2px }
.c-usermenu__caret{ font-size:10px; color:var(--ink-faint); flex:none }

/* 開いたときに出る小さな板。ヘッダーの下にぶら下げる。
   z-index はスマホの左メニュー（60）より上に置く。
   ヘッダーは常に画面の上にあり、この板が隠れると押せなくなるため */
.c-usermenu__panel{
  position:absolute; top:calc(100% + 6px); right:0; z-index:70;
  display:flex; flex-direction:column; min-width:180px;
  /* 閉じているとき。見えず・押せず・場所も取らないが、
     Tab では中へ入れる（上の説明のとおり、行き止まりにしないため） */
  clip-path:inset(50%); pointer-events:none; opacity:0;
  background:var(--surface);
  border:1px solid var(--line); border-radius:var(--r-lg);
  box-shadow:var(--shadow-hover);
  padding:6px;
}
/* JavaScript で開いたとき、またはキーボードで中へ入ったときに出す */
.c-usermenu.is-open > .c-usermenu__panel,
.c-usermenu:focus-within > .c-usermenu__panel{
  clip-path:none; pointer-events:auto; opacity:1;
}
.c-usermenu__item{
  display:flex; align-items:center;
  min-height:44px; padding:0 12px; width:100%;
  background:transparent; border:0; border-radius:var(--r-md);
  color:var(--ink-body); font-family:inherit; font-size:13px; line-height:1;
  white-space:nowrap; text-align:left; text-decoration:none; cursor:pointer;
}
.c-usermenu__item:hover{ background:var(--brand-pale); color:var(--brand) }
.c-usermenu__item:focus-visible{ outline:2px solid var(--brand-light); outline-offset:-2px }

/* ===== 4. レイアウト ===== */
.c-shell{ display:flex; flex:1; min-height:0 }

.c-side{
  width:var(--side-w); flex:none;
  background:var(--side-bg);
  display:flex; flex-direction:column;
  padding:18px 14px; gap:2px;
}
.c-side__label{
  font-size:10px; color:var(--side-label);
  padding:6px 12px; letter-spacing:.08em;
}
.c-side__label--gap{ padding-top:14px }

.c-side__item{
  display:flex; align-items:center; gap:10px;
  padding:10px 12px; border-radius:var(--r-md);
  color:var(--side-text); font-size:13px;
  text-decoration:none;
}
.c-side__item:hover{ background:var(--side-hover-bg); color:var(--side-text) }
.c-side__item.is-active{
  background:var(--side-on-bg); color:var(--side-on-text); font-weight:700;
}
.c-side__icon{ width:18px; text-align:center; color:var(--side-label); flex:none }
.c-side__item.is-active .c-side__icon{ color:var(--side-on-text) }

/* 機能を持つアプリの名前は、下の機能一覧を開閉するボタンにする（ページは移動しない）。
   見た目は c-side__item と同じ。ボタンは文字や背景を受け継がないのでここで揃える。 */
.c-side__item--toggle{
  width:100%;
  border:0; background:transparent;
  font-family:inherit; font-size:13px; text-align:left;
  cursor:pointer;
}
.c-side__item--toggle:focus-visible{
  outline:2px solid var(--brand-light); outline-offset:-2px;
}
/* 開閉の印。閉じているとき ▸ ／ 開いているとき ▾ */
.c-side__caret{
  margin-left:auto; flex:none;
  font-size:10px; line-height:1; color:var(--side-label);
}
.c-side__caret::before{ content:"▸" }
.c-side__item--toggle[aria-expanded="true"] .c-side__caret::before{ content:"▾" }
.c-side__item.is-active .c-side__caret{ color:var(--side-on-text) }

/* アプリの下にぶら下げる「アプリの中の機能」。閉じているときは hidden を付ける */
.c-side__sub{
  display:flex; flex-direction:column; gap:2px;
  margin:2px 0 6px 21px; padding-left:11px;
  border-left:1px solid var(--side-hover-bg);
}
.c-side__sub[hidden]{ display:none }
.c-side__subitem{
  padding:7px 10px; border-radius:var(--r-md);
  color:var(--side-label); font-size:12.5px; text-decoration:none;
}
.c-side__subitem:hover{ background:var(--side-hover-bg); color:var(--side-text) }
.c-side__subitem.is-active{ color:var(--side-on-text); font-weight:700 }

.c-side__badge{
  margin-left:auto; background:var(--brand-light); color:#fff;
  border-radius:var(--r-pill); font-size:10px; font-weight:700; padding:1px 7px;
}

/* 「別タブで開く」ボタン（↗）。販売管理システム Billy の左メニューと同じ操作感。
   c-side__row でメニュー項目と ↗ を1行に並べる（リンクの入れ子は不可のため兄弟にする）。
   項目名を押したときは今までどおり同じタブで開き、↗ を押したときだけ別タブで開く。 */
.c-side__row{ position:relative; display:flex; align-items:center }
.c-side__row > .c-side__item,
.c-side__row > .c-side__subitem{
  flex:1; min-width:0;
  padding-right:32px;   /* ↗ の場所を空けて項目名と重ならないようにする */
}
.c-side__open{
  position:absolute; right:5px; top:50%;
  transform:translateY(-50%);
  width:22px; height:22px; flex:none;
  display:flex; align-items:center; justify-content:center;
  border-radius:var(--r-sm);
  color:var(--side-label); font-size:12px; line-height:1;
  text-decoration:none; opacity:.5;
}
/* ふだんは控えめ。マウスを乗せたときにはっきりさせる */
.c-side__row:hover .c-side__open{ opacity:1; color:var(--side-on-text) }
.c-side__open:hover{
  background:var(--side-hover-bg); color:var(--side-on-text); opacity:1;
}
.c-side__open:focus-visible{
  opacity:1; color:var(--side-on-text);
  outline:2px solid var(--brand-light); outline-offset:-1px;
}

.c-main{
  flex:1; min-width:0;
  /* 下の余白を取るのは、画面右下の「一番上へ戻る」ボタン（.c-totop）が
     いちばん下の内容に重ならないようにするため。
     2026-08-26 右下の「ご意見・お問い合わせ」の丸いボタンを廃止したので、
     96px から 76px へ詰めた（ボタン44px＋上下の余白ぶん） */
  padding:24px 28px 76px;
  display:flex; flex-direction:column; gap:20px;
}

/* 見出しと中身をひとまとまりにする箱 */
.c-stack{ display:flex; flex-direction:column; gap:14px }

/* ===== 5. カード・見出し ===== */
.c-card{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:20px 24px;
}
.c-card__title{
  font-weight:700; font-size:14px; color:var(--ink); margin:0;
}
.c-section-title{
  font-weight:700; font-size:15px; color:var(--ink); margin:0;
}

/* 顧客名を出す歓迎カード */
.c-welcome{
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r-lg); padding:26px 30px;
  display:flex; align-items:center; gap:20px; flex-wrap:wrap;
}
.c-welcome__date{ font-size:12.5px; color:var(--ink-faint); margin-bottom:6px }
.c-welcome__name{
  margin:0; font-family:var(--font-head);
  font-weight:700; font-size:24px; color:var(--ink); line-height:1.35;
}
.c-welcome__lead{ font-size:13px; color:var(--ink-muted); margin-top:8px }
/* 歓迎カードの右側に数字を出す枠（将来の機能強化で使う部品）。
   契約プラン名と利用ユーザー数は出さないと決めたため、今の画面では使っていない */
.c-welcome__facts{ margin-left:auto; display:flex; gap:24px; text-align:right }
.c-fact__label{ font-size:11px; color:var(--ink-faintest) }
.c-fact__value{ font-weight:700; font-size:15px; color:var(--ink) }
.c-fact__value--brand{ color:var(--brand) }

/* ===== 6. アプリのタイル ===== */
.c-tiles{
  display:grid;
  grid-template-columns:repeat(auto-fill, minmax(280px, 1fr));
  gap:16px;
}
.c-tile{
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r-lg); padding:24px;
  display:flex; flex-direction:column; gap:14px;
  min-height:120px; text-decoration:none; color:inherit;
  transition:border-color .15s, box-shadow .15s;
}
.c-tile:hover{ border-color:var(--brand); box-shadow:var(--shadow-hover); color:inherit }
.c-tile__head{ display:flex; align-items:center; gap:14px }
.c-tile__icon{
  width:52px; height:52px; border-radius:var(--r-xl);
  display:grid; place-items:center; font-size:24px; flex:none;
  background:var(--app-gray-bg); color:var(--app-gray-fg);
}
.c-tile__body{ min-width:0 }
.c-tile__name{ display:block; font-weight:700; font-size:16px; color:var(--ink); line-height:1.4 }
.c-tile__desc{ display:block; font-size:12px; color:var(--ink-faint); margin-top:3px; line-height:1.5 }
.c-tile__foot{
  display:flex; align-items:center; margin-top:auto;
  border-top:1px solid var(--line-soft); padding-top:12px;
}
.c-tile__note{ font-size:11.5px; color:var(--ink-faintest) }
.c-tile__open{ margin-left:auto; font-weight:700; font-size:12.5px; color:var(--brand) }

/* アプリの色（アプリの manifest.json の color で指定） */
.c-tile__icon--blue  { background:var(--app-blue-bg);   color:var(--app-blue-fg) }
.c-tile__icon--green { background:var(--app-green-bg);  color:var(--app-green-fg) }
.c-tile__icon--orange{ background:var(--app-orange-bg); color:var(--app-orange-fg) }
.c-tile__icon--purple{ background:var(--app-purple-bg); color:var(--app-purple-fg) }
.c-tile__icon--cyan  { background:var(--app-cyan-bg);   color:var(--app-cyan-fg) }
.c-tile__icon--gray  { background:var(--app-gray-bg);   color:var(--app-gray-fg) }

/* アプリが1つも無いときの案内 */
.c-empty{
  background:var(--surface); border:1px dashed var(--line);
  border-radius:var(--r-lg); padding:40px 20px;
  text-align:center; color:var(--ink-muted); font-size:14px;
}
/* 「まだ1件もありません」の中に置く、次にすることへのボタン。
   2026-08-24 追加。それまで各画面が style="margin-top:12px" と直書きしていたが、
   直書きは決まり（design.css の部品だけで作る）に反するので部品にした。 */
.c-empty__action{ display:inline-block; margin-top:12px }

/* ===== 7. ボタン ===== */
.c-btn{
  display:inline-block; text-align:center;
  border:none; border-radius:var(--r-md);
  padding:11px 16px;
  font-family:inherit; font-weight:700; font-size:13px;
  cursor:pointer; text-decoration:none;
}
.c-btn--primary{ background:var(--brand); color:#fff }
.c-btn--primary:hover{ background:var(--brand-dark); color:#fff }
.c-btn--ghost{ background:transparent; color:var(--brand); border:1px solid var(--line) }
.c-btn--ghost:hover{ border-color:var(--brand) }
.c-btn--block{ display:block; width:100% }
/* 処理中で押せないボタン（出力中など）。二度押しを防ぐために使う */
.c-btn.is-busy,
.c-btn:disabled{ opacity:.55; cursor:default; pointer-events:none }

/* ===== 8. フォーム ===== */
.c-field{ margin-bottom:18px }
.c-field__label{
  display:block; font-size:13px; font-weight:700;
  color:var(--ink); margin-bottom:6px;
}
.c-field__input{
  width:100%; padding:10px 12px;
  /* 大きさは変数から取る（時刻の札と同じ値を見るため。数値の直書きをしない） */
  font-size:var(--input-font); font-family:inherit;
  border:1px solid var(--line); border-radius:var(--r-md);
  background:var(--surface); color:var(--ink);
}
.c-field__input:focus{ outline:2px solid var(--brand-pale); border-color:var(--brand) }
.c-field__hint{ font-size:12.5px; color:var(--ink-faint); margin:5px 0 0 }

/* --- 必ず入れる項目の印（c-req） --------------------------------------
   入力する前に「ここは必ず要る」と分かるようにする。
   色だけで伝えず「必須」と文字でも書く（色が分かりにくい人にも伝わるように）。
   任意の項目は、これまでどおり項目名に「（任意）」と書く。 */
.c-req{
  display:inline-block; margin-left:6px;
  padding:1px 6px; border-radius:var(--r-sm);
  background:var(--danger-bg); color:var(--danger);
  font-size:10.5px; font-weight:700; line-height:1.6;
  /* 項目名より前に出ないよう、上下の位置を少し上げる */
  vertical-align:1px;
}
/* --- 作業時間の入力欄（c-papertime。全画面で共通） ---------------------
   2026-08-26 作り直し（4回目・ドラム式）。

   ■ 経緯
     岡本さんの「ドラムが全部共通で古臭いから修正して」というご指摘を、
     一度「ドラムをやめる」と取り違えて文字の欄だけにしてしまった。
     正しくは「**ドラムのままで、見た目と操作性を良くしてほしい**」。
     そこで、ブラウザ任せの <input type="time"> ではなく、
     **自分たちで作ったドラム**に組み直した。
     自作にすると、この製品の色・角丸・影（先頭の変数）をそのまま使えるので、
     ほかの画面から浮かない。

   ■ 組み立て
     (1) c-papertime__field … 「9:00 〜 12:00」の1つの文字列を持つ本体の欄。
                              JavaScript が動く端末では画面から隠し、
                              動かない端末ではふつうの文字の欄として出す
                              （打った文字がそのまま保存される逃げ道）。
     (2) c-papertime__panel … 札とドラムを包む枠。紙の画面ではこれを浮かせる。
     (3) c-papertime__pair  … 「開始」「終了」の2つの札を「〜」で結んだ見た目。
     (4) c-papertime__slot  … 押せる札。いまの時刻が大きく出る。
     (5) c-papertime__drum  … 札を押すと下に開く、時と分の2列。
                              いま選ばれている数字は青く塗る（.is-on）。
     (6) c-papertime__clear … 打ち直すときの「時刻を消す」。控えめな見た目。

   ■ 「よく使う時間帯」のボタンは廃止した（2026-08-26 岡本さんのご指示）
       「時間のとこだけドラム式で入力でお願いします。
         今は、時間がいくつもあってみずらいです」
     ＝ 時刻の候補がいくつも並んでいて見づらい、というご指摘。
     ドラムで選べるので候補のボタンは要らない。旧 .c-papertime__quick ／
     .c-papertime__btn は廃止した。

   ドラムの中の数字は JavaScript が作る（app/static/js/app.js）。
   HTML に書くのは (1)〜(6) の枠と目印だけで、数字は書かない。
   同じものを何か所にも書かないため。 */
.c-papertime{
  width:100%; min-width:0;
  /* ドラムの1マスの高さ。指で押せる 44px 以上にする。
     「時」と「分」で同じ値を使うので、行が必ずそろう */
  --pt-cell:44px;

  /* --- 時刻の札の字を「そろえる先」 ---------------------------------
     2026-08-26 岡本さんのご指摘「字体、濃さ、大きさが他と違う」への対応。
     それまで札の字は font-size:20px / font-weight:700 と数値を直に書いており、
     すぐ上の日付欄（15px / 400）より 5px 大きく、300 も太かった。
     画面の中で時刻だけが浮いて見える、はっきりした原因がこれ。

     ここで既定を「ふつうの入力欄と同じ」に置き、置かれる場所ごとに
     下の --field / --input / --paper で入れ替える。
     こうすれば、入力欄の大きさを直したときに札も自動で付いてくる。 */
  --pt-font:  var(--font-body);
  --pt-size:  var(--input-font);
  --pt-weight:var(--input-weight);
  --pt-color: var(--input-color);
}
/* 「作業時間」のように見出し付きで置く欄（.c-field__input と並ぶ） */
.c-papertime--field{ --pt-size:var(--input-font) }
/* 設定画面など、詰まった画面の欄（.c-input と並ぶ） */
.c-papertime--input{ --pt-size:var(--input-font-sm) }
/* 「9:00 〜 12:00」の数字がそろって見えるよう、等幅の数字にする */
.c-papertime__field{ font-variant-numeric:tabular-nums }
/* JavaScript が動く端末では、本体の欄は画面から隠す（札のほうで操作するため）。
   hidden ではなく CSS で隠すのは、JavaScript が動かない端末では
   欄が出たままになるようにするため（打った文字がそのまま保存される逃げ道） */
.c-papertime.is-drum > .c-papertime__field{ display:none }

/* 札とドラムを包む枠。ふつうの画面では、そのまま欄の下に置く */
.c-papertime__panel[hidden]{ display:none }
/* JavaScript が動かない端末では、押しても何も起きないので出さない
   （動かないものを見せると、かえって迷わせてしまうため）。
   本体の文字の欄は残るので、文字を打てば今までどおり保存できる */
.no-js .c-papertime__panel{ display:none }

/* --- 開始 〜 終了 の2つの札 ------------------------------------------ */
.c-papertime__pair{
  display:flex; align-items:flex-end; gap:10px;
  font-family:var(--font-body);
}
.c-papertime__slot{
  flex:1 1 0; min-width:0;
  display:flex; flex-direction:column; align-items:stretch; gap:3px;
  background:none; border:0; padding:0; margin:0;
  font-family:inherit; cursor:pointer; text-align:left;
}
/* 「開始」「終了」の小さな見出し。どちらの札か迷わないようにする */
.c-papertime__cap{
  font-size:11.5px; font-weight:600; color:var(--ink-muted);
  letter-spacing:.04em; line-height:1.4;
}
/* 時刻が出る枠。ふつうの入力欄と同じ枠・角丸・**同じ字**にする。
   以前はここで 20px / 700 と直に書いていたため、
   すぐ上の日付欄（15px / 400）と見た目がそろわなかった
   （2026-08-26 岡本さんのご指摘。実画面を測って確認）。
   いまは上の --pt-* から取るので、置かれた場所の入力欄と必ず同じになる。
   「押して選ぶ場所だ」ということは、字を大きくして伝えるのではなく、
   枠・角丸・「開始」「終了」の札と、押したときの色の変化で伝えている。 */
.c-papertime__value{
  display:flex; align-items:center; justify-content:center;
  min-height:48px; padding:6px 10px;
  background:var(--surface); color:var(--pt-color);
  border:1px solid var(--line); border-radius:var(--r-lg);
  font-family:var(--pt-font);
  font-size:var(--pt-size); font-weight:var(--pt-weight); line-height:1.2;
  font-variant-numeric:tabular-nums; letter-spacing:.02em;
  transition:border-color .12s, box-shadow .12s, background .12s;
}
.c-papertime__slot:hover .c-papertime__value{
  border-color:var(--brand); background:var(--brand-pale);
}
.c-papertime__slot:focus-visible{ outline:0 }
.c-papertime__slot:focus-visible .c-papertime__value{
  outline:2px solid var(--brand); outline-offset:2px;
}
/* いま開いている札は、枠を濃くして「この札を選んでいる」と分かるようにする */
.c-papertime__slot.is-open .c-papertime__value{
  border-color:var(--brand); box-shadow:0 0 0 2px var(--brand-pale);
}
/* 時刻がまだ入っていないときの表示。
   色だけを薄くする。大きさ・太さまで変えると、入っているときと
   入っていないときで字が飛び跳ねて見えるため（他の入力欄の
   プレースホルダも、色だけが薄くて大きさは同じ） */
.c-papertime__value.is-empty{ color:var(--ink-faintest) }
/* 開始と終了を結ぶ「〜」。札の枠の高さに合わせて中央に置く */
.c-papertime__tilde{
  flex:none; color:var(--ink-faint); font-size:16px; font-weight:600;
  line-height:48px;
}

/* --- 押すと下に開くドラム（時・分の2列） ----------------------------- */
.c-papertime__drum{
  display:grid; grid-template-columns:1fr 1fr; gap:8px;
  margin-top:8px; padding:8px;
  background:var(--surface);
  border:1px solid var(--brand-pale-line); border-radius:var(--r-lg);
  box-shadow:var(--shadow-hover);
  font-family:var(--font-body);
}
.c-papertime__drum[hidden]{ display:none }
.c-papertime__col{ display:flex; flex-direction:column; min-width:0 }
/* 「時」「分」の見出し。列を上でおさえて、数字が何の列か分かるようにする */
.c-papertime__colcap{
  flex:none; text-align:center;
  font-size:11.5px; font-weight:700; color:var(--ink-muted);
  padding-bottom:5px; border-bottom:1px solid var(--line-soft); margin-bottom:5px;
}
/* 数字が縦に並ぶところ。ここだけが縦に転がる（ドラム）。
   高さを決めておかないと画面いっぱいに伸びてしまうので、
   ちょうど5つぶんくらいが見える高さで止める */
.c-papertime__list{
  flex:1 1 auto; overflow-y:auto; overscroll-behavior:contain;
  /* 1マスの高さ（--pt-cell）を決めて、列の高さもその倍数にする。
     こうしないと「時」と「分」が別々の位置で止まり、
     数字が階段状にずれて見える（2026-08-26 画面を撮って確認）。
     44px × 5マス ＋ すき間4px × 4 ＝ 236px */
  max-height:calc(var(--pt-cell) * 5 + 4px * 4);
  /* 1マスずつぴたっと止める。指で転がしたときも行がそろう */
  scroll-snap-type:y mandatory;
  /* scroll-behavior:smooth は使わない。
     開いた瞬間に「いま選ばれている数字」が見えていてほしいので、
     すべって移動する時間があると、その一瞬だけ違う数字が見えてしまう。
     指で転がすときの手ざわりは、ブラウザ標準のままで十分 */
  display:flex; flex-direction:column; gap:4px;
  padding:2px;
  /* iPhone で指をはなしたあとも滑って止まるようにする */
  -webkit-overflow-scrolling:touch;
}
/* 転がす棒（スクロールバー）は細くして、数字の邪魔をしない */
.c-papertime__list::-webkit-scrollbar{ width:6px }
.c-papertime__list::-webkit-scrollbar-thumb{
  background:var(--line); border-radius:var(--r-pill);
}
.c-papertime__num{
  flex:none;
  display:flex; align-items:center; justify-content:center;
  /* 高さは決め打ち（min-height ではない）。
     字の多い「10」と少ない「9」で高さが変わると、
     「時」と「分」の行がそろわなくなるため */
  height:var(--pt-cell); padding:4px;
  scroll-snap-align:start;
  background:var(--surface); color:var(--ink-body);
  border:1px solid transparent; border-radius:var(--r-md);
  font-family:inherit; font-size:17px; font-weight:600;
  font-variant-numeric:tabular-nums; line-height:1.2;
  cursor:pointer;
  transition:background .1s, color .1s;
}
.c-papertime__num:hover{ background:var(--brand-pale); color:var(--brand-dark) }
.c-papertime__num:focus-visible{ outline:2px solid var(--brand); outline-offset:-2px }
/* いま選ばれている数字は青く塗る（岡本さんの画面イメージ）。
   色だけに頼らないよう、太字にもして見分けやすくする */
.c-papertime__num.is-on{
  background:var(--brand); border-color:var(--brand); color:#fff; font-weight:700;
}
.c-papertime__num.is-on:hover{ background:var(--brand-dark); color:#fff }

/* 「時刻を消す」。打ち直すときの入口。
   数字を選ぶ操作とは性質が違うので、2列の下いっぱいに1つだけ置き、
   控えめな見た目（枠なし・小さい字）にして目線を数字のほうへ向ける */
.c-papertime__clear{
  grid-column:1 / -1;
  display:flex; align-items:center; justify-content:center;
  min-height:36px; margin-top:2px; padding:4px 8px;
  background:none; border:0; border-top:1px solid var(--line-soft);
  color:var(--ink-faint);
  font-family:inherit; font-size:12.5px; line-height:1.4;
  cursor:pointer;
}
.c-papertime__clear:hover{ color:var(--ink); text-decoration:underline }
.c-papertime__clear:focus-visible{ outline:2px solid var(--brand); outline-offset:-2px }

/* --- 紙の画面（確認・出力）の出し方 ---------------------------------
   紙の上では「9:00 〜 12:00」の1行のまま（本体の欄を隠さない）。
   その1行を押したときだけ、札とドラムを**紙の上に浮かせて**開く。
   紙の見た目を押しのけないよう、position:absolute で紙の上に重ねる。
   閉じればまた1行に戻る（2026-08-26 岡本さんのご指示への対応）。 */
.c-papertime--paper{ position:relative }
.c-papertime--paper > .c-papertime__panel{
  position:absolute; z-index:30;
  top:calc(100% + 4px); left:0;
  /* 紙のセルより狭いことがあるので、指で押せる幅は確保する。
     ただし画面からはみ出さないよう上限も置く（横スクロールを出さないため） */
  width:max(260px, 100%); max-width:min(340px, 92vw);
  padding:10px;
  background:var(--surface);
  border:1px solid var(--brand-pale-line); border-radius:var(--r-xl);
  box-shadow:var(--shadow-hover);
  /* 紙の書体ではなく画面の書体にする。
     「これは紙に出ないもの（操作のための部品）」と見た目で分かるように。
     浮かせた札は紙の外に出る「操作の部品」なので、紙の中の字ではなく
     画面のふつうの入力欄（--input-font-sm）にそろえる。
     紙の中に印字される1行そのもの（.c-papertime__field＝.c-paperedit）は
     紙の書体・大きさのままにしてある（紙の見た目を壊さないため） */
  font-family:var(--font-body); font-size:14px; color:var(--ink-body);
  line-height:1.7;
  --pt-size:var(--input-font-sm);
}
/* 浮かせた中では、ドラムは枠を二重にしない（外側の枠で足りているため） */
.c-papertime--paper .c-papertime__drum{
  border:0; box-shadow:none; padding:0; margin-top:8px;
}
/* 紙の1行は、押せることが分かるように指の形にする */
.c-papertime--paper > .c-papertime__field{ cursor:pointer }

/* ===== 9. お知らせ・タグ ===== */
/* ホーム画面の下に置く「お知らせ」の中身。
   1行は［日付］［種類の札］［題名］の順に並ぶ（2026-08-25 岡本さんの画面イメージ）。
   日付と札は幅を固定して、題名の頭の位置を縦にそろえる。読み流しやすくするため。 */
.c-notice{ display:flex; flex-direction:column; gap:12px }
.c-notice__row{
  display:flex; gap:14px; align-items:center;
  padding:6px 0; border-bottom:1px solid var(--line-softest);
}
.c-notice__date{ font-size:11.5px; color:var(--ink-faintest); flex:none; width:64px }
/* 題名。残りの幅をすべて使う。min-width:0 は、長い題名でも
   親からはみ出さずに…で切れるようにするため（grid/flex の決まり） */
.c-notice__text{ font-size:13px; color:var(--ink-body); flex:1 1 auto; min-width:0 }
/* 種類の札。3種類とも同じ幅にして、題名の頭をそろえる。
   幅がばらばらだと題名が階段状になり、目で追いにくくなる */
.c-notice__kind{ flex:none; width:96px; text-align:center }
/* 長い題名は1行に収めて…で切る。折り返すと行の高さがばらつくため */
.c-notice__text{
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
/* いちばん下の行の下線は消す（枠の底の線と二重に見えるため） */
.c-notice__row:last-child{ border-bottom:0 }
/* お知らせが1件も無いときの案内 */
.c-notice__empty{ font-size:13px; color:var(--ink-muted); padding:6px 0 }

/* お知らせの一覧（/notices）で使う、本文まで出す1件ぶん。
   ホームの枠は題名だけなので、詳しい中身はこちらで読んでいただく。
   1件ずつ下線で区切って、どこまでが1件か分かるようにする */
.c-noticefull{ padding-bottom:14px; border-bottom:1px solid var(--line-softest) }
.c-noticefull:last-child{ padding-bottom:0; border-bottom:0 }
/* この中の行には下線を引かない（枠の区切りと二重に見えるため） */
.c-noticefull .c-notice__row{ border-bottom:0; padding-bottom:0 }
/* 題名は全部読めるようにする（一覧と違って…で切らない） */
.c-noticefull .c-notice__text{ white-space:normal; overflow:visible }
/* 本文。改行をそのまま出す（c-sysnotice__body と同じ考え方） */
.c-noticefull__body{
  margin:6px 0 0; padding-left:78px;
  font-size:13px; color:var(--ink-body); line-height:1.8;
  white-space:pre-wrap; word-break:break-word;
}
/* スマホでは日付のぶんの字下げをやめる（横幅が足りず本文が細長くなるため） */
@media (max-width:600px){
  .c-noticefull__body{ padding-left:0 }
}

/* 枠の見出しの行（左に題、右に「一覧 →」）。
   c-card の中で使う。題と行き先を1行に収めて、枠の高さを節約する */
.c-cardhead{
  display:flex; align-items:baseline; justify-content:space-between;
  gap:12px; margin-bottom:14px;
}
.c-cardhead .c-card__title{ margin:0 }
.c-cardhead__link{ font-size:12.5px; color:var(--brand); font-weight:700; flex:none }

/* ホーム画面の下に置く2つの枠の並び。
   左（お知らせ）を広く、右（お困りですか？）を狭くする＝2:1。
   狭い画面では縦に積む。横に並べたままだと、
   どちらの枠も文字が詰まって読めなくなるため。
   切り替え点を 820px にしているのは、この製品の決まり
   （横並びが縦積みになるのは 820px、スマホは 600px）に合わせるため。
   ここだけ別の数字にすると、同じ画面幅なのに場所によって
   見え方が変わってしまう（tests/test_layout_consistency.py が見張っている） */
.c-homefoot{
  display:grid; grid-template-columns:2fr 1fr; gap:20px;
  /* stretch にして左右の枠の高さをそろえる。
     start だと中身のぶんだけの高さになり、左右で高さが合わなかった
     （2026-08-25 岡本さん指摘） */
  align-items:stretch; margin-top:24px;
}
@media (max-width:820px){
  .c-homefoot{ grid-template-columns:1fr; gap:16px }
}
/* スマホでは日付・札・題名が横に収まらないので、
   ［日付＋札］を上の行、題名を下の行の2段にする。
   横並びのままだと題名が数文字しか見えなくなる */
@media (max-width:600px){
  .c-notice__row{ flex-wrap:wrap; gap:8px }
  .c-notice__date{ width:auto }
  .c-notice__kind{ width:auto }
  /* 題名は下の行に回して、幅いっぱいで折り返して全部読めるようにする */
  .c-notice__text{ flex:1 0 100%; white-space:normal; overflow:visible }
}

/* 状態の印（利用中・停止中・提出済・未設定など）。
   飾りではなく「読ませる情報」なので、小さくしすぎない。
   以前は 10.5px で、一覧の中でいちばん読みにくい文字だった（2026-08-23 変更）。 */
.c-tag{
  padding:2px 9px; border-radius:var(--r-sm);
  font-size:12px; flex:none; white-space:nowrap;
  background:var(--tag-neutral-bg); color:var(--tag-neutral-fg);
}
.c-tag--info{ background:var(--tag-info-bg); color:var(--tag-info-fg) }
.c-tag--warn{ background:var(--tag-warn-bg); color:var(--tag-warn-fg) }
/* 入力がまだ足りないことを知らせる札（2026-08-26 追加。点検・写真報告書の一覧）。
   状態の札（完了＝c-tag--warn）と隣り合って並ぶので、
   同じ色だと2つの意味が混ざって読めない。別の色にして見分けられるようにする。
   色は新しく決めず、すでにある「気づいてほしいこと」用の変数を使う。 */
.c-tag--missing{ background:var(--danger-bg); color:var(--danger) }

/* サポート窓口の枠（ホーム画面の下・右側）。
   お知らせの枠と高さがそろうよう、余白は c-card と同じ考え方にしている */
.c-support{
  background:var(--brand-pale); border:1px solid var(--brand-pale-line);
  border-radius:var(--r-lg); padding:20px 24px;
  display:flex; flex-direction:column; gap:10px;
}
/* 説明文は伸ばして、ボタンを枠の下端へ寄せる。
   左のお知らせと高さがそろったとき、ボタンが宙に浮かないようにするため */
.c-support__text{ font-size:12.5px; color:var(--ink-sub); line-height:1.6; flex:1 }
.c-support__foot{ font-size:11.5px; color:var(--ink-faint); text-align:center }
/* 枠の中のボタン。枠の幅いっぱいに広げて押しやすくする
   （右側の枠は狭いので、文字ぶんの幅だと指で狙いにくい） */
.c-support .c-btn{ justify-content:center; text-align:center }

/* 通知ベル（将来の機能強化で使う部品） */
.c-bell{ color:var(--ink-muted); font-size:15px; position:relative }
.c-bell__count{
  position:absolute; top:-4px; right:-7px;
  background:var(--danger-mark); color:#fff; border-radius:var(--r-pill);
  font-size:9px; font-weight:700; padding:1px 5px;
}

/* ===== 10. お知らせ帯（画面内のメッセージ） ===== */
.c-alert{
  border-radius:var(--r-lg); padding:11px 14px;
  font-size:13.5px; margin-bottom:18px; border-left:4px solid;
}
.c-alert--error{ background:var(--danger-bg); border-color:var(--danger); color:var(--danger) }
.c-alert--info{ background:var(--brand-pale); border-color:var(--brand); color:var(--ink-sub) }
/* 注意（間違いではないが、そのままだと困ること）。
   2026-08-25 追加。提出の前に「入力が足りません」と知らせるのに使う。
   赤（error）は「できませんでした」に取っておきたいので、あいだの色を用意した */
.c-alert--warn{ background:var(--tag-warn-bg); border-color:var(--tag-warn-fg); color:var(--tag-warn-fg) }
.c-alert p{ margin:0 }

/* 足りないものの一覧（c-alert の中に置く）。
   2026-08-25 追加。1行ずつ並べ、押すと直す場所へ飛べる */
.c-checklist{ list-style:none; margin:8px 0 0; padding:0 }
.c-checklist__item{ margin-top:4px }
.c-checklist__item::before{ content:"・"; color:var(--tag-warn-fg) }
.c-checklist__link{ color:inherit; text-decoration:underline; font-weight:600 }
.c-checklist__link:hover{ text-decoration:none }

/* ===== 11. ログイン前の画面（サイドバーなし） ===== */
.c-plain{
  flex:1; display:flex; align-items:center; justify-content:center;
  padding:40px 20px;
}
.c-panel{
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r-xl); padding:34px 34px 30px;
  width:100%; max-width:400px;
}
.c-panel__logo{ display:block; height:40px; width:auto; margin:0 auto 20px }
.c-panel__title{
  font-family:var(--font-head); font-weight:700; font-size:19px;
  color:var(--ink); margin:0 0 6px; text-align:center;
}
.c-panel__lead{
  font-size:13px; color:var(--ink-muted);
  margin:0 0 24px; text-align:center;
}

/* ===== 12. アプリ画面の共通部分 ===== */
.c-page-title{
  font-family:var(--font-head); font-weight:700; font-size:20px;
  color:var(--ink); margin:0 0 6px;
}
.c-page-lead{ font-size:13px; color:var(--ink-muted); margin:0 }
/* 「← 一覧へ」のような戻り道の下に見出しを置くときの間。
   テンプレートに style="margin-top:8px" と直書きしないための部品 */
.c-page-title--gap{ margin-top:8px }
.c-back{ display:inline-block; font-size:13px; color:var(--brand) }

/* ===== 13. エラー画面 ===== */
.c-error{ text-align:center; padding:60px 20px }
.c-error__title{
  font-family:var(--font-head); font-weight:700; font-size:22px;
  color:var(--ink); margin:0 0 10px;
}
.c-error__text{ color:var(--ink-muted); font-size:14px; margin:0 0 20px }

/* --- 一番上へ戻るボタン（c-totop） ------------------------------------
   長い一覧で、絞り込みや「選んだ分を出力」のボタンまで戻るためのもの。
   少し下へスクロールしたときだけ出す（ふだんは邪魔をしない）。
   2026-08-26 右下の「ご意見・お問い合わせ」の丸いボタンを廃止したので、
   その上に避ける必要がなくなった。右下の隅（20px）へ下ろす。
   JavaScriptが動かない環境では出さない（app.js が is-on を付けて初めて見える）。 */
.c-totop{
  position:fixed; right:20px; bottom:20px; z-index:30;
  width:44px; height:44px;              /* 指で押せる大きさ（現場のスマホ用） */
  display:flex; align-items:center; justify-content:center;
  background:var(--surface); color:var(--ink-sub);
  border:1px solid var(--line); border-radius:var(--r-pill);
  box-shadow:var(--shadow-hover);
  font-size:16px; line-height:1; cursor:pointer;
  /* ふだんは見えない。下へスクロールすると is-on が付いて見えるようになる */
  opacity:0; visibility:hidden;
  transition:opacity .15s, visibility .15s;
}
.c-totop.is-on{ opacity:1; visibility:visible }
.c-totop:hover{ border-color:var(--brand); color:var(--brand) }
.c-totop:focus-visible{ outline:2px solid var(--brand-light); outline-offset:2px }

@media (prefers-reduced-motion:reduce){
  .c-totop{ transition:none }
}

/* ===== 14. フッター ===== */
.c-footer{
  text-align:center; font-size:11px; color:var(--ink-faintest);
  padding:14px; background:var(--surface);
  border-top:1px solid var(--line);
}

/* ===== 15. スマホ ===== */
@media (max-width:820px){
  /* 狭い画面では、左メニューを「三本線で開く引き出し」に切り替える。
     以前は画面の上に横並びの帯にしていたが、
     ・押したい項目が帯の外に隠れて横スクロールが要る
     ・上にあるぶん本文が下がる
     ため操作しにくかった（2026-08-23 岡本さん指摘）。
     引き出しにすると、ふだんは本文が画面いっぱいに使える。 */
  .c-header__menu{ display:flex }
  .c-shell{ flex-direction:column }

  .c-side{
    position:fixed; top:var(--header-h); left:0; bottom:0;
    z-index:60;
    width:min(84vw, var(--side-w));
    overflow-y:auto;
    /* 閉じているときは画面の左外に置く。display:none にしないのは、
       開閉が滑らかに見えるようにするため */
    transform:translateX(-100%);
    transition:transform .2s ease;
  }
  .c-side.is-open{ transform:translateX(0) }

  /* 幕。開いているときだけ出る。押すと閉じる */
  .c-backdrop{
    display:block; position:fixed; inset:0; z-index:50;
    background:rgba(16,26,43,.45);
    border:0; padding:0; margin:0;
    opacity:0; pointer-events:none;
    transition:opacity .2s ease;
  }
  .c-backdrop.is-open{ opacity:1; pointer-events:auto }

  /* 指で押す場所は 44px 以上にする */
  .c-side__item, .c-side__item--toggle{ min-height:44px }
  .c-side__subitem{ min-height:44px; display:flex; align-items:center }
  /* スマホ幅では「別タブで開く」(↗) は出さない。
     指で押すと誤タップしやすく、現場でタブを増やす操作は使わないため。 */
  .c-side__open{ display:none }
  .c-side__row > .c-side__item,
  .c-side__row > .c-side__subitem{ padding-right:12px }
  /* 下の余白は「一番上へ戻る」ボタン（.c-totop）に本文が隠れない分だけ取る。
     2026-08-26 右下の「ご意見・お問い合わせ」の丸いボタンを廃止したので
     92px から 72px へ詰めた */
  .c-main{ padding:18px 14px 72px }
  .c-welcome{ padding:20px }
  .c-welcome__facts{ margin-left:0; width:100%; text-align:left }
  .c-tiles{ grid-template-columns:1fr }
}

@media (max-width:600px){
  .c-header{ padding:0 10px; gap:8px }
  .c-header__sub{ display:none }
  .c-user__name, .c-user__role{ display:none }
  /* ロゴは狭い画面では小さくする。大きいままだと右の
     「パスワード変更」「ログアウト」の場所が足りなくなり、
     文字が縦に潰れて読めなくなる（2026-08-23 岡本さん指摘） */
  .c-header__logo{ height:28px }
  .c-header__right{ gap:6px }
  /* 狭い画面では文字を出さず、記号だけにする。
     文字のままだと入りきらず潰れるため。
     data-short の中身（🔑 / ⏻）を出し、元の文字は読み上げ用に残す */
  .c-logout__btn{ padding:0; width:44px; height:44px; font-size:0 }
  .c-logout__btn::before{
    content:attr(data-short); font-size:16px; line-height:1;
  }
  /* ヘッダーのボタン（ご意見）は、狭い画面でも文字のまま出す。
     以前は「お問い合わせ」の6文字が入りきらず記号（✎）だけにしていたが、
     記号だけだと何のボタンか分からない（2026-08-26 岡本さんご指摘）。
     文字を「ご意見」の3文字に短くしたことで、狭い画面にも収まるようになった。

     実際に 375px の画面で測った結果（2026-08-26）:
       ヘッダーの中身 = 左メニュー 44px ＋ ロゴ 120.8px ＋ このボタン 63.5px
                        ＋ 利用者アイコン 56.6px ＋ すき間 8px×3 = 309px
       使える幅 = 375px − 左右の余白 10px×2 = 355px
     46px 余るので、はみ出さない（横スクロールが出ないことも確認ずみ）。
     利用者の名前は上の指定でこの幅では隠れるため、名前が長くても押し出されない。

     左右の余白だけ 14px → 12px に詰めて、余りをさらに確保している。 */
  .c-headerbtn{ padding:0 12px }
  /* 名前と役割は隠れてアバターの1文字だけになるが、
     アバターごと押せばメニューは開く（押す場所は 44px のまま） */
  .c-usermenu__button{ padding:0 4px; gap:4px }
  .c-welcome__name{ font-size:20px }
  .c-panel{ padding:26px 22px }
}

/* ===== 16. 業務アプリの部品 =====
   入力 → 処理 → 確認・修正 → 出力 の4画面で使う共通部品。
   アプリ側のテンプレートには色やサイズを書かず、ここの部品だけを使う。 */

/* --- 手順の表示 --- */
.c-steps{
  display:flex; align-items:center; gap:6px; flex-wrap:wrap;
  margin-bottom:22px;
}
.c-step{
  display:flex; align-items:center; gap:8px;
  padding:8px 14px; border-radius:99px;
  background:var(--surface); border:1px solid var(--line);
  font-size:12.5px; color:var(--ink-faint); white-space:nowrap;
}
.c-step__num{
  width:20px; height:20px; border-radius:50%; flex:none;
  display:grid; place-items:center; font-size:11px; font-weight:700;
  background:var(--line-soft); color:var(--ink-faint);
}
.c-step.is-current{ border-color:var(--brand); background:var(--brand-pale); color:var(--brand) }
.c-step.is-current .c-step__num{ background:var(--brand); color:#fff }
.c-step.is-done{ color:var(--ink-sub) }
.c-step.is-done .c-step__num{ background:var(--app-green-bg); color:var(--app-green-fg) }
.c-step__arrow{ color:var(--ink-faintest); font-size:12px }

/* --- ファイルを選ぶ枠 --- */
.c-upload{
  border:2px dashed var(--brand-pale-line); border-radius:var(--r-lg);
  background:var(--brand-pale); padding:28px 24px; text-align:center;
}
.c-upload__icon{ font-size:30px; color:var(--brand); line-height:1 }
.c-upload__title{ font-weight:700; font-size:15px; color:var(--ink); margin-top:10px }
.c-upload__hint{ font-size:12.5px; color:var(--ink-muted); margin-top:6px; line-height:1.7 }
.c-upload__input{
  display:block; margin:16px auto 0; max-width:420px; width:100%;
  font-family:inherit; font-size:13px; color:var(--ink-body);
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r-md); padding:10px 12px;
}
/* ファイルを枠の上まで運んできている間（app.js が付け外しする） */
.c-upload.is-dragover{
  border-color:var(--brand); border-style:solid;
  background:var(--brand-pale-line);
}
/* 選んだファイルの名前 */
.c-upload__file{
  display:block; margin-top:10px;
  font-size:12.5px; font-weight:700; color:var(--brand);
}

/* --- 件数の表示 --- */
.c-stats{ display:flex; flex-wrap:wrap; gap:10px; margin-bottom:18px }
.c-stat{
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r-md); padding:12px 18px; min-width:110px;
}
.c-stat__value{ font-weight:700; font-size:20px; color:var(--ink); line-height:1.2 }
.c-stat__value--brand{ color:var(--brand) }
.c-stat__value--warn{ color:var(--tag-warn-fg) }
.c-stat__label{ font-size:11.5px; color:var(--ink-faintest); margin-top:4px }

/* --- 絞り込みの帯 --- */
.c-toolbar{
  display:flex; flex-wrap:wrap; align-items:center; gap:10px;
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r-md); padding:12px 14px; margin-bottom:14px;
}
.c-toolbar__grow{ flex:1 1 200px }
.c-toolbar__note{ font-size:12px; color:var(--ink-muted) }

/* --- 入力部品（フォームの追加分） --- */
.c-input{
  width:100%; padding:8px 10px;
  /* 大きさは変数から取る（時刻の札と同じ値を見るため。数値の直書きをしない） */
  font-size:var(--input-font-sm); font-family:inherit;
  border:1px solid var(--line); border-radius:var(--r-sm);
  background:var(--surface); color:var(--ink);
}
.c-input:focus{ outline:2px solid var(--brand-light); outline-offset:-1px }
.c-input--narrow{ max-width:220px }
.c-select{
  padding:8px 10px; font-size:13px; font-family:inherit;
  border:1px solid var(--line); border-radius:var(--r-sm);
  background:var(--surface); color:var(--ink); max-width:100%;
}
.c-textarea{
  width:100%; padding:10px 12px; min-height:96px; resize:vertical;
  font-size:13.5px; font-family:inherit; line-height:1.8;
  border:1px solid var(--line); border-radius:var(--r-md);
  background:var(--surface); color:var(--ink);
}
.c-check{ display:inline-flex; align-items:center; gap:7px; font-size:13px; color:var(--ink-body) }
.c-check input{ width:16px; height:16px; accent-color:var(--brand) }

/* --- 表 --- */
.c-tablewrap{
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r-lg); overflow-x:auto;
}
.c-table{ width:100%; border-collapse:collapse; font-size:13px; min-width:760px }
.c-table th, .c-table td{
  padding:10px 12px; text-align:left; vertical-align:middle;
  border-bottom:1px solid var(--line-soft);
}
/* 見出しの行。「何の列か」を伝える大事な文字なので小さくしすぎない
   （以前は 11.5px。2026-08-23 変更） */
.c-table th{
  background:var(--line-softest); color:var(--ink-sub);
  font-size:12.5px; font-weight:700; white-space:nowrap;
  position:sticky; top:0; z-index:1;
}
.c-table tr:last-child td{ border-bottom:none }
.c-table tbody tr:hover{ background:var(--line-softest) }
.c-table__main{ font-weight:700; color:var(--ink) }
.c-table__sub{ display:block; font-size:11.5px; color:var(--ink-faintest); margin-top:2px }
.c-table__c{ text-align:center; white-space:nowrap }
.c-table__nowrap{ white-space:nowrap }
/* 数を入れる列。桁をそろえて見比べられるように右寄せにする */
.c-table__num{ text-align:right; white-space:nowrap }

/* --- 並べ替えできる列見出し（c-sortth） --------------------------------
   見出しを押すと、その列で並べ替える。
   並び順の値は「ほかの条件で絞り込む」の中の並び順と同じものを使うので、
   どちらを操作しても同じ結果になる。
   ふつうのリンクなので、JavaScriptが動かない環境でも効く。 */
.c-sortth{ padding:0 }
.c-sortth__link{
  display:flex; align-items:center; gap:5px;
  /* th の余白をリンク側に持たせて、見出しのどこを押しても効くようにする */
  padding:11px 14px;
  color:inherit; font:inherit; text-decoration:none;
  /* 指で押す場所として十分な高さを確保する（現場のスマホ用） */
  min-height:44px; box-sizing:border-box;
}
.c-sortth__link:hover{ background:var(--brand-pale); color:var(--brand) }
.c-sortth__link:focus-visible{ outline:2px solid var(--brand-light); outline-offset:-2px }
/* いまこの列で並んでいるときは、色と太さで分かるようにする */
.c-sortth__link.is-on{ color:var(--brand) }
/* 並べ替えの向きの印（⇅ ▲ ▼）。ふだんは控えめにして、
   並んでいる列だけはっきり見せる */
.c-sortth__mark{ font-size:10px; color:var(--ink-faintest); flex:none }
.c-sortth__link.is-on .c-sortth__mark{ color:var(--brand) }
/* 中央寄せ・右寄せの列では、見出しの中身も同じ側に寄せる */
.c-sortth.c-table__c .c-sortth__link{ justify-content:center }
.c-sortth.c-table__num .c-sortth__link{ justify-content:flex-end }

/* 列が少なく、中身も短い表につける。
   ふつうの .c-table は横760pxを確保して横スクロールさせるが、
   4〜5列しかない表ではスマホでも収まるので、その幅の縛りを外す。
   （現場のスマホで、毎回横に振らないと右端のボタンが押せなかったため）
   列が多い表には付けないこと。付けると文字が潰れて読みにくくなる。 */
.c-table--fit{ min-width:0 }
/* 表の行やボタンの並びの中に置くフォーム。
   実行を伴う操作（停止・再開など）はリンクではなくボタンで送るため、
   1行に並べても崩れないようにする */
.c-inline-form{ display:inline-block; margin:0 }

/* --- ボタンの並び --- */
.c-actions{
  display:flex; flex-wrap:wrap; align-items:center; gap:10px;
  margin-top:20px;
}
.c-actions__right{ margin-left:auto }
.c-actions--right{ justify-content:flex-end }
.c-btn--sm{ padding:7px 12px; font-size:12px }

/* --- 画面の中の小見出し ------------------------------------------------
   1つの画面の中を「ここから別のまとまり」と区切る文字。
   以前は各アプリが c-card__title に style="margin:..." を直書きしていた。
   直書きをやめるため、部品として置く。 */
.c-subhead{
  font-family:var(--font-head); font-weight:700; font-size:14px;
  color:var(--ink); margin:18px 0 12px;
}

/* --- 小さなボタン（消す・並べ替えなど） --------------------------------
   以前は点検・写真報告書だけがアプリ独自CSS（t-mini）で持っていた。
   ほかの画面でも同じ形を使うため、ここへ引き上げた。 */
.c-mini{
  background:transparent; color:var(--ink-muted);
  border:1px solid var(--line); border-radius:var(--r-sm);
  padding:3px 8px; font-size:11px; font-family:inherit; cursor:pointer;
}
.c-mini:hover{ border-color:var(--brand); color:var(--brand) }

/* --- 印（タグ）を横に並べる（撮影箇所など） ----------------------------
   以前は点検・写真報告書だけがアプリ独自CSS（t-chips / t-chip）で持っていた。 */
.c-chips{ display:flex; gap:6px; flex-wrap:wrap; align-items:center; margin-top:8px }
.c-chip{ display:flex; align-items:center; gap:4px }
.c-chip form{ margin:0 }

/* --- 設定の一覧（1行に入力欄をいくつか並べる） --------------------------
   点検項目の設定と、日常清掃の項目マスタが、同じ形をそれぞれ
   アプリ独自CSS（i-srow / t-daily-srow）で持っていた。
   同じものは1つにする、というルールに合わせてここへ引き上げた。
   列の並びは画面ごとに違うので、修飾クラスで選ぶ（テンプレートに直書きしない）。 */
.c-srow{
  display:grid;
  grid-template-columns:1fr 1fr auto auto auto;
  gap:8px; align-items:center;
  padding:7px 0; border-bottom:1px solid var(--line-soft);
}
.c-srow:last-child{ border-bottom:none }
.c-srow .c-input{ font-size:12.5px; padding:6px 8px }
/* 見るだけの行（2列） */
.c-srow--read{ grid-template-columns:1fr 1fr }
/* 点検項目の設定（項目名・チェック項目・標準点・対象外・削除） */
.c-srow--check{ grid-template-columns:1fr 1.4fr 90px auto auto }
/* 見出しの行（項目名・チェック項目…）。入力欄ではないので細く見せる */
.c-srow--head{ font-size:11.5px; color:var(--ink-faint); font-weight:700 }
/* 場所やブロックの区切り */
.c-sblock{ font-weight:700; font-size:13px; color:var(--ink); margin:14px 0 4px }
/* いちばん下の「＋ 足す」の行 */
.c-sadd{ display:flex; gap:6px; flex-wrap:wrap; align-items:center; margin-top:12px }
.c-sadd .c-input{ font-size:12.5px }
@media (max-width:820px){
  /* 狭い画面では横に並べず縦に積む（列が潰れて文字が重なるのを防ぐ）。
     修飾クラスの指定も打ち消すため、まとめて1列にする */
  .c-srow,
  .c-srow--read,
  .c-srow--check{ grid-template-columns:1fr; gap:5px; padding:10px 0 }
  .c-srow--head{ display:none }
}

/* --- 補足の文 --- */
.c-note{ font-size:12.5px; color:var(--ink-muted); line-height:1.8 }
.c-note--warn{ color:var(--tag-warn-fg) }

/* --- 状態の印（タグの追加分） --- */
.c-tag--ok{ background:var(--app-green-bg); color:var(--app-green-fg) }
.c-tag--muted{ background:var(--tag-neutral-bg); color:var(--tag-neutral-fg) }

/* --- できあがったファイルの一覧 --- */
.c-files{ display:flex; flex-direction:column; gap:1px; background:var(--line-soft);
  border:1px solid var(--line); border-radius:var(--r-md); overflow:hidden }
.c-file{
  display:flex; align-items:center; gap:12px;
  background:var(--surface); padding:11px 14px; font-size:13px;
  color:var(--ink-body); text-decoration:none;
}
.c-file:hover{ background:var(--brand-pale); color:var(--brand) }
.c-file__icon{ color:var(--app-green-fg); flex:none }
.c-file__name{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.c-file__get{ font-size:12px; font-weight:700; color:var(--brand); flex:none }

@media (max-width:820px){
  .c-steps{ gap:4px }
  .c-step{ padding:6px 10px; font-size:11.5px }
  .c-stat{ flex:1 1 calc(50% - 5px); min-width:0 }
  .c-actions__right{ margin-left:0; width:100% }
}

/* 帯・件数表示を c-stack の中に入れるときは、二重に間が空かないよう余白を消す */
.c-toolbar--flat{ margin-bottom:0 }
.c-stats--flat{ margin-bottom:0 }
.c-steps--flat{ margin-bottom:0 }
.c-actions--flat{ margin-top:0 }

/* ===== 17. 業務アプリの画面の枠 =====
   Billy の画面と同じ組み方にそろえている。
   お客様が普段使っている画面と同じ形にして、迷わないようにするため。
   （上部バー → 濃紺の見出し帯 → 検索 → 一覧、という並び） */

/* --- 上部バー（画面名＋右に操作ボタン） --- */
.c-appbar{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r-lg) var(--r-lg) 0 0;
  padding:12px 18px;
}
.c-appbar__title{
  font-family:var(--font-head); font-weight:700; font-size:17px;
  color:var(--ink); margin:0;
  border-left:4px solid var(--brand); padding-left:10px;
}
.c-appbar__lead{ font-size:12px; color:var(--ink-muted) }
.c-appbar__actions{ margin-left:auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap }
.c-appbar__actions form{ margin:0 }

/* --- 濃紺の見出し帯が付く枠（検索・一覧） --- */
.c-block{
  background:var(--surface); border:1px solid var(--line); border-top:none;
}
.c-block--last{ border-radius:0 0 var(--r-lg) var(--r-lg); padding-bottom:6px }
.c-block__head{
  background:var(--side-bg); color:#fff;
  font-size:12.5px; font-weight:700; padding:7px 18px;
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
}
.c-block__head--thin{ font-weight:400 }
.c-block__count{ margin-left:auto; font-weight:400; color:var(--side-text) }
.c-block__body{ padding:14px 18px }

/* --- 検索（絞り込み）の共通部品 -----------------------------------------
   3アプリ（お知らせチラシ・点検写真報告書・清掃巡回）で、見た目・たたみ方・
   言葉をすべて同じにするための部品。アプリ側で独自CSSを持たないこと。

   2026-08-23 変更（岡本さんのご指摘3点への対応）
   ・以前は flex + min-width:170px で並べていたが、項目が10個ある画面では
     狭い画面で170pxを保てず、項目名と入力欄が重なっていた。
     grid（auto-fit + minmax）に変え、入れられる幅が無いときは自動で
     列数が減るようにした。minmax の下限には % を混ぜ、
     どんなに狭くても枠からはみ出さない（＝重ならない）ようにしている。
   ・縦に場所を取りすぎないよう、余白と行間を詰めた。
     ただし指で押す場所（入力欄・ボタン）は 44px 以上を保つ。 */
.c-search{
  display:grid;
  /* min(170px,100%) が要。画面が170pxより狭くても列がはみ出さない */
  grid-template-columns:repeat(auto-fit,minmax(min(170px,100%),1fr));
  gap:10px 14px; align-items:end; padding:12px 18px;
}
/* 「文字で探す」だけは2列ぶんの幅を取る（長い言葉を入れるため）。
   1列しか置けない狭い画面では自動で1列に戻る */
.c-search__field--wide{ grid-column:span 2 }
/* 日付の期間（この日から〜この日まで）も2列ぶんを使う。
   1列（最小170px）に日付を2つ入れると 1つ 74px まで潰れて読めないため
   （2026-08-26 岡本さんのご指摘への対応）。 */
.c-search__field--range{ grid-column:span 2 }
@media (max-width:600px){
  .c-search__field--wide{ grid-column:span 1 }
  /* スマホは日付を縦に積むので、1列に戻してよい */
  .c-search__field--range{ grid-column:span 1 }
}
.c-search__field{ min-width:0 }
/* 「絞り込む」「解除」の行。3アプリとも検索欄の下・左そろえで同じ位置に出す */
.c-search__submit{
  grid-column:1/-1;
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
}
/* 入力欄の見出し。「何を入れる欄か」を伝える文字なので小さくしすぎない
   （以前は 11.5px。2026-08-23 変更） */
.c-label{
  display:block; font-size:12.5px; color:var(--ink-muted);
  margin-bottom:3px;
  /* 長い項目名でも欄からあふれず、重なって見えないようにする */
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.c-range{ display:flex; align-items:center; gap:6px }
.c-range__tilde{ color:var(--ink-faint); font-size:12px; flex:none }
/* 日付の2つ入力は、日付が最後まで読める幅を必ず確保する。

   2026-08-26 修正（岡本さん「作業日の日付が消えている」）。
   これまでは min-width:0 だったため、絞り込みの列（最小170px）を
   2つで分け合うと 1つあたり 74〜102px まで潰れていた。
   <input type="date"> はブラウザが中に「年/月/日」とカレンダーの絵を
   描くので、それより狭いと日付の後ろが絵の下に隠れて読めなくなる。
   ＝値が消えたのではなく、狭くて読めない状態だった。

   実測では 130px で「2026/08/01」が最後まで読める。
   余裕を見て 138px を下限にする。 */
.c-range .c-input{ min-width:138px; flex:1 1 0 }
@media (max-width:600px){
  /* スマホは日付を縦に積む（横だと1つが極端に狭くなるため） */
  .c-range{ flex-direction:column; align-items:stretch; gap:4px }
  .c-range__tilde{ display:none }

  /* 指で押す場所は 44px 以上にする（現場でスマホから使うため）。
     パソコンでは縦を詰めたいので、狭い画面のときだけ効かせる */
  .c-search .c-input{ min-height:44px }
  .c-search .c-btn{ min-height:44px; padding-top:0; padding-bottom:0 }
  .c-search .c-check{ min-height:44px }
}

/* --- 「ほかの条件で絞り込む」＝たためる部分（共通部品） ------------------
   以前は点検・写真報告書だけがアプリ独自CSS（t-filter）で持っていた。
   3アプリで同じたたみ方にするため、ここへ引き上げた。 */
.c-search__more{ grid-column:1/-1; margin:0 }
.c-search__more-sum{
  display:flex; align-items:center; gap:8px;
  cursor:pointer; list-style:none;
  font-size:12.5px; color:var(--brand); font-weight:700;
  /* 指で押す場所なので 44px 以上を確保する */
  min-height:44px; padding:4px 0;
}
.c-search__more-sum::-webkit-details-marker{ display:none }
.c-search__more-sum::before{ content:"▶"; font-size:9px }
.c-search__more[open] .c-search__more-sum::before{ content:"▼" }
/* たたんだ中身も、外側と同じ並べ方にする（見た目を揃えるため） */
.c-search__more-body{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(min(170px,100%),1fr));
  gap:10px 14px; align-items:end;
  padding:4px 0 8px;
}

/* --- 折りたたみ（ふだん使わない項目をたたんでおく枠） ---
   2026-08-24 追加。マスタの入力画面を簡単に見せるために使う（B12）。
   検索欄専用の c-search__more と同じ見た目にそろえてあるが、
   こちらは入力欄でも表でも、どこでも使える一般の部品。 */
.c-details{ border-top:1px solid var(--line-soft); margin:14px 0 0 }
.c-details__summary{
  display:flex; align-items:center; gap:8px;
  cursor:pointer; list-style:none;
  font-size:12.5px; color:var(--brand); font-weight:700;
  /* 指で押す場所なので 44px 以上を確保する */
  min-height:44px; padding:4px 0;
}
.c-details__summary::-webkit-details-marker{ display:none }
.c-details__summary::before{ content:"▶"; font-size:9px }
.c-details[open] .c-details__summary::before{ content:"▼" }
.c-details__body{ padding:2px 0 8px }

/* --- 罫線の表（Billyの一覧と同じ見た目） --- */
.c-grid-table{ width:100%; border-collapse:collapse; font-size:12.5px; white-space:nowrap }
.c-grid-table th{
  background:var(--line-softest); color:var(--ink-sub);
  font-weight:700; text-align:left;
  padding:7px 10px; border:1px solid var(--line);
}
.c-grid-table td{
  padding:7px 10px; border:1px solid var(--line); color:var(--ink-body);
  background:var(--surface); vertical-align:middle;
}
.c-grid-table tr:hover td{ background:var(--brand-pale) }
.c-grid-table__c{ text-align:center; width:52px }
.c-grid-table__num{ text-align:right; width:76px }
.c-grid-table__wrap{ white-space:normal; min-width:180px }

/* --- 一覧の「開く」ボタン（Billyの画面と同じ形） --- */
.c-editbtn{
  display:inline-block; padding:3px 10px;
  border:1px solid var(--brand); border-radius:var(--r-sm);
  font-size:11.5px; font-weight:700; color:var(--brand);
  background:var(--surface); text-decoration:none; white-space:nowrap;
}
.c-editbtn:hover{ background:var(--brand); color:#fff }

/* --- 左の縦メニュー（マスタの選択など） --- */
.c-split{ display:flex; align-items:stretch }
.c-split__nav{
  width:186px; flex:none;
  background:var(--line-softest);
  border:1px solid var(--line); border-top:none;
  padding:12px 10px;
}
.c-split__label{ font-size:10.5px; color:var(--ink-faint); padding:8px 8px 4px; letter-spacing:.06em }
.c-split__item{
  display:flex; align-items:center; gap:8px;
  padding:9px 10px; border-radius:var(--r-md);
  font-size:13px; color:var(--ink-body); text-decoration:none;
}
.c-split__item:hover{ background:var(--surface); color:var(--brand) }
.c-split__item.is-active{ background:var(--brand); color:#fff; font-weight:700 }
.c-split__icon{ width:16px; text-align:center; color:var(--ink-faint); flex:none }
.c-split__item.is-active .c-split__icon{ color:#fff }
.c-split__note{
  font-size:11px; color:var(--ink-faint); line-height:1.6;
  margin:14px 8px 0; padding-top:12px; border-top:1px solid var(--line);
}
.c-split__main{ flex:1; min-width:0 }

/* --- 入口のボタンを横2列に並べる枠（基本情報の各種マスタなど） ---
   Billy の「基本設定」画面と同じ並べ方。
   スマホでも2列のまま。長い名前は折り返すので、横スクロールにはならない。 */
.c-linkgrid{
  display:grid; grid-template-columns:repeat(2,1fr);
  gap:10px; padding:14px 18px;
}

/* --- 一覧の先頭（全部選ぶ・まとめて操作） --- */
.c-listhead{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:12px 18px; border-bottom:1px solid var(--line);
}

/* --- 一覧を「10件分の高さ」に収めて、その中だけ動かす枠（c-scrollbox） ---
   2026-08-26 追加。岡本さんのご指摘「縦に長すぎる。表示件数を絞って
   スクロール（10件まで）」への対応。

   ページを分けるやり方（1ページ目・2ページ目…）ではなく、
   「窓」を10件分だけ開けて、その中を上下に動かして残りを見る形にした
   （岡本さんが3案から「枠の中だけスクロール」をお選びになったため）。

   高さの決め方
     固定の px で決め打ちすると、文字が大きくなる画面幅（スマホ）では
     見える件数がずれる。そこで「1件分の高さ × 10件」で計算している。
     1件分の高さ（--scrollbox-row）は一覧の作りごとに違うので、
     各アプリの CSS で上書きする。ここでは既定値だけ置く。

   下端の影
     枠の下でぷつりと切れていると「ここで終わり」と誤解される。
     続きがあることが見て分かるよう、下端に薄い影を重ねている。
     いちばん下まで動かすと影は消える（background-attachment:local の仕組み。
     JavaScript を足さずに実現できる）。

   スマホでの操作
     overscroll-behavior:contain … 枠の中をなぞっている間はページ全体が動かず、
     枠の端まで来て初めてページ全体のスクロールに移る。
     -webkit-overflow-scrolling:touch … iPhone で指を離した後もすっと流れる。 */
.c-scrollbox{
  --scrollbox-row:46px;   /* 1件分のおよその高さ（各アプリで上書きする） */
  --scrollbox-rows:10;    /* 何件分を見せるか */
  /* 「1件分の高さ × 10件」で高さを決める。
     rem（文字の大きさを基準にした単位）なので、
     文字を大きくする設定でも件数がずれない。
     ただしスマホは画面そのものが短く、10件分（1300px超）だと
     窓のほうが画面より長くなって意味がなくなる。
     そこで「画面の高さの85%」を上限にして、短い画面では自動的に
     見える件数が減るようにしている（min＝小さいほうを採る）。 */
  /* 10件ぴったりで切ると、最後の行がきれいに終わって見え、
     「ここで終わり」と誤解される。そこで 10件＋次の行の頭だけ（0.35件分）
     をのぞかせて、続きがあることを見た目でも伝える（2026-08-26）。 */
  max-height:min(
    calc(var(--scrollbox-row) * (var(--scrollbox-rows) + .35)),
    85vh
  );
  overflow-y:auto;
  overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;
  /* 影の重ね方
     1枚目・2枚目 … 白のぼかし。いちばん上／いちばん下にいるとき影を隠す役
     3枚目・4枚目 … 灰色の影。上下に続きがあるときだけ見える
     local を付けた層は中身と一緒に動き、scroll を付けた層は枠に貼り付く。
     この差で「上まで来たら上の影が消える」動きになる。 */
  /* 「窓（入れ物）」だと分かるように、上下に区切り線を引く */
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
  /* 動かせるつまみ（スクロールバー）を、いつでも見えるようにする。
     最近のブラウザ・スマホは「触っている間だけ」つまみを出す作りなので、
     何もしないと止まっているときは何も見えず、続きがあると気づけない。
     色を指定すると、その場所がつねに確保されて出たままになる。 */
  scrollbar-width:thin;
  scrollbar-color:var(--ink-faintest) var(--line-softest);
}
/* Chrome・Edge・Safari 用（上の指定が効かない版のため、同じ見た目を作る） */
.c-scrollbox::-webkit-scrollbar{ width:10px; height:10px }
.c-scrollbox::-webkit-scrollbar-track{ background:var(--line-softest) }
.c-scrollbox::-webkit-scrollbar-thumb{
  background:var(--ink-faintest); border-radius:5px;
  border:2px solid var(--line-softest);
}

/* 表を入れる場合は、横スクロール（c-tablewrap）と縦スクロールを
   同じ入れ物で受け持たせる。別々の入れ物にすると、
   スマホで横に振ったときに縦の位置がずれる。 */
.c-tablewrap.c-scrollbox{ overflow:auto }

/* --- スクロールする窓のすぐ下に置く案内 -------------------------------
   窓の下端で切れていると「ここで終わり」と誤解される。
   影だけでは弱いので、言葉でもはっきり伝える。
   件数は画面ごとに変わるので、文言はテンプレート側から入れる。 */
.c-scrollnote{
  display:flex; align-items:center; gap:6px;
  padding:8px 18px; font-size:12px; color:var(--ink-muted);
  background:var(--line-softest); border-bottom:1px solid var(--line);
}
.c-scrollnote::before{
  content:"\2193"; /* 下向きの矢印 */
  font-weight:700; color:var(--brand);
}

/* --- 入力欄を横に並べる --- */
.c-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:0 18px }

@media (max-width:820px){
  .c-split{ flex-direction:column }
  .c-split__nav{ width:auto; display:flex; flex-wrap:wrap; gap:6px; align-items:center }
  .c-split__label{ padding:0 4px }
  .c-split__note{ display:none }
  .c-appbar__actions{ margin-left:0; width:100% }
}

/* ===== 18. 送信中の表示 =====
   写真を送っている間、画面全体を覆って進み具合を出す部品。
   （現場のスマホで二重に押してしまう事故を防ぐ） */
.c-sending{
  position:fixed; inset:0; z-index:50;
  display:flex; align-items:center; justify-content:center;
  background:rgba(16,26,43,.45);
}
.c-sending__box{
  display:flex; align-items:center; gap:12px;
  background:var(--surface); border-radius:var(--r-xl);
  box-shadow:var(--shadow-hover);
  padding:18px 22px; max-width:80vw;
}
.c-sending__text{ font-size:13.5px; color:var(--ink-body) }
.c-sending__spin{
  width:20px; height:20px; flex:none; border-radius:50%;
  border:3px solid var(--brand-pale-line); border-top-color:var(--brand);
  animation:c-spin .9s linear infinite;
}
@keyframes c-spin{ to{ transform:rotate(360deg) } }

/* 動きを減らす設定の端末では回さない */
@media (prefers-reduced-motion:reduce){
  .c-sending__spin{ animation:none }
}

/* ===== 18-2. 送信の進み具合（画面をふさがない帯） =====
   写真を次々に撮るときに使う。.c-sending は画面全体を覆って操作を止めるため、
   「撮ったらすぐ次を撮る」使い方には向かない。こちらは画面の上に細い帯を出すだけで、
   帯が出ている間も撮影ボタンを押せる（2026-08-23 現場の「撮影が遅い」への対応）。 */
.c-upq{
  position:fixed; left:0; right:0; top:0; z-index:40;
  background:var(--surface); border-bottom:1px solid var(--line);
  box-shadow:var(--shadow-hover);
  padding:7px 14px; display:flex; align-items:center; gap:10px;
  font-size:12.5px; color:var(--ink-body);
}
.c-upq[hidden]{ display:none }
.c-upq__spin{
  width:15px; height:15px; flex:none; border-radius:50%;
  border:2.5px solid var(--brand-pale-line); border-top-color:var(--brand);
  animation:c-spin .9s linear infinite;
}
/* 送信がぜんぶ終わったら回転を止める（済んだ印） */
.c-upq--done .c-upq__spin{
  animation:none; border-color:var(--brand);
}
.c-upq__text{ flex:1 1 auto; min-width:0 }
.c-upq__count{ font-weight:700; color:var(--ink) }
/* 送れなかったときに出る「やり直す」ボタン */
.c-upq__retry{ flex:none }
.c-upq--warn{ background:var(--danger-bg); border-bottom-color:var(--danger) }
.c-upq--warn .c-upq__count{ color:var(--danger) }

@media (prefers-reduced-motion:reduce){
  .c-upq__spin{ animation:none }
}

/* ===== 18-3. 送信を待っている写真 =====
   撮った瞬間に画面へ小さく出し、撮れたことが目で分かるようにする部品。
   送信が終わるまでは薄く、送れなかったものは赤い枠と「やり直す」を出す。 */
.c-pending{ position:relative; display:block }
.c-pending__img{
  display:block; width:100%; height:92px; object-fit:contain;
  border:1px solid var(--line); border-radius:var(--r-md);
  background:var(--line-softest); opacity:.5;
}
.c-pending__state{
  position:absolute; left:0; right:0; bottom:0;
  font-size:10px; text-align:center; padding:1px 2px;
  background:var(--surface); opacity:.92; color:var(--ink-sub);
  border-bottom-left-radius:var(--r-md); border-bottom-right-radius:var(--r-md);
}
.c-pending--fail .c-pending__img{ border:1.5px solid var(--danger); opacity:.9 }
.c-pending--fail .c-pending__state{ color:var(--danger); font-weight:700; cursor:pointer }

/* ===== 18-4. 小画面（出力設定などの設定ダイアログ） =====
   一覧で選んだあと、出す前に「PDFかExcelか」「発行日はいつか」を決めてもらう
   小さな画面。3つのアプリ（点検・写真報告書／清掃巡回報告書／日常清掃
   チェックリスト）で同じ部品・同じ言葉を使う（2026-08-24 お客様のご要望）。

   HTMLの <dialog> をそのまま使う。理由は2つ。
   ・JavaScriptが動かない環境でも、中身がふつうのフォームとして画面に残るので
     そのまま出力できる（逃げ道。下の :not([open]) の指定がそれ）
   ・Escキーで閉じる・後ろを押せなくする、をブラウザが用意してくれる */
.c-dialog{
  border:1px solid var(--line); border-radius:var(--r-lg);
  background:var(--surface); color:var(--ink);
  padding:0; width:min(420px,92vw); max-width:92vw;
  box-shadow:var(--shadow-hover);
}
.c-dialog::backdrop{ background:rgba(16,26,43,.45) }

/* JavaScriptが動かないときは <dialog> が開かない。
   そのときも中身を画面に出して、既定の設定のまま出力できるようにしておく。
   （JavaScriptが動く環境では app.js が hidden を付けて、この見せ方をやめる） */
/* 2026-08-25 作り替え。
   以前は「既定で中身を出しておき、JavaScriptが hidden を付けて隠す」形だった。
   これだとJavaScriptが少しでも止まると、小画面の中身が一覧の上に
   そのまま文章として出てしまい、画面が壊れて見えた（岡本さんのご指摘）。
   逆にして「既定で隠し、JavaScriptが動かないときだけ出す」形にする。 */
.c-dialog:not([open]){ display:none !important }
.no-js .c-dialog:not([open]){
  display:block !important; position:static;
  margin:0 0 14px; width:auto;
}
.c-dialog[hidden]{ display:none }

.c-dialog__head{
  display:flex; align-items:center; gap:10px;
  padding:12px 18px; border-bottom:1px solid var(--line);
}
.c-dialog__title{
  font-family:var(--font-head); font-weight:700; font-size:15px;
  color:var(--ink); margin:0;
}
/* 右上の「×」。押すと閉じる */
.c-dialog__close{
  margin-left:auto; flex:none;
  background:transparent; border:0; cursor:pointer;
  color:var(--ink-faint); font-size:18px; line-height:1;
  /* 指で押す場所として十分な大きさを取る */
  min-width:44px; min-height:44px;
}
.c-dialog__close:hover{ color:var(--brand) }
.c-dialog__close:focus-visible{ outline:2px solid var(--brand-light); outline-offset:2px }

.c-dialog__body{ padding:14px 18px; display:flex; flex-direction:column; gap:14px }
/* 下のボタンの並び。「出力する」を右端にそろえる（3アプリで同じ位置） */
.c-dialog__foot{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:12px 18px; border-top:1px solid var(--line);
}
.c-dialog__foot .c-btn--primary{ margin-left:auto }

@media (max-width:600px){
  /* スマホでは指で押せる大きさにする（現場で使うため） */
  .c-dialog__foot .c-btn{ min-height:44px }
  .c-dialog__body .c-input{ min-height:44px }
}

/* ===== 19. ご意見・不具合の報告 =====
   送信画面で使う部品。
   （docs/設計/意見・不具合の報告_基本設計.html 2章・3章）

   2026-08-26 画面の右下に固定していた丸いボタン（.c-fab）は廃止した。
   「確認・出力へ」など画面の中のボタンに重なって押せなくなっていたため
   （岡本さんご指摘）。入口はヘッダー右上の「ご意見」
   （.c-headerbtn／3.ヘッダー）に移した。 */

/* --- 選ぶボタン（種類の選択） --- */
/* 選択肢は同じ幅にそろえる。横並び(flex)のままだと中の文字数で幅が変わり、
   「PDF」と「EXCEL」で枠の大きさが違って見えてしまうため（2026-08-25 岡本さん指摘） */
.c-choices{ display:grid; grid-template-columns:repeat(auto-fit, minmax(min(220px,100%), 1fr)); gap:8px }
.c-choice{ display:block; cursor:pointer }
/* 見た目は下の枠で作るが、キーボード操作と読み上げのために本物のラジオを残す */
.c-choice__input{ position:absolute; opacity:0; width:0; height:0 }
.c-choice__box{
  display:flex; flex-direction:column; justify-content:center; gap:2px;
  min-height:48px; padding:8px 18px;
  border:1px solid var(--line); border-radius:var(--r-md);
  background:var(--surface); color:var(--ink-body);
}
.c-choice__box:hover{ border-color:var(--brand); color:var(--brand) }
.c-choice__name{ font-size:14px; font-weight:700; line-height:1.3 }
.c-choice__note{ font-size:11.5px; color:var(--ink-faint); line-height:1.3 }
.c-choice__input:checked + .c-choice__box{
  background:var(--brand); border-color:var(--brand); color:#fff;
}
.c-choice__input:checked + .c-choice__box .c-choice__note{ color:#fff }
.c-choice__input:focus-visible + .c-choice__box{ outline:2px solid var(--brand); outline-offset:2px }
/* 選べないとき（例：サーバーにPDFに変換する準備がないとき）。
   押せないことが見て分かるように薄くし、指の形も変える */
.c-choice__input:disabled + .c-choice__box{
  opacity:.5; background:var(--line-softest); color:var(--ink-faintest); cursor:not-allowed;
}
.c-choice__input:disabled + .c-choice__box:hover{ border-color:var(--line); color:var(--ink-faintest) }
.c-choice:has(.c-choice__input:disabled){ cursor:not-allowed }

/* --- 高さのある入力欄（スマホで書きやすいように4行分） --- */
.c-textarea--tall{ min-height:112px }

/* --- 画面の下のボタンの並びと、その説明文 --- */
/* 上の内容との間を空ける。テンプレートに style を直書きしないための部品 */
.c-actions--gap{ margin-top:18px }
/* 右へ寄せた説明文（ボタンの並びの下に添えるとき） */
.c-field__hint--right{ text-align:right }
/* すぐ上の見出しに続けて出す説明文（上の空きを詰める）。
   2026-08-25 追加。テンプレートに style を直書きしないための部品 */
.c-field__hint--tight{ margin-top:0 }
/* 文の途中に置く項目名（「いまの状態：〇〇」のように1行で見せるとき） */
.c-field__label--inline{ margin:0 }

/* --- 指で押せる大きさのボタン（現場のスマホで押し間違えないように） --- */
.c-btn--tap{
  display:inline-flex; align-items:center; justify-content:center;
  min-height:48px; padding:0 24px; font-size:14px;
}

/* --- 画像を選ぶ入力欄 --- */
.c-file{
  display:block; width:100%; max-width:420px;
  padding:10px 12px; font-size:13px; color:var(--ink-body);
  border:1px solid var(--line); border-radius:var(--r-md);
  background:var(--surface);
}

/* --- 入力させずに見せるだけの値 --- */
.c-readonly{ display:block; font-size:13px; color:var(--ink-body); word-break:break-all }

/* --- 送信が終わったことを伝える画面 --- */
.c-done{
  background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:44px 24px; text-align:center;
}
.c-done__mark{
  width:56px; height:56px; margin:0 auto 16px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  background:var(--app-green-bg); color:var(--app-green-fg);
  font-size:28px; line-height:1;
}
.c-done__title{
  font-family:var(--font-head); font-size:22px; font-weight:700;
  color:var(--ink); margin:0 0 10px;
}
.c-done__text{ font-size:13.5px; color:var(--ink-muted); margin:0 0 22px; line-height:1.9 }
.c-done .c-actions{ justify-content:center }

/* --- 送られた長い文章（改行をそのまま出す） --- */
.c-longtext{
  margin:0; font-size:13.5px; color:var(--ink-body); line-height:1.9;
  white-space:pre-wrap; word-break:break-word;
}

/* --- 添付されたスクリーンショット --- */
.c-shots{ display:flex; flex-wrap:wrap; gap:12px }
.c-shot{
  display:block; border:1px solid var(--line); border-radius:var(--r-md);
  overflow:hidden; background:var(--line-softest);
}
.c-shot:hover{ border-color:var(--brand) }
.c-shot__img{ display:block; max-width:240px; max-height:200px; width:auto; height:auto }

/* --- 指で押す場所の大きさ（タブレット・スマホ共通） ----------------------
   2026-08-25 追加（画面のそろいの点検）

   これまで「44px以上にする」の指定は、部品ごと・アプリごとにバラバラに
   書かれており、書き忘れているものがあった。計算で洗い出したところ、
   小さいボタン（c-btn--sm＝32px）と一覧の「開く」（c-editbtn＝約23px）が
   スマホでも小さいままだった。この2つは一覧のどの行にもあるので、
   現場で指で押すといちばん押し間違えやすい。

   指で触る幅（820px以下＝タブレットの縦・スマホ）でまとめて効かせる。
   タブレットも指で触るため、スマホ（600px）ではなく 820px から効かせている。
   パソコン（821px以上）はマウスで正確に押せるので、これまでの詰まった
   見た目のままにして、1画面に出る情報量を減らさない。 */
@media (max-width:820px){
  /* ふつうのボタン。上下の余白（11px×2）と文字（13px）だけでは
     ブラウザによって 42〜43px にしかならず、44px にわずかに届かない。
     指で触る幅でははっきり 44px を確保する */
  .c-btn{
    min-height:44px;
    display:inline-flex; align-items:center; justify-content:center;
  }
  /* ヘッダーの「パスワード変更」「ログアウト」。600px以下では記号だけの
     44px角になるが、その手前のタブレット幅では 28px のままだった */
  .c-logout__btn{ min-height:44px }
  /* 小さいボタンと「開く」。文字の大きさは変えず、上下の余白だけで高さを作る
     （文字を大きくすると一覧の行が間延びして、1画面に入る件数が減るため） */
  .c-btn--sm,
  .c-editbtn{
    min-height:44px;
    display:inline-flex; align-items:center; justify-content:center;
  }
  /* 並べ替えできる列見出しも、押す場所なので同じ高さにそろえる */
  .c-sortth__link{ min-height:44px }
  /* 選択肢の枠（出力設定のPDF／EXCELなど）。600pxで余白を詰めても44pxを保つ */
  .c-choice__box{ min-height:44px }

  /* 文字を書く欄・プルダウンも指で押す場所。
     これまでは検索欄（.c-search の中）だけを44pxにしていたが、
     設定やマスタの入力画面の欄は 33～40px のままだった。
     文字の大きさは変えず、上下の余白だけで高さを作る。
     （2026-08-25 スマホ実寸の測定で判明） */
  .c-input,
  .c-select,
  .c-field__input{
    min-height:44px; box-sizing:border-box;
  }

  /* --- 指で触る幅では、文字を書く欄の字を 16px 以上にする -----------------
     iPhone の Safari は「文字が 16px より小さい入力欄」を指でタップすると、
     読みにくいと判断して画面を勝手に拡大する。しかも拡大したまま戻らないため、
     利用者が毎回、指で縮め直すことになる。
     現場でスマホから使う製品なので、これは大きな使いにくさになる。
     ＝ 16px 以上にしておけば、この勝手な拡大は起きない。

     クラス名を1つずつ並べず「input・textarea・select そのもの」を指定している。
     あとで新しい入力欄を足したときに書き忘れて、また同じ拡大が
     起きてしまうのを防ぐため（新しい欄も自動で対象になる）。

     長い :not(...) を付けているのは「強さ」の調整。
     CSS はクラス名の指定（例 .c-field__input）のほうが、
     input のような部品名の指定より強い。そのため素直に input とだけ書くと、
     すぐ上にある .c-field__input{font-size:15px} などに負けて効かない。
     :not(...) は中身の強さを引き継ぐので、[type=...] を1つ足すごとに
     クラス名1つ分の強さが積み上がる。ここでは複数重ねてあるため、
     クラス名1つ分の指定より確実に強くなり、狙いどおり16pxが効く。
     （!important は使わない。使うと、あとから直したいときに直せなくなるため）

     type は限定しない。text／date／time／search／number／password など
     文字を書く欄はすべて対象にする。
     チェックボックス・ラジオ・ボタン類は「文字を書く欄」ではないので
     タップしても拡大は起きない。:not() で対象から外している
     （ボタンの字が急に大きくなって、並びが崩れるのを防ぐため）。

     パソコン（821px以上）はこれまでの見た目のまま。マウスで押すので
     この拡大は起きず、字を大きくすると1画面に入る情報が減るため。
     2026-08-26 岡本さんのご指摘「スマホ画面で入力項目をクリックすると
     画面が少し拡大になる」への対応 */
  input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=submit]):not([type=button]):not([type=reset]):not([type=image]):not([type=file]),
  textarea:not([data-no-zoom-fix]):not([aria-hidden=true]),
  select:not([data-no-zoom-fix]):not([aria-hidden=true]){
    font-size:var(--input-font-mobile);
  }

  /* 作業時間のドラム（スマホ）。
     指で押す場所はすべて 44px 以上、文字は 16px 以上にする
     （16px 未満だと iPhone が画面を勝手に拡大してしまうため）。
     ・ドラムの中の数字
     ・「開始」「終了」の札
     ・「時刻を消す」
     数字の列は、画面が短い端末でも下まで見えるよう少し低くする */
  .c-papertime{ --pt-cell:48px }
  .c-papertime__num{ font-size:17px }
  /* 札の字は、スマホでも他の入力欄と同じ 16px にそろえる
     （入力欄はこの幅で --input-font-mobile＝16px になる）。
     以前は 22px と直に書いていたので、入力欄より 6px 大きかった。
     16px は iPhone が画面を勝手に拡大しない下限でもあるので、
     これより小さくはしない */
  .c-papertime{ --pt-size:var(--input-font-mobile) }
  /* 紙の画面で浮かせた札も同じにする。
     浮かせた枠のほうが指定が細かく、上の1行だけでは負けてしまうため、
     ここで枠のほうにも書いておく（指で触る幅では 16px 以上を必ず保つ） */
  .c-papertime--paper > .c-papertime__panel{ --pt-size:var(--input-font-mobile) }
  .c-papertime__value{ min-height:52px }
  .c-papertime__tilde{ line-height:52px }
  /* 画面が短い端末でも下まで見えるよう、見えるマスを1つ減らす
     （48px × 4 ＋ すき間4px × 3 ＝ 204px） */
  .c-papertime__list{ max-height:calc(var(--pt-cell) * 4 + 4px * 3) }
  .c-papertime__clear{ min-height:44px; font-size:16px }

  /* チェックボックスとラジオ。16px角のままでは指で押しづらいので
     押せる大きさに広げる。大きくしすぎると行が間延びするため
     22px にとどめる */
  .c-check input[type=checkbox],
  .c-check input[type=radio]{
    width:22px; height:22px;
  }
  /* 枠ごと押せるようにして、指で触る場所を44px確保する */
  .c-check{ min-height:44px }

  /* 表の中で、行を選ぶための四角。文字のラベルが付いていないので
     枠で広げられない。押せる高さを四角自身に持たせる
     （見た目の四角は22pxのまま、上下の余白で44pxにする）。
     表は c-table と c-grid-table の2種類あるので、どちらにも効かせる */
  .c-table td > input[type=checkbox],
  .c-grid-table td > input[type=checkbox]{
    min-height:44px;
  }

  /* 左右2枚組の画面（マスタなど）の、左側のメニュー。
     押す場所なので 44px 以上にする（もとは 40px） */
  .c-split__item{ min-height:44px; box-sizing:border-box }
}

@media (max-width:600px){
  /* 一番上へ戻るボタン。2026-08-26 右下の「ご意見・お問い合わせ」の
     丸いボタンを廃止したので、その上に避ける必要がなくなった。
     右下の隅へ下ろす */
  .c-totop{ right:14px; bottom:14px }
  /* 余白だけ詰める。高さは土台の min-height:48px が残るので
     44px を下回らない（出力設定の選択肢は指で押すため） */
  .c-choice__box{ padding:8px 14px }
  .c-shot__img{ max-width:100%; max-height:none }
}

/* ===== 20. 提供元からのお知らせ（ホーム画面の上に出す帯）
   ホーム画面のいちばん上に置く帯。システム管理者が作ったお知らせを出す。
   アプリのタイルを押し下げすぎないよう、余白は控えめにしている。
   閉じるボタンは JavaScript が動くときだけ出る（app.js が hidden を外す）。
   ===================================================================== */
.c-sysnotice{ display:flex; flex-direction:column; gap:10px; margin-bottom:20px }
.c-sysnotice__item{
  background:var(--brand-pale); border:1px solid var(--brand-pale-line);
  border-left:4px solid var(--brand);
  border-radius:var(--r-md); padding:12px 16px;
}
.c-sysnotice__head{ display:flex; align-items:center; gap:10px; flex-wrap:wrap }
.c-sysnotice__date{ font-size:11.5px; color:var(--ink-faintest); flex:none }
.c-sysnotice__title{
  font-family:var(--font-head); font-weight:700; font-size:14.5px;
  color:var(--ink); margin:0; flex:1 1 auto;
}
/* 閉じるボタン。指で押せる大きさ（44px）を確保する */
.c-sysnotice__close{
  flex:none; min-width:44px; min-height:44px;
  border:0; background:transparent; cursor:pointer;
  font-size:18px; line-height:1; color:var(--ink-faintest);
}
.c-sysnotice__close:hover{ color:var(--ink) }
/* 本文。改行をそのまま出す（c-longtext と同じ考え方） */
.c-sysnotice__body{
  margin:6px 0 0; font-size:13px; color:var(--ink-body); line-height:1.8;
  white-space:pre-wrap; word-break:break-word;
}

/* --- 回答が届いているご意見の帯（ホーム画面の上） ---
   自分が送ったご意見・ご要望に提供元からの回答が付いたとき、
   気づいてもらうために出す。読んだら閉じられる（閉じ方はお知らせと同じ）。 */
.c-sysnotice__item--reply{
  background:var(--app-green-bg); border-color:var(--app-green-fg);
  border-left-color:var(--app-green-fg);
}
/* 帯の中から詳細へ行くリンク */
.c-sysnotice__link{ font-size:12.5px; color:var(--brand); font-weight:700 }

/* --- 提供元からの回答（ご意見・不具合の詳細に出す枠） ---
   お客様にも見える枠。社内の対応メモ（c-longtext のほう）とは
   見た目をはっきり分けて、取り違えを防ぐ。 */
.c-reply{
  background:var(--app-green-bg); border:1px solid var(--app-green-fg);
  border-radius:var(--r-md); padding:14px 16px;
}
.c-reply__head{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  font-size:12.5px; font-weight:700; color:var(--app-green-fg);
  margin-bottom:8px;
}
.c-reply__body{
  margin:0; font-size:13.5px; color:var(--ink-body); line-height:1.9;
  white-space:pre-wrap; word-break:break-word;
}


/* --- 指で押しやすい大きさ（スマホ対応） -------------------------------
   スマホでは、押す場所は 44px 角以上あると押し間違えにくい。
   表の中の「開く」や小さなチェックは文字ぶんの高さしかなく、
   指では狙いにくかったので、見た目を変えずに当たり判定だけ広げる。
   ※色や文字の大きさは変えていない（見た目はそのまま） */
@media (max-width: 600px){
  /* 表の行の中の小さなリンク（開く など） */
  .c-table__main,
  .c-editbtn{
    display:inline-flex; align-items:center;
    min-height:44px; padding-block:11px;
  }
  /* 表の中のチェックは、指で押しやすいよう少し大きくする。
     見た目はふつうのチェックのまま（大きさだけ 13px→22px）。
     ※44px 角まで広げると列幅が広がって表が読みにくくなるため、
       ここでは 22px にとどめている。 */
  .c-table td > input[type="checkbox"],
  .c-table th > input[type="checkbox"],
  .c-grid-table td > input[type="checkbox"],
  .c-grid-table th > input[type="checkbox"]{
    width:22px; height:22px;
  }
  /* 「戻る」リンク */
  .c-back{
    display:inline-flex; align-items:center;
    min-height:44px;
  }
}
/* ===== 21. 帳票の紙（A4）をそのまま画面に出す部品 =====
   2026-08-26 作り直し。点検・写真報告書の「確認・出力」を、
   実際にお客様へ提出する紙とそっくりな見た目にするための部品。

   ■ なぜ作り直したか
     8/25 に作った紙の画面を実際にご覧になった岡本さんから
     「報告書とイメージが全然違う。報告書の見た目と全く同じにして」
     という最重要のご指摘をいただいた。
     そこで、雛型（報告書雛型.xlsx）と、実際に出力したPDFを1ページずつ
     画像にして見比べ、**セルの位置・罫線・文字の大きさ・並び順**を
     測り直したうえで、この節を作り直した。

   ■ 雛型から実測した寸法（この節の数字の根拠）
     ・表紙（シート「表紙(たて)」）
         A2      「物件名」の見出し（15pt 太字）
         B2:I2   物件名の値
         A31:I31 報告書の種類（22pt 太字・**右寄せ**）
                 → 岡本さんのご指摘②「報告書の種類は右下」はここ。
                    水色の面の右下に大きく入る。
         F49:I53 提出者（会社名・〒・住所・TEL・FAX）
                 → ご指摘③「会社名は、反映させて」はここ。水色の面の下。
         水色の面は A1〜I31 あたりを覆う塗りつぶし。
     ・業務完了報告書（シート「定期清掃」）
         A3:G3   表題「業務完了報告書」（22pt 太字・中央・下線）
         F5      発行日
         A8:G8   「下記の業務が完了致しましたので、ご報告申し上げます。」
         A10:G10 「記」
         A12〜A15／B12:G15  物件名・業務名称・作業日・作業時間の4行
                 （左の見出しマスは水色の塗り。外枠は太め・内側は細い線）
         A16:A27／B16:G27  特記事項（12行ぶん・**点線の罫**が引かれている）
         列幅 A=15.625 / B〜D=10.125 / E,F=9.0 / G=19.75
           → 見出しの列は全体の約18.7%
     ・写真報告書（シート「定期清掃（写真）」）
         1ページ65行・1ページに3ブロック・ブロックは21行ごと
         A1:B1「建物名称　：」／C1 建物名  … ページの一番上の行
         ブロック（例：1つめ＝2行目〜22行目）
           A2:F22  写真の枠（左）
           G2 「No，」  H2 番号            … 2行目の下に罫線
           G3 「撮影年月日」 G4:I4 値       … 4行目の下に罫線
           G5 「撮影箇所」   G6:I6 値       … 7行目の下に罫線
           G8 「備考」      9〜21行が記入欄
           H10 に「作業前」（2つめは H31「作業中」／3つめは H52「作業後」）
                 → 岡本さんのご指摘⑤「備考欄に作業前、中、後が既定で入ってない」
                    はここ。**紙では備考欄の中に区分が印字されている**。
         G65     提出会社名（ページの一番下・右寄せ）
         列幅 A〜E=9.0（各） / F=21.75 / G,H=9.0 / I=9.25
           → 写真の枠（A〜F）は 66.75/94 ＝ **約71%**
              文字の欄（G〜I）は 27.25/94 ＝ **約29%**
           （前の版は 2fr:1fr＝67:33 だったので、実測に合わせて直した）

   ■ 寸法の持ち方
     A4のたて置き（210mm × 297mm）をミリのまま持ち、
     画面に出すときに --paper-scale（1mm が何px か）を掛けて拡大縮小する。
     狭い画面では --paper-scale を小さくするだけで紙ごと縮む
     （岡本さんのご判断「スマホでもA4の見た目でよい」に沿う）。 */

:root{
  /* A4 たて置きの寸法（mm）。雛型が別の用紙になったらここを変える */
  --paper-w-mm:  210;
  --paper-h-mm:  297;
  /* 紙の内側の余白（mm）。雛型の印刷余白に合わせている */
  --paper-pad-mm: 12;
  /* 1mm を何pxで描くか。広い画面での既定値（210mm ≒ 794px） */
  --paper-scale: 3.78px;
  /* 紙の上の罫線。画面のやわらかい灰色の線とは別物として持つ
     （紙は黒い細線。画面の線と同じにすると帳票に見えない）。
     雛型は「外枠が太め（medium）・内側が細い（thin）・特記事項は点線（dotted）」 */
  --paper-line: #333a45;
  --paper-line-thin: #6f7684;
  --paper-line-bold: #1b2029;
  /* 紙の上の文字。画面の本文よりも黒に寄せる（印刷物の見え方に合わせる） */
  --paper-ink: #101418;
  /* 紙の書体。帳票はゴシックで刷られている（雛型の実測どおり） */
  --paper-font: 'Yu Gothic', 'YuGothic', 'Hiragino Kaku Gothic ProN',
                'Meiryo', 'MS PGothic', sans-serif;
  /* 雛型の水色（表紙の面・表の見出しマス）。雛型の塗り FF99CCFF をそのまま使う */
  --paper-blue: #99ccff;
  /* 「押せば直せる」ところの色。ふだんは目立たせず、触ると濃くなる */
  --paper-edit-bg: rgba(255, 244, 205, .55);
  --paper-edit-line: #e0c66a;
  --paper-edit-bg-on: #fff8de;
  /* 入力が足りないところの色（赤系。紙の上で目立たせる） */
  --paper-lack-bg: #fdeded;
  --paper-lack-line: #e04f4f;
  /* 上に貼り付く「紙を選ぶ帯」の高さ。紙の見える面積を削らないよう薄くする
     （岡本さんのご指示「タブはできるだけ薄く」） */
  --papernav-h: 44px;
}

/* --- 紙を横に送る場所（本をめくる操作感） --------------------------
   2026-08-26 追加。岡本さんのご要望
   「報告書の確認画面は、横にスクロールしていく操作感にして（直感的操作）」
   への対応。

   作り方:
     紙を**横一列**に並べ、この入れ物だけを横に動かす。
     scroll-snap を使うと、指を離したところで**紙1枚にぴたっと止まる**ので、
     本をめくるような手ざわりになる（JavaScript を使わずブラウザの機能で動く）。
     ・スマホ … そのまま指で左右になぞれる（スワイプ）
     ・パソコン … app.js が「ホイールの横」「ドラッグ」を受けて送る

   大事な点:
     横に動くのは**この入れ物の中だけ**で、ページ全体（body）は横に伸びない。
     「紙がはみ出して画面から出てしまう」横スクロールとは別物。
     紙1枚の幅は画面幅を超えないよう、下の .c-paper で上限を掛けている。 */
.c-paperdesk{
  background:var(--page-bg);
  padding:16px 0 8px;
  display:flex;
  /* 紙は縮めずに横一列に並べる */
  flex-wrap:nowrap;
  gap:0;
  overflow-x:auto;
  overflow-y:hidden;
  /* 1枚ずつぴたっと止める（本をめくる手ざわり） */
  scroll-snap-type:x mandatory;
  /* iOS で指の勢いをそのまま活かす */
  -webkit-overflow-scrolling:touch;
  /* 横に送る動きは邪魔しないが、上下は親（ページ）に任せる */
  overscroll-behavior-x:contain;
  /* 見た目の邪魔になるので、送るためのつまみは出さない
     （どこまで来たかは上の帯の色で分かる） */
  scrollbar-width:none;
}
.c-paperdesk::-webkit-scrollbar{ display:none }
/* パソコンでドラッグして送っている最中。
   文字が選ばれてしまうのを止め、つかんでいる感じを出す */
.c-paperdesk.is-dragging{ cursor:grabbing; user-select:none }
/* 紙1枚ぶんの入れ物。ここが「止まる位置」になる */
.c-paperslide{
  flex:0 0 100%;
  max-width:100%;
  min-width:0;
  box-sizing:border-box;
  scroll-snap-align:center;
  scroll-snap-stop:always;
  display:flex;
  justify-content:center;
  padding:0 8px;
}

/* --- 紙1枚（A4たて） --- */
.c-paper{
  position:relative;
  box-sizing:border-box;
  width:  calc(var(--paper-w-mm) * var(--paper-scale));
  /* 画面が紙より狭いときは、紙のほうを縮める。
     こうしないと紙が画面からはみ出し、意図しない横スクロールが出る */
  max-width:100%;
  min-height:calc(var(--paper-h-mm) * var(--paper-scale));
  margin:0 0 8px;
  padding:calc(var(--paper-pad-mm) * var(--paper-scale));
  background:#fff;
  color:var(--paper-ink);
  font-family:var(--paper-font);
  /* 紙が浮いて見えるように影を付ける（机の上の1枚に見せる） */
  box-shadow:0 2px 10px rgba(16,26,43,.16);
  /* 中身は上から順に積む */
  display:flex;
  flex-direction:column;
}

/* 紙の右下に出す「3枚目／全4枚」の小さな数字。紙の外の情報なので薄くする */
.c-paper__no{
  position:absolute; right:10px; bottom:6px;
  font-family:var(--font-body);
  font-size:10px; color:var(--ink-faintest);
}

/* --- 紙の上の見出し行（写真報告書の「建物名称　：　〜」） ---------
   雛型では A1:B1 が「建物名称　：」（右寄せ）、C1 が建物名。
   ページの一番上に、細い罫線の箱として1行だけ入る。 */
.c-paper__head{
  display:flex; align-items:center; gap:calc(2 * var(--paper-scale));
  border:1px solid var(--paper-line);
  border-bottom:0;
  padding:calc(1 * var(--paper-scale)) calc(1.5 * var(--paper-scale));
  font-size:calc(3 * var(--paper-scale));
  min-height:calc(5 * var(--paper-scale));
  letter-spacing:.04em;
}
/* 「建物名称　：」の文字。雛型では右寄せなので、幅を決めて右に寄せる */
.c-paper__head-label{
  flex:none; text-align:right;
  width:calc(30 * var(--paper-scale));
}
/* 建物名（物件名）の値。ご指摘④「物件名を変えれる必要がある」への対応で、
   ここは押すと直せる欄になる。紙の見た目を崩さないよう下線だけにする */
.c-paper__head-value{ flex:1; min-width:0 }

/* --- 紙の下の行（提出会社名） -------------------------------------
   雛型では G65（ページの一番下・右寄せ）。ご指摘③の会社名はここにも出る。 */
.c-paper__foot{
  margin-top:auto;
  text-align:right;
  font-size:calc(3 * var(--paper-scale));
  padding-top:calc(2 * var(--paper-scale));
}

/* --- 写真報告書の1段（左に写真・右に文字） -------------------------
   雛型の実測どおり、左の写真が **71%**、右の文字欄が **29%**。
   1ページに3段。段どうしは罫線を重ねて1本に見せる（雛型と同じ）。 */
.c-paperblock{
  display:grid;
  grid-template-columns:71% 29%;
  border:1px solid var(--paper-line);
  /* 上の段の下線と重ねて1本にする（紙では枠が連続して見える） */
  margin-top:-1px;
  min-height:calc(74 * var(--paper-scale));
}
.c-paperblock:first-of-type{ margin-top:0 }

/* 写真の枠。紙と同じく、枠の中央に比を保って収める */
.c-paperblock__photo{
  position:relative;
  border-right:1px solid var(--paper-line);
  display:flex; align-items:center; justify-content:center;
  padding:calc(1.5 * var(--paper-scale));
  min-width:0; overflow:hidden;
}
.c-paperblock__photo img{
  max-width:100%; max-height:calc(70 * var(--paper-scale));
  object-fit:contain; display:block;
}
/* 写真がまだ無い枠（未撮影）。紙の上でも空欄と分かるようにする */
.c-paperblock__photo--empty{
  flex-direction:column; gap:6px;
  font-family:var(--font-body); font-size:12px; color:var(--ink-faint);
  background:var(--paper-lack-bg);
}

/* 右の文字欄。No，／撮影年月日／撮影箇所／備考 を上から積む。
   雛型では「見出しの行」と「値の行」が別の行になっていて、
   値の行の下にだけ罫線が引かれている。その積み方をそのまま写す。 */
.c-paperblock__side{ display:flex; flex-direction:column; min-width:0 }
/* 1項目ぶん（見出しの行＋値の行）。下の細い罫線が雛型どおり */
.c-paperfield{
  border-bottom:1px solid var(--paper-line-thin);
  padding:calc(.8 * var(--paper-scale)) calc(1 * var(--paper-scale));
}
/* 備考は残りの高さをすべて使う（雛型では 9〜21 行の大きな記入欄） */
.c-paperfield--note{ border-bottom:0; flex:1; display:flex; flex-direction:column }
.c-paperfield__label{
  font-size:calc(2.7 * var(--paper-scale)); color:var(--paper-ink);
  letter-spacing:.04em; line-height:1.4;
}
.c-paperfield__value{
  font-size:calc(3 * var(--paper-scale)); line-height:1.5;
  word-break:break-word; white-space:pre-wrap;
}
/* 「No，」だけは、雛型では見出しと番号が同じ行（G2 と H2）に並ぶ */
.c-paperfield--no{ display:flex; align-items:baseline; gap:calc(2 * var(--paper-scale)) }
.c-paperfield--no .c-paperfield__value{ font-size:calc(3 * var(--paper-scale)) }
/* 撮影年月日・撮影箇所の値は、雛型では**中央寄せ**で1段下げて入る */
.c-paperfield__value--center{ text-align:center }

/* --- 紙の上で押すと直せるところ ---------------------------------
   ふだんは薄い色の下敷きだけ。押すとその場が入力欄になる。
   枠だらけにすると紙らしさが消えるので、線は下線だけにしている。 */
.c-paperedit{
  display:block; width:100%; box-sizing:border-box;
  background:var(--paper-edit-bg);
  border:0; border-bottom:1px dashed var(--paper-edit-line);
  border-radius:2px;
  font-family:inherit; font-size:inherit; line-height:inherit; color:inherit;
  padding:calc(.4 * var(--paper-scale)) calc(.6 * var(--paper-scale));
  /* 指で押せる大きさ（44px）を確保する。紙の見た目は変えない */
  min-height:44px;
  resize:none; overflow:hidden;
}
.c-paperedit:hover{ background:var(--paper-edit-bg-on) }
.c-paperedit:focus{
  outline:2px solid var(--brand-light); outline-offset:-1px;
  background:#fff;
}
/* 紙の値と同じ見え方にそろえるための飾り（中央寄せ・小さめ） */
.c-paperedit--center{ text-align:center }
.c-paperedit--sm{ font-size:calc(3 * var(--paper-scale)) }
/* 備考のように高さのある欄 */
.c-paperedit--area{ flex:1; min-height:calc(22 * var(--paper-scale)) }

/* --- 紙からはみ出しそうな備考のお知らせ ---------------------------
   紙の備考欄は大きさが決まっているので、長すぎると印刷で切れる。
   書いている最中に色で知らせる（止めない。書けるだけ書ける） */
.c-paperedit.is-over{
  background:var(--paper-lack-bg);
  border-bottom-color:var(--paper-lack-line);
}
.c-paperwarn{
  font-family:var(--font-body); font-size:11.5px; color:var(--danger);
  margin-top:4px;
}
.c-paperwarn[hidden]{ display:none }

/* --- 入力が足りないところの印（紙の上で目立たせる） --- */
.c-paperlack{
  background:var(--paper-lack-bg);
  box-shadow:inset 0 0 0 2px var(--paper-lack-line);
}
/* 紙の上に重ねる小さな赤い札 */
.c-papertag{
  display:inline-block; font-family:var(--font-body);
  font-size:11px; font-weight:700; color:#fff; background:var(--paper-lack-line);
  border-radius:var(--r-sm); padding:2px 7px; margin-left:6px;
  vertical-align:middle;
}

/* --- 写真を押したときに出る「差し替え／削除」 ---------------------
   写真の上に薄い帯を重ねる。ふだんは見えず、マウスを乗せる・押すと出る。
   スマホには hover が無いので、いつも見える形にしている（下の 820px 参照）。 */
.c-paperphotobar{
  position:absolute; left:0; right:0; bottom:0;
  display:flex; gap:6px; justify-content:center;
  padding:6px; background:rgba(16,26,43,.72);
  font-family:var(--font-body);
  opacity:0; transition:opacity .12s;
}
.c-paperblock__photo:hover .c-paperphotobar,
.c-paperphotobar:focus-within{ opacity:1 }
.c-paperphotobtn{
  display:inline-flex; align-items:center; justify-content:center;
  min-height:44px; padding:6px 14px;
  background:#fff; color:var(--ink-body);
  border:1px solid var(--line); border-radius:var(--r-sm);
  font-size:12.5px; font-weight:700; cursor:pointer;
}
.c-paperphotobtn:hover{ border-color:var(--brand); color:var(--brand) }

/* --- 紙のページを選ぶ帯（画面の上に貼り付く） ---------------------
   2026-08-26 作り直し。岡本さんのご要望
   「上のページ名も固定にしてクリックでその画面に遷移」への対応。

   ・position:sticky で、下へスクロールしても**常に見えている**
   ・押すとその紙へ横に送る（app.js が受け持つ）
   ・いま見ている紙は色を変えて分かるようにする
   ・紙の見える面積を削らないよう、高さは 44px に抑えている
     （指で押せる最小の大きさ。これ以上は薄くしない） */
.c-papernav{
  position:sticky;
  /* 画面の一番上に貼り付く。上に固定ヘッダーがある画面でも、
     その下に潜り込まないよう 0 で合わせている */
  top:0;
  z-index:30;
  display:flex; gap:6px; align-items:center;
  overflow-x:auto; padding:4px 2px;
  min-height:var(--papernav-h);
  background:var(--page-bg);
  border-bottom:1px solid var(--line);
  /* 貼り付いているときに、下の紙との境目が分かるように薄い影を付ける */
  box-shadow:0 2px 6px rgba(16,26,43,.06);
  scrollbar-width:none;
}
.c-papernav::-webkit-scrollbar{ display:none }
.c-papernav__btn{
  flex:none;
  display:inline-flex; align-items:center; justify-content:center;
  min-height:36px; padding:4px 12px;
  background:var(--surface); color:var(--ink-body);
  border:1px solid var(--line); border-radius:var(--r-pill);
  font-size:12.5px; font-weight:700; cursor:pointer; white-space:nowrap;
}
.c-papernav__btn:hover{ border-color:var(--brand); color:var(--brand) }
.c-papernav__btn.is-active{
  background:var(--brand); border-color:var(--brand); color:#fff;
}
/* 入力の足りない紙には、帯のボタンにも赤い点を付ける */
.c-papernav__btn.is-lack::after{
  content:"●"; color:var(--danger-mark); font-size:9px; margin-left:5px;
}
.c-papernav__btn.is-active.is-lack::after{ color:#fff }

/* --- 表紙の中身 ---------------------------------------------------
   雛型の実測どおりに組む。
     ・水色の面が上の3分の2ほどを覆う（雛型 A1〜I31 の塗り）
     ・面の左上に「物件名　〇〇ビル」
     ・面の**右下**に報告書の種類（22pt 太字・右寄せ）← ご指摘②
     ・面の下、右側に提出者（会社名・〒・住所・TEL・FAX）← ご指摘③ */
.c-papercover{ display:flex; flex-direction:column; flex:1 }
/* 水色の面。紙の左右の余白より少し内側から始まる（雛型の見え方に合わせる） */
.c-papercover__panel{
  background:var(--paper-blue);
  display:flex; flex-direction:column;
  padding:calc(4 * var(--paper-scale));
  /* 雛型では 1〜31 行ぶん。A4の高さのおよそ 57% */
  min-height:calc(160 * var(--paper-scale));
}
/* 面の左上「物件名　〇〇ビル」。雛型は 15pt 太字 */
.c-papercover__prop{
  display:flex; align-items:center; gap:calc(3 * var(--paper-scale));
  font-size:calc(4 * var(--paper-scale)); font-weight:700;
  letter-spacing:.06em;
}
.c-papercover__prop-label{ flex:none }
/* 物件名の値。ご指摘④で押すと直せるようにする。
   紙では「物件名　サンプル中央ビル」と文字が並ぶだけなので、
   欄が帯のように見えないよう、幅は中身なりにして下敷きも薄くする。
   （field-sizing は対応していないブラウザでは効かないので、
     そのときのために幅の上限も決めてある） */
.c-papercover__prop-value{
  flex:0 1 auto; min-width:calc(50 * var(--paper-scale));
  max-width:calc(110 * var(--paper-scale));
  /* 中身の長さに合わせて幅が縮む（対応しているブラウザだけ効く）。
     効かないブラウザでも、下の塗りを薄くしてあるので帯には見えない */
  field-sizing:content;
  /* 紙では「物件名　サンプル中央ビル」と文字が並ぶだけ。
     水色の面の上に濃い箱が乗ると紙に見えなくなるので、
     塗りはごく薄くし、押せることは下線だけで伝える */
  background:rgba(255,255,255,.18);
  border-bottom-style:dashed;
  border-bottom-color:rgba(255,255,255,.85);
  font-weight:inherit;
}
.c-papercover__prop-value:hover{ background:rgba(255,255,255,.5) }
.c-papercover__prop-value:focus{ background:#fff }
/* 面の右下に入る報告書の種類。雛型は 22pt 太字・右寄せ ← ご指摘② */
.c-papercover__title{
  margin-top:auto; text-align:right;
  font-size:calc(7.8 * var(--paper-scale));
  font-weight:700; letter-spacing:.12em;
  line-height:1.3;
}
/* 面の下、右側の提出者。雛型 F49:I53（12pt）← ご指摘③ */
.c-papercover__from{
  margin-top:auto; padding-top:calc(14 * var(--paper-scale));
  /* 雛型では F 列（左から約6割）から始まるので、左に余白を取って右半分に置く */
  margin-left:auto; width:calc(105 * var(--paper-scale));
  line-height:1.85;
  font-size:calc(3.2 * var(--paper-scale));
}
/* 会社名だけ太字（雛型 F49 が太字） */
.c-papercover__company{ font-weight:700 }
/* 提出者が未登録のときの案内。紙には出ない情報なので画面の書体で薄く出す */
.c-papercover__from--empty{
  font-family:var(--font-body); font-size:12px; color:var(--ink-faint);
}

/* --- 業務完了報告書の中身 -----------------------------------------
   雛型の実測どおり。表題は下線付き、表は「見出しマスが水色」。 */
.c-papercomp{ display:flex; flex-direction:column; flex:1 }
/* 表題（22pt 太字・中央・下線）。雛型 A3:G3 */
.c-papercomp__title{
  text-align:center; font-size:calc(6.2 * var(--paper-scale));
  letter-spacing:.16em; font-weight:700;
  text-decoration:underline;
  text-underline-offset:calc(1.5 * var(--paper-scale));
  margin:calc(10 * var(--paper-scale)) 0 calc(6 * var(--paper-scale));
}
/* 発行日。雛型 F5（表題の下・右寄り） */
.c-papercomp__date{
  text-align:right; font-size:calc(3.4 * var(--paper-scale));
  padding-right:calc(14 * var(--paper-scale));
  margin-bottom:calc(9 * var(--paper-scale));
}
/* 「下記の業務が〜」。雛型 A8:G8（14pt・中央） */
.c-papercomp__lead{
  text-align:center;
  font-size:calc(3.6 * var(--paper-scale)); line-height:1.8;
  margin:0 0 calc(6 * var(--paper-scale));
}
/* 「記」。雛型 A10:G10（14pt・中央） */
.c-papercomp__ki{
  text-align:center; font-size:calc(3.6 * var(--paper-scale));
  margin:0 0 calc(6 * var(--paper-scale));
}
/* 物件名・業務名称・作業日・作業時間 の4行。
   見出しの列は雛型の実測で全体の約18.7% */
.c-papercomp__rows{
  display:grid; grid-template-columns:18.7% 81.3%;
  border:2px solid var(--paper-line-bold);
}
.c-papercomp__label,
.c-papercomp__cell{
  border-top:1px solid var(--paper-line);
  padding:calc(1.4 * var(--paper-scale));
  font-size:calc(3.4 * var(--paper-scale));
  display:flex; align-items:center;
  min-height:calc(13 * var(--paper-scale));
  min-width:0;
}
/* 1行目の上には線を引かない（外枠が受け持つ） */
.c-papercomp__rows > .c-papercomp__label:first-child,
.c-papercomp__rows > .c-papercomp__label:first-child + .c-papercomp__cell{
  border-top:0;
}
/* 見出しマスは水色の塗り＋右に仕切り線（雛型どおり） */
.c-papercomp__label{
  background:var(--paper-blue);
  border-right:2px solid var(--paper-line-bold);
  justify-content:center; text-align:center; letter-spacing:.08em;
}
/* 特記事項。雛型 A16:A27／B16:G27。
   見出しマスは水色で縦に長く、記入欄には**点線の罫**が12本引かれている */
.c-papercomp__note{
  display:grid; grid-template-columns:18.7% 81.3%;
  border:2px solid var(--paper-line-bold);
  border-top:0;
  min-height:calc(56 * var(--paper-scale));
}
.c-papercomp__note-label{
  background:var(--paper-blue);
  border-right:2px solid var(--paper-line-bold);
  display:flex; align-items:center; justify-content:center;
  font-size:calc(3.4 * var(--paper-scale)); letter-spacing:.08em;
}
/* 記入欄。点線の罫は背景の繰り返しで描く（雛型の点線罫の見た目に合わせる）。
   1行ぶんの高さは雛型の 18.75pt ＝ およそ 6.6mm */
.c-papercomp__note-body{
  position:relative;
  padding:calc(1 * var(--paper-scale));
  display:flex; flex-direction:column;
  background-image:repeating-linear-gradient(
    to bottom,
    transparent 0,
    transparent calc(6.6 * var(--paper-scale) - 1px),
    var(--paper-line-thin) calc(6.6 * var(--paper-scale) - 1px),
    var(--paper-line-thin) calc(6.6 * var(--paper-scale))
  );
  background-size:100% calc(79.2 * var(--paper-scale));
  background-repeat:no-repeat;
}
/* 特記事項の入力欄は、点線の罫が透けて見えるように背景を薄くする */
.c-papercomp__note-body .c-paperedit{
  background:rgba(255, 244, 205, .35);
  border-bottom:0;
  /* 罫の間隔にそろえて書けるようにする */
  line-height:calc(6.6 * var(--paper-scale));
}
.c-papercomp__note-body .c-paperedit:focus{ background:#fff }

/* --- 表紙の右下の「報告書の種類」を選ぶ欄 --------------------------
   雛型では 22pt 太字・右寄せの大きな文字。
   選べる欄にすると、ふつうは小さな箱と矢印が付いて紙らしさが消えてしまうので、
   箱と矢印を消し、**紙に印字された文字と同じ見た目**のまま押せるようにしている。 */
.c-papercover__title-select{
  -webkit-appearance:none; appearance:none;
  display:inline-block; width:auto; max-width:100%;
  text-align:right;
  text-align-last:right;   /* 選んだあとの文字も右に寄せる（Firefox 用） */
  font-size:inherit; font-weight:inherit; letter-spacing:inherit;
  /* 紙では文字が印字されているだけなので、塗りはごく薄くする。
     押して選べることは下線だけで伝える（帯に見せない） */
  background:rgba(255,255,255,.18);
  border-bottom:1px dashed rgba(255,255,255,.85);
  cursor:pointer;
  /* 選ぶ欄は既定で内側の余白が広く、紙の文字より下にずれて見える。
     文字の位置を紙に合わせるため、余白を詰める */
  padding-left:calc(1 * var(--paper-scale));
  padding-right:calc(1 * var(--paper-scale));
}
.c-papercover__title-select:hover{ background:rgba(255,255,255,.5) }
.c-papercover__title-select:focus{ background:#fff }
/* 物件名の欄も、水色の面の上では白めの下敷きにする（黄色だと沈んで見えないため） */
.c-papercover__prop-value{
  background:rgba(255,255,255,.45);
  border-bottom-color:rgba(255,255,255,.9);
}
.c-papercover__prop-value:hover{ background:rgba(255,255,255,.7) }

/* ===== 22. 画面の下に貼り付くボタンの帯（c-stickybar） =====
   2026-08-26 追加。岡本さんのご指摘
   「プレビュー等のボタンは常に表示（基本設計と同じ）」への対応。

   下までスクロールしないとボタンが出てこない状態をやめ、
   画面の下に貼り付けて**いつでも押せる**ようにする。
   紙の確認画面のように縦に長い画面で効く。

   position:sticky を使うので、ページの流れの中に居場所を持つ。
   （position:fixed だと、いちばん下の内容にボタンが重なって隠してしまう） */
.c-stickybar{
  position:sticky;
  bottom:0;
  z-index:20;
  display:flex; align-items:center; justify-content:flex-end;
  flex-wrap:wrap; gap:8px 12px;
  padding:10px 12px;
  margin-top:8px;
  background:var(--surface);
  border-top:1px solid var(--line);
  /* 上に載っている紙との境目を出す（浮いていることを伝える） */
  box-shadow:0 -2px 8px rgba(16,26,43,.08);
}
/* 説明の文。ボタンの左に置き、狭い画面では上へ回り込む */
.c-stickybar__hint{
  flex:1 1 auto; min-width:0; margin:0;
  font-size:12px; color:var(--ink-muted);
}
.c-stickybar__actions{
  /* 狭い画面ではボタンが入りきらないので、縮んで折り返せるようにする。
     flex:none のままだと縮まず、いちばん左のボタンが画面の外へ出てしまう
     （375px の実測で「写真追加」が x=-82 に出ていた） */
  flex:0 1 auto; min-width:0;
  display:flex; align-items:center; justify-content:flex-end;
  gap:8px; flex-wrap:wrap;
}

/* 画面が狭いとき。ボタンは1行に収めようとせず、素直に折り返す。
   4つとも押せることのほうが、1行に並ぶことより大事なため */
@media (max-width:600px){
  .c-stickybar{
    /* 説明の文はボタンの上へ回す（横に置くと、ボタンの幅が足りなくなる） */
    flex-direction:column; align-items:stretch;
    padding:8px 10px; gap:6px;
  }
  .c-stickybar__hint{ font-size:11.5px }
  .c-stickybar__actions{
    /* 4つのボタンを2つずつ2段に並べる。どれも同じ幅にして押しやすくする */
    display:grid; grid-template-columns:1fr 1fr; gap:6px;
  }
  .c-stickybar__actions > *{ width:100%; min-height:44px }
}

/* --- 画面が狭いとき（タブレット・スマホ） ---------------------------
   紙の見た目は変えず、1mm あたりの px だけ小さくして紙ごと縮める。
   岡本さんのご判断「スマホでもA4の見た目でよい」に沿った作り。
   切り替え点は 820px と 600px の2つだけ（開発の決まり）。 */
@media (max-width:820px){
  :root{ --paper-scale:2.6px }
  /* スマホには hover が無いので、写真の「差し替え／削除」はいつも見えるようにする */
  .c-paperphotobar{ opacity:1; background:rgba(16,26,43,.55) }
}
@media (max-width:600px){
  :root{ --paper-scale:1.62px }
  /* 紙が小さくなると文字も小さくなるが、押す場所の高さ（44px）は保つ */
  .c-paperedit{ min-height:44px }
  .c-paperphotobtn{ padding:4px 10px; font-size:11.5px }
  /* 帯のボタンは指で押せる大きさを保つ（44px 以上） */
  .c-papernav__btn{ min-height:44px; padding:4px 14px }
  .c-paperslide{ padding:0 4px }
}
