:root{--navy:#1b2a4a;--signal:#c8102e;--bg:#f3f5f8;--surface:#fff;--surface-2:#eef1f6;--line:#dce1ea;--line-strong:#bcc4d3;--ink:#16213a;--muted:#566079;--on-navy:#fff;--on-navy-muted:#b9c3d9;--primary:var(--navy);--primary-hover:#24365c;--on-primary:#fff;--primary-soft:#e6ebf4;--danger:#b42318;--danger-soft:#fcebea;--warning:#8a5300;--warning-soft:#fdf2dc;--success:#1d7048;--success-soft:#e3f2ea;--shadow-float:0 16px 40px #10182829, 0 2px 6px #10182814;--scrim:#0e131d73;--focus:0 0 0 3px #24365c52;--font:"Atkinson Hyperlegible Next", system-ui, -apple-system, "Segoe UI", sans-serif;--text-xs:13px;--text-sm:14px;--text-md:16px;--text-lg:19px;--text-xl:23px;--text-2xl:28px;--r-sm:6px;--r-md:8px;--r-lg:12px;--r-xl:16px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;--shadow-sm:0 1px 2px #1018280f;--row-hover:color-mix(in srgb, var(--surface-2) 60%, var(--surface));--ease:cubic-bezier(.16, 1, .3, 1);--ease-standard:cubic-bezier(.4, 0, .2, 1);--dur-fast:.15s;--dur-med:.4s;--sidebar-width:256px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#0e131d;--surface:#151b27;--surface-2:#1c2433;--line:#283247;--line-strong:#3a465e;--ink:#e7ebf3;--muted:#9aa4ba;--on-navy-muted:#a3aec6;--navy:#121a2b;--signal:#ff5a6e;--primary:#a9c1ee;--primary-hover:#c0d2f3;--on-primary:#0e131d;--primary-soft:#1d2840;--danger:#ff8a80;--danger-soft:#3a1f1c;--warning:#f2b45a;--warning-soft:#372a14;--success:#6fd19a;--success-soft:#183326;--shadow-float:0 16px 40px #0000008c;--scrim:#0009;--focus:0 0 0 3px #a9c1ee73;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-weight:200 800;font-display:swap;src:url(/fonts/ahn-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-weight:200 800;font-display:swap;src:url(/fonts/ahn-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--ink);font:400 var(--text-md) / 1.5 var(--font);-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3{text-wrap:balance;letter-spacing:-.01em;margin:0}p{text-wrap:pretty;margin:0}a{color:var(--primary);text-underline-offset:3px}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{box-shadow:var(--focus);outline:none}.num{font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.app{grid-template-columns:var(--sidebar-width) minmax(0, 1fr);min-height:100dvh;display:grid}.app.collapsed{--sidebar-width:72px}.main{min-width:0}.icon{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:20px;height:20px}.skip-link{z-index:90;border-radius:var(--r-md);background:var(--surface);color:var(--ink);font-weight:600;font-size:var(--text-sm);box-shadow:var(--shadow-float);padding:8px 12px;text-decoration:none;position:absolute;top:-80px;left:12px}.skip-link:focus{top:12px}.sidebar{background:var(--navy);height:100dvh;color:var(--on-navy);z-index:5;flex-direction:column;gap:4px;padding:16px 12px;display:flex;position:sticky;top:0;overflow-y:auto}.brand{color:var(--on-navy);letter-spacing:-.01em;white-space:nowrap;align-items:center;gap:10px;padding:6px 8px 18px;font-size:16px;font-weight:700;text-decoration:none;display:flex}.mark{flex:none;width:30px;height:30px;display:block}.nav-link{border-radius:var(--r-md);width:100%;min-height:40px;color:var(--on-navy-muted);font:600 14px/1.2 var(--font);white-space:nowrap;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard);background:0 0;border:0;align-items:center;gap:12px;padding:0 12px;text-decoration:none;display:flex;position:relative}.nav-link:hover{color:var(--on-navy);background:#ffffff0f}.nav-link.active{color:var(--on-navy);background:#ffffff1a}.nav-link.active:before{content:"";background:var(--signal);border-radius:0 3px 3px 0;width:3px;position:absolute;top:8px;bottom:8px;left:-12px}.nav-count{text-align:center;color:#fff;background:var(--danger);border-radius:999px;min-width:20px;margin-left:auto;padding:0 6px;font-size:12px;font-weight:700;line-height:20px}.sidebar-foot{border-top:1px solid #ffffff1a;gap:4px;margin-top:auto;padding-top:12px;display:grid}.sidebar-user{white-space:nowrap;align-items:center;gap:10px;padding:10px 12px 14px;display:flex;overflow:hidden}.avatar{background:var(--signal);color:#fff;letter-spacing:.02em;border-radius:999px;flex:none;place-items:center;width:32px;height:32px;font-size:12px;font-weight:700;display:grid}.sidebar-user-text{text-overflow:ellipsis;flex-direction:column;gap:1px;min-width:0;display:flex;overflow:hidden}.sidebar-user-name{color:var(--on-navy);text-overflow:ellipsis;font-size:13px;font-weight:700;overflow:hidden}.sidebar-user-role{color:var(--on-navy-muted);font-size:12px}.collapsed .sidebar-user{justify-content:center;padding-left:0;padding-right:0}.collapsed .sidebar-user-text,.collapsed .label,.collapsed .nav-count{display:none}.collapsed .nav-link,.collapsed .brand{justify-content:center;padding-left:0;padding-right:0}.collapsed .toggle .icon{transform:scaleX(-1)}.mobilebar,.tabbar{display:none}@media (width<=1023px) and (width>=768px){.app{--sidebar-width:72px}}@media (width<=767px){.sidebar{display:none}.mobilebar{z-index:6;background:var(--navy);color:var(--on-navy);align-items:center;gap:10px;padding:12px 16px;display:flex;position:sticky;top:0}.mobilebar .title{font-size:var(--text-lg);flex:1;margin:0;font-weight:700}.tabbar{z-index:6;background:var(--surface);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom,0);display:flex;position:fixed;bottom:0;left:0;right:0}.tabbar a{min-height:52px;color:var(--muted);border-radius:0;flex:1;justify-content:center;align-items:center;text-decoration:none;display:flex;position:relative}.tabbar a .icon{width:22px;height:22px}.tabbar a.active{color:var(--primary)}.tabbar a.active:before{content:"";background:var(--signal);border-radius:0 0 3px 3px;height:3px;position:absolute;top:0;left:30%;right:30%}}.content{width:100%;max-width:1180px;padding:32px 32px 64px}@media (width<=1023px) and (width>=768px){.content{padding:28px 24px 56px}}@media (width<=767px){.content{padding:20px 16px calc(64px + env(safe-area-inset-bottom,0))}}.page-head{flex-wrap:wrap;align-items:flex-end;gap:16px;margin-bottom:24px;display:flex}.page-head h1{font-size:var(--text-2xl);font-weight:700;line-height:1.2}.page-head p{color:var(--muted);margin-top:4px}.page-actions{flex-wrap:wrap;gap:8px;margin-left:auto;display:flex}@media (width<=767px){.page-head h1,.page-head>div>p{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.page-head{margin-bottom:12px}.page-actions{flex-wrap:nowrap;width:100%;margin-left:0;padding-bottom:2px;overflow-x:auto}.page-actions .btn{flex:none}}.pill-row{flex-wrap:wrap;gap:8px;margin-bottom:16px;display:flex}@media (width<=767px){.pill-row{flex-wrap:nowrap;margin-left:-16px;margin-right:-16px;padding-bottom:2px;padding-left:16px;padding-right:16px;overflow-x:auto}.pill-row .btn{flex:none}}.btn{border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);min-height:40px;color:var(--ink);font-weight:600;font-size:var(--text-sm);cursor:pointer;white-space:nowrap;transition:background-color var(--dur-fast) var(--ease-standard), border-color var(--dur-fast) var(--ease-standard), transform .1s var(--ease-standard);justify-content:center;align-items:center;gap:8px;padding:0 14px;text-decoration:none;display:inline-flex}.btn:hover{background:var(--surface-2);border-color:var(--muted)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn .icon{width:18px;height:18px}.btn.sm .icon{width:16px;height:16px}.btn.primary{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}.btn.primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.btn.ghost{background:0 0;border-color:#0000}.btn.ghost:hover{background:var(--surface-2)}.btn.danger-text{color:var(--danger);background:0 0;border-color:#0000}.btn.sm{min-height:32px;font-size:var(--text-xs);padding:0 10px}.icon-btn{border-radius:var(--r-md);width:36px;height:36px;color:var(--muted);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard);background:0 0;border:0;flex:none;place-items:center;display:inline-grid}.icon-btn:hover{background:var(--surface-2);color:var(--ink)}.icon-btn.danger:hover{background:var(--danger-soft);color:var(--danger)}table{font-size:var(--text-sm)}table thead th{text-transform:none;letter-spacing:.01em;font-weight:600}table tbody tr{transition:background-color var(--dur-fast) var(--ease-standard)}table tbody tr:hover{background:var(--row-hover,var(--surface-2))}table a{text-decoration:none}table a:hover{text-decoration:underline}.table-wrap{overflow-x:auto}@media (width<=767px){.table-wrap table,.table-wrap tbody,.table-wrap tr,.table-wrap td{width:auto;display:block}.table-wrap thead{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.table-wrap tbody tr{padding:12px 16px}.table-wrap td{text-align:left!important;border:none!important;padding:0!important}.table-wrap td:not(:first-child){margin-top:8px}.table-wrap td[data-label]:before{content:attr(data-label);color:var(--muted);margin-bottom:2px;font-size:11px;font-weight:600;display:block}}input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],select,textarea{border:1px solid var(--line-strong);border-radius:var(--r-md);background-color:var(--surface);width:100%;min-height:40px;color:var(--ink);font-size:var(--text-md);padding:8px 12px}input:focus-visible,select:focus-visible,textarea:focus-visible{border-color:var(--primary)}.field{gap:6px;display:grid}.field>span{font-size:var(--text-sm);font-weight:600}.field .hint{font-size:var(--text-xs);color:var(--muted);font-weight:400}.err{color:var(--danger);font-weight:600;font-size:var(--text-sm)}.surface{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:24px}.banner{border-radius:var(--r-md);background:var(--danger-soft);color:var(--danger);margin-bottom:16px;padding:12px 16px;font-weight:600}.status{font-size:var(--text-xs);align-items:center;gap:6px;font-weight:600;display:inline-flex}.status:before{content:"";background:currentColor;border-radius:50%;width:7px;height:7px}.status.overdue{color:var(--danger)}.status.soon{color:var(--warning)}.status.ok,.status.done{color:var(--success)}dialog.ca-dialog{border-radius:var(--r-lg);box-shadow:var(--shadow-float);background:var(--surface);color:var(--ink);border:none;width:min(420px,100vw - 32px);padding:0}dialog.ca-dialog::backdrop{background:var(--scrim)}dialog.ca-dialog form{gap:14px;padding:24px;display:grid}dialog.ca-dialog h2{font-size:var(--text-lg)}.ca-actions{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.ca-btn{border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);cursor:pointer;justify-content:center;align-items:center;min-height:40px;padding:0 16px;font-weight:600;display:inline-flex}.ca-btn.ca-primary{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}.ca-btn.ca-danger{background:var(--danger);border-color:var(--danger);color:#fff}.ca-toast{border-radius:var(--r-md);background:var(--ink);color:var(--surface);box-shadow:var(--shadow-float);font-size:var(--text-sm);z-index:50;align-items:center;gap:16px;padding:12px 18px;font-weight:600;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.ca-toast button{color:inherit;cursor:pointer;font:inherit;background:0 0;border:0;text-decoration:underline}.auth-wrap{place-items:center;min-height:100dvh;padding:24px;display:grid}.auth-card{gap:20px;width:100%;max-width:360px;display:grid}.auth-brand{color:var(--ink);justify-self:center;align-items:center;gap:10px;font-size:19px;font-weight:700;display:flex}.auth-card form{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);gap:16px;padding:24px;display:grid}.loading-row{color:var(--muted);font-size:var(--text-sm);padding:var(--sp-6) 0;align-items:center;gap:10px;display:flex}.spinner{border:2px solid var(--line-strong);border-top-color:var(--primary);border-radius:50%;width:16px;height:16px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.spinner{animation:none}}.empty-state{text-align:center;padding:var(--sp-8) var(--sp-4);color:var(--ink);justify-items:center;gap:6px;display:grid}.empty-state-icon{width:36px;height:36px;color:var(--line-strong);margin-bottom:var(--sp-2)}.empty-state p{max-width:36ch}.empty-state>*+*{margin-top:2px}dialog.panel-dialog{background:var(--surface);width:min(460px,100vw);height:100%;max-height:100vh;color:var(--ink);animation:slide-in var(--dur-med) var(--ease);border:none;border-radius:0;margin:0;padding:24px;position:fixed;inset:0 0 0 auto;overflow-y:auto}dialog.panel-dialog::backdrop{background:var(--scrim);animation:fade-in var(--dur-fast) var(--ease-standard)}@keyframes fade-in{0%{opacity:0}}@keyframes slide-in{0%{opacity:0;transform:translate(24px)}}@media (prefers-reduced-motion:reduce){dialog.panel-dialog,dialog.panel-dialog::backdrop{animation:none}}.tile{flex:160px}.tile .tile-label{color:var(--muted);font-size:13px}.tile .tile-value{font-size:var(--text-xl);margin-top:2px;font-weight:700}.chip-toggle{border:1px solid var(--line-strong);cursor:pointer;transition:border-color var(--dur-fast) var(--ease-standard), background-color var(--dur-fast) var(--ease-standard);border-radius:999px;align-items:center;gap:6px;padding:4px 12px;font-size:13px;display:inline-flex}.chip-toggle:has(input:checked){border-color:var(--primary);background:var(--primary-soft)}
