/* 構成: 上部に役割タブ(フロント/スタッフ/忘れ物・故障/実績)。フロントは階ごとの客室タイルと右からの詳細パネル、スタッフはスマホ縦の大きなカード。 */
:root{
  --bg:#F1F5F5; --surface:#FFFFFF; --surface2:#F6F9F9; --fg:#13262B; --muted:#55696F;
  --line:#D7E0E2; --line2:#B6C4C7;
  --accent:#0A6A77; --accent-fg:#FFFFFF; --accent-soft:#D9EEF0;
  --dirty:#B8322A; --dirty-solid:#D6453D; --dirty-bg:#FBE3E0;
  --cleaning:#885000; --cleaning-solid:#E5A019; --cleaning-bg:#FDEDC6;
  --done:#2358B0; --done-solid:#3A74D3; --done-bg:#DCE8FA;
  --ready:#23764A; --ready-solid:#2E8B57; --ready-bg:#D9EFE2;
  --occupied:#4F6167; --occupied-solid:#7B8D93; --occupied-bg:#E5EBED;
  --ooo:#2B2E30; --ooo-solid:#3B3F41; --ooo-bg:#D3D8DA;
  --on-ready:#FFFFFF; --on-cleaning:#2A1A00;
  --hatch:rgba(0,0,0,.09); --notice:#FFF4D6; --notice-line:#E8D38C;
  --shadow:0 1px 2px rgba(8,28,34,.08),0 10px 30px rgba(8,28,34,.14);
  --f-ui:"Noto Sans JP","Hiragino Sans","Yu Gothic UI","Segoe UI",system-ui,sans-serif;
  --f-num:"Zen Kaku Gothic New","Noto Sans JP","Hiragino Sans","Yu Gothic UI",system-ui,sans-serif;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --bg:#0D171A; --surface:#142126; --surface2:#192A30; --fg:#E3EEF0; --muted:#8FA6AC;
    --line:#25383F; --line2:#37505A;
    --accent:#52C4D0; --accent-fg:#052428; --accent-soft:#12363C;
    --dirty:#FF9086; --dirty-solid:#E5584E; --dirty-bg:#3A1A19;
    --cleaning:#F4BC55; --cleaning-solid:#E5A019; --cleaning-bg:#38290C;
    --done:#92B8F7; --done-solid:#4A82E0; --done-bg:#172946;
    --ready:#74D7A0; --ready-solid:#35A068; --ready-bg:#12331F;
    --occupied:#A6B7BC; --occupied-solid:#6B7D83; --occupied-bg:#202F35;
    --ooo:#CBD1D3; --ooo-solid:#8B9396; --ooo-bg:#2A2E30;
    --on-ready:#05230F; --on-cleaning:#2A1A00;
    --hatch:rgba(255,255,255,.08); --notice:#3A3010; --notice-line:#6B5A22;
    --shadow:0 1px 2px rgba(0,0,0,.5),0 10px 30px rgba(0,0,0,.5);
    color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --bg:#0D171A; --surface:#142126; --surface2:#192A30; --fg:#E3EEF0; --muted:#8FA6AC;
  --line:#25383F; --line2:#37505A;
  --accent:#52C4D0; --accent-fg:#052428; --accent-soft:#12363C;
  --dirty:#FF9086; --dirty-solid:#E5584E; --dirty-bg:#3A1A19;
  --cleaning:#F4BC55; --cleaning-solid:#E5A019; --cleaning-bg:#38290C;
  --done:#92B8F7; --done-solid:#4A82E0; --done-bg:#172946;
  --ready:#74D7A0; --ready-solid:#35A068; --ready-bg:#12331F;
  --occupied:#A6B7BC; --occupied-solid:#6B7D83; --occupied-bg:#202F35;
  --ooo:#CBD1D3; --ooo-solid:#8B9396; --ooo-bg:#2A2E30;
  --on-ready:#05230F; --on-cleaning:#2A1A00;
  --hatch:rgba(255,255,255,.08); --notice:#3A3010; --notice-line:#6B5A22;
  --shadow:0 1px 2px rgba(0,0,0,.5),0 10px 30px rgba(0,0,0,.5);
  color-scheme:dark;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{background:var(--bg);color:var(--fg);font:14px/1.55 var(--f-ui);margin:0}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:30;background:var(--bg)}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
h1,h2,h3,p{margin:0}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.wrap{max-width:1360px;margin:0 auto;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.mut{color:var(--muted)}
.num{font-variant-numeric:tabular-nums}

/* status tokens */
.s-occupied{--st-bg:var(--occupied-bg);--st-fg:var(--occupied);--st-line:var(--occupied-solid)}
.s-dirty{--st-bg:var(--dirty-bg);--st-fg:var(--dirty);--st-line:var(--dirty-solid)}
.s-cleaning{--st-bg:var(--cleaning-bg);--st-fg:var(--cleaning);--st-line:var(--cleaning-solid)}
.s-done{--st-bg:var(--done-bg);--st-fg:var(--done);--st-line:var(--done-solid)}
.s-ready{--st-bg:var(--ready-bg);--st-fg:var(--ready);--st-line:var(--ready-solid)}
.s-ooo{--st-bg:var(--ooo-bg);--st-fg:var(--ooo);--st-line:var(--ooo-solid)}

/* top bar */
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--bg);border-bottom:1px solid var(--line)}
.top-in{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px 18px;align-items:center;padding-block:10px}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.brand svg{flex:none}
.brand h1{font:900 19px/1.1 var(--f-num);letter-spacing:.02em}
.brand p{font-size:11px;color:var(--muted);margin-top:2px}
.tabs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}
.tabs button{flex:0 0 auto;min-height:40px;padding:0 16px;border-radius:999px;border:1px solid var(--line2);background:var(--surface);font-weight:700;display:inline-flex;align-items:center;gap:6px}
.tabs button[aria-selected="true"]{background:var(--accent);color:var(--accent-fg);border-color:transparent}
.badge{display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 6px;border-radius:10px;font-size:12px;background:var(--dirty-solid);color:#fff}
.top-r{display:flex;align-items:center;gap:8px}
.sync{font-size:11px;color:var(--muted);display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.sync i{width:8px;height:8px;border-radius:50%;background:var(--occupied-solid)}
.sync.live i{background:var(--ready-solid)}
.iconbtn{width:40px;height:40px;border-radius:10px;border:1px solid var(--line2);background:var(--surface);font-size:20px;line-height:1}
/* 見え方の切り替え(管理者だけ): 管理者・フロント・清掃スタッフ・ルームチェック */
.viewas{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);white-space:nowrap}
.viewas select{width:auto;min-width:9.5em;max-width:46vw;min-height:40px;padding:0 8px;font-weight:700;font-size:13px}
.viewbar{background:var(--notice);border-top:1px solid var(--notice-line);font-size:13px}
.vb-in{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding-block:8px}
.vb-in .vb-t{flex:1 1 18em;min-width:0}
@media (max-width:759.98px){
  .top-in{grid-template-columns:minmax(0,1fr) auto}
  .tabs{grid-column:1/-1;order:3}
  .tabs button{flex:1 0 auto;justify-content:center;padding:0 12px}
  .sync span{display:none}
  .viewas span{display:none}
  .viewas select{min-width:0;width:auto;padding:0 2px 0 6px;font-size:12px}
}
@media (max-width:480px){
  .top-in{column-gap:8px}
  .brand{gap:8px}
  .brand svg{width:26px;height:26px}
  .brand h1{font-size:16px;white-space:nowrap}
  .top-r{gap:6px}
}
@media (max-width:374px){
  .brand svg{width:22px;height:22px}
  .brand h1{font-size:14.5px}
  .iconbtn{width:36px}
}
@media (max-width:339px){
  .brand h1{white-space:normal;font-size:14px;line-height:1.15}
}
main{padding-block:14px 120px;min-height:60vh}

/* generic */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:0 16px;border-radius:10px;border:1px solid var(--line2);background:var(--surface);font-weight:700;font-size:14px;text-align:center}
.btn:hover{background:var(--surface2)}
.btn.primary{background:var(--accent);color:var(--accent-fg);border-color:transparent}
.btn.good{background:var(--ready-solid);color:var(--on-ready);border-color:transparent}
.btn.warn{background:var(--cleaning-solid);color:var(--on-cleaning);border-color:transparent}
.btn.big{min-height:58px;font-size:18px;border-radius:12px}
.btn.sm{min-height:36px;padding:0 12px;font-size:13px}
.btn.ghost{background:transparent}
.btn.danger{color:var(--dirty);border-color:var(--dirty-solid);background:transparent}
.btn[disabled]{opacity:.45;cursor:not-allowed}
.btn.block{width:100%}
.lnk{background:none;border:0;color:var(--accent);font-weight:700;text-decoration:underline;padding:4px 6px;min-height:32px}
.seg{display:inline-flex;border:1px solid var(--line2);border-radius:10px;overflow:hidden;background:var(--surface)}
.seg button{border:0;background:transparent;padding:0 14px;min-height:40px;font-weight:700;font-size:13px}
.seg button+button{border-left:1px solid var(--line2)}
.seg button[aria-pressed="true"]{background:var(--accent);color:var(--accent-fg)}
.field{display:grid;gap:6px}
.field>label,.lab{font-size:12px;font-weight:700;color:var(--muted);letter-spacing:.04em}
input[type=text],input[type=password],input[type=number],input[type=date],input[type=time],select,textarea{width:100%;min-height:44px;padding:8px 12px;border-radius:10px;border:1px solid var(--line2);background:var(--surface);color:var(--fg)}
textarea{min-height:84px;resize:vertical}
.chip{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:4px;font-size:10.5px;font-weight:700;background:var(--surface);border:1px solid var(--line2);color:var(--fg);white-space:nowrap}
.chip.hot{background:var(--dirty-solid);border-color:transparent;color:#fff}
.chip.warm{background:var(--cleaning-solid);border-color:transparent;color:var(--on-cleaning)}
.pill{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:12px;font-size:12px;font-weight:700;background:var(--st-bg);color:var(--st-fg);border:1px solid var(--st-line)}
.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px}
.card h3{font:700 15px/1.3 var(--f-num);margin-bottom:12px}
.notice{display:flex;gap:10px;align-items:flex-start;background:var(--notice);border:1px solid var(--notice-line);border-radius:12px;padding:10px 12px;margin-bottom:14px;font-size:13px}
.notice p{flex:1;min-width:0}
.empty{padding:40px 16px;text-align:center;color:var(--muted)}

/* front */
.head{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:flex-end;justify-content:space-between;margin-bottom:12px}
.head h2{font:900 24px/1.2 var(--f-num)}
.clock{font-variant-numeric:tabular-nums;color:var(--accent);margin-left:6px}
.acts{display:flex;flex-wrap:wrap;gap:8px}
.sum{display:grid;grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:8px}
.sum button{border:1.5px solid var(--st-line);background:var(--st-bg);border-radius:12px;padding:8px 12px;text-align:left;display:grid;gap:2px}
.sum .n{font:900 28px/1 var(--f-num);font-variant-numeric:tabular-nums}
.sum .l{font-size:12px;font-weight:700;color:var(--st-fg)}
.sum button[aria-pressed="true"]{outline:3px solid var(--accent);outline-offset:1px}
.prog{display:grid;gap:6px;margin:14px 0 4px}
.bar{display:flex;height:12px;border-radius:6px;overflow:hidden;background:var(--line)}
.bar i{display:block;height:100%}
.bar .b-done{background:var(--ready-solid)} .bar .b-cl{background:var(--cleaning-solid)} .bar .b-todo{background:var(--dirty-solid)}
.legend{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px;color:var(--muted)}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.floor{display:grid;grid-template-columns:46px minmax(0,1fr);gap:10px;margin-top:12px;align-items:start}
.fl{font:900 24px/1 var(--f-num);color:var(--muted);padding-top:8px;text-align:left;background:none;border:0}
.fl small{font-size:12px;font-weight:700}
button.fl{color:var(--accent);text-decoration:underline;cursor:pointer}
.rooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:12px 8px}
.tile .flag{position:absolute;top:-8px;left:7px;height:16px;font-size:10px;box-shadow:0 0 0 2px var(--bg)}
.tile .ty{display:flex;align-items:center;gap:5px}
.tile{position:relative;display:flex;flex-direction:column;gap:2px;min-height:80px;padding:6px 7px;text-align:left;border-radius:10px;border:1px solid var(--st-line);background:var(--st-bg);color:var(--fg)}
.s-dirty.tile,.s-cleaning.tile{border-width:2px;padding:5px 6px}
.s-ooo.tile{background-image:repeating-linear-gradient(135deg,transparent 0 6px,var(--hatch) 6px 8px)}
.tile .no{font:900 21px/1.05 var(--f-num);font-variant-numeric:tabular-nums}
.tile .ty{position:absolute;top:6px;right:7px;font-size:10px;font-weight:700;color:var(--muted)}
.tile .lb{font-size:11.5px;font-weight:700;color:var(--st-fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.tile .ft{margin-top:auto;display:flex;align-items:center;gap:4px;min-height:20px}
.tile .ft .sp{flex:1}
.tile.dim{opacity:.22}
.tile.sel{outline:3px solid var(--accent);outline-offset:1px}
.tile .tick{position:absolute;top:-6px;left:-6px;width:20px;height:20px;border-radius:50%;background:var(--accent);color:var(--accent-fg);font-size:12px;display:grid;place-items:center;font-weight:900}
.tile .alert{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;background:var(--dirty-solid);color:#fff;font-size:12px;font-weight:900;display:grid;place-items:center}
.av{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;font-size:11px;font-weight:700;color:#fff;flex:none}
.note-dot{width:7px;height:7px;border-radius:50%;background:var(--fg);opacity:.55}
.tlegend{margin-top:16px;font-size:12px;color:var(--muted)}
.bulk{position:fixed;left:0;right:0;bottom:0;z-index:15;background:var(--surface);border-top:1px solid var(--line2);box-shadow:var(--shadow);padding:10px max(16px,env(safe-area-inset-right,0px)) calc(10px + env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}
.bulk-in{max-width:1360px;margin:0 auto;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.bulk-in select{width:auto;min-width:130px;min-height:40px}
.bulk-in b{margin-right:auto}

/* sheet */
.scrim{position:fixed;inset:0;background:rgba(5,15,18,.5);z-index:40}
.sheet{position:fixed;z-index:41;background:var(--surface);color:var(--fg);box-shadow:var(--shadow);overflow:auto;outline:0}
@media (min-width:760px){
  .sheet{top:0;right:0;bottom:0;width:min(430px,100vw);padding:max(18px,env(safe-area-inset-top,0px)) max(18px,env(safe-area-inset-right,0px)) 24px 18px}
}
@media (max-width:759.98px){
  .sheet{left:0;right:0;bottom:0;max-height:90%;border-radius:18px 18px 0 0;padding:16px max(16px,env(safe-area-inset-right,0px)) calc(20px + env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}
}
.sh-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.sh-head .rn{font:900 40px/1 var(--f-num);font-variant-numeric:tabular-nums}
.sh-head .rt{font-size:12px;color:var(--muted);margin-bottom:4px}
.sh-head .x{margin-left:auto;width:40px;height:40px;border-radius:10px;border:1px solid var(--line2);background:var(--surface);font-size:22px;line-height:1}
.sh-head h2{font:900 20px/1.2 var(--f-num)}
.stack{display:grid;gap:12px}
.sect{display:grid;gap:10px;padding-top:14px;margin-top:14px;border-top:1px solid var(--line)}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.hist{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:13px}
.hist li{display:flex;gap:8px}
.hist time{color:var(--muted);font-variant-numeric:tabular-nums;flex:none}
.steps{margin:0;padding-left:1.3em;display:grid;gap:8px}
.photo-prev{width:100%;max-height:220px;object-fit:cover;border-radius:10px;border:1px solid var(--line)}

/* staff */
.s-top{display:grid;gap:10px;grid-template-columns:minmax(0,1fr) auto;align-items:end;margin-bottom:12px}
.langs{display:inline-flex;gap:0}
.s-card{display:grid;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:14px;margin-top:12px}
.s-card.s-cleaning{border:2px solid var(--cleaning-solid);padding:13px}
.s-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 10px}
.s-no{font:900 38px/1 var(--f-num);font-variant-numeric:tabular-nums}
.s-sub{font-size:13px;color:var(--muted)}
.s-meta{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center}
.by{font-size:13px;font-weight:700;color:var(--dirty)}
.s-note{font-size:13px;background:var(--surface2);border-radius:8px;padding:6px 10px}
.timer{font:900 22px/1 var(--f-num);font-variant-numeric:tabular-nums;color:var(--cleaning)}
.s-foot{display:flex;gap:8px}
.s-foot .btn.big{flex:1}
.sec-t{font:700 13px/1 var(--f-num);color:var(--muted);letter-spacing:.06em;margin:22px 0 0;display:flex;align-items:center;gap:8px}
.sec-t b{background:var(--surface);border:1px solid var(--line2);border-radius:10px;padding:1px 8px;color:var(--fg);font-variant-numeric:tabular-nums}
.minirow{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.mini{font-size:13px;font-weight:700;background:var(--ready-bg);color:var(--ready);border:1px solid var(--ready-solid);border-radius:8px;padding:2px 10px;font-variant-numeric:tabular-nums}

/* items */
.items{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.item{display:grid;grid-template-columns:88px minmax(0,1fr);gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:12px}
.thumb{width:88px;height:88px;border-radius:10px;border:1px solid var(--line);background:var(--surface2);display:grid;place-items:center;color:var(--muted);font-size:11px;overflow:hidden;padding:0}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.item h3{font:900 20px/1.1 var(--f-num);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.item p{font-size:14px;margin-top:6px;overflow-wrap:anywhere}
.item .meta{font-size:12px;color:var(--muted);margin-top:4px}
.item .ac{margin-top:8px}
.kind-lost{--st-bg:var(--done-bg);--st-fg:var(--done);--st-line:var(--done-solid)}
.kind-fault{--st-bg:var(--cleaning-bg);--st-fg:var(--cleaning);--st-line:var(--cleaning-solid)}

/* stats */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:10px;margin-bottom:14px}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:12px 14px}
.kpi .v{font:900 30px/1.1 var(--f-num);font-variant-numeric:tabular-nums}
.kpi .v small{font-size:14px;font-weight:700;margin-left:3px;color:var(--muted)}
.kpi .k{font-size:12px;font-weight:700;color:var(--muted);margin-top:4px}
.grid2{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr))}
.rank{display:grid;gap:10px}
.rk{display:grid;grid-template-columns:96px minmax(0,1fr) 92px;gap:10px;align-items:center;font-size:13px}
.rk .nm{display:flex;align-items:center;gap:6px;font-weight:700;min-width:0}
.rk .tr{height:14px;border-radius:7px;background:var(--line);overflow:hidden}
.rk .tr i{display:block;height:100%;background:var(--accent);border-radius:7px}
.rk .vl{text-align:right;font-variant-numeric:tabular-nums;color:var(--muted)}
.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th,.tbl td{padding:8px 6px;border-bottom:1px solid var(--line);text-align:right;font-variant-numeric:tabular-nums}
.tbl th:first-child,.tbl td:first-child{text-align:left}
.tbl th{color:var(--muted);font-weight:700;font-size:12px}
.tw{overflow-x:auto}
textarea.rpt{min-height:260px;font:13px/1.7 var(--f-ui);background:var(--surface2);resize:none}

.toast{position:fixed;left:50%;bottom:calc(18px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:60;background:var(--fg);color:var(--bg);padding:10px 16px;border-radius:12px;box-shadow:var(--shadow);display:flex;gap:10px;align-items:center;max-width:min(92vw,520px);font-weight:700}
.toast .lnk{color:var(--bg);opacity:.9;white-space:nowrap}
body.has-bulk .toast{bottom:calc(96px + env(safe-area-inset-bottom,0px))}
@media (prefers-reduced-motion:no-preference){
  .sheet{animation:in .18s ease-out}
  @keyframes in{from{opacity:.4;transform:translateY(10px)}to{opacity:1;transform:none}}
}

/* ===== 本番版で追加した部分 ===== */
.sync.off i{background:var(--dirty-solid)}
.sync.off{color:var(--dirty)}

/* ログイン */
.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px 16px}
.login-card{width:min(420px,100%);background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:28px 24px;box-shadow:var(--shadow)}
.login-card .brand{margin-bottom:6px}
.login-card h2{font:900 22px/1.2 var(--f-num);margin:0}
.login-card .hn{color:var(--muted);font-size:13px;margin:2px 0 18px}
.login-card .field{margin-bottom:12px}
.login-card .chk{display:flex;gap:10px;align-items:center;min-height:44px;font-size:14px}
.login-card .chk input{width:22px;height:22px}
.login-err{background:var(--dirty-bg);color:var(--dirty);border:1px solid var(--dirty-solid);border-radius:10px;padding:10px 12px;margin-bottom:12px;font-size:14px}

/* 設定 */
.set-sec{margin-top:14px}
.set-sec h3{display:flex;align-items:center;justify-content:space-between;gap:10px}
.urow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;align-items:center;padding:10px 0;border-top:1px solid var(--line)}
.urow:first-of-type{border-top:0}
.urow .nm{display:flex;align-items:center;gap:8px;font-weight:700;min-width:0}
.urow .nm span{overflow-wrap:anywhere}
.urow .meta{font-size:12px;color:var(--muted);grid-column:1/-1}
.rlist{display:flex;flex-wrap:wrap;gap:6px}
.rchip{min-width:58px;min-height:40px;padding:0 10px;border-radius:8px;border:1px solid var(--line2);background:var(--surface2);font:700 14px var(--f-num);font-variant-numeric:tabular-nums}
.rchip small{font-size:10px;font-weight:700;color:var(--muted);margin-left:4px}
.frow{display:grid;grid-template-columns:48px minmax(0,1fr);gap:10px;align-items:start;padding:10px 0;border-top:1px solid var(--line)}
.frow:first-of-type{border-top:0}
.frow .fl{padding-top:8px}
.trow{display:grid;grid-template-columns:70px minmax(0,1fr) 78px 78px auto;gap:8px;align-items:center;margin-bottom:8px}
.trow input{min-height:40px}
@media(max-width:640px){.trow{grid-template-columns:60px minmax(0,1fr) 64px 64px;}.trow .btn{grid-column:1/-1}}
.kv{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;font-size:13px;margin:0}
.kv dt{color:var(--muted)}
.kv dd{margin:0;font-variant-numeric:tabular-nums}
.colors{display:flex;flex-wrap:wrap;gap:8px}
.colors button{width:36px;height:36px;border-radius:50%;border:3px solid transparent;padding:0}
.colors button[aria-pressed="true"]{border-color:var(--fg)}
.warnline{color:var(--cleaning);font-size:13px}

/* ===== 忘れ物の検索・一覧(v1.1) ===== */
.lq{display:grid;gap:12px;margin-bottom:14px}
.lq .field{margin:0}
.lq-row{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:flex-end}
.lq-row .field{min-width:130px;flex:1 1 130px}
.lq-row .seg{align-self:flex-end}
.lq .btn[aria-pressed="true"]{background:var(--accent);color:var(--accent-fg);border-color:transparent}
.due{font-size:12px;font-weight:700;color:var(--muted);white-space:nowrap}
.due.soon{color:var(--cleaning)}
.due.over{color:var(--dirty)}
.lgrid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.lcard{display:grid;gap:0;text-align:left;padding:0;border:1px solid var(--line);border-radius:12px;background:var(--surface);overflow:hidden}
.lcard .lph{aspect-ratio:1/1;display:grid;place-items:center;background:var(--surface2);color:var(--muted);font-size:12px}
.lcard .lph img{width:100%;height:100%;object-fit:cover;display:block}
.lcard .lt{display:grid;gap:2px;padding:8px 10px}
.lcard .lt b{font-size:14px;overflow-wrap:anywhere}
.lcard .lt small{color:var(--muted);font-size:12px}
.kv2{display:grid;grid-template-columns:92px minmax(0,1fr);gap:8px 12px;margin:14px 0 0;font-size:14px}
.kv2 dt{color:var(--muted);font-size:12px;font-weight:700;padding-top:2px}
.kv2 dd{margin:0;overflow-wrap:anywhere}

/* ===== v2.0: 現場の流れ(本日の予定・エコ・保留・清掃禁止・指示書・履歴) ===== */
.rooms{grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}
.tile.p-out{box-shadow:inset 5px 0 0 var(--dirty-solid)}
.tile.p-stay{box-shadow:inset 5px 0 0 var(--ready-solid)}
.tile .nt{font-size:10.5px;line-height:1.25;color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.tile .ft{flex-wrap:wrap;row-gap:2px}
:root{--eco-bg:#E8DFF6;--eco-line:#8A66C8;--eco-fg:#3C226F;--eco-solid:#7B52BE}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--eco-bg:#2A1F44;--eco-line:#8E6BD0;--eco-fg:#CDB8F5;--eco-solid:#8E6BD0}}
:root[data-theme="dark"]{--eco-bg:#2A1F44;--eco-line:#8E6BD0;--eco-fg:#CDB8F5;--eco-solid:#8E6BD0}
.chip.eco{background:var(--eco-bg);border-color:var(--eco-line);color:var(--eco-fg)}
.chip.hold{background:var(--cleaning-bg);border-color:var(--cleaning-solid);color:var(--cleaning)}
.chip.dnd{background:var(--ooo-solid);border-color:transparent;color:#fff}
.chip.plan-out{background:var(--dirty-bg);border-color:var(--dirty-solid);color:var(--dirty)}
.chip.plan-stay{background:var(--ready-bg);border-color:var(--ready-solid);color:var(--ready)}
.sum2{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.sum2 button{border:1px solid var(--line2);background:var(--surface);border-radius:999px;padding:0 12px;min-height:36px;font-weight:700;font-size:13px;display:inline-flex;gap:8px;align-items:center}
.sum2 button b{background:var(--surface2);border:1px solid var(--line);border-radius:9px;padding:0 7px;font-variant-numeric:tabular-nums;color:var(--fg)}
.sum2 button[aria-pressed="true"]{background:var(--accent);color:var(--accent-fg);border-color:transparent}
.bq{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end;margin-top:12px}
.bq .field{flex:1 1 240px;max-width:420px}
.bq .chk{display:inline-flex;align-items:center;gap:8px;min-height:44px;font-size:14px}
.bq .chk input{width:20px;height:20px}
input[type=search]{width:100%;min-height:44px;padding:8px 12px;border-radius:10px;border:1px solid var(--line2);background:var(--surface);color:var(--fg)}
.s-note.eco-note{background:var(--eco-bg);color:var(--eco-fg);font-weight:700}
.s-note.hold-note{background:var(--cleaning-bg);color:var(--cleaning);font-weight:700}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chipbtn{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:0 14px;border-radius:999px;border:1px solid var(--line2);background:var(--surface);font-weight:700;font-size:13px}
.chipbtn[aria-pressed="true"]{background:var(--accent);color:var(--accent-fg);border-color:transparent}
.btn.disabled{opacity:.45;pointer-events:none}
label.btn{cursor:pointer}
.notice.scan{background:var(--accent-soft);border-color:var(--accent)}

/* 履歴 */
.evlist{list-style:none;margin:0;padding:0;background:var(--surface);border:1px solid var(--line);border-radius:12px}
.evlist li{display:grid;grid-template-columns:52px 62px minmax(0,1fr) auto;gap:10px;align-items:center;padding:8px 12px;border-top:1px solid var(--line);font-size:13px}
.evlist li:first-child{border-top:0}
.evlist time{color:var(--muted);font-variant-numeric:tabular-nums}
.evroom{font:900 15px var(--f-num);background:var(--surface2);border:1px solid var(--line2);border-radius:8px;min-height:32px;padding:0}
.evroom.none{display:inline-grid;place-items:center;color:var(--muted);border-color:transparent;background:none}
.evwho{color:var(--muted);font-size:12px}
@media(max-width:640px){.evlist li{grid-template-columns:48px 56px minmax(0,1fr)}.evwho{grid-column:2/-1}}

/* 清掃指示書(紙の表と同じ並び) */
.pwrap{display:grid;gap:14px;margin-top:12px}
@media(min-width:1000px){.pwrap.withphoto{grid-template-columns:320px minmax(0,1fr);align-items:start}.pphoto{position:sticky;top:76px}}
.pphoto img{width:100%;max-height:70vh;object-fit:contain;border-radius:10px;border:1px solid var(--line);background:var(--surface2);display:block}
.pgrid{display:grid;gap:6px;grid-template-columns:minmax(0,1fr);align-content:start}
@media(min-width:1000px){.pgrid{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:16px}}
.pfl{grid-column:1/-1;font:900 20px/1 var(--f-num);color:var(--muted);margin-top:10px}
.pfl small{font-size:12px;font-weight:700}
.pr{display:grid;grid-template-columns:78px 62px 62px 50px minmax(0,1fr);gap:6px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:6px 8px}
.pr.uns{background:var(--notice);border-color:var(--notice-line)}
.pno{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}
.pno b{font:900 20px/1 var(--f-num);font-variant-numeric:tabular-nums}
.pno small{color:var(--muted);font-weight:700}
.pno em{font-style:normal;font-size:10px;font-weight:700;color:var(--cleaning);flex-basis:100%}
.pt{min-height:40px;border-radius:8px;border:1px solid var(--line2);background:var(--surface2);font-weight:700;font-size:13px;padding:0}
.pt[aria-pressed="true"].out{background:var(--dirty-solid);color:#fff;border-color:transparent}
.pt[aria-pressed="true"].stay{background:var(--ready-solid);color:var(--on-ready);border-color:transparent}
.pt[aria-pressed="true"].eco{background:var(--eco-solid);color:#fff;border-color:transparent}
.pn{min-height:40px}
@media(max-width:560px){.pr{grid-template-columns:70px 1fr 1fr 1fr}.pn{grid-column:1/-1}}
.pg{display:grid;gap:10px;padding:12px;border:1px solid var(--line);border-radius:12px;margin-top:10px;background:var(--surface2)}
.pg.uns{background:var(--notice);border-color:var(--notice-line)}
.diffs{font-size:13px;border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--surface2)}
.diffs summary{cursor:pointer;font-weight:700}
.diffs ul{margin:8px 0 0;padding-left:1.2em;display:grid;gap:4px;overflow-wrap:anywhere}
/* 定型の備考(v2.1.0) */
.qn{margin-top:8px}
.qn .chipbtn,.qnbar .chipbtn{min-height:36px;white-space:nowrap}
.qnbar{position:sticky;top:var(--topH,64px);z-index:12;display:flex;flex-direction:column;gap:6px;background:var(--bg);padding:8px 0;margin-top:8px;border-bottom:1px solid var(--line)}
.qnbar .chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px}
/* v2.2.0: 共用の端末(名前をタップ)・日報カレンダー */
.npg{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.np{display:flex;flex-direction:column;align-items:center;gap:6px;min-height:96px;padding:12px 8px;border-radius:16px;border:2px solid var(--line2);background:var(--surface);text-align:center}
.np .av{width:40px;height:40px;font-size:18px}
.np .nm{font-weight:900;font-size:18px;line-height:1.2;overflow-wrap:anywhere}
.np .sub{font-size:12px;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:2px;min-height:16px}
.np .sub .rc{font-size:11px;color:var(--accent)}
.np.off{opacity:.6}
.np:active{background:var(--accent-soft);border-color:var(--accent)}
.rep-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr)}
@media(min-width:1000px){.rep-grid{grid-template-columns:minmax(0,420px) minmax(0,1fr);align-items:start}}
.cal-nav{display:flex;align-items:center;gap:10px;margin:4px 0 12px}
.cal-t{font:900 20px var(--f-num)}
.cal{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:10px}
.cal-h,.cal-g{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.cal-h span{text-align:center;font-size:12px;font-weight:700;color:var(--muted);padding:2px 0 6px}
.cal-h .sun{color:#C0463A}.cal-h .sat{color:#3566AB}
.cd{display:flex;flex-direction:column;align-items:center;gap:2px;min-height:62px;padding:4px 2px;border-radius:10px;border:1.5px solid transparent;background:var(--surface2);min-width:0}
.cd.blank{background:none;border:0;min-height:0}
.cd .dn{font-size:12px;font-weight:700;color:var(--muted)}
.cd .ct{font:900 18px/1.1 var(--f-num);font-variant-numeric:tabular-nums}
.cd .ct small{font-size:10px;font-weight:700;margin-left:1px;color:var(--muted)}
.cd .ct.none{color:var(--line2);font-weight:500}
.cd .mks{display:flex;flex-wrap:wrap;justify-content:center;gap:2px;min-height:12px}
.cd .mk{font-style:normal;font-size:10px;font-weight:700;background:var(--notice);border:1px solid var(--notice-line);border-radius:6px;padding:0 3px;line-height:14px}
.cd .mk.memo{background:var(--accent-soft);border-color:var(--accent)}
.cd.today{border-color:var(--accent)}
.cd.today .dn{color:var(--accent)}
.cd.fut{opacity:.55}
.cd.sel{background:var(--accent);color:var(--accent-fg)}
.cd.sel .dn,.cd.sel .ct small{color:var(--accent-fg)}
.cd.sel .ct.none{color:var(--accent-fg);opacity:.6}
.rl{background:var(--surface2);border:1px solid var(--line);border-radius:12px;padding:6px 12px;margin-top:10px}
.rl summary{min-height:36px;font-size:14px}
.rl .hist{padding-bottom:6px}
textarea#rep-memo{min-height:120px;background:var(--surface)}
.cd .mk{color:var(--fg)}
/* みんなの進み具合(スタッフ画面。清掃スタッフ全員が見られる) */
.team{margin-top:10px}
.team-foot{justify-content:space-between;gap:10px;margin-top:8px}
.team-sub{font-size:12px;margin:0}
.team-sub b{color:var(--fg);font-variant-numeric:tabular-nums}
.tmg{display:grid;gap:4px 14px;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}
.tm{display:grid;grid-template-columns:minmax(0,1fr) 64px 3.6em;align-items:center;gap:8px;font-size:13px;padding:4px 6px;border-radius:8px}
.tm .nm{display:flex;align-items:center;gap:6px;min-width:0;font-weight:700}
.tm .nm>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tm .bar{height:8px}
.tm .num{font-variant-numeric:tabular-nums;font-weight:700;text-align:right;white-space:nowrap}
.tm.me{background:var(--ready-bg)}
.tm.fin .num{color:var(--ready)}
/* ルームチェックの窓口(v2.3.0) */
.chk-top{margin-top:2px}
.chk-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;text-align:center}
.chk-stats>div{background:var(--surface2);border:1px solid var(--line);border-radius:10px;padding:8px 4px}
.chk-stats b{display:block;font:900 26px/1.1 var(--f-num);font-variant-numeric:tabular-nums}
.chk-stats span{font-size:12px;color:var(--muted)}
.chk-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.chip.wait{background:var(--surface2);border-color:var(--line2);color:var(--muted);margin-left:auto}
.s-note.redo-note{background:var(--dirty-bg);color:var(--dirty);font-weight:700}
.chk-calls{display:grid;gap:6px;margin-top:10px}
.chk-call{display:grid;grid-template-columns:auto 3em minmax(0,1fr);gap:4px 10px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:14px}
.chk-call .ct{overflow-wrap:anywhere}
.chk-call .who{grid-column:2 / -1;font-size:12px}
.chk-hist{list-style:none;margin:10px 0 0;padding:0;background:var(--surface);border:1px solid var(--line);border-radius:12px}
.chk-hist li{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;padding:8px 12px;border-top:1px solid var(--line);font-size:13px}
.chk-hist li:first-child{border-top:0}
.chk-hist time{color:var(--muted);font-variant-numeric:tabular-nums;flex:none}
.chk-hist .rm{font:900 16px var(--f-num);min-width:2.6em}
.chk-hist .nt{flex-basis:100%;color:var(--muted);overflow-wrap:anywhere}
/* 日報・実績(v2.4.0): 年・月を選ぶ帯、色の濃さで忙しさが分かるカレンダー、年間の画面 */
.rep-bar{margin-bottom:14px;display:grid;gap:10px}
.rep-y{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.rep-y select{width:auto;flex:none;min-width:6.5em;min-height:40px;font:900 18px var(--f-num);padding:0 10px;border-radius:10px;border:1px solid var(--line2);background:var(--surface);color:var(--fg)}
.rep-date{display:flex;align-items:center;gap:6px;margin-left:auto;font-size:12px}
.rep-date input{min-height:40px;border-radius:10px;border:1px solid var(--line2);background:var(--surface);color:var(--fg);padding:0 8px}
.rep-m{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px}
@media (min-width:640px){.rep-m{grid-template-columns:repeat(12,minmax(0,1fr))}}
.mbtn{min-height:40px;border-radius:10px;border:1px solid var(--line2);background:var(--surface);color:var(--fg);font:700 14px var(--f-num);cursor:pointer}
.mbtn[aria-pressed="true"]{background:var(--accent);color:var(--accent-fg);border-color:transparent}
.mbtn.fut{opacity:.5}
.cd{background:color-mix(in srgb,var(--accent) calc(var(--h,0) * 34%),var(--surface2))}
.cd .dn.sun{color:#C0463A}
.cd .dn.sat{color:#3566AB}
.cd.sel .dn.sun,.cd.sel .dn.sat{color:var(--accent-fg)}
.rk .tr{display:flex}
.rk .tr i{border-radius:0;flex:none}
.rk .tr i.st{background:var(--ready-solid)}
.ychart{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:6px;align-items:end}
.ym{display:flex;flex-direction:column;align-items:center;gap:4px;border:0;background:none;padding:4px 0;cursor:pointer;color:var(--fg);min-width:0}
.ym .yb{display:flex;flex-direction:column-reverse;width:100%;max-width:34px;height:130px;background:var(--surface2);border-radius:8px;overflow:hidden}
.ym .yb i{display:block;width:100%;flex:none}
.ym .yb i.out{background:var(--accent)}
.ym .yb i.stay{background:var(--ready-solid)}
.ym b{font:900 12px var(--f-num);font-variant-numeric:tabular-nums}
.ym small{font-size:11px;color:var(--muted)}
.ym:hover .yb{outline:2px solid var(--accent)}
.tbl tr.tot td{font-weight:900;border-top:2px solid var(--line2)}
.tbl.rooms td,.tbl.rooms th{text-align:left}
/* みんなの進み具合: どの部屋をしているか(部屋番号の札) */
.tm .rml{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:4px;padding:0 0 2px 26px}
.rmc{font:700 12px/1.5 var(--f-num);font-style:normal;padding:0 7px;border-radius:8px;border:1px solid var(--line2);background:var(--surface2);font-variant-numeric:tabular-nums}
.rmc.now{background:var(--dirty-bg);border-color:var(--dirty-solid);color:var(--dirty)}
.rmc.redo{background:var(--dirty-solid);border-color:transparent;color:#fff}
.rmc.ok{background:var(--ready-bg);border-color:var(--ready-solid);color:var(--ready)}
.rmc.more{background:none;border-style:dashed;color:var(--muted)}
.chk-team{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
.card.team>.chk-team{margin-top:0;padding-top:0;border-top:0}
.chk-team .lab{font:700 12px/1 var(--f-num);color:var(--muted);letter-spacing:.04em}
.chk-team .team-foot{margin-top:0;margin-bottom:8px}
.chk-team .tmg{grid-template-columns:repeat(auto-fill,minmax(290px,1fr));margin-top:0;padding-top:0;border-top:0}
.tm.ck{grid-template-columns:minmax(0,1fr) 56px 9.6em}
.tm .bar i{flex:none}
.item.call{grid-template-columns:minmax(0,1fr)}
.kind-call{--st-bg:var(--accent-soft);--st-fg:var(--accent);--st-line:var(--accent)}
