:root{--navy: #1f3864;--navy-600: #2a4a80;--ink: #12172150;--text: #101828;--muted: #667085;--line: #e4e7ec;--bg: #f6f8fb;--surface: #ffffff;--good: #16a34a;--warn: #d97706;--bad: #dc2626;--radius: 10px;--shadow: 0 1px 2px rgba(16, 24, 40, .06), 0 1px 3px rgba(16, 24, 40, .1)}*{box-sizing:border-box}body{margin:0;font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}h1{font-size:22px;margin:0;letter-spacing:-.01em}h2{font-size:15px;margin:0}a{color:var(--navy-600);text-decoration:none}a:hover{text-decoration:underline}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.shell{display:grid;grid-template-columns:248px 1fr;min-height:100vh}.sidebar{background:var(--navy);color:#d7e0f0;display:flex;flex-direction:column;padding:18px 14px;position:sticky;top:0;height:100vh}.brand{display:flex;gap:10px;align-items:center;margin-bottom:22px}.brand__mark{width:36px;height:36px;border-radius:9px;background:#fff;color:var(--navy);display:grid;place-items:center;font-weight:800;font-size:18px;flex:none}.brand__name{color:#fff;font-weight:700;font-size:14px}.brand__sub{font-size:11px;opacity:.7}.brand--login{justify-content:center;margin-bottom:26px}.brand--login .brand__mark{background:var(--navy);color:#fff}.brand--login .brand__name{color:var(--text);font-size:16px}.brand--login .brand__sub{color:var(--muted)}.sidebar nav{display:flex;flex-direction:column;gap:2px;flex:1}.nav{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:8px;color:#cbd6ea;font-size:13.5px}.nav:hover{background:#ffffff14;text-decoration:none}.nav.is-active{background:#fff;color:var(--navy);font-weight:600}.nav__icon{width:16px;text-align:center;opacity:.9}.sidebar__foot{border-top:1px solid rgba(255,255,255,.15);padding-top:14px}.who__name{color:#fff;font-weight:600;font-size:13px}.who__role{font-size:11px;opacity:.7;margin-bottom:10px}.content{padding:26px 30px 60px;max-width:1600px}.login{min-height:100vh;display:grid;place-items:center;background:var(--bg);padding:20px}.login__card{width:100%;max-width:380px;background:var(--surface);padding:30px;border-radius:14px;box-shadow:var(--shadow);border:1px solid var(--line)}.login__hint{color:var(--muted);font-size:12px;text-align:center;margin:14px 0 0}.boot{min-height:100vh;display:grid;place-items:center}.page__head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:20px;flex-wrap:wrap}.page__sub{color:var(--muted);margin:4px 0 0;font-size:13px}.page__actions{display:flex;gap:8px;align-items:center}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:20px}.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}.stat__label{color:var(--muted);font-size:11.5px;text-transform:uppercase;letter-spacing:.04em}.stat__value{font-size:24px;font-weight:700;margin-top:4px;letter-spacing:-.02em}.stat__hint{color:var(--muted);font-size:12px;margin-top:2px}.stat--good{border-left:3px solid var(--good)}.stat--warn{border-left:3px solid var(--warn)}.stat--bad{border-left:3px solid var(--bad)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:20px}.panel__head{display:flex;justify-content:space-between;align-items:center;padding:13px 16px;border-bottom:1px solid var(--line)}.panel__body{padding:4px 0 0}.panel__actions{display:flex;gap:8px}.table-wrap{overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:13px}.table th{text-align:left;padding:9px 14px;color:var(--muted);font-weight:600;font-size:11.5px;text-transform:uppercase;letter-spacing:.03em;border-bottom:1px solid var(--line);white-space:nowrap;background:#fafbfd}.table td{padding:10px 14px;border-bottom:1px solid #f1f3f7;vertical-align:top}.table tbody tr:hover{background:#f9fbff}.table tr.is-clickable{cursor:pointer}.cell__strong{font-weight:600}.cell__sub{color:var(--muted);font-size:11.5px}.code-cell{color:var(--muted);word-break:break-all}.row-actions{display:flex;gap:6px}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;margin-right:4px;white-space:nowrap}.badge--good{background:#e7f7ee;color:#036b3f}.badge--warn{background:#fdf3e3;color:#93540b}.badge--bad{background:#fdeaea;color:#a71d1d}.badge--muted{background:#eef1f6;color:#475467}.text--good{color:var(--good);font-weight:600}.text--bad{color:var(--bad);font-weight:600}input,select,textarea{font:inherit;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);width:100%}input:focus,select:focus{outline:2px solid #c7d7f5;border-color:var(--navy-600)}.field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px}.field>span{font-size:12px;color:var(--muted);font-weight:600}.field--inline{margin-bottom:0;min-width:150px}.field--check{flex-direction:row;align-items:center;gap:7px;margin-bottom:0}.field--check input{width:auto}.filters{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;margin-bottom:18px;box-shadow:var(--shadow)}.filters__actions{margin-left:auto;display:flex;gap:8px}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0 16px;padding:16px}.form-grid__actions{grid-column:1 / -1;padding-top:6px}.btn{font:inherit;font-weight:600;font-size:13px;padding:8px 14px;border-radius:8px;border:1px solid var(--line);background:#fff;color:var(--text);cursor:pointer;white-space:nowrap}.btn:hover{background:#f4f6fa}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--navy);border-color:var(--navy);color:#fff}.btn--primary:hover{background:var(--navy-600)}.btn--ghost{background:transparent;border-color:#ffffff4d;color:#fff;width:100%}.btn--ghost:hover{background:#ffffff1f}.btn--block{width:100%}.btn--small{padding:4px 9px;font-size:12px}.note{padding:14px 16px;border-radius:8px;font-size:13px;margin-bottom:14px}.note--error{background:#fdeaea;color:#a71d1d;border:1px solid #f6c9c9}.note--empty{background:#fafbfd;color:var(--muted);text-align:center;border:1px dashed var(--line);margin:16px}.spinner{display:flex;gap:10px;align-items:center;color:var(--muted);padding:16px}.spinner__dot{width:14px;height:14px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--navy);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.map{width:100%;border-radius:0 0 var(--radius) var(--radius);background:#eef1f6}.legend{display:flex;gap:18px;flex-wrap:wrap;padding:12px 16px;color:var(--muted);font-size:12px}.dot{width:10px;height:10px;border-radius:50%;display:inline-block;margin-right:6px}.dot--start{background:#16a34a}.dot--checkin{background:#1d4ed8}.dot--flagged{background:#b91c1c}.dot--close{background:#dc2626}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px;padding:16px}.card{display:block;border:1px solid var(--line);border-radius:var(--radius);padding:13px 14px;color:inherit;background:#fff}.card:hover{border-color:var(--navy-600);text-decoration:none}.card--live{border-left:3px solid var(--good)}.card--idle{border-left:3px solid var(--line)}.card__head{display:flex;justify-content:space-between;align-items:center;gap:8px}.card__sub{color:var(--muted);font-size:11.5px;margin-top:2px}.card__metrics{display:flex;gap:14px;margin:9px 0 6px;font-weight:600;font-size:13px}.card__foot{color:var(--muted);font-size:12px}.settings{display:flex;flex-direction:column}.setting{display:grid;grid-template-columns:1fr 220px;gap:20px;align-items:center;padding:13px 16px;border-bottom:1px solid #f1f3f7}.setting__meta p{margin:3px 0;color:var(--muted);font-size:12.5px}.setting__meta small{color:#98a2b3;font-size:11px}.bars{padding:16px;display:flex;flex-direction:column;gap:9px}.bar{display:grid;grid-template-columns:190px 1fr 52px;gap:12px;align-items:center;font-size:13px}.bar__track{background:#eef1f6;border-radius:999px;height:12px;overflow:hidden}.bar__fill{background:var(--navy);height:100%;border-radius:999px}.bar__value{text-align:right;font-weight:600}@media (max-width: 900px){.shell{grid-template-columns:1fr}.sidebar{position:static;height:auto}.sidebar nav{flex-direction:row;overflow-x:auto}.content{padding:18px}.setting{grid-template-columns:1fr}}.field__hint{color:var(--muted);font-size:11.5px;margin-top:4px}.daymap{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:14px;align-items:start}.daymap__map{min-width:0}.daymap__timeline{max-height:560px;overflow-y:auto;border:1px solid var(--line, #e4e7ec);border-radius:10px;background:#fbfcfe;padding:10px}@media (max-width: 1100px){.daymap{grid-template-columns:1fr}.daymap__timeline{max-height:420px;order:-1}}.tl{list-style:none;margin:0;padding:0}.tl__item{display:flex;gap:10px;padding:10px 6px;border-bottom:1px solid #eef1f5}.tl__item:last-child{border-bottom:0}.tl__item.is-clickable{cursor:pointer;border-radius:8px}.tl__item.is-clickable:hover{background:#eff4ff}.tl__item--travel{opacity:.82}.tl__mark{flex:0 0 26px;height:26px;border-radius:999px;display:grid;place-items:center;font-size:11.5px;font-weight:800;color:#fff;background:#98a2b3}.tl__mark--start{background:#16a34a}.tl__mark--close{background:#dc2626}.tl__mark--visit{background:#1d4ed8}.tl__mark--idle{background:#d97706}.tl__mark--travel{background:#eaecf0;color:#475467;font-size:13px}.tl__body{min-width:0;flex:1}.tl__title{display:flex;justify-content:space-between;gap:8px;font-size:11.5px;font-weight:800;letter-spacing:.03em;color:#475467;text-transform:uppercase}.tl__dur{color:#101828;letter-spacing:0}.tl__meta{font-size:12px;color:#667085}.tl__link{text-decoration:underline}.tl__name{font-size:13.5px;font-weight:700;margin-top:3px}.tl__tag{display:inline-block;margin-top:5px;padding:2px 8px;border-radius:999px;background:#eff4ff;color:#1f3864;font-size:11.5px;font-weight:700}.tl__note{margin-top:4px;font-size:12px;color:#475467;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.pin{display:grid;place-items:center;width:26px;height:26px;border-radius:999px;border:2px solid #fff;box-shadow:0 1px 4px #10182859;color:#fff;font:700 11px/1 system-ui,sans-serif}.leaflet-container{border-radius:10px;font:inherit}.picker{position:relative;z-index:1200;min-width:280px}.picker__field{display:flex;align-items:center;gap:6px;background:#fff;border:1px solid var(--line, #e4e7ec);border-radius:8px;padding:0 8px}.picker__field:focus-within{border-color:#1f3864;box-shadow:0 0 0 3px #1f38641a}.picker__icon{color:#98a2b3;font-size:15px}.picker__field input{border:0;outline:0;padding:8px 0;width:100%;font:inherit;font-size:13px;background:transparent}.picker__clear{border:0;background:transparent;color:#98a2b3;font-size:17px;line-height:1;cursor:pointer;padding:0 2px}.picker__clear:hover{color:#dc2626}.picker__list{position:absolute;z-index:1;top:calc(100% + 4px);left:0;right:0;max-height:340px;overflow-y:auto;margin:0;padding:4px;list-style:none;background:#fff;border:1px solid var(--line, #e4e7ec);border-radius:10px;box-shadow:0 12px 28px #10182824}.picker__option{position:relative;padding:7px 84px 7px 9px;border-radius:7px;cursor:pointer}.picker__option.is-active{background:#eff4ff}.picker__option.is-selected .picker__name{color:#1f3864}.picker__name{font-size:13px;font-weight:700}.picker__meta{font-size:11.5px;color:#667085}.picker__status{position:absolute;right:9px;top:50%;transform:translateY(-50%);font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:999px;background:#f2f4f7;color:#667085}.picker__status--started{background:#dcfce7;color:#15803d}.picker__status--closed{background:#eef2ff;color:#3730a3}.picker__empty{padding:10px;font-size:12.5px;color:#667085}.page__actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.page__head{position:relative;z-index:1100}.cell-select{font:inherit;font-size:12.5px;padding:3px 6px;border:1px solid transparent;border-radius:6px;background:transparent;max-width:190px}.cell-select:hover{border-color:var(--line, #e4e7ec);background:#fff}.cell-select:focus{border-color:#1f3864;background:#fff;outline:0}.filter-input{font:inherit;font-size:12.5px;padding:6px 9px;border:1px solid var(--line, #e4e7ec);border-radius:8px;min-width:230px}.filter-input:focus{border-color:#1f3864;outline:0}
