:root{--navy:#123344;--teal:#087f79;--ink:#18333f;--muted:#607682;--line:#dce5e9;--bg:#f3f6f8;--free:#087f5b;--busy:#a86308;--full:#be3b36;--radius:12px;font-family:Inter,"Microsoft YaHei","PingFang SC",system-ui,sans-serif;color:var(--ink);font-size:16px;line-height:1.5}
*{box-sizing:border-box}body{margin:0;background:var(--bg)}button,input,select{font:inherit}button,a,input,select{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}a{color:var(--teal);text-decoration:none}a:hover{text-decoration:underline}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #56c8ca;outline-offset:3px}h1,h2,h3,p{margin:0}h1{font-size:1.7rem;letter-spacing:-.02em}h2{font-size:1.15rem}h3{font-size:1.04rem}small,.small{font-size:.8rem}.muted{color:var(--muted)}.loading{padding:4rem;text-align:center}.errorbox{color:#a9302b;background:#fff0ee;padding:14px;border-radius:8px;margin:16px 0;overflow-wrap:anywhere}.btn{border:1px solid var(--line);background:white;border-radius:8px;padding:9px 15px;min-height:42px;display:inline-flex;align-items:center;justify-content:center;gap:8px;color:var(--ink);font-size:.9rem;font-weight:600}.btn:hover{border-color:#9db9c4;background:#f8fbfc}.btn.primary{background:var(--teal);color:white;border-color:var(--teal)}.btn.primary:hover{background:#096c68}.btn.danger{color:#b13631;background:#fff6f4;border-color:#efd0cc}.btn.text{border-color:transparent;background:transparent}.btn.compact{padding:6px 10px;min-height:34px}.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.between{justify-content:space-between}.field{display:flex;flex-direction:column;gap:7px;font-size:.9rem}.field input,.field select,.search input,.filters select,.filters input{border:1px solid #c9d7de;border-radius:8px;padding:11px 12px;background:white;color:var(--ink);width:100%;min-height:44px}.field span.help{font-size:.82rem;color:var(--muted)}.stack{display:grid;gap:18px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.sidebar{position:fixed;inset:0 auto 0 0;width:230px;background:var(--navy);color:#e6f0f5;padding:28px 18px;display:flex;flex-direction:column;z-index:5}.brand{display:flex;gap:11px;align-items:center;padding:0 10px 30px;font-weight:700}.brand img{width:37px;height:37px}.brand small{display:block;color:#86a6b7;letter-spacing:.1em;font-size:.72rem;font-weight:500}.nav{display:grid;gap:7px}.nav button{background:transparent;border:0;color:#afc6d1;display:flex;align-items:center;gap:12px;text-align:left;border-radius:8px;padding:13px 16px;font-size:.92rem}.nav button:hover{background:#214757;color:white}.nav button.active{color:white;background:#23616a;box-shadow:inset 3px 0 #4dd1ba}.nav .symbol{font-size:1.15rem;width:22px;text-align:center}.navlabel{font-size:.77rem;letter-spacing:.1em;color:#86a6b7;padding:25px 16px 9px}.sidebarfooter{margin-top:auto;padding:20px 12px 0;border-top:1px solid #31505f;color:#9eb8c5;font-size:.82rem}.shell{margin-left:230px}.topbar{background:#fff;border-bottom:1px solid var(--line);min-height:74px;padding:17px 34px;display:flex;align-items:center;justify-content:space-between;gap:16px}.topbar .site{font-size:.9rem;font-weight:600}.topbar .site small{display:block;color:var(--muted);font-weight:400}.topbar .user{display:flex;align-items:center;gap:12px}.avatar{width:35px;height:35px;border-radius:50%;background:#e4f4f1;color:var(--teal);display:grid;place-items:center;font-weight:700}.main{padding:30px 34px 44px;max-width:1680px;margin:auto}.pagehead{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:24px}.pagehead p{color:var(--muted);font-size:.88rem;margin-top:6px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:17px;margin-bottom:24px}.stat{background:white;border:1px solid var(--line);border-radius:var(--radius);padding:17px 20px;position:relative}.stat:before{content:"";position:absolute;left:0;top:20px;bottom:20px;width:3px;background:var(--stat-color,#087f79);border-radius:0 3px 3px 0}.stat .label{font-size:.86rem;color:var(--muted)}.stat strong{display:block;font-size:2rem;margin:3px 0 0;line-height:1.4;font-weight:650;font-variant-numeric:tabular-nums}.toolbar{display:flex;justify-content:space-between;align-items:center;gap:16px;margin:20px 0;flex-wrap:wrap}.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.filters input{min-width:200px;max-width:300px}.filters select{width:auto;min-width:135px}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:.8rem;color:var(--muted)}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:6px;background:var(--free)}.dot.busy{background:var(--busy)}.dot.full{background:var(--full)}.dot.maintenance{background:#7b8c98}.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.card{background:white;border:1px solid var(--line);border-top:3px solid var(--free);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column}.card.busy{border-top-color:var(--busy)}.card.full{border-top-color:var(--full)}.card.maintenance{border-top-color:#7b8c98}.cardtop{padding:18px 18px 12px;display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.asset-code{color:var(--muted);font-size:.79rem;font-family:ui-monospace,monospace;letter-spacing:.02em;display:block;margin:4px 0}.location{color:var(--muted);font-size:.85rem;padding:0 18px 14px}.badge{border-radius:5px;background:#e5f5ed;color:var(--free);font-size:.78rem;line-height:1.7;padding:2px 8px;white-space:nowrap;display:inline-block;font-weight:550}.badge.busy{background:#fff2dc;color:var(--busy)}.badge.full{background:#fdebe8;color:var(--full)}.badge.maintenance,.badge.reserved,.badge.archived{background:#edf0f4;color:#657889}.people{padding:12px 18px;background:#fbfcfd;flex:1;display:flex;flex-wrap:wrap;gap:8px;min-height:72px;border-top:1px solid #eef2f5}.personchip{background:white;border:1px solid var(--line);padding:6px 9px;border-radius:6px;max-width:100%;font-size:.86rem;overflow-wrap:anywhere}.personchip small{color:var(--muted);display:block;font-size:.75rem}.idle-copy{display:flex;align-items:center;color:#7a8c98;font-size:.85rem}.cardbottom{padding:12px 18px;display:flex;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #eef2f5;font-size:.82rem;color:var(--muted)}.panel{border:1px solid var(--line);border-radius:var(--radius);background:white;padding:22px;margin:20px 0}.empty{padding:50px 20px;text-align:center;background:white;border:1px dashed #c8d5dd;border-radius:10px;color:var(--muted)}.statusline{font-size:.82rem;color:var(--muted);margin-top:23px}.statusline .offline{color:#b13631;font-weight:600}.breadcrumbs{font-size:.85rem;color:var(--muted);display:flex;align-items:center;gap:10px;margin-bottom:20px}.roomhead{border-left:4px solid var(--teal)}.current-list{display:grid;gap:10px;margin-top:16px}.current-item{display:flex;justify-content:space-between;align-items:center;gap:14px;border:1px solid var(--line);border-radius:8px;padding:12px 14px}.current-item small{display:block;color:var(--muted);margin-top:3px}.notice{padding:13px 15px;background:#eef6f8;color:#3b6573;font-size:.85rem;border-radius:8px;margin:16px 0}.notice.warning{color:#9b5c0c;background:#fff6e5}.table-wrap{overflow:auto;background:white;border:1px solid var(--line);border-radius:10px}table{border-collapse:collapse;width:100%;text-align:left;font-size:.86rem}th{background:#f7fafb;padding:13px 14px;color:#59717f;white-space:nowrap;font-weight:550;border-bottom:1px solid var(--line)}td{padding:13px 14px;border-bottom:1px solid #eaf0f3;vertical-align:top}tr:last-child td{border-bottom:0}td small{display:block;color:var(--muted);margin-top:4px}td.time{white-space:nowrap;font-size:.81rem}.tableactions{display:flex;gap:6px}.pagination{display:flex;justify-content:space-between;align-items:center;margin-top:18px;gap:12px}.historyfilters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.loginpage{min-height:100dvh;display:grid;place-items:center;padding:24px;background:linear-gradient(145deg,#0f2f40,#214e5d)}.logincard{background:white;border-radius:18px;max-width:440px;width:100%;padding:36px;box-shadow:0 30px 80px #001a2c50}.logincard .logo{width:51px;height:51px;margin-bottom:22px}.logincard h1{font-size:1.5rem;margin-bottom:8px}.logincard .intro{font-size:.9rem;color:var(--muted);margin-bottom:28px}.logincard .field{margin-bottom:19px}.logincard .btn{width:100%;margin-top:4px}.loginhelp{font-size:.8rem;color:var(--muted);border-top:1px solid var(--line);margin-top:24px;padding-top:17px}.scan-shell{max-width:780px;margin:auto;padding:22px 18px 40px}.scanbar{padding:18px 20px;background:white;border-bottom:1px solid var(--line)}.scan-shell h1{font-size:1.6rem}.scan-shell .panel{margin:16px 0}.scan-title{display:flex;gap:16px;align-items:center;justify-content:space-between}.scan-code{font-family:ui-monospace,monospace;font-size:.88rem;color:var(--muted);margin:5px 0}.scanform{margin-top:20px}.qr-block{text-align:center;margin:18px 0}.qr-block img{max-width:260px;width:100%;border:1px solid var(--line);border-radius:8px}.qr-block p{font-size:.85rem;color:var(--muted);margin:10px 0;overflow-wrap:anywhere}dialog{border:0;border-radius:15px;padding:0;max-width:650px;width:calc(100% - 32px);max-height:90dvh;overflow:auto;box-shadow:0 25px 80px #0e24384d;color:var(--ink)}dialog::backdrop{background:#102a3c80}.dialoghead{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding:18px 24px}.dialogbody{padding:24px}.dialogfooter{display:flex;justify-content:flex-end;gap:10px;border-top:1px solid var(--line);padding:16px 24px}.closebtn{background:transparent;border:0;font-size:1.7rem;line-height:1;min-width:36px;min-height:36px;color:var(--muted)}#toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);max-width:calc(100% - 36px);border-radius:10px;background:#153b4a;color:white;padding:12px 22px;box-shadow:0 5px 20px #102b3c30;z-index:20;font-size:.9rem;display:none}#toast.show{display:block}#print-area{display:none}.mobile-nav{display:none}.subtitle-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.note{font-size:.82rem;color:var(--muted);margin-top:10px}
@media(min-width:1550px){.cards{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:1120px){.sidebar{width:195px;padding:24px 12px}.shell{margin-left:195px}.main{padding:24px}.topbar{padding:17px 24px}.cards{grid-template-columns:repeat(2,minmax(0,1fr))}.brand{font-size:.91rem;padding-left:5px}.historyfilters{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.sidebar{display:none}.shell{margin-left:0}.topbar{padding:12px 16px;min-height:65px}.topbar .avatar{display:none}.topbar .user{gap:5px;font-size:.85rem}.topbar .user .btn{font-size:.8rem;padding:7px}.main{padding:20px 16px 36px}.mobile-nav{display:flex;gap:7px;overflow:auto;background:#fff;border-bottom:1px solid var(--line);padding:10px 16px}.mobile-nav button{border:0;background:#eef3f6;border-radius:7px;padding:9px 13px;white-space:nowrap;font-size:.86rem;color:var(--muted)}.mobile-nav button.active{background:var(--navy);color:white}.pagehead{margin-bottom:18px}h1{font-size:1.4rem}.pagehead p{font-size:.82rem}.stats{grid-template-columns:repeat(2,1fr);gap:10px}.stat{padding:12px 16px}.stat strong{font-size:1.7rem}.stat .label{font-size:.81rem}.toolbar{gap:12px;margin:16px 0}.filters{width:100%}.filters input{flex:1;min-width:150px;max-width:none}.filters select{flex:1;min-width:125px}.cards{gap:13px}.cardtop{padding:15px 14px 10px}.cardtop h3{font-size:.97rem}.cardbottom,.people{padding:11px 14px}.location{padding:0 14px 10px}.cardbottom{flex-wrap:wrap}.historyfilters{gap:12px}.panel{padding:17px}.grid2{grid-template-columns:1fr}.dialogbody{padding:20px}.dialoghead{padding:16px 20px}.logincard{padding:28px}.scan-shell{padding-top:18px}.current-item{align-items:flex-start}.pagehead .btn{padding:8px 11px}.legend{font-size:.78rem}}
@media(max-width:520px){.cards{grid-template-columns:1fr}.historyfilters{grid-template-columns:1fr 1fr}.historyfilters .wide{grid-column:1/-1}.scan-title{align-items:flex-start}.current-item{flex-wrap:wrap}.stats strong{font-size:1.55rem}}
@media print{body>*{display:none!important}#print-area{display:grid!important;grid-template-columns:repeat(3,1fr);gap:8mm;color:#111;font-size:11pt}.printlabel{text-align:center;break-inside:avoid;border:1px dashed #aaa;padding:6mm 3mm;min-height:65mm;overflow-wrap:anywhere}.printlabel img{display:block;width:40mm;height:40mm;margin:2mm auto}.printlabel strong{display:block;font-size:12pt}.printlabel .printcode{font-family:monospace}.printlabel small{display:block;font-size:8pt}@page{size:A4;margin:10mm}}
.cards>.empty{grid-column:1/-1}.table-wrap pre{max-width:600px;white-space:pre-wrap;overflow-wrap:anywhere}
.registercard{max-width:680px}.dept-field{border:1px solid var(--line);border-radius:8px;margin:0 0 20px;padding:12px 14px}.dept-field legend{font-size:.9rem;padding:0 5px}.dept-search{width:100%;border:1px solid #c9d7de;border-radius:7px;min-height:42px;padding:9px 11px;margin:3px 0 12px}.dept-picker{max-height:270px;overflow:auto;border:1px solid #e4ebef;border-radius:7px;padding:8px;font-size:.9rem}.dept-choice{display:inline-flex;align-items:flex-start;gap:8px;padding:7px 6px;cursor:pointer;overflow-wrap:anywhere}.dept-choice input{margin-top:5px;accent-color:var(--teal);width:17px;height:17px;flex-shrink:0}.dept-children{margin-left:20px;border-left:1px solid #d6e4e9;padding-left:6px}.dept-branch summary{cursor:pointer}.dept-choice:has(input:checked){background:#e0f4ef;color:#076a60;border-radius:5px}.dept-admin-row{display:inline-flex;align-items:center;justify-content:space-between;gap:16px;width:calc(100% - 25px);vertical-align:middle;padding:10px 6px}.dept-admin-row small{display:block;color:var(--muted);font-size:.78rem}.dept-admin-children{margin-left:22px;padding-left:16px;border-left:1px solid #d6e4e9}.dept-admin-leaf{padding-left:20px}.dept-admin-branch summary{cursor:pointer;border-bottom:1px solid #eef3f5}.dept-admin-branch summary:hover{background:#f5fafb}.dept-cell{max-width:320px;min-width:200px;overflow-wrap:anywhere}.department-panel{overflow:auto}.logincard>#register-button{margin-top:14px}
@media(max-width:760px){.dept-admin-row{align-items:flex-start;flex-direction:column;gap:8px;min-width:220px}.dept-admin-children{margin-left:12px;padding-left:8px}.dept-picker{max-height:250px}.registercard{padding:24px}.registercard .grid2{gap:0}}

/* Tangzhi Pharmaceutical branding */
.brand{gap:10px;padding-left:2px;padding-right:2px;line-height:1.25}
.brand img{width:72px;height:38px;object-fit:contain;flex-shrink:0}
.brand small{letter-spacing:.03em;font-size:.68rem;margin-top:3px;color:#9db6c2}
.logincard .logo{display:block;width:190px;height:100px;object-fit:contain;margin:0 auto 22px}
@media(max-width:1120px){.brand img{width:58px;height:31px}.brand{font-size:.86rem}.brand small{font-size:.62rem}}
@media(max-width:520px){.logincard .logo{width:160px;height:84px}}

/* Reservations and the dashboard refresh switch. */
:root{--booking:#315cbd}
.btn.booking{color:var(--booking);background:#eff4ff;border-color:#cddbf8}.btn.booking:hover{background:#e2ecff;border-color:#98b5ef}
.badge.booked{color:var(--booking);background:#e9f0ff}.badge[hidden],.reservation-section[hidden]{display:none}.card.booked{border-top-color:var(--booking)}.dot.booked{background:var(--booking)}.statusbadges{display:inline-flex;align-items:flex-end;gap:5px;flex-direction:column}
.reservation-section{margin:16px 0;padding:14px 16px;background:#f5f8ff;border:1px solid #dbe5fb;border-radius:8px;color:#254679}.reservation-section h3{font-size:.9rem;margin-bottom:10px}.booking-item{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:9px 0;border-top:1px solid #e1e8f8;font-size:.85rem;overflow-wrap:anywhere}.booking-item span{margin-left:9px}.booking-item small{display:block;color:#61759c;margin-top:3px}.compact-bookings{border-radius:0;border-left:0;border-right:0;margin:0;padding:12px 18px}.compact-bookings h3{font-size:.8rem}.compact-bookings .booking-item{font-size:.8rem}.cardbottom{align-items:flex-start;flex-wrap:wrap}
.refresh-controls{justify-content:flex-end}.refresh-switch{display:inline-flex;gap:9px;align-items:center;font-size:.82rem;white-space:nowrap;color:var(--muted);cursor:pointer;min-height:40px}.refresh-switch input{appearance:none;-webkit-appearance:none;position:relative;display:inline-block;width:38px;height:22px;border-radius:12px;background:#adbcc4;border:0;margin:0;cursor:pointer;flex-shrink:0}.refresh-switch input:before{content:"";position:absolute;width:18px;height:18px;background:white;border-radius:50%;top:2px;left:2px;transition:transform .15s}.refresh-switch input:checked{background:var(--teal)}.refresh-switch input:checked:before{transform:translateX(16px)}
.history-booking td:first-child{border-left:3px solid var(--booking)}.history-usage td:first-child{border-left:3px solid var(--busy)}
@media(max-width:760px){.pagehead{flex-wrap:wrap}.refresh-controls{justify-content:flex-start;gap:10px}.compact-bookings{padding:11px 14px}.booking-item{flex-wrap:wrap}.reservation-section{padding:12px}.cardbottom .row{gap:8px}}

/* One resource per A4 page. */
@media print {
 #print-area{display:block!important}
 .printlabel{box-sizing:border-box;height:276mm;min-height:0;padding:30mm 15mm;border:none;break-inside:avoid;break-after:page;page-break-after:always}
 .printlabel:last-child{break-after:auto;page-break-after:auto}
 .printlabel strong{font-size:26pt;margin-bottom:8mm}
 .printlabel .printcode{display:block;font-size:18pt}
 .printlabel img{width:100mm;height:100mm;margin:12mm auto}
 .printlabel small{font-size:14pt;margin-top:4mm}
}
