:root{--green-900:#0f3d28;--green-700:#1f6b45;--green-500:#237a4f;--green-100:#dfefe5;--green-50:#f0f7f2;--amber-500:#f4a340;--amber-600:#dd8a1e;--amber-100:#fdebd3;--amber-700:#94580a;--bg:#f7f8f5;--surface:#fff;--ink:#263238;--ink-2:#546e7a;--ink-3:#5f737c;--line:#e1e6e3;--field:#c9d2cd;--muted-bg:#eef1ef;--danger:#bf3434;--danger-100:#fbe3e3;--info:#1f5bd6;--info-100:#e3ecfd;--font-head:"Poppins", "PingFang SC", "Segoe UI", system-ui, sans-serif;--font-body:"Inter", "PingFang SC", "Segoe UI", system-ui, -apple-system, sans-serif;--shadow-md:0 6px 16px -4px #0f3d2824, 0 2px 4px #0f3d280f}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;font-size:16px;line-height:1.5}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed}a{color:var(--green-700)}a:hover{color:var(--green-900)}h1,h2,h3{font-family:var(--font-head);color:var(--green-900);letter-spacing:-.01em;margin:0;line-height:1.2}:focus-visible{outline:3px solid var(--amber-500);outline-offset:2px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.brand{align-items:center;gap:10px;text-decoration:none;display:flex}.brand-mark{background:var(--green-700);border-radius:10px;flex-shrink:0;place-items:center;width:38px;height:38px;display:grid}.brand-name{font-family:var(--font-head);color:var(--green-900);font-size:16px;font-weight:700;line-height:1.2}.brand-sub{color:var(--ink-3);font-size:12px}.topbar{background:var(--surface);border-bottom:1px solid var(--line)}.topbar-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;max-width:1180px;margin:0 auto;padding:12px 20px;display:flex}.card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:20px}.eyebrow{font-family:var(--font-head);letter-spacing:.14em;text-transform:uppercase;color:var(--green-500);font-size:12px;font-weight:600}.muted{color:var(--ink-2)}.small{font-size:14px}.tiny{color:var(--ink-3);font-size:12px}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.stack{flex-direction:column;gap:12px;display:flex}.btn{border:1.5px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:8px;min-height:48px;padding:0 22px;font-weight:600;text-decoration:none;display:inline-flex}.btn-primary{background:var(--green-700);color:#fff}.btn-primary:hover{background:var(--green-900);color:#fff}.btn-primary:disabled{background:#9db8a8}.btn-ghost{background:var(--surface);border-color:var(--field);color:var(--ink)}.btn-outline{background:var(--surface);border-color:var(--green-700);color:var(--green-700)}.btn-danger{background:var(--surface);color:var(--danger);border-color:#f0c4c4}.btn-sm{border-radius:10px;min-height:40px;padding:0 14px;font-size:14px}.btn-block{width:100%}.linkish{color:var(--green-700);background:0 0;border:none;padding:8px;font-weight:600;text-decoration:underline}.field{flex-direction:column;gap:6px;font-size:14px;font-weight:600;display:flex}.field input,.field select,.field textarea{border:1px solid var(--field);background:var(--surface);border-radius:10px;width:100%;min-height:46px;padding:0 12px;font-weight:400}.field textarea{resize:vertical;min-height:90px;padding:10px 12px}.field input[aria-invalid=true]{border-color:var(--danger)}.field .hint{color:var(--ink-3);font-size:12px;font-weight:400}.field .err{color:var(--danger);font-size:13px;font-weight:500}.alert{border-radius:12px;padding:12px 14px;font-size:14px}.alert-error{background:var(--danger-100);color:#8e2424}.alert-info{background:var(--green-50);color:var(--green-900)}.chip{border-radius:999px;align-items:center;padding:3px 9px;font-size:12px;font-weight:600;display:inline-flex}.chip-green{background:var(--green-50);color:var(--green-700)}.chip-amber{background:var(--amber-100);color:var(--amber-700)}.chip-red{background:var(--danger-100);color:var(--danger)}.chip-blue{background:var(--info-100);color:var(--info)}.chip-grey{background:var(--muted-bg);color:var(--ink-2)}.spinner{border:3px solid var(--green-100);border-top-color:var(--green-700);border-radius:50%;width:22px;height:22px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.center{place-items:center;padding:48px 0;display:grid}.book-page{max-width:1180px;margin:0 auto;padding:24px 20px 48px}.book-head{flex-direction:column;gap:6px;margin-bottom:20px;display:flex}.book-head h1{font-size:clamp(26px,4vw,34px)}.progress{grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;max-width:420px;margin-top:8px;display:grid}.progress span{background:var(--line);border-radius:999px;height:4px}.progress span.on{background:var(--amber-500)}.book-layout{grid-template-columns:minmax(0,1fr);align-items:start;gap:20px;display:grid}@media (width>=960px){.book-layout{grid-template-columns:minmax(0,1fr) 340px}.summary{position:sticky;top:20px}}.service-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;display:grid}.service-card{text-align:left;background:var(--surface);border:2px solid var(--line);border-radius:14px;flex-direction:column;align-items:flex-start;gap:4px;padding:16px;display:flex;position:relative}.service-card[aria-pressed=true]{background:var(--green-50);border-color:var(--green-700)}.service-card .name{font-family:var(--font-head);color:var(--green-900);font-size:16px;font-weight:600}.service-card .desc{color:var(--ink-2);font-size:14px}.service-card .tags{gap:8px;margin-top:6px;display:flex}.tick{background:var(--green-700);border-radius:50%;place-items:center;width:24px;height:24px;display:grid;position:absolute;top:12px;right:12px}.day-strip{scrollbar-width:thin;gap:8px;padding:2px 2px 6px;display:flex;overflow-x:auto}.day-pill{border:1.5px solid var(--line);background:var(--surface);border-radius:14px;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:1px;min-width:68px;min-height:78px;display:flex}.day-pill .num{font-family:var(--font-head);font-size:20px;font-weight:700}.day-pill .dow{font-size:12px;font-weight:500}.day-pill .free{color:var(--ink-3);font-size:11px}.day-pill[aria-pressed=true]{background:var(--green-700);border-color:var(--green-700);color:#fff}.day-pill[aria-pressed=true] .free{color:#dfefe5}.day-pill:disabled{background:var(--muted-bg);color:#8a989f;border-color:var(--muted-bg)}.slot-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;display:grid}.slot{border:1.5px solid var(--line);background:var(--surface);border-radius:12px;min-height:56px;font-weight:600}.slot[aria-pressed=true]{background:var(--green-700);border-color:var(--green-700);color:#fff}.summary h2{font-size:18px}.sum-row{flex-direction:column;gap:2px;display:flex}.sum-row .k{color:var(--ink-3);font-size:12px}.sum-row .v{font-weight:600}.footer-bar{gap:10px;margin-top:16px;display:flex}.footer-bar .btn-primary{flex:1}@media (width<=959px){.footer-bar{background:var(--surface);border-top:1px solid var(--line);z-index:5;margin:16px -20px 0;padding:12px 20px 16px;position:sticky;bottom:0}}.done-card{text-align:center;flex-direction:column;align-items:center;gap:12px;max-width:560px;margin:24px auto 0;padding:36px 24px;display:flex}.done-icon{background:var(--green-100);border-radius:50%;place-items:center;width:72px;height:72px;display:grid}.form-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;display:grid}.staff{flex-direction:column;min-height:100vh;display:flex}.staff-bar{background:var(--surface);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:10px 16px;padding:10px 16px;display:flex}.staff-bar h1{font-size:18px}.seg{border:1px solid var(--field);border-radius:10px;display:inline-flex;overflow:hidden}.seg button{background:var(--surface);border:none;min-height:38px;padding:0 14px}.seg button[aria-pressed=true]{background:var(--green-100);color:var(--green-900);font-weight:600}.icon-btn{background:0 0;border:none;border-radius:10px;place-items:center;width:40px;height:40px;display:inline-grid}.icon-btn:hover{background:var(--muted-bg)}.staff-main{flex-wrap:wrap;flex:1;align-items:flex-start;gap:16px;padding:16px;display:flex}.staff-side{flex-direction:column;flex:220px;gap:14px;max-width:260px;display:flex}.staff-cal{background:var(--surface);border:1px solid var(--line);border-radius:14px;flex:999 560px;min-width:0;overflow-x:auto}.staff-panel{flex:300px;max-width:380px}.side-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;flex-direction:column;gap:10px;padding:14px;display:flex}.side-card h2{font-size:14px;font-family:var(--font-body);color:var(--ink);font-weight:600}.tech-toggle{text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;min-height:36px;padding:0;display:flex}.tech-box{border:2px solid;border-radius:6px;flex-shrink:0;place-items:center;width:20px;height:20px;display:grid}.pending-item{text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:10px;flex-direction:column;gap:2px;width:100%;padding:10px;display:flex}.pending-item:hover{border-color:var(--danger)}.week{min-width:720px}.week-head,.week-body{grid-template-columns:56px repeat(var(--days), minmax(0, 1fr));display:grid}.week-head{border-bottom:1px solid var(--line);background:var(--surface);z-index:3;position:sticky;top:0}.week-head .d{border-left:1px solid var(--line);flex-direction:column;align-items:center;padding:8px;display:flex}.week-head .d .dow{color:var(--ink-3);font-size:12px}.week-head .d .num{font-family:var(--font-head);color:var(--green-900);border-radius:50%;place-items:center;width:38px;height:38px;font-size:20px;font-weight:600;display:grid}.week-head .d.today .num{background:var(--green-700);color:#fff}.hours-col .h{color:var(--ink-3);text-align:right;padding-right:8px;font-size:11px;transform:translateY(-7px)}.day-col{border-left:1px solid var(--line);background-image:repeating-linear-gradient(to bottom, #e9edea 0, #e9edea 1px, transparent 1px, transparent var(--hour));position:relative}.day-col .cell{background:0 0;border:none;padding:0;position:absolute;left:0;right:0}.day-col .cell:hover{background:#1f6b450f}.day-col .off{pointer-events:none;background:repeating-linear-gradient(135deg,#eef1ef 0 6px,#f7f8f5 6px 12px);position:absolute;left:0;right:0}.ev{box-sizing:border-box;text-align:left;z-index:1;border:1px solid;border-radius:8px;padding:4px 7px;font-size:12px;line-height:1.3;position:absolute;overflow:hidden}.ev .t{font-weight:600;display:block}.ev span{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}.ev.pending{color:var(--ink)!important;border:1.5px dashed var(--danger)!important;background:#fff!important}.ev.done{opacity:.6}.ev.sel{box-shadow:0 0 0 3px var(--amber-500);z-index:2}.now-line{background:var(--danger);z-index:2;pointer-events:none;height:2px;position:absolute;left:0;right:0}.panel{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-md);border-radius:14px;flex-direction:column;gap:14px;padding:18px;display:flex}.panel h2{font-size:20px}.kv{flex-direction:column;font-size:14px;display:flex}.kv .k{color:var(--ink-3);font-size:12px}.assign{flex-wrap:wrap;gap:6px;display:flex}.assign button{background:#fff;border:1.5px solid;border-radius:999px;min-height:34px;padding:0 12px;font-size:13px;font-weight:600}.history{color:var(--ink-3);flex-direction:column;gap:4px;font-size:12px;display:flex}.modal-back{z-index:50;background:#0f3d2859;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);border-radius:18px;flex-direction:column;gap:14px;width:100%;max-width:640px;max-height:calc(100vh - 32px);padding:22px;display:flex;overflow-y:auto}.agenda{flex-direction:column;flex:1;display:flex}.agenda-days{background:var(--surface);border-bottom:1px solid var(--line);grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;padding:8px 12px 12px;display:grid}.agenda-days button{background:0 0;border:none;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:1px;min-height:62px;display:flex}.agenda-days button[aria-pressed=true]{background:var(--green-700);color:#fff}.agenda-days .dot{border-radius:50%;width:5px;height:5px}.agenda-list{flex-direction:column;gap:10px;padding:14px 12px 90px;display:flex}.job{text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:14px;align-items:stretch;gap:12px;width:100%;padding:12px;display:flex}.job .bar{border-radius:999px;flex-shrink:0;width:4px}.quick{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.quick a{background:var(--surface);border:1px solid var(--line);border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:2px;min-height:60px;font-size:13px;font-weight:600;text-decoration:none;display:flex}.sticky-action{background:var(--surface);border-top:1px solid var(--line);padding:12px 16px 16px;position:sticky;bottom:0}.login{max-width:380px;margin:10vh auto 0}.routes{flex-direction:column;gap:14px;padding:16px;display:flex}.route{border:1px solid var(--line);background:var(--surface);border-radius:14px;overflow:hidden}.route-head{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:10px;padding:12px 14px;display:flex}.route-dot{border-radius:50%;flex-shrink:0;width:12px;height:12px}.route-list{flex-direction:column;margin:0;padding:10px 14px 14px;list-style:none;display:flex}.route-stop{border:1px solid var(--line);background:var(--surface);border-radius:12px;align-items:center;gap:12px;width:100%;padding:10px 12px;display:flex}button.route-stop:hover{border-color:var(--green-700)}.route-depot{background:var(--muted-bg);border-color:var(--muted-bg);color:var(--ink-2);font-size:14px}.route-time{width:64px;color:var(--green-900);text-align:left;flex-direction:column;flex-shrink:0;font-weight:700;display:flex}.route-leg{border-left:2px dashed var(--field);color:var(--ink-3);margin-left:30px;padding:8px 0 8px 18px;font-size:12px}.route-leg.late{color:var(--danger);border-left-color:var(--danger)}.slot-group{flex-direction:column;gap:8px;display:flex}.slot-group h3{font-size:13px;font-family:var(--font-body);color:var(--ink-3);margin:0;font-weight:600}.slot-grid.compact{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px}.slot-grid.compact .slot{flex-direction:column;justify-content:center;align-items:center;gap:1px;min-height:48px;display:flex}.slot .near{color:var(--green-700);font-size:11px;font-weight:500}.slot[aria-pressed=true] .near{color:#dfefe5}
