/* Balanced density: fluid calendar, compact secondary text, no department-name wrapping. */
.controls{flex-wrap:wrap;row-gap:8px}
.quota-count{white-space:nowrap;font-variant-numeric:tabular-nums;font-size:var(--type-12)}
.quota-note{font-size:var(--type-12);color:#5874a0;line-height:1.7;margin-top:3px}
.quota-cell{font-variant-numeric:tabular-nums;color:#365a99;font-weight:600;white-space:nowrap}
.rotation-provenance{display:block;white-space:normal;font-size:var(--type-12);color:#5975aa;line-height:1.6;margin-top:5px;min-width:130px;max-width:210px}
.quota-month{width:160px!important}.table-toolbar>.flex{flex-wrap:wrap}
.modal.wide:has(.overview-table){width:min(1180px,95vw)}
.overview-table{max-height:58vh}.overview-table th{position:sticky;top:0;background:#edf2fb;z-index:1}
.overview-table .mark-上{background:#e6f4ee;color:#167353;font-weight:600;text-align:center}
.overview-table .mark-假,.overview-table .mark-班{background:#fff1df;color:#9b611d;text-align:center}
.variance{color:#ba651b;font-weight:600}.check-field input[type=checkbox]{width:auto}
.calendar-year-window{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:18px 0}
.calendar-year-window button{white-space:normal;display:block;line-height:1.7;padding:10px 6px;font-size:var(--type-13)}
.calendar-year-window .active{border-color:#6585e8;color:#395cd2;background:#eef2ff}
.year-months{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}
.year-months>div{display:flex;flex-direction:column;gap:5px;padding:10px;background:#f5f7fc;border-radius:6px}
.year-months span{font-size:var(--type-12);color:#667995;line-height:1.7}
@media(max-width:820px){.year-months{grid-template-columns:repeat(2,minmax(0,1fr))}.quota-month{width:145px!important}}
[hidden]{display:none!important}
.detail-close{display:none}
.employee-card.unavailable{opacity:.62;cursor:not-allowed;background:#f4f6fa}
.stat[role=button]{cursor:pointer}.stat[role=button]:hover{border-color:#7898e5}
.user-menu-button{border:0;background:transparent;gap:7px;padding:2px 6px;color:#526987}
.user-menu-name{font-size:var(--font-body)}
.user-menu-actions{display:flex;gap:12px;margin-top:24px}
.user-menu-navigation{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:20px 0}
.user-menu-navigation button{justify-content:flex-start;text-align:left}
.issue-item{display:flex;align-items:flex-start;flex-direction:column;text-align:left;white-space:normal;width:100%;margin:10px 0;gap:7px;line-height:1.7}
.issue-item small{color:#64748b}.blocking{background:#fff3f1;border-color:#f0c3ba;color:#9e504a}
.discard-guard{position:sticky;bottom:0;display:flex;align-items:center;flex-wrap:wrap;gap:9px;padding:14px;background:#fff7e9;border:1px solid #edce9b;border-radius:8px;margin-top:15px}
.saturday-board,.list-board{min-width:0}.roster-cell{white-space:normal;display:flex;flex-direction:column;align-items:flex-start;gap:5px;min-width:110px;width:100%;padding:12px;text-align:left;line-height:1.8;color:#506789}
.roster-cell small{font-size:var(--font-meta);color:#75849a}
.date-list-item{padding:16px;border-bottom:1px solid var(--border)}.date-list-item h3{margin-bottom:12px}.date-list-item .roster-cell{margin-top:7px;min-width:0}
.workspace.view-saturday,.workspace.view-list{grid-template-columns:minmax(0,1fr)}
.workspace.view-saturday .pool,.workspace.view-list .pool{display:none}
.workspace:not(.view-calendar) .detail{display:none}
.workspace:not(.view-calendar) .detail.drawer-open{display:flex;position:fixed;right:16px;top:75px;bottom:20px;width:min(365px,calc(100vw - 85px));z-index:30;box-shadow:0 12px 70px #263c6b35}
.workspace:not(.view-calendar) .detail.drawer-open .detail-head{position:relative;padding-right:45px}
.workspace:not(.view-calendar) .detail.drawer-open .detail-close{display:inline-flex;position:absolute;right:8px;top:10px}
.workspace:not(.view-calendar) .detail.drawer-open .detail-body{overflow:auto;max-height:none;flex:1}
#toast.show{pointer-events:auto}#toast button{min-height:24px;padding:3px 9px;margin-left:12px;border:0;color:#3557ae;font-size:var(--font-meta)}
.pagination{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:14px;border-top:1px solid var(--border)}
.stats-scope{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:16px}
@media(max-width:1450px){
 .detail{display:none!important}.detail.drawer-open{display:flex!important;position:fixed;right:16px;top:75px;bottom:20px;width:min(365px,calc(100vw - 85px));z-index:30;box-shadow:0 12px 70px #263c6b35;border:1px solid #b7c6e8}
 .detail.drawer-open .detail-head{display:block;position:relative;padding-right:45px}
 .detail-close{display:inline-flex;position:absolute;right:8px;top:10px}
 .detail.drawer-open .detail-body{display:block;overflow:auto;max-height:none;flex:1}
 .detail.drawer-open .detail-dept{margin-bottom:12px}.detail.drawer-open .detail-add{max-width:none}
 .detail.drawer-open .warning{margin:12px 0}.detail.drawer-open .detail-foot{display:none}
}
@media(max-width:820px){
 .user-menu-button::after{content:'菜单';font-size:var(--font-meta)}
 .side-user>.avatar{display:none}.side-user .icon-btn{display:inline-flex!important;color:white}
 .user-menu-name{display:none}.view-list .list-board{width:100%}
 .detail.drawer-open{top:auto;bottom:8px;right:8px;left:66px;width:auto;height:78vh;border-radius:13px}
 .user-menu-actions{flex-direction:column}.saturday-board .table-scroll{max-width:100%}
 .view-saturday{display:block}.view-list{display:block}
}
:root{font-size:var(--type-14);--muted:#64748b}
body{line-height:1.55}
button,input,select,textarea{font-size:var(--type-14)}
button{padding:8px 12px;min-height:36px}
.text-btn{min-height:28px;padding:4px 6px}
.icon-btn{min-height:32px}
h1{font-size:var(--type-23)}h2{font-size:var(--type-16)}h3{font-size:var(--type-15)}
.small{font-size:var(--type-13)}.tiny{font-size:var(--type-12)}
.muted{color:#64748b}
.pill,.cal-header .pill{font-size:var(--type-12);line-height:1.5;padding:3px 7px}
.pill.gray{color:#5e6f86}.pill.green{color:#237755}.pill.orange{color:#986025}
.avatar{width:30px;height:30px;font-size:var(--type-12);line-height:1;white-space:nowrap;word-break:keep-all}
.shell{grid-template-columns:190px minmax(0,1fr)}
.sidebar{width:190px;padding:24px 12px 16px}
.brand{font-size:var(--type-18);padding:0 7px 25px;gap:8px}
.brand-icon{width:30px;height:32px;flex-shrink:0}
.side-label{font-size:var(--type-12);letter-spacing:.8px;color:#b4c1e0;padding:0 12px 12px}
.nav{gap:6px}.nav button{font-size:var(--type-14);padding:12px;gap:10px}
.side-note{font-size:var(--type-12);color:#bdcbea;padding:14px 10px;line-height:1.8}
.side-user{padding:15px 0 0;gap:7px}
.side-user .grow{min-width:0}.side-user .grow>div:first-child{font-size:var(--type-14)!important;overflow-wrap:anywhere}
.side-user .grow>div:last-child{font-size:var(--type-12)!important;color:#c1cfea!important}
.side-user .icon-btn{flex-shrink:0}
.main{padding:24px}
.topbar{margin-bottom:18px}.subtitle{font-size:var(--type-13);color:#68788d}
.local,.notice{font-size:var(--type-12);color:#5f748c}
.notice{padding:9px 12px;line-height:1.75;margin-bottom:16px}
.top-actions .text-btn{font-size:var(--type-13)}
.stats{gap:12px;margin-bottom:18px}.stat{padding:14px 16px;gap:12px}
.stat-icon{width:38px;height:38px}.stat-label{font-size:var(--type-12);color:#68798e}
.stat-number{font-size:var(--type-25)}.stat-unit{font-size:var(--type-12);color:#65758a}
.board-toolbar{margin-bottom:12px;gap:12px}.month-switch{gap:9px}
.month-switch input{width:160px;font-size:var(--type-18)}.month-switch .today{font-size:var(--type-12);padding:4px 9px}
.controls{gap:8px;flex-wrap:wrap;justify-content:flex-end}
.controls button,.controls select{font-size:var(--type-13);min-height:37px}
.controls select{max-width:190px}
.workspace{grid-template-columns:210px minmax(0,1fr) 250px;gap:14px;align-items:start}
.pool{min-height:0;max-height:none}
.panel-head{padding:14px 13px 11px}.panel-head h2{font-size:var(--type-16)}
.search{margin-bottom:14px}.search input{font-size:var(--type-13);min-height:36px;padding-left:30px}
.search .icon{top:10px}
.pool-body{max-height:clamp(370px,64vh,720px);padding:0 12px}
.pool-dept{font-size:var(--type-13);gap:5px;flex-wrap:wrap;margin:0 0 10px;line-height:1.65}
.group-title,.group-title span:last-child{font-size:var(--type-12);padding-top:7px;padding-bottom:7px}
.employee-card{font-size:var(--type-14);gap:6px;padding:10px 5px;flex-wrap:nowrap}
.employee-card>span:not(.avatar):not(.grip):not(.count){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.employee-card .avatar{font-size:var(--type-12);width:27px;height:27px}
.employee-card .count{font-size:var(--type-12);white-space:nowrap;flex-shrink:0;color:#687b92}
.pool-foot{font-size:var(--type-12);line-height:1.75;color:#637a94;padding:11px}
.cal-header{padding:13px 15px;gap:8px;flex-wrap:wrap}
.cal-header h3{font-size:var(--type-16)}.cal-header .flex{flex-wrap:wrap;gap:7px}
.week-head div{font-size:var(--type-13);padding:10px 0;color:#65758b}
.calendar{flex:initial;grid-auto-rows:minmax(116px,auto)}
.day{padding:8px 7px;overflow:hidden}
.day-num{font-size:var(--type-15);gap:4px;margin-bottom:7px;flex-wrap:nowrap;line-height:1.6}
.day-num>span:first-child{flex-shrink:0}
.day-hint{font-size:var(--type-12);line-height:1.6;color:#68798e}
.day-tag{font-size:var(--type-11);line-height:1.5;white-space:nowrap;flex-shrink:0;padding:2px 4px;color:#536da8}
.day-tag.holiday{background:#ffeded;color:#b85252}.day-tag.work{background:#e7f5ed;color:#27805c}
.day:has(.day-tag.holiday){background:#fff9f7}
.day:has(.day-tag.work){background:#f6fcf8}
.cal-chip{font-size:clamp(12px,.72vw,14px);line-height:1.55;display:flex;gap:5px;align-items:center;white-space:nowrap;overflow:hidden;margin-bottom:3px}
.cal-chip .chip-name{display:flex;align-items:center;gap:4px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.cal-chip .chip-count{flex:0 0 auto;white-space:nowrap;overflow:visible;color:#64748b;font-size:var(--type-12)}
.cal-chip .dot{width:5px;height:5px;flex-shrink:0}
.person-chip{font-size:var(--type-13);line-height:1.5;padding:2px 4px;gap:4px;white-space:nowrap;overflow:hidden;margin-bottom:3px;align-items:center}
.more{font-size:var(--type-12);margin-top:3px;line-height:1.5}
.cal-footer{font-size:var(--type-12);padding:11px 13px;gap:10px;color:#64748b}
.legend{gap:7px 12px}.legend span{font-size:var(--type-12);color:#64748b}
.detail-head{padding:15px 13px 12px}.detail-date{font-size:var(--type-16);margin-bottom:7px}
.detail-date .small{font-size:var(--type-13)}
.detail-body{padding:12px;max-height:clamp(410px,75vh,850px)}
.detail-dept-head{font-size:var(--type-13);padding:9px;gap:6px;flex-wrap:wrap}
.detail-person{font-size:var(--type-14);padding:10px 9px;gap:7px}
.detail-person>div{flex:1;min-width:0}.detail-person .text-btn{flex-shrink:0}
.detail-person .avatar{width:27px;height:27px;font-size:var(--type-12)}
.detail-reason{font-size:var(--type-12);line-height:1.6;color:#677b93;max-width:none;white-space:normal;overflow-wrap:anywhere}
.warning{font-size:var(--type-12);line-height:1.8;color:#99622b;padding:11px}
.warning strong{font-size:var(--type-13);font-weight:600;color:#a36124;overflow-wrap:anywhere}
.warning .icon{width:15px;height:15px}
.empty,.empty.small{font-size:var(--type-14);line-height:1.85;color:#677b92;padding:28px 14px}
.empty .tiny{font-size:var(--type-12)}.detail-add{font-size:var(--type-13);padding:9px;white-space:normal}
.detail-body>.text-btn,.detail-foot{font-size:var(--type-12);color:#627b9b}
.detail-foot{gap:8px;padding:11px}.footnote{font-size:var(--type-12);color:#687b92}
table{font-size:var(--type-14)}th{font-size:var(--type-13);font-weight:600;color:#62758c}
th,td{padding:13px 16px;line-height:1.7}
td .text-btn,.table-toolbar input{font-size:var(--type-13)}
.table-note,.inline-note{font-size:var(--type-12);color:#64748b;line-height:1.85}
.dept-card h2{font-size:var(--type-18)}.dept-card .meta{font-size:var(--type-13);line-height:1.8;gap:10px;flex-wrap:wrap;color:#65788e}
.rule-description,.rule-steps li{font-size:var(--type-14);color:#62768e;line-height:1.85}
.status-row{font-size:var(--type-13);gap:10px;flex-wrap:wrap;line-height:1.75}
.field,.checks label,.radio-card,.upload-area{font-size:var(--type-14)}
.field small,.radio-card small{font-size:var(--type-12);line-height:1.8;color:#687c94}
.field input,.field select,.field textarea{font-size:var(--type-14);min-height:39px}
.checks{gap:10px 15px}.checks input{height:16px;width:16px}
.modal{width:570px}.modal.wide{width:780px}.modal-header h2{font-size:var(--type-18)}
.modal-description,.modal .notice,.form-error{font-size:var(--type-13);line-height:1.85}
.history-list span{font-size:var(--type-12);color:#62758e}.diff-code{font-size:var(--type-12)}
.auth-card>p,.auth-line,.auth-foot,.auth-pills span{font-size:var(--type-13)}
.auth-card input{font-size:var(--type-15)}.auth-card .field{font-size:var(--type-14)}
#toast{font-size:var(--type-14)}
.national-calendar{margin:14px 0;font-size:var(--type-13);color:#637892}
.national-calendar summary{cursor:pointer;padding:10px 0;color:#4d6bb1}
.source-link{font-size:var(--type-12);color:#5877bd;text-decoration:none;line-height:1.8}
.source-link:hover{text-decoration:underline}
@media(min-width:1650px){
 .workspace{grid-template-columns:220px minmax(0,1fr) 265px}
 .calendar{grid-auto-rows:minmax(124px,auto)}
 .day{padding:9px}.day-num{font-size:var(--type-16)}
 .day-tag{font-size:var(--type-12)}.person-chip{font-size:var(--type-14)}
}
@media(min-width:1151px) and (max-width:1450px){
 .workspace{grid-template-columns:200px minmax(0,1fr)}
 .detail{grid-column:1/-1;display:block}
 .detail-head{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.detail-date{margin-bottom:0}
 .detail-body{display:flex;flex-wrap:wrap;gap:12px;max-height:none}
 .detail-dept{flex:1 1 215px;min-width:0;margin:0}
 .detail .warning{flex:1 1 200px;max-width:none;margin:0}
 .detail-add{max-width:210px;align-self:flex-start}
 .detail-foot{display:none}.topbar .local{display:none}
}
@media(min-width:821px) and (max-width:1150px){
 .workspace{grid-template-columns:minmax(0,1fr)}.pool{display:none}
 .detail{grid-column:1;display:block}.detail-head{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
 .detail-date{margin-bottom:0}.detail-body{display:flex;gap:12px;flex-wrap:wrap;max-height:none}
 .detail-dept{flex:1 1 220px;min-width:0}.detail-foot{display:none}
 .detail .warning{flex:1 1 200px;max-width:none}.topbar .local{display:none}
 .topbar{flex-wrap:wrap}.dept-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:820px){
 .shell{grid-template-columns:58px minmax(0,1fr)}.sidebar{width:58px;padding:20px 5px}
 .brand{padding:0 8px 23px}.nav button{padding:13px 5px}.side-user{padding:15px 0}
 .side-user .grow{display:none}.main{padding:18px 12px}
 h1{font-size:var(--type-21)}.subtitle,.notice,.stat-label{font-size:var(--type-12)}
 .topbar{flex-wrap:wrap;gap:12px}.top-actions{flex-wrap:wrap}.top-actions .text-btn{font-size:var(--type-12)}
 .stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
 .stat{padding:12px}.stat-icon{display:none}.stat-unit{display:inline;font-size:var(--type-12)}
 .month-switch{flex-wrap:wrap;max-width:100%;gap:7px}.month-switch input{width:154px;font-size:var(--type-17)}
 .controls{justify-content:flex-start;gap:7px}.controls select{max-width:190px}
 .workspace{grid-template-columns:minmax(0,1fr)}.pool{display:none}
 .calendar-panel{overflow-x:auto}.cal-header,.week-head,.calendar,.cal-footer{min-width:610px}
 .calendar{grid-auto-rows:minmax(112px,auto)}.cal-chip{font-size:var(--type-12)}
 .day{padding:8px 6px}.day-num{font-size:var(--type-15)}.day-tag{font-size:var(--type-11)}
 .detail{display:block}.detail-head{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.detail-date{margin-bottom:0}
 .detail-body{display:block;max-height:none}.detail-dept{min-width:0}
 .detail .warning,.detail-add{max-width:none}.detail-foot{display:none}
 .section-head{flex-wrap:wrap}.table-toolbar{padding:13px}.table-toolbar .flex{flex-wrap:wrap}
 .form-grid{grid-template-columns:1fr}.field.full{grid-column:auto}.radio-cards{grid-template-columns:1fr}
 .modal-backdrop{padding:12px}.modal-header{padding:17px 20px}.modal-body{padding:20px}
 .rule-grid,.dept-grid{grid-template-columns:1fr}.footnote{display:none}
}
@media(max-height:800px){.sidebar{overflow-y:auto}.side-note{display:none}.brand{padding-bottom:20px}.side-label{padding-bottom:9px}.nav{gap:4px}.nav button{padding-top:11px;padding-bottom:11px}}
@media print{.main{padding:0}.workspace{display:block}.calendar-panel{overflow:visible}.cal-header,.week-head,.calendar,.cal-footer{min-width:0}.calendar{grid-auto-rows:minmax(105px,auto)}.cal-chip,.person-chip,.day-hint{font-size:var(--type-12)}}

:root{--font-meta:12px;--font-body:14px;--font-subtitle:16px;--font-heading:20px;--font-title:24px;--font-hero:36px;--type-11:var(--font-meta);--type-12:var(--font-meta);--type-13:var(--font-meta);--type-14:var(--font-body);--type-15:var(--font-body);--type-16:var(--font-subtitle);--type-17:var(--font-subtitle);--type-18:var(--font-subtitle);--type-19:var(--font-heading);--type-20:var(--font-heading);--type-21:var(--font-heading);--type-22:var(--font-title);--type-23:var(--font-title);--type-25:var(--font-title);--type-39:var(--font-hero);}
