:root{--background:#f3f4f3;--foreground:#1f2528;--muted:#6f7779;--line:#dde1df;--panel:#ffffff;--orange:#d96722;--orange-dark:#984314;--shadow:0 12px 36px rgba(40,47,48,0.09)}*{box-sizing:border-box}body,html{background:var(--background)}body{margin:0;color:var(--foreground);font-family:Inter,PingFang SC,Microsoft YaHei,Noto Sans CJK SC,Arial,sans-serif}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:wait;opacity:.58}h1,h2,h3,p{margin:0}.app-shell{min-height:100vh;padding:14px 18px 28px;background:linear-gradient(180deg,#fbfbfa 0,var(--background) 220px)}.board-stage{max-width:1880px;margin:0 auto}.board-heading,.brand-block,.drawer__header,.library-toolbar,.modal__header,.records-toggle,.topbar,.topbar__actions{display:flex;align-items:center}.topbar{min-height:42px;justify-content:space-between;gap:16px;margin-bottom:9px;padding:2px 0}.brand-block{gap:9px}.brand-logo{display:block;width:218px;height:44px;object-fit:contain;object-position:left center}.topbar__actions{gap:7px;justify-content:flex-end}.date-control{min-height:34px;display:inline-flex;align-items:center;gap:6px;padding:0 8px;border:1px solid var(--line);border-radius:6px;background:#fff;color:#4c5557;font-size:12px;font-weight:800}.date-control input{width:116px;border:0;outline:0;background:transparent;color:#333a3d;font-size:12px;font-weight:800}.action-status{color:#2f617a;white-space:nowrap}.action-status,.system-status{font-size:11px;font-weight:800}.system-status{margin:0 0 8px;padding:8px 11px;border:1px solid #d7e1e4;border-radius:5px;background:#f2f7f8;color:#315f70}.system-status.loading{color:#6f7779}.icon-button,.primary-button,.text-button{min-height:34px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;gap:7px;border:0;font-weight:800}.icon-button{width:36px;flex:0 0 36px;border:1px solid var(--line);background:#fff;color:#454c4e;font-size:18px}.primary-button{padding:0 15px;background:var(--orange);color:#fff;box-shadow:0 5px 14px rgba(217,103,34,.18)}.text-button{padding:0 12px;border:1px solid var(--line);background:#fff;color:#4c5557}.topbar .text-button{border-color:var(--line);background:#fff;color:#4c5557}.topbar .date-control:hover,.topbar .text-button:hover{border-color:#b9c1be;background:#fafbfa}.wide{width:100%}.snapshot-area{padding:10px;border:1px solid #e3e6e4;border-radius:5px;background:#fff;box-shadow:var(--shadow)}.snapshot-area.is-exporting{width:1910px;max-width:none;box-shadow:none}.snapshot-area.is-exporting .schedule-scroll{overflow:visible}.snapshot-area.is-exporting .board-heading .icon-button{visibility:hidden}.board-heading{display:grid;grid-template-columns:36px minmax(0,1fr) 36px;gap:10px;min-height:40px;margin-bottom:6px}.board-heading h1{text-align:center;color:#252b2e;font-size:25px;font-weight:900;line-height:1.1}.schedule-scroll{overflow-x:auto}.schedule-grid{display:grid;grid-template-columns:170px repeat(5,minmax(340px,1fr));gap:4px;min-width:1890px}.grid-row{display:contents}.day-cell,.device-cell,.grid-head,.period-head,.period-head-spacer{border-radius:5px}.grid-head{min-height:38px;display:flex;align-items:center;justify-content:center;border:1px solid #e4e7e5;background:#eeefed;color:#343a3c;font-size:12px;font-weight:800}.device-head{background:#eeece9;color:var(--orange-dark)}.day-head{gap:8px}.day-head strong{color:#343a3c;font-size:14px}.day-head span{color:#7b8384;font-size:11px}.period-head,.period-head-spacer{min-height:25px;border:1px solid #e6e9e7;background:#f5f6f5}.period-head{display:grid;grid-template-columns:1fr 1fr;gap:4px;align-items:center}.period-head span{color:#81898a;font-size:10px;font-weight:800;text-align:center}.device-cell{min-height:62px;padding:7px 9px;display:flex;align-items:center;gap:8px;background:#f5f5f3;border:1px solid #e0e3e1;border-left:4px solid #c6b8aa;overflow:hidden}.device-cell strong{flex:0 0 auto;color:#292f31;font-size:16px}.device-cell span{min-width:0;color:#687072;font-size:10px;font-weight:700;line-height:1.25}.day-cell{min-height:54px;padding:4px;border:1px solid #e7e9e8;background:#f7f8f7}.slot-grid{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:4px;min-height:46px}.empty-slot{grid-row:1;min-height:46px;border-radius:4px;background:#fff}.empty-slot--am{grid-column:1}.empty-slot--pm{grid-column:2}.booking-card{position:relative;grid-column:1;grid-row:1;min-height:46px;padding:5px 7px 5px 9px;border-radius:4px;background:var(--dept-bg);border:1px solid var(--dept-line);border-left:3px solid var(--dept-accent);color:var(--dept-text);overflow:hidden}.booking-card--pm{grid-column:2}.booking-card--all{grid-column:1/3}.booking-card__dept{padding-right:26px;color:var(--dept-text);font-size:10px;font-weight:900;line-height:1.3;white-space:nowrap}.booking-card__project{margin-top:2px;overflow:hidden;color:#292e30;font-size:12px;font-weight:900;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.duty-strip{margin-bottom:7px;padding:7px;display:grid;grid-template-columns:130px repeat(2,minmax(360px,1fr)) 96px;gap:7px;border-radius:5px;border:1px solid #e3e1dd;background:#f7f5f2}.duty-title{min-height:36px;display:flex;padding:0 12px;background:#ede9e4;color:var(--orange-dark);font-size:13px}.duty-select,.duty-title{align-items:center;border-radius:5px}.duty-select{display:grid;grid-template-columns:44px minmax(210px,1fr);gap:8px;min-width:0;padding:2px 7px 2px 10px;border:1px solid var(--dept-line,#e1dfdb);border-left:4px solid var(--dept-accent,#7d8980);background:var(--dept-bg,#fff)}.duty-select strong{color:#8b4b24;font-size:13px}.duty-select select,.edit-form input,.edit-form select,.library-row input{width:100%;min-width:0;border:1px solid #d9dedc;border-radius:5px;background:#fff;color:#2c3335}.duty-select select{height:32px;padding:0 9px;font-size:12px;font-weight:800}.duty-status{align-self:center;padding:0 10px;color:#6f7779;font-size:11px;font-weight:900;white-space:nowrap}.duty-status--saving{color:#2f617a}.duty-status--saved{color:#376752}.duty-status--failed{color:#ba4937}.records-section{margin-top:10px;border:1px solid #e1e5e3;border-radius:5px;background:#fff;box-shadow:0 8px 26px rgba(40,47,48,.07)}.records-toggle{width:100%;min-height:44px;justify-content:space-between;padding:0 14px;border:0;border-radius:7px;background:#fff;color:#2c3335}.records-toggle strong{font-size:15px}.records-toggle span{color:#8a9293;font-size:12px;font-weight:900}.records-content{border-top:1px solid #e6e9e7}.records-toolbar{min-height:48px;display:flex;align-items:center;gap:7px;padding:7px 10px;border-bottom:1px solid #dedce2;background:#f5f5f3}.records-search,.status-filter{min-height:36px;border:1px solid #cbcfd0;border-radius:5px;background:#fff;color:#394144;font-size:11px;font-weight:800}.records-search{width:min(260px,24vw);padding:0 10px}.status-filter{padding:0 8px}.sort-control{display:inline-grid;grid-template-columns:1fr 1fr;padding:3px;border:1px solid #cbc8d2;border-radius:5px;background:#fff}.sort-control button{min-height:30px;padding:0 11px;border:0;border-radius:3px;background:transparent;color:#69686e;font-size:11px;font-weight:900}.sort-control button.active{background:#36474f;color:#fff}.range-picker{position:relative;display:flex;align-items:center}.clear-filter,.range-button{min-height:36px;border:1px solid #cbc8d2;background:#fff;color:#39383d;font-size:11px;font-weight:900}.range-button{min-width:150px;padding:0 11px;border-radius:5px}.range-button.active{border-color:var(--orange);color:var(--orange-dark)}.clear-filter{width:30px;margin-left:4px;border-radius:5px;color:#8a5a3a}.records-result{margin-left:auto;color:#6d6b72;font-size:11px;font-weight:900}.range-calendar{position:absolute;top:42px;left:0;z-index:12;width:304px;padding:10px;border:1px solid #d9dedc;border-radius:5px;background:#fff;box-shadow:0 14px 36px rgba(38,45,47,.16)}.calendar-head{display:grid;grid-template-columns:36px 1fr 36px;align-items:center;gap:8px;margin-bottom:8px}.calendar-head strong{text-align:center;font-size:13px}.calendar-days,.calendar-weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.calendar-weekdays{margin-bottom:4px}.calendar-weekdays span{color:#8b8990;font-size:10px;font-weight:900;text-align:center}.calendar-days button{aspect-ratio:1;border:0;border-radius:3px;background:#f4f3f5;color:#29282c;font-size:11px;font-weight:800}.calendar-days button.muted{color:#b1afb5}.calendar-days button.in-range{background:#f7e7dc;color:#9b4b1b}.calendar-days button.selected{background:var(--orange);color:#fff}.calendar-foot{display:flex;align-items:center;justify-content:space-between;margin-top:8px;padding-top:8px;border-top:1px solid #e3e1e6}.calendar-foot span{color:#77757d;font-size:10px}.calendar-foot button{border:0;background:transparent;color:var(--orange-dark);font-size:11px;font-weight:900}.records-table-wrap{overflow-x:auto;border-top:1px solid #ecefed}.records-table{width:100%;min-width:1040px;border-collapse:collapse;table-layout:fixed}.records-table td,.records-table th{padding:8px;border-bottom:1px solid #edf0ee;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.records-table th{background:#f0f2f1;color:#4a5254;font-size:11px}.records-table td{color:#343a3c;font-size:12px;font-weight:700}.row-actions{display:flex;gap:6px}.row-actions button{border:0;background:transparent;color:#2d6079;font-size:12px;font-weight:900}.row-actions .danger-action{color:#ba4937}.records-empty{padding:26px;color:#77757c;font-size:12px;font-weight:800;text-align:center}.drawer-layer,.modal-layer{position:fixed;inset:0;z-index:20}.drawer-layer{display:flex;justify-content:flex-end}.drawer-backdrop,.modal-backdrop{position:absolute;inset:0;border:0;background:rgba(27,32,33,.34)}.drawer{position:relative;width:min(530px,100%);height:100%;overflow-y:auto;padding:20px;background:#fff;border-left:1px solid #e0e4e2;box-shadow:-18px 0 48px rgba(35,42,44,.14)}.drawer--wide{width:min(680px,100%)}.drawer__header,.modal__header{justify-content:space-between;gap:14px}.drawer__header{margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e8ecea}.drawer__header h2,.modal__header h2{font-size:20px}.conflict-item{display:grid;grid-template-columns:1.2fr .8fr 1.4fr 1fr;gap:6px;padding-top:7px;border-top:1px solid #efd1c8;color:#684d46;font-weight:800}.form-submit{margin-top:12px}.modal-layer{display:grid;place-items:center;padding:18px}.modal{position:relative;width:min(620px,100%);max-height:calc(100vh - 36px);overflow-y:auto;padding:18px;border-radius:8px;background:#fff;border:1px solid #dfe3e1;box-shadow:0 18px 48px rgba(35,42,44,.18)}.modal--wide{width:min(960px,100%)}.modal__header{margin-bottom:14px;padding-bottom:11px;border-bottom:1px solid #e8ecea}.library-toolbar{justify-content:space-between;margin-bottom:10px;color:#555d5f;font-size:12px}.library-table{display:grid;gap:5px}.library-head,.library-row{display:grid;gap:7px;align-items:center}.department-library .library-head,.department-library .library-row{grid-template-columns:1fr 105px 105px 120px 1fr 48px}.device-library .library-head,.device-library .library-row{grid-template-columns:100px 1fr 130px 70px 48px}.library-head{padding:0 8px;color:#7a8182;font-size:10px;font-weight:900}.library-row{padding:6px;border-radius:5px;background:#f5f6f5}.library-row>input{height:34px;padding:0 8px;font-size:12px;font-weight:700}.library-row>input[type=checkbox]{width:18px;height:18px;justify-self:center}.color-field{min-width:0;display:flex;align-items:center;gap:8px}.color-field input{width:38px;height:32px;flex:0 0 38px;padding:2px}.color-field span{overflow:hidden;color:#555d5f;font-size:11px;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.edit-form{min-width:0;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:10px;border:0}.edit-form label{display:grid;gap:5px}.edit-form label>span{color:#747b7c;font-size:11px;font-weight:900}.edit-form input,.edit-form select,.edit-form textarea{min-height:37px;padding:0 9px;font-size:12px;font-weight:700}.edit-form input:disabled,.edit-form select:disabled,.edit-form textarea:disabled{background:#f0f2f1;color:#777f80}.edit-form textarea{min-height:72px;padding-top:9px;resize:vertical;border:1px solid #d9dedc;border-radius:5px;color:#2c3335}.edit-form__wide{grid-column:1/-1}.modal-save{margin-top:13px}.schedule-date-picker{position:relative;min-width:0}.schedule-date-field{width:100%;min-height:37px;display:flex;align-items:center;justify-content:space-between;padding:0 9px;border:1px solid #d9dedc;border-radius:5px;background:#fff;color:#2c3335;font-size:12px;font-weight:700}.schedule-date-field:disabled{background:#f0f2f1;color:#777f80}.schedule-date-popover{position:absolute;top:42px;left:0;z-index:32;width:min(320px,calc(100vw - 48px));padding:10px;border:1px solid #d9dedc;border-radius:5px;background:#fff;box-shadow:0 14px 36px rgba(38,45,47,.18)}.date-mode-control{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;margin-bottom:9px;padding:3px;border:1px solid #d5d8d7;border-radius:5px;background:#f4f5f4}.date-mode-control button{min-height:29px;border:0;border-radius:3px;background:transparent;color:#656d6f;font-size:11px;font-weight:900}.date-mode-control button.active{background:#36474f;color:#fff}.schedule-date-popover .calendar-foot>div{display:flex;gap:10px}.feedback-card{display:grid;gap:7px;margin-top:12px;padding:11px;border-radius:5px;font-size:12px}.feedback-card--ok{border:1px solid #b4d4c4;background:#eef7f1;color:#2f6a4e}.feedback-card--conflict,.feedback-card--error{border:1px solid #e2a696;background:#fff4ef;color:#923d2c}.feedback-card strong{font-size:13px;font-weight:900}.parse-bar{display:flex;align-items:center;gap:10px;margin:2px 0 8px;grid-column:1/-1}.parse-button{min-height:30px;padding:0 12px;font-size:11px}.parse-hint{color:#9a6a2a;font-size:11px;font-weight:800}.text-link{border:0;background:transparent;color:#2d6079;font-size:12px;font-weight:900;text-decoration:underline}.original-text{margin:0 0 10px;padding:12px;border:1px solid #e3e6e4;border-radius:5px;background:#f7f8f7;color:#2c3335;font-size:12px;font-weight:700;white-space:pre-wrap;word-break:break-word;max-height:320px;overflow:auto}.original-meta{display:flex;flex-wrap:wrap;gap:12px;color:#6f7779;font-size:11px;font-weight:800}.danger-zone{margin-top:18px;padding:12px;border:1px dashed #d8b3a8;border-radius:6px;background:#fdf6f3;display:grid;gap:6px}.danger-zone strong{color:#923d2c;font-size:12px;font-weight:900}.danger-zone span{color:#9a6a5a;font-size:11px;font-weight:700}.danger-button{min-height:36px;border:1px solid #c4593f;border-radius:5px;background:#d96722;color:#fff;font-weight:900;font-size:12px}.danger-button:disabled{opacity:.55}.library-delete{justify-self:center;width:30px;min-height:30px;border-radius:5px;border:1px solid #e2c4ba;background:#fff4ef;color:#ba4937;font-size:16px;font-weight:900}.alert-layer{position:fixed;inset:0;z-index:40;display:grid;place-items:center;background:rgba(27,32,33,.5);padding:18px}.alert-box{width:min(420px,100%);padding:20px;border-radius:8px;background:#fff;border:1px solid #e2a696;box-shadow:0 18px 48px rgba(35,42,44,.28);display:grid;gap:10px}.alert-box strong{color:#923d2c;font-size:15px}.alert-box p{margin:0;color:#414a43;font-size:13px;font-weight:700;line-height:1.5}.details-col-date{width:5.8%}.details-col-duration{width:3.8%}.details-col-period{width:4.8%}.details-col-department{width:16.8%}.details-col-project{width:9%}.details-col-handler{width:5.2%}.details-col-device{width:15.5%}.details-col-note{width:21.4%}.details-col-action{width:6.1%}.details-table td:last-child,.details-table th:last-child{text-align:center}.recycle-table{min-width:0}.recycle-table td,.recycle-table th{padding-right:6px;padding-left:6px}.recycle-col-deleted{width:13.34%}.recycle-col-date{width:6.51%}.recycle-col-duration{width:3.69%}.recycle-col-period{width:5.31%}.recycle-col-department{width:12.69%}.recycle-col-project{width:5.64%}.recycle-col-handler{width:5.21%}.recycle-col-device{width:13.99%}.recycle-col-note{width:3.69%}.recycle-col-source{width:7.81%}.recycle-col-action{width:9.11%}.recycle-table td:nth-last-child(-n+2),.recycle-table th:nth-last-child(-n+2){text-align:center}@media (max-width:760px){.app-shell{padding:10px}.topbar{align-items:flex-start}.topbar__actions{flex-wrap:wrap}.text-button{padding:0 9px;font-size:12px}.board-heading h1{font-size:21px}.edit-form{grid-template-columns:1fr}.edit-form__wide{grid-column:auto}.department-library .library-head,.device-library .library-head{display:none}.department-library .library-row,.device-library .library-row,.duty-strip{grid-template-columns:1fr}.duty-select{grid-template-columns:42px minmax(0,1fr)}.records-toolbar{align-items:stretch;flex-direction:column}.records-search{width:100%}.records-result{margin-left:0}.conflict-item{grid-template-columns:1fr 1fr}}.login-shell{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:min(100%,400px);padding:32px;background:white;border-radius:16px;box-shadow:var(--shadow);display:grid;gap:22px}.login-card h1{font-size:24px}.login-card label{display:grid;gap:8px;color:var(--muted)}.login-card input{width:100%;padding:12px;border:1px solid var(--line);border-radius:8px}.login-card [role=alert]{color:#a43920}