:root {
  --bg: #f4f5f2; --card: #fff; --ink: #1f2420; --sub: #6b726c; --line: #dfe3dc;
  --accent: #3f7d4e; --accent-ink: #fff; --head: #e3eedd; --warn: #b4462f; --warn-bg: #fdf0ec;
  --temp: #8a5a00; --temp-bg: #fff6df; --ok: #2f7a45;
  --c-booking: #d9e6fb; --c-airbnb: #fde2e4; --c-trip: #dbf0f6; --c-homepage: #e4f2dc; --c-other: #eee8f6;
}
* { box-sizing: border-box; }
[hidden] { display: none !important; }
body { margin: 0; background: var(--bg); color: var(--ink); font: 14px/1.5 "Malgun Gothic", "맑은 고딕", "Yu Gothic UI", "Microsoft YaHei", "Microsoft JhengHei", system-ui, sans-serif; }
button, select, input, textarea { font: inherit; }
a { color: var(--accent); }
.nav { position: sticky; top: 0; z-index: 10; background: #fff; border-bottom: 1px solid var(--line); }
.env-test { background: #8a5a00; color: #fff; text-align: center; font-size: 12px; padding: 3px 8px; font-weight: 600; }
.nav-row { display: flex; align-items: center; gap: 12px; padding: 8px 16px; flex-wrap: wrap; }
.brand { font-weight: 700; color: var(--ink); text-decoration: none; letter-spacing: .02em; }
/* 상단 메뉴: 버튼형, PC 에서 최대 2줄 (글자 잘림 없이 줄바꿈) */
.menu { display: flex; gap: 6px; flex-wrap: wrap; padding: 0 16px 8px; }
.menu a { padding: 7px 14px; border: 1px solid var(--line); border-radius: 8px; background: #fff; color: var(--ink); text-decoration: none;
  font-size: 15px; line-height: 1.3; white-space: nowrap; }
.menu a:hover { background: var(--head); }
.menu a.on { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
.nav-row .spacer { flex: 1; }
.menu-btn { display: none; border: 1px solid var(--line); background: #fff; border-radius: 6px; padding: 4px 10px; }
.who { color: var(--sub); font-size: 12px; }
.seg { display: inline-flex; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; }
.seg button { border: 0; background: #fff; padding: 6px 14px; cursor: pointer; color: var(--sub); }
.seg button.on { background: var(--accent); color: var(--accent-ink); font-weight: 600; }
main { max-width: 1500px; margin: 0 auto; padding: 16px; display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; }
main.wide { max-width: none; }      /* 예약 달력·운영 현황: PC 화면 폭을 다 쓴다 */
main > * { min-width: 0; }
.card { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 14px 16px; }
.card h3 { margin: 0 0 8px; font-size: 15px; }
.row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.spacer { flex: 1; }
.note { color: var(--sub); font-size: 12px; margin: 6px 0 0; }
button.primary { background: var(--accent); color: var(--accent-ink); border: 0; border-radius: 8px; padding: 9px 16px; cursor: pointer; font-weight: 600; }
button.primary.big { font-size: 16px; padding: 12px 22px; }
button.primary:disabled { opacity: .5; }
button.ghost { background: #fff; border: 1px solid var(--line); border-radius: 7px; padding: 7px 12px; cursor: pointer; }
button.ghost.small, button.small { padding: 4px 9px; font-size: 12px; }
button.link { background: none; border: 0; color: var(--accent); cursor: pointer; padding: 0 4px; }
.badge { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 12px; background: #eceee9; color: var(--sub); white-space: nowrap; }
.badge.ok { background: #e2f1e5; color: var(--ok); }
.badge.warn { background: var(--warn-bg); color: var(--warn); }
.badge.temp { background: var(--temp-bg); color: var(--temp); border: 1px dashed #d9b25a; }
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); margin-bottom: 10px; flex-wrap: wrap; }
.tabs button { border: 0; background: none; padding: 8px 12px; cursor: pointer; color: var(--sub); border-bottom: 2px solid transparent; }
.tabs button.on { color: var(--ink); font-weight: 600; border-bottom-color: var(--accent); }
.tabs .count { margin-left: 4px; }
.table-wrap { overflow-x: auto; }
table { border-collapse: collapse; width: 100%; font-variant-numeric: tabular-nums; }
th, td { border-bottom: 1px solid var(--line); padding: 6px 8px; text-align: left; white-space: nowrap; }
th { background: var(--head); font-weight: 600; font-size: 12px; }
tr.click { cursor: pointer; }
tr.click:hover td { background: #f6f8f3; }
.form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 10px 12px; }
.form-grid label, .fld { display: grid; gap: 3px; font-size: 12px; color: var(--sub); }
.form-grid .wide { grid-column: 1 / -1; }
input, select, textarea { padding: 7px 9px; border: 1px solid var(--line); border-radius: 7px; background: #fff; color: var(--ink); min-width: 0; }
input:focus, select:focus, textarea:focus { outline: 2px solid #b9d3bf; }
.req::after { content: " *"; color: var(--warn); }
.avail { display: flex; gap: 8px; flex-wrap: wrap; margin: 8px 0; }
.avail button { border: 1px solid var(--line); background: #fff; border-radius: 8px; padding: 6px 10px; cursor: pointer; text-align: left; }
.avail button.on { border-color: var(--accent); background: var(--head); }
.avail button.full { color: var(--warn); }
.avail small { display: block; color: var(--sub); }
.rooms-pick { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 6px; }
.rooms-pick button { border: 1px solid var(--line); background: #fff; border-radius: 6px; padding: 3px 8px; cursor: pointer; font-size: 12px; }
.rooms-pick button.on { background: var(--accent); color: #fff; border-color: var(--accent); }
.modal { position: fixed; inset: 0; background: rgba(20, 24, 20, .4); display: flex; align-items: flex-start; justify-content: center; z-index: 30; padding: 30px 12px; overflow: auto; }
.modal-box { background: #fff; border-radius: 12px; padding: 18px 20px; width: min(720px, 100%); box-shadow: 0 10px 40px rgba(0,0,0,.2); }
.modal-box.wide { width: min(1200px, 100%); }
.modal-box h2 { margin: 0 0 10px; font-size: 18px; }
.actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 12px; flex-wrap: wrap; }
.toast { position: fixed; right: 16px; bottom: 16px; background: #263127; color: #fff; padding: 10px 16px; border-radius: 8px; z-index: 40; max-width: 520px; white-space: pre-line; }
.toast.err { background: var(--warn); }
.banner { padding: 8px 12px; border-radius: 8px; background: var(--temp-bg); color: var(--temp); font-size: 13px; }
.banner.warn { background: var(--warn-bg); color: var(--warn); }
/* 오늘의 업무 */
.kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.kpi { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 10px 14px; color: var(--ink); text-decoration: none; }
.kpi .label { color: var(--sub); font-size: 12px; }
.kpi .value { font-size: 17px; font-weight: 700; }
.kpi .value.warn { color: var(--warn); }
.kpi.link:hover { border-color: var(--accent); }
.two { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.two h4 { margin: 4px 0 8px; font-size: 13px; color: var(--sub); }
.checklist { list-style: none; margin: 0; padding: 0; }
.checklist li { display: flex; align-items: center; gap: 10px; padding: 11px 6px; border-bottom: 1px solid var(--line); cursor: pointer; user-select: none; }
.checklist li .box { width: 26px; height: 26px; border: 2px solid #b9c4b4; border-radius: 7px; display: inline-flex; align-items: center; justify-content: center; font-weight: 700; color: #fff; flex: none; }
.checklist li.done .box { background: var(--accent); border-color: var(--accent); }
.checklist li.done .tt { color: var(--sub); text-decoration: line-through; }
.checklist li .tt { flex: 1; font-size: 15px; }
.notecard { border: 1px solid var(--line); border-left: 4px solid #b9c4b4; border-radius: 8px; padding: 8px 10px; margin-bottom: 8px; }
.notecard.k-claim, .notecard.k-facility, .notecard.k-supply { border-left-color: var(--warn); }
.notecard.k-instruction { border-left-color: var(--accent); }
tr.attn td:first-child { box-shadow: inset 3px 0 0 var(--warn); }
@media (max-width: 760px) { .kpis { grid-template-columns: 1fr 1fr; } .kpi .value { font-size: 14px; } .two { grid-template-columns: 1fr; } }
/* 청소 */
.daynav { justify-content: center; margin-bottom: 8px; }
.daynav h2 { margin: 0 8px; font-size: 18px; }
.job { display: flex; align-items: center; gap: 8px; padding: 12px 8px; border-bottom: 1px solid var(--line); color: var(--ink); text-decoration: none; }
.job .rno { font-size: 22px; font-weight: 700; min-width: 64px; }
.job.done .rno { color: var(--ok); }
.job.cancelled .rno { text-decoration: line-through; color: var(--sub); }
.tlabel { background: #263127; color: #fff; border-radius: 6px; padding: 1px 7px; font-size: 13px; font-weight: 700; }
.tlabel.urgent { background: #d62f2f; }
.card.priority { border: 2px solid #d62f2f; }
.chip.early { border-color: #d62f2f; }
.badge.chg { background: #ffe58a; color: #6b4b00; font-weight: 700; }
.badge.big { font-size: 16px; padding: 6px 12px; }
h3.same { color: var(--warn); }
.wk h3 { margin-bottom: 4px; }
.wk.today { border-color: var(--accent); }
.wkrow { display: flex; gap: 8px; padding: 4px 0; align-items: flex-start; }
.wkrow > span { width: 104px; flex: none; font-size: 12px; color: var(--sub); padding-top: 4px; }
.wkrow.same > span { color: var(--warn); font-weight: 600; }
.wkrow > div { display: flex; flex-wrap: wrap; gap: 4px; }
.chip { display: inline-flex; flex-direction: column; align-items: center; border: 1px solid var(--line); border-radius: 7px; padding: 3px 8px; min-width: 46px; font-weight: 700; color: var(--ink); text-decoration: none; background: #fff; }
.chip small { font-weight: 600; font-size: 10px; color: var(--warn); }
.chip.done { background: #e2f1e5; border-color: #b6dcbf; }
.chip.cancelled { text-decoration: line-through; color: var(--sub); }
.chip.chg { box-shadow: 0 0 0 2px #f2c94c; }
.chip.tight { border-color: var(--warn); color: var(--warn); background: var(--warn-bg); }
.mgrid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; }
.mgrid .mh { text-align: center; font-size: 12px; color: var(--sub); }
.mday { background: #fff; border: 1px solid var(--line); border-radius: 6px; min-height: 58px; padding: 3px; color: var(--ink); text-decoration: none; display: flex; flex-direction: column; gap: 2px; font-size: 12px; }
.mday.today { border-color: var(--accent); }
.mday i { color: #d4a800; font-style: normal; font-weight: 700; }
.roomhead { text-align: center; }
.rno.big { font-size: 40px; font-weight: 800; }
.pwbox { margin-top: 8px; }
.pw { font-size: 34px; font-weight: 800; letter-spacing: .12em; margin-top: 8px; font-family: Consolas, monospace; }
.photos { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 6px; margin: 8px 0; }
.photos img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 6px; border: 1px solid var(--line); }
.pv { position: relative; }
.pv button { position: absolute; top: 2px; right: 2px; border: 0; background: rgba(0,0,0,.6); color: #fff; border-radius: 50%; width: 24px; height: 24px; }
.photo-pick { display: flex; justify-content: center; align-items: center; border: 2px dashed #b9c4b4; border-radius: 10px; padding: 18px; font-size: 16px; cursor: pointer; margin: 8px 0; }
.btnlink { display: inline-block; padding: 6px 12px; border: 1px solid var(--line); border-radius: 7px; text-decoration: none; color: var(--ink); background: #fff; }
body.cleaner .job .badge { font-size: 13px; }
.insp .rno { font-size: 22px; font-weight: 800; }
.insp.done { border-color: #b6dcbf; }
.insp .issue-form { margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--line); }
td.num, th.num { text-align: right; }
/* 청소관리 주간표 (구글시트 형식) */
table.sched td, table.sched th { vertical-align: top; white-space: normal; }
table.sched th { text-align: center; }
table.sched td.same { background: #fbe9e7; }
table.sched td.staff { background: #e8f3e3; min-width: 90px; cursor: pointer; }
table.sched td.staff.ro { cursor: default; }
table.sched td.date { white-space: nowrap; font-weight: 600; }
table.sched td.we { color: var(--warn); }
table.sched .chip { margin: 2px; }
/* 공통 업무·현금 (Stage 5) */
.cashbtns button { flex: 1; }
.task { border-bottom: 1px solid var(--line); padding: 10px 4px; }
.task .box { width: 24px; height: 24px; border: 2px solid #b9c4b4; border-radius: 6px; display: inline-flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; flex: none; }
.task.done .box { background: var(--accent); border-color: var(--accent); }
.task.done b { color: var(--sub); }
.task.prio { background: #fff8f6; }
.task.fix_requested { background: var(--warn-bg); }
.fixmsg { color: var(--warn); font-weight: 600; font-size: 13px; }
.task .issue-form { margin-top: 8px; }
.photos.small { grid-template-columns: repeat(auto-fill, minmax(56px, 1fr)); }
.rooms-pick label { display: inline-flex; align-items: center; gap: 3px; border: 1px solid var(--line); border-radius: 6px; padding: 3px 7px; font-size: 13px; cursor: pointer; }
.rooms-pick label.on { background: var(--head); border-color: var(--accent); }
.rooms-pick label.bad { border-color: var(--warn); color: var(--warn); }
.rooms-pick small { color: var(--sub); font-size: 10px; }
.shift { display: inline-block; border-radius: 6px; padding: 3px 8px; font-size: 13px; background: var(--head); margin: 2px 4px 2px 0; }
.shift.w-linen { background: #eef3fb; }
.shift.w-direct { background: #f6f0e6; }
.task .sublinks { gap: 14px; margin-top: 2px; }
.task .sublinks .link { padding: 4px 0; }
h4.grp { margin: 14px 0 2px; padding-bottom: 4px; border-bottom: 2px solid var(--accent); }
/* 근무표 */
.cal { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 3px; margin: 8px 0; }
.calh { text-align: center; font-size: 12px; color: var(--sub); }
.calh.we { color: var(--warn); }
.cald { background: #fff; border: 1px solid var(--line); border-radius: 6px; min-height: 64px; padding: 3px; cursor: pointer; overflow: hidden; }
.cald b { font-size: 12px; }
.cald.today { border-color: var(--accent); border-width: 2px; }
.cald.sel { background: var(--head); }
.cs { font-size: 11px; line-height: 1.3; border-radius: 4px; padding: 1px 3px; margin-top: 2px; background: #e8f2e6; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cs.w-linen { background: #e6eefb; }
.cs.w-direct { background: #f6ecdc; }
.cs.off { background: #eceeec; color: var(--sub); }
.cs.rq { background: #fff1e0; color: #a35a00; }
.shiftrow { padding: 6px 8px; border-radius: 6px; background: #e8f2e6; margin: 4px 0; font-weight: 600; }
.shiftrow.w-linen { background: #e6eefb; }
.shiftrow.w-direct { background: #f6ecdc; }
.duty-wrap { padding: 0; margin-top: 8px; overflow: auto; max-height: calc(100vh - 230px); }   /* 직원 이름 왼쪽·날짜 위쪽 고정, 가로 스크롤 */
table.duty { border-collapse: separate; border-spacing: 0; font-size: 12px; }
table.duty thead th { position: sticky; top: 0; z-index: 2; background: var(--head); }
table.duty thead th.sticky { z-index: 3; }
table.duty th, table.duty td { border: 1px solid var(--line); padding: 2px; min-width: 44px; vertical-align: top; }
table.duty th.we { color: var(--warn); }
table.duty .sticky { position: sticky; left: 0; background: #fff; z-index: 1; min-width: 90px; text-align: left; }
table.duty td.dc { cursor: pointer; height: 40px; }
table.duty td.reg { background: #f1f2f1; }
table.duty td.unk { box-shadow: inset 0 0 0 2px #d9534f; }
.cs.unk { background: #fde8e7; color: #b52b27; }
.warn-text { color: var(--warn); }
table.duty td.rq-unavailable, table.duty td.rq-off_wish { box-shadow: inset 0 0 0 2px #f0a64b; }
.shiftedit { flex-wrap: wrap; border-bottom: 1px solid var(--line); padding: 6px 0; }
/* 관리자 근무표 월간 달력: 직원 칩 왼쪽 띠 = 첫 근무 장소 */
.cald.adm { min-height: 92px; }
.cald.adm .dh { display: flex; justify-content: space-between; align-items: baseline; gap: 4px; }
.cald.adm .dh b.we { color: var(--warn); }
.cald.adm .dh small { font-size: 10px; color: var(--sub); white-space: nowrap; }
.cs.p-namba { border-left: 3px solid #3a7d44; }
.cs.p-tengachaya { border-left: 3px solid #2f5d8a; background: #e6eefb; }
.cs.p-logistics { border-left: 3px solid #a3651a; background: #f6ecdc; }
.cs.hasrq { box-shadow: inset 0 0 0 1px #f0a64b; }
.dayst { border-top: 1px solid var(--line); padding: 6px 0; }
.dayline { border-top: 1px solid var(--line); padding: 4px 0; }
@media (max-width: 600px) { .cald { min-height: 54px; } .cs { font-size: 10px; } }
@media (max-width: 600px) { .cald.adm { min-height: 60px; padding: 2px; } .cald.adm .sx { display: none; } .cald.adm .dh { flex-wrap: wrap; } .cald.adm .dh small { font-size: 9px; white-space: normal; overflow-wrap: anywhere; line-height: 1.1; } .cald.adm .cs { padding: 0 2px; }
  .shiftedit { flex-wrap: wrap; } }
tr.cancelled td { color: #9aa19b; text-decoration: line-through; }
/* 테트리스 */
.tt-wrap { overflow: auto; max-height: calc(100vh - 210px); border: 1px solid var(--line); border-radius: 8px; background: #fff; }
.tt { display: grid; position: relative; min-width: max-content; }
.tt .h { height: 36px; line-height: 1.15; position: sticky; top: 0; z-index: 3; background: var(--head); font-size: 11px; text-align: center; padding: 3px 0; border-right: 1px solid #fff; }
.tt .h.we { color: var(--warn); }
.tt .h.today { background: #c9e2c0; font-weight: 700; }
.tt .rn { position: sticky; left: 0; z-index: 2; background: #fafbf8; border-bottom: 1px solid var(--line); border-right: 1px solid var(--line); padding: 0 8px; font-size: 12px; display: flex; align-items: center; gap: 6px; white-space: nowrap; }
.tt .rn small { color: var(--sub); }
.tt .rn.type { background: #eef2ea; font-weight: 600; color: var(--sub); }
.tt .rn.un { background: var(--temp-bg); color: var(--temp); }
.tt .cell { border-bottom: 1px solid var(--line); border-right: 1px solid #f0f2ee; height: 34px; }
.tt .cell.over { background: #d9ecd2; }
.tt .cell.bad { background: var(--warn-bg); }
.tt .cell.typehead { background: #eef2ea; height: 22px; font-size: 11px; color: var(--sub); text-align: center; line-height: 22px; }
.tt .cell.typehead.full { color: var(--warn); font-weight: 700; }
.tt .h.next { background: #eceee9; color: var(--sub); }
.tt .blk.cut-l { border-top-left-radius: 0; border-bottom-left-radius: 0; border-left: 3px dashed rgba(0,0,0,.35); }
.tt .blk.cut-r { border-top-right-radius: 0; border-bottom-right-radius: 0; border-right: 3px dashed rgba(0,0,0,.35); }
.resbar .big { min-width: 170px; }
/* 운영 현황 */
.bld .kpis { margin: 10px 0; }
.bld .kpi .rooms { font-size: 13px; color: var(--ink); margin-top: 4px; word-break: break-all; }
.bld h4 { margin: 12px 0 4px; }
ul.alerts { margin: 0; padding-left: 18px; }
ul.alerts li.bad { color: var(--warn); margin: 2px 0; }
.ok-line { color: var(--accent); margin: 2px 0; }
.supply-line { border-top: 1px dashed var(--line); padding-top: 8px; margin: 10px 0 0; }
.supply-line .sup { white-space: nowrap; }
.cashrow { gap: 8px; flex-wrap: wrap; }
/* 예약 자료 업로드 */
.dropzone { border: 2px dashed var(--line); border-radius: 10px; padding: 18px; text-align: center; color: var(--sub); margin: 8px 0; }
.dropzone.over, .dropzone:focus { border-color: var(--accent); background: var(--head); outline: none; }
.thumbs { display: flex; flex-wrap: wrap; gap: 8px; }
.thumbs .thumb, .thumbs a { position: relative; display: inline-flex; flex-direction: column; align-items: center; width: 110px; font-size: 11px; color: var(--sub); text-decoration: none; }
.thumbs img { width: 110px; height: 80px; object-fit: cover; border: 1px solid var(--line); border-radius: 6px; }
.thumbs.big a, .thumbs.big img { width: 160px; } .thumbs.big img { height: 120px; object-fit: contain; background: #fafafa; }
.thumbs .thumb button { position: absolute; top: 2px; right: 2px; border: 0; background: rgba(0,0,0,.55); color: #fff; border-radius: 50%; width: 22px; height: 22px; cursor: pointer; }
table.review td { vertical-align: top; }
table.review input, table.review select { font-size: 13px; padding: 3px 5px; }
.blk { position: absolute; height: 28px; margin-top: 3px; border-radius: 6px; padding: 2px 6px; font-size: 11px; line-height: 12px; overflow: hidden; cursor: grab; border: 1px solid rgba(0,0,0,.12); white-space: nowrap; z-index: 1; }
.blk b { display: block; font-size: 12px; overflow: hidden; text-overflow: ellipsis; }
.blk.info { box-shadow: inset 0 0 0 2px var(--warn); }
.blk.temp { border: 1.5px dashed var(--temp); background: var(--temp-bg) !important; }
.blk.diff::after { content: "≠"; position: absolute; right: 3px; top: 1px; color: var(--warn); font-weight: 700; }
.blk.dragging { opacity: .5; }
.blk .sub { display: flex; gap: 3px; align-items: center; overflow: hidden; }
.trb { color: #fff; background: #d62f2f; border-radius: 3px; padding: 0 3px; font-weight: 700; font-size: 10px; line-height: 12px; }
.trb.requested { background: #fff; color: #d62f2f; border: 1px dashed #d62f2f; }
.tt .rn.excl { background: #ececec; color: #888; }
.tt .cell.excl { background: repeating-linear-gradient(45deg, #f2f2f2, #f2f2f2 6px, #e6e6e6 6px, #e6e6e6 12px); }
table.trtable td { white-space: nowrap; }
.ch-booking { background: var(--c-booking); } .ch-airbnb { background: var(--c-airbnb); } .ch-trip { background: var(--c-trip); }
.ch-homepage { background: var(--c-homepage); } .ch-other { background: var(--c-other); }
/* 로그인 */
.login { max-width: 360px; margin: 10vh auto; }
.login h1 { font-size: 19px; text-align: center; margin: 0 0 16px; }
.login .fld { margin-bottom: 10px; }
.login input { width: 100%; font-size: 16px; }
.login button { width: 100%; }
@media (max-width: 760px) {
  .menu-btn { display: inline-block; }
  .menu { display: none; flex-direction: column; padding: 0 10px 10px; }
  .nav.open .menu { display: flex; }
  .menu a { padding: 11px 12px; font-size: 16px; }
  main { padding: 10px; }
  .who { display: none; }
  button.primary.big { width: 100%; }
  /* 예약 목록: 휴대폰에서는 한 예약을 한 덩어리로 */
  table.cards thead { display: none; }
  table.cards tr { display: block; padding: 8px 2px; border-bottom: 1px solid var(--line); }
  table.cards td { display: inline-block; border: 0; padding: 2px 6px 2px 0; white-space: normal; }
  table.cards td:empty { display: none; }
}
/* 업로드 보류 (pending.js) */
.pend-bar { background: #fdf0ec; border: 1px solid #b4462f; border-radius: 8px; padding: 8px 12px; margin: 8px 0; font-size: 14px; }
.pend-bar button { margin-left: 8px; }
.pend-soon { color: #b4462f; font-weight: 700; margin-top: 4px; }
.tt .h.pend { background: #fdf0ec; color: #b4462f; }
/* 리넨 재고 관리: 품목 줄 (PC 4열, 휴대폰은 품목명 위·숫자 아래) */
.linen .lnlist { display: grid; gap: 0; margin-top: 8px; }
.linen .lnh, .linen .lnr { display: grid; grid-template-columns: minmax(0, 1fr) 90px 90px 80px; gap: 8px; align-items: center; padding: 8px 4px; border-bottom: 1px solid var(--line); }
.linen .lnh { font-size: 12px; color: var(--sub); }
.linen .lnr.in { grid-template-columns: minmax(0, 1fr) 96px 110px; }
.linen .lnlist.ct .lnh, .linen .lnlist.ct .lnr { grid-template-columns: minmax(0, 1fr) 70px 96px 60px; }
.linen .lnr .reason { grid-column: 1 / -1; display: flex; gap: 6px; }
.linen .lnr .reason[hidden] { display: none; }
.linen .lnr .reason input { flex: 1; min-width: 0; }
.linen .notecard.cancelled { opacity: .55; }
.chip.eo { outline: 2px solid var(--warn); }
.eo-row { flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.tlabel.eo { white-space: nowrap; }
.linen .tabs { flex-wrap: wrap; }
.linen .lnr.neg { background: var(--warn-bg); }
.linen .num.big { font-size: 18px; font-weight: 700; }
.linen .bad, .linen .lnr.neg .num.big { color: var(--warn); font-weight: 700; }
.linen input[type=number] { width: 100%; font-size: 16px; padding: 6px 8px; }
.linen .lnform label { display: block; margin: 8px 0; }
.linen .lnform h4 { margin: 14px 0 4px; }
.linen .filters { flex-wrap: wrap; gap: 6px; }
.stack { display: flex; flex-direction: column; gap: 8px; }
.stack button { padding: 12px; }
@media (max-width: 600px) {
  .linen .lnh, .linen .lnr { grid-template-columns: minmax(0, 1fr) 64px 56px 44px; gap: 4px; }
  .linen .lnr.in { grid-template-columns: minmax(0, 1fr) 84px; }
  .linen .lnr.in > span:last-child:empty { display: none; }
  .linen .lnr.in > label { grid-column: 1 / -1; }
  .linen .lnlist.ct .lnh, .linen .lnlist.ct .lnr { grid-template-columns: minmax(0, 1fr) 46px 76px 40px; }
  .linen .tabs button { padding: 8px 8px; }
}
