:root{--green:#216855;--ink:#233c35;--muted:#85918c;--line:#e8ede9;--bg:#f5f7f5}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px 'Noto Sans SC','Microsoft YaHei',sans-serif}button,input,textarea,select{font:inherit}button,a{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible{outline:3px solid #89bdaa;outline-offset:3px}.sidebar{width:236px;background:#fff;position:fixed;inset:0 auto 0 0;border-right:1px solid var(--line);padding:34px 22px;z-index:10}.brand{display:flex;align-items:center;gap:12px;padding:0 12px;font-size:26px;font-weight:700;letter-spacing:3px}.brand-mark{display:grid;place-items:center;width:44px;height:48px;border-radius:14px 14px 14px 3px;background:var(--green);color:white;font-size:24px}.brand-sub{display:block;font-size:8px;letter-spacing:2px;color:#8b9992;margin-top:4px}.nav-label{font-size:10px;color:#9ba69f;letter-spacing:2px;margin:48px 15px 17px}nav a{display:flex;align-items:center;gap:13px;padding:14px 17px;margin-bottom:7px;color:#74817a;border-radius:9px;font-size:13px}nav a.active{color:var(--green);background:#eaf2ed;font-weight:600}nav a:hover{background:#f0f5f1}.icon{width:21px;height:21px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.sidebar-bottom{position:absolute;bottom:30px;left:35px;font-size:11px;color:#789080;line-height:2.5}.sidebar-bottom small{font-size:8px;color:#a9b4ad;letter-spacing:.5px}.live-dot{display:inline-block;width:6px;height:6px;background:#6e9a78;border-radius:50%;margin-right:5px}.main{margin-left:236px}header{height:86px;display:flex;align-items:center;justify-content:space-between;padding:0 42px;background:#ffffffc9;border-bottom:1px solid var(--line)}.breadcrumb{font-size:12px;color:#98a19b}.breadcrumb span{margin:0 16px;color:#bbc3be}.breadcrumb b{color:#52695d;font-weight:500}.header-right{display:flex;align-items:center;gap:24px;font-size:11px;color:#85958b}.account{border:1px solid var(--line);background:white;color:#446150;border-radius:25px;padding:8px 14px}main{max-width:1450px;margin:auto;padding:34px 42px 28px}.page-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.eyebrow{font-size:10px;letter-spacing:2.4px;color:#899e8e;font-weight:600}h1{font-size:27px;letter-spacing:1px;margin:7px 0 8px;font-weight:600}h2{font-size:20px;font-weight:600}h3{font-size:16px;font-weight:600;margin:0}.muted{color:var(--muted);font-size:12px;line-height:1.9}.page-heading p{margin:0}.term{border:1px solid #dfe7df;border-radius:5px;padding:8px 12px;font-size:11px;color:#738874}.hero{position:relative;overflow:hidden;min-height:232px;background:#e6efe7;border:1px solid #dde8dc;border-radius:15px;padding:33px 36px}.hero-copy{position:relative;z-index:2}.hero .eyebrow{color:#6f8b70}.hero h2{font-size:30px;line-height:1.5;margin:13px 0 10px;letter-spacing:2px}.hero p{font-size:12px;color:#748b76}.hero .button{margin-top:10px}.hero-art{position:absolute;right:0;top:0;width:46%;height:100%}.hero-art svg{height:100%;width:100%}.button{display:inline-flex;justify-content:center;align-items:center;gap:9px;border:1px solid #dbe6de;border-radius:7px;background:white;color:var(--green);padding:10px 17px;font-size:12px}.button.primary{background:var(--green);color:#fff;border-color:var(--green)}.button:hover{filter:brightness(.96)}.button:disabled{opacity:.5;cursor:wait}.button.small{padding:7px 12px;font-size:11px}.full{width:100%}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin:22px 0 31px}.stat{display:flex;align-items:center;gap:15px;padding:19px 20px;background:white;border:1px solid var(--line);border-radius:10px}.stat-icon{background:#f0f5ef;color:#729276;border-radius:12px;padding:12px;display:flex}.stat strong{font-size:25px;font-weight:500;line-height:1.2}.stat p{margin:6px 0 0;color:#8c988e;font-size:11px}.section-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.section-head small{font-size:10px;color:#9aa69c;font-weight:400;margin-left:12px;letter-spacing:1px}.section-head a{color:#87998a;font-size:11px}.services{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.service-card{background:white;border:1px solid var(--line);border-radius:12px;padding:23px;position:relative;transition:transform .2s,box-shadow .2s}.service-card:hover{transform:translateY(-3px);box-shadow:0 9px 24px #234c3310}.service-icon{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;margin-bottom:17px;background:var(--tint);color:var(--color)}.service-card h3{font-size:15px}.service-card p{font-size:11px;color:#8b978e;line-height:1.9;margin:9px 0 18px}.card-bottom{display:flex;align-items:center;justify-content:space-between;color:#6e8573;font-size:10px}.tag{position:absolute;right:20px;top:26px;font-size:9px;color:#91a394;background:#f5f8f4;padding:4px 7px;border-radius:4px}.lower{display:grid;grid-template-columns:1.7fr 1fr;gap:22px;margin-top:29px}.panel{background:white;border:1px solid var(--line);border-radius:12px;padding:23px}.empty{text-align:center;padding:36px 15px;color:#8a9c91}.empty .icon{width:30px;height:30px;color:#a2b9a9}.empty p{font-size:12px}.notice{display:flex;gap:14px;padding:15px 0;border-top:1px solid #f0f3ef}.notice b{display:block;font-size:12px;font-weight:500;margin-bottom:7px}.notice p{font-size:10px;line-height:1.8;margin:0;color:#8b998e}.notice-num{font-family:Georgia,serif;font-size:21px;color:#b2c2b2}.record{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 0;border-bottom:1px solid var(--line)}.record-title{border:0;background:none;text-align:left;color:var(--ink);padding:0;max-width:75%}.record-title strong{display:block;font-size:12px;font-weight:500;margin-bottom:7px;overflow-wrap:anywhere}.record-title small{color:#9aa69f;font-size:10px}.badge{border-radius:5px;font-size:10px;padding:5px 8px;white-space:nowrap;background:#f2f3f2;color:#8b938e}.badge.pending{background:#fff3db;color:#b68c36}.badge.approved{background:#eaf4ee;color:#438667}.badge.rejected{background:#fcecea;color:#c6756c}.filters{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}.filters input{flex:1;min-width:160px}.filters select{width:auto}.section-intro{margin-bottom:25px;max-width:680px}.qr-box{display:flex;align-items:center;gap:26px;margin:22px 0;background:#edf3ee;border-radius:12px;padding:20px}.qr-box img{width:120px;height:120px;border-radius:8px}.qr-box p{line-height:1.8;font-size:12px;color:#7a8c7d}.room-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.room-number{font-size:31px;font-weight:500;color:#517a61;margin:15px 0}.room-grid .panel{background:linear-gradient(150deg,#fff,#edf3ec)}footer{padding:10px 42px 24px;color:#a3afa6;font-size:10px}footer span{float:right}dialog{border:1px solid #e0e8df;border-radius:17px;width:480px;max-width:calc(100% - 30px);padding:34px;color:var(--ink);box-shadow:0 25px 100px #1b352f22;max-height:90vh}dialog::backdrop{background:#1a322e65;backdrop-filter:blur(4px)}dialog h2{margin:15px 0}.close{position:absolute;right:16px;top:12px;border:0;background:none;font-size:26px;color:#94a198}label{display:block;font-size:12px;color:#5a7363;margin-top:17px}input,select,textarea{display:block;width:100%;border:1px solid #dce5dd;border-radius:7px;padding:11px 12px;color:var(--ink);background:#fbfcfa;outline:none;margin-top:7px}input:focus,select:focus,textarea:focus{border-color:#74a48a;box-shadow:0 0 0 3px #e4efe7}textarea{resize:vertical;min-height:95px}.date-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-error{color:#bd635e;font-size:12px;min-height:16px}.demo{background:#f1f5ef;font-size:11px;line-height:1.9;color:#859280;border-radius:8px;padding:13px;margin-top:20px}.detail-body{white-space:pre-wrap;line-height:1.9;background:#f5f7f3;padding:16px;border-radius:8px;font-size:13px;overflow-wrap:anywhere}.detail-actions{display:flex;gap:10px;margin-top:18px}#toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%) translateY(20px);background:#244d3e;color:white;padding:13px 24px;border-radius:9px;opacity:0;pointer-events:none;transition:.2s;z-index:100;font-size:13px}#toast.visible{opacity:1;transform:translateX(-50%) translateY(0)}
@media(min-width:1500px){main{padding-top:40px}.hero{min-height:260px}.services{gap:20px}.service-card{padding:26px}}
@media(max-width:1100px){.sidebar{width:195px;padding:30px 13px}.main{margin-left:195px}main{padding:25px}header{padding:0 25px}.stat{padding:15px 12px;gap:10px}.stat-icon{padding:9px}.hero h2{font-size:25px}.lower{grid-template-columns:1.3fr 1fr}.hero-art{opacity:.75}.brand{padding:0 8px}.sidebar-bottom{left:22px}}
@media(max-width:760px){.sidebar{position:static;width:100%;padding:17px 17px 8px;border-right:0}.brand{font-size:21px}.brand-mark{width:36px;height:38px;font-size:21px}.brand-sub{font-size:7px}.nav-label,.sidebar-bottom{display:none}nav{display:flex;overflow-x:auto;margin-top:16px;gap:5px}nav a{flex-shrink:0;padding:10px;font-size:11px;margin:0}nav .icon{width:16px;height:16px}nav a{gap:6px}.main{margin-left:0}header{height:57px;padding:0 20px}.header-right>span{display:none}main{padding:24px 18px}.term{display:none}h1{font-size:23px}.hero{padding:26px 24px;min-height:228px}.hero h2{font-size:24px}.hero-art{right:-55px;width:65%;opacity:.35}.hero p{max-width:210px;line-height:1.8}.stats{grid-template-columns:repeat(2,1fr);gap:10px}.services{grid-template-columns:repeat(2,1fr);gap:12px}.service-card{padding:18px}.service-card p{min-height:40px}.tag{right:12px;top:22px;font-size:8px}.lower{grid-template-columns:1fr}.room-grid{grid-template-columns:repeat(2,1fr)}footer{padding:10px 20px 25px}footer span{display:none}.page-heading{gap:12px}.page-heading .button{white-space:nowrap}.qr-box{gap:15px;padding:13px}.qr-box img{width:100px;height:100px}.date-row{grid-template-columns:1fr}dialog{padding:27px}}

.occupied-times{margin:16px 0;padding:16px;border:1px solid #dce4ef;border-radius:12px;background:#f5f8fc}.occupied-times h3{margin:0 0 12px}.occupied-times ul{padding-left:20px;margin:12px 0;max-height:180px;overflow:auto}.occupied-times li{padding:5px 0;font-variant-numeric:tabular-nums}.occupied-times .muted{font-size:13px}
.counseling-files{margin-top:20px}.counseling-upload{padding-bottom:22px;margin-bottom:22px;border-bottom:1px solid var(--line)}.counseling-file{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:15px 0;border-bottom:1px solid var(--line)}.counseling-file strong{display:block;color:var(--ink);margin-bottom:7px}.counseling-file p{margin:0;color:var(--muted);font-size:11px;overflow-wrap:anywhere}@media(max-width:600px){.counseling-file{align-items:flex-start;flex-direction:column}}
.feedback-feature{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(280px,1fr);gap:24px;align-items:start;margin:24px 0}.feedback-poster{margin:0;overflow:hidden;border-radius:16px;background:#fff8ec;box-shadow:0 8px 30px #244d7920}.feedback-poster img{display:block;width:100%;height:auto}.feedback-poster>a{display:block;cursor:zoom-in}.feedback-poster figcaption{padding:14px 18px;font-size:12px;line-height:1.8;color:#35577b}.feedback-poster figcaption a{text-decoration:underline}.feedback-channels{display:grid;gap:16px;min-width:0}.feedback-intro{padding:10px 4px;color:#174783}.feedback-intro h2{font-size:25px;line-height:1.6;margin:12px 0}.feedback-intro p{line-height:1.8;color:#60768b}.feedback-channel{border:2px solid #9bcce2;border-radius:20px;padding:20px;background:linear-gradient(135deg,#edf9ff,#fffdf7)}.feedback-channel h3{font-size:20px;color:#213c70;margin:0 0 14px;letter-spacing:2px}.feedback-channel p{line-height:1.85;margin:8px 0;overflow-wrap:anywhere}.feedback-channel a[href^="mailto:"]{color:#174783;text-decoration:underline;text-underline-offset:4px}.channel-pink{border-color:#edb8b5;background:linear-gradient(135deg,#fff4ee,#fffaf7)}.channel-mint{border-color:#8bc6b7;background:linear-gradient(135deg,#eefbf8,#fffdf7)}.feedback-online{border-color:#d5dfec;background:#fff}.feedback-site-qr{display:flex;align-items:center;flex-wrap:wrap;gap:16px;margin-top:20px}.feedback-site-qr img{display:block;width:180px;height:180px;max-width:100%;background:#fff;image-rendering:pixelated}.feedback-download{display:block;margin-top:12px;color:#174783;text-decoration:underline}@media(max-width:1100px){.feedback-feature{grid-template-columns:1fr}.feedback-poster{max-width:905px;margin:0 auto}.feedback-channels{grid-template-columns:repeat(2,minmax(0,1fr))}.feedback-intro,.feedback-online{grid-column:1/-1}}@media(max-width:600px){.feedback-channels{grid-template-columns:1fr}.feedback-feature{gap:20px}.feedback-channel{padding:18px}.feedback-intro h2{font-size:22px}}
.leave-print{max-width:850px}.leave-print ol{padding-left:24px;line-height:2.4;margin:24px 0}.leave-print #leave-advisors{margin-top:24px;padding:16px;background:#edf3fb;border-radius:10px}.travel-card{padding:24px 0;border-top:1px solid var(--line)}.travel-card h2{font-size:21px;overflow-wrap:anywhere}.travel-stages{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:20px 0}.travel-stages>section{padding:20px;background:#f3f6fb;border:1px solid #e2e8f0;border-radius:12px}.travel-stages h3{margin-top:0}.travel-stages p{line-height:1.9}.travel-empty{padding:25px 0;color:#60748a}#travel-dialog fieldset{margin-top:20px;border:1px solid #dce4ef;border-radius:8px}#travel-dialog input[readonly]{background:#eff2f7;color:#596c85}@media(max-width:760px){.travel-stages{grid-template-columns:1fr}.travel-card{padding:18px 0}}
.duration-picks{display:flex;align-items:center;gap:8px;margin:10px 0 4px}.duration-picks span{font-size:12px;color:#5a7363;margin-right:4px}.availability-panel{margin-top:24px}.availability-panel .section-head{align-items:flex-end}.availability-panel .section-head label{margin:0;min-width:180px}.availability-board{display:grid;grid-template-columns:repeat(7,minmax(138px,1fr));gap:10px;overflow-x:auto;padding-bottom:6px}.availability-day{min-width:138px;border:1px solid #dce5ef;border-radius:10px;padding:13px;background:#f8fafd}.availability-day.today{border-color:#315c98;box-shadow:0 0 0 2px #315c9815}.availability-day h4{margin:0 0 3px;color:#244f89}.availability-day>small{color:#7b889a}.availability-period{margin-top:12px;padding-top:10px;border-top:1px solid #e3e9f1}.availability-period b{display:block;font-size:12px;margin-bottom:6px}.availability-period button{width:100%;border:0;border-radius:6px;background:#e5f3eb;color:#24704f;font-size:11px;padding:7px 4px;margin-top:5px;cursor:pointer}.availability-period button:hover{background:#d5eadf}.availability-period span{display:block;color:#a66a63;background:#faece9;border-radius:6px;font-size:11px;padding:7px 4px;text-align:center}@media(max-width:760px){.availability-panel .section-head{align-items:stretch;flex-direction:column}.availability-panel .section-head label{min-width:0}.availability-board{grid-template-columns:repeat(7,138px)}}
.room-card{display:flex;flex-direction:column;min-height:205px}.room-card .room-number{overflow-wrap:anywhere}.room-card-footer{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;margin-top:auto}.room-grade{display:flex;flex-direction:column;align-items:flex-end;gap:2px;border:0;background:#e9eef6;color:#315c98;border-radius:8px;padding:7px 10px;text-align:right;white-space:nowrap;cursor:pointer}.room-grade strong{font-size:13px}.room-grade small{font-size:10px}.room-grade.plenty{background:#e3f3e9;color:#17704c}.room-grade.moderate{background:#e9f0fb;color:#315c98}.room-grade.tight{background:#fff1dc;color:#9a6420}.room-grade.full{background:#fbe9e7;color:#a4473d}.availability-actions{display:flex;align-items:flex-end;gap:10px}.availability-actions .button{margin-bottom:1px}.availability-period button,.availability-period span.busy{display:flex;flex-direction:column;align-items:center;gap:3px}.availability-period button small,.availability-period span.busy small{font-size:10px}.availability-period span.busy{background:#fbe9e7;color:#a4473d}.availability-period span.ended{background:#eef0f4;color:#7b889a}@media(max-width:760px){.availability-actions{align-items:flex-end}.room-card-footer{flex-wrap:wrap}.room-grade{margin-left:auto}}
.room-booking{border:1px solid var(--line);border-radius:12px;background:#f8faf8;padding:24px}.room-booking>.section-head{margin-bottom:20px}.room-booking h2{margin:0}.room-booking .availability-panel{background:#fff}.withdraw-button{background:#b83f38;color:#fff;border-color:#b83f38;font-weight:700;box-shadow:0 3px 10px #b83f3833}.withdraw-button:hover{background:#a9352f;filter:none}@media(max-width:760px){.room-booking{padding:16px}}
.room-grade-legend{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:16px;font-size:11px;color:#667891}.room-grade-legend span:not(:first-child){padding:5px 8px;border-radius:6px}.room-grade-legend .plenty{background:#e3f3e9;color:#17704c}.room-grade-legend .moderate{background:#e9f0fb;color:#315c98}.room-grade-legend .tight{background:#fff1dc;color:#9a6420}.room-grade-legend .full{background:#fbe9e7;color:#a4473d}.room-quota{margin:9px 0 3px;color:#315c98;font-size:12px}.room-quota strong{font-size:14px}.room-quota.full{color:#a4473d}.room-quota a{text-decoration:underline;text-underline-offset:3px}
.room-grade-legend{gap:8px 10px;line-height:1.5}.room-grade-legend span{flex:0 0 auto;white-space:nowrap}.room-grade-legend .full{width:auto}.room-booking,.availability-panel,.availability-board{min-width:0}.room-grid{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:1fr}.room-card{min-width:0}.room-card-footer{align-items:center;flex-wrap:wrap;row-gap:12px;padding-top:12px}.room-card-footer>.button{white-space:nowrap;flex-shrink:0;min-height:38px}.room-card-footer>.room-grade{width:auto;margin-left:auto}.availability-board{max-width:100%}.availability-panel .section-head{gap:16px;flex-wrap:wrap}.availability-panel .section-head>div:first-child{min-width:0;flex:1 1 320px}.availability-actions{flex-wrap:wrap}@media(max-width:1200px){.room-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:580px){.room-grid{grid-template-columns:1fr}}@media(max-width:480px){.room-grade-legend span:first-child{flex-basis:100%}.availability-actions{width:100%}.availability-actions label{flex:1 1 150px;min-width:0}}
.batch-review-tools{padding:16px;background:#f3f6fa;border:1px solid var(--line);border-radius:10px;margin-bottom:16px}.batch-select{display:inline-flex;align-items:center;gap:8px;margin:0 16px 0 0}.batch-select input,.record>.batch-check{width:18px;height:18px;margin:0;flex-shrink:0}.record>.batch-check~.record-title{flex:1;max-width:none}.batch-review-tools textarea{min-height:70px}.batch-review-tools .detail-actions{flex-wrap:wrap}
