:root{--color-bg: #fafafa;--color-surface: #ffffff;--color-border: #e4e4e7;--color-border-soft: #f0f0f2;--color-text: #18181b;--color-text-secondary: #52525b;--color-text-muted: #a1a1aa;--color-primary: #007aff;--color-primary-hover: #0062cc;--color-primary-tint: #eaf3ff;--color-primary-border: #b3d7ff;--color-primary-ring: rgba(0, 122, 255, .16);--color-danger: #dc2626;--color-danger-hover: #b91c1c;--color-danger-tint: #fef2f2;--color-danger-border: #fecaca;--color-warning: #b45309;--color-warning-tint: #fffbeb;--color-warning-border: #fde68a;--color-success: #15803d;--color-success-tint: #f0fdf4;--color-success-border: #bbf7d0;--color-done: #55806a;--color-done-tint: #f2f7f4;--color-done-border: #d7e6dd;--color-info: #1d4ed8;--color-info-tint: #eff6ff;--color-info-border: #bfdbfe;--color-neutral: #52525b;--color-neutral-tint: #f4f4f5;--color-neutral-border: #e4e4e7;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-full: 999px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-7: 32px;--space-8: 40px;--font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-md: 13px;--font-size-base: 14px;--font-size-lg: 16px;--font-size-xl: 20px;--font-size-xxl: 26px;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--shadow-sm: 0 1px 2px rgba(24, 24, 27, .04);--shadow-md: 0 2px 10px rgba(24, 24, 27, .06);--shadow-modal: 0 20px 50px rgba(24, 24, 27, .18)}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%}body{font-family:var(--font-family);font-size:var(--font-size-base);color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased}svg{flex-shrink:0}.app{display:flex;min-height:100vh}.app__main{flex:1;min-width:0;display:flex;flex-direction:column}.app__content{width:100%;max-width:1240px;margin:0 auto;padding:var(--space-6) var(--space-7) var(--space-8);display:flex;flex-direction:column;gap:var(--space-6)}@media (max-width: 1140px){.app__content{padding:var(--space-5) var(--space-5) var(--space-7)}}.sidebar{width:220px;flex-shrink:0;background:var(--color-surface);border-right:1px solid var(--color-border);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.sidebar__logo{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-5) var(--space-4);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);letter-spacing:.08em}.sidebar__logo-mark{width:28px;height:28px;border-radius:var(--radius-md);background:var(--color-primary);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);letter-spacing:0}.sidebar__section{padding:var(--space-3) var(--space-4) var(--space-1);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-muted)}.sidebar__nav{display:flex;flex-direction:column;gap:2px;padding:0 var(--space-2)}.sidebar__link{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);text-decoration:none;transition:background .15s ease,color .15s ease}.sidebar__link:hover{background:var(--color-bg);color:var(--color-text)}.sidebar__link--active,.sidebar__link--active:hover{background:var(--color-primary-tint);color:var(--color-primary)}.sidebar__footer{margin-top:auto;padding:var(--space-4);border-top:1px solid var(--color-border-soft);display:flex;align-items:center;gap:var(--space-3)}.sidebar__user-name{font-size:var(--font-size-md);font-weight:var(--font-weight-medium)}.sidebar__user-role{font-size:var(--font-size-xs);color:var(--color-text-muted)}.sidebar__logo-text,.sidebar__link-text{white-space:nowrap;overflow:hidden}.sidebar__toggle{margin-left:auto;flex-shrink:0;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--color-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.sidebar__toggle:hover{background:var(--color-neutral-tint);color:var(--color-text)}.sidebar__toggle:focus-visible{outline:none;box-shadow:0 0 0 3px var(--color-primary-ring)}.sidebar{transition:width .18s ease}.sidebar--collapsed{width:64px}.sidebar--collapsed .sidebar__logo-text,.sidebar--collapsed .sidebar__link-text,.sidebar--collapsed .sidebar__section,.sidebar--collapsed .sidebar__user{display:none}.sidebar--collapsed .sidebar__logo{flex-direction:column;gap:var(--space-2);padding:var(--space-4) var(--space-2)}.sidebar--collapsed .sidebar__toggle{margin-left:0}.sidebar--collapsed .sidebar__nav{padding:0 var(--space-2)}.sidebar--collapsed .sidebar__link{justify-content:center;padding:var(--space-2);gap:0}.sidebar--collapsed .sidebar__footer{flex-direction:column;gap:var(--space-2);padding:var(--space-3) var(--space-2)}.sidebar--collapsed .sidebar__logout{margin-left:0}.topbar{background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:var(--space-3) var(--space-7);display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);position:sticky;top:0;z-index:20}.topbar__title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.topbar__title span{color:var(--color-text-muted);font-weight:var(--font-weight-regular)}.topbar__search{position:relative;width:280px;max-width:40vw}.topbar__search svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--color-text-muted)}.topbar__search .field__control{padding-left:34px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);height:36px;padding:0 var(--space-4);border:1px solid transparent;border-radius:var(--radius-md);font-family:var(--font-family);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);line-height:1;cursor:pointer;white-space:nowrap;transition:background .15s ease,border-color .15s ease,color .15s ease,box-shadow .15s ease}.btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--color-primary-ring)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn--primary{background:var(--color-primary);color:#fff}.btn--primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn--secondary{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border);box-shadow:var(--shadow-sm)}.btn--secondary:hover:not(:disabled){border-color:var(--color-text-muted)}.btn--ghost{background:transparent;color:var(--color-text-secondary)}.btn--ghost:hover:not(:disabled){background:var(--color-neutral-tint);color:var(--color-text)}.btn--danger{background:var(--color-danger);color:#fff}.btn--danger:hover:not(:disabled){background:var(--color-danger-hover)}.btn--sm{height:28px;padding:0 var(--space-3);font-size:var(--font-size-sm);border-radius:var(--radius-sm)}.btn--md{height:36px}.btn--icon{width:36px;padding:0}.btn--icon.btn--sm{width:28px}.field{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.field__label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.1em;color:var(--color-text-secondary)}.field__control{height:36px;width:100%;padding:0 var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);font-family:var(--font-family);font-size:var(--font-size-md);color:var(--color-text);transition:border-color .15s ease,box-shadow .15s ease}.field__control::placeholder{color:var(--color-text-muted)}.field__control:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-ring)}textarea.field__control{height:auto;min-height:84px;padding:var(--space-2) var(--space-3);resize:vertical;line-height:1.5}select.field__control{-moz-appearance:none;appearance:none;-webkit-appearance:none;padding-right:var(--space-7);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2352525b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center}.field__error{font-size:var(--font-size-sm);color:var(--color-danger)}.field--error .field__control{border-color:var(--color-danger)}.field--error .field__control:focus{box-shadow:0 0 0 3px #dc26261f}.field--error .field__label{color:var(--color-danger)}.badge{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 var(--space-2);border:1px solid var(--color-neutral-border);border-radius:var(--radius-full);background:var(--color-neutral-tint);color:var(--color-neutral);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:1;white-space:nowrap}.badge:before{content:"";width:6px;height:6px;border-radius:var(--radius-full);background:currentColor}.badge--late{background:var(--color-danger);border-color:var(--color-danger);color:#fff}.badge--soon{background:var(--color-warning-tint);border-color:var(--color-warning-border);color:var(--color-warning)}.badge--ontime{background:var(--color-success-tint);border-color:var(--color-success-border);color:var(--color-success)}.badge--done{background:var(--color-done-tint);border-color:var(--color-done-border);color:var(--color-done)}.badge--nodate{background:var(--color-neutral-tint);border-color:var(--color-neutral-border);color:var(--color-neutral)}.badge--inwork{background:var(--color-info-tint);border-color:var(--color-info-border);color:var(--color-info)}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.card__header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border-soft)}.card__title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold)}.card__subtitle{font-size:var(--font-size-sm);color:var(--color-text-muted);margin-top:2px}.card__body{padding:var(--space-5)}.card__actions{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;justify-content:flex-end}.kpi-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--space-4)}.kpi{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-4);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);min-width:0}.kpi__icon{width:36px;height:36px;flex-shrink:0;border-radius:var(--radius-md);display:inline-flex;align-items:center;justify-content:center;background:var(--color-primary-tint);color:var(--color-primary)}.kpi__label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kpi__value{font-size:var(--font-size-xxl);font-weight:var(--font-weight-semibold);line-height:1.2}.kpi--danger .kpi__icon{background:var(--color-danger-tint);color:var(--color-danger)}.kpi--warning .kpi__icon{background:var(--color-warning-tint);color:var(--color-warning)}.kpi--success .kpi__icon{background:var(--color-success-tint);color:var(--color-success)}.kpi--neutral .kpi__icon{background:var(--color-neutral-tint);color:var(--color-neutral)}.table-wrap{overflow:auto;max-height:480px;border-radius:0 0 var(--radius-lg) var(--radius-lg)}.table{width:100%;min-width:1240px;border-collapse:collapse;font-size:var(--font-size-md)}.table th{position:sticky;top:0;z-index:5;background:var(--color-surface);padding:0 var(--space-3);height:38px;text-align:left;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-muted);border-bottom:1px solid var(--color-border);white-space:nowrap}.table td{height:40px;padding:0 var(--space-3);border-bottom:1px solid var(--color-border-soft);color:var(--color-text-secondary);white-space:nowrap}.table tbody tr{transition:background .12s ease}.table tbody tr:hover{background:var(--color-bg)}.table tbody tr:last-child td{border-bottom:none}.table__id{font-weight:var(--font-weight-semibold);color:var(--color-text)}.table__client{color:var(--color-text)}.table__days{font-weight:var(--font-weight-semibold)}.table__days--ok{color:var(--color-success)}.table__days--soon{color:var(--color-warning)}.table__days--late{color:var(--color-danger)}.table__days--muted{color:var(--color-text-muted);font-weight:var(--font-weight-regular)}.steps{display:inline-flex;gap:3px;vertical-align:middle}.steps__item{display:flex;flex-direction:column;align-items:center;gap:var(--space-1)}.steps__dot{width:14px;height:6px;border-radius:var(--radius-full);background:var(--color-border);transition:background .15s ease}.steps__item--done .steps__dot{background:var(--color-success)}.steps__item--na .steps__dot{background:var(--color-primary-border)}.steps__item--current .steps__dot{background:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-tint),0 0 0 3px var(--color-primary-border)}.steps__item--late .steps__dot{background:var(--color-danger)}.steps__item--donelate .steps__dot{background:var(--color-success)}.steps__label{font-size:var(--font-size-xs);color:var(--color-text-muted)}.steps__item--done .steps__label{color:var(--color-success);font-weight:var(--font-weight-medium)}.steps__item--current .steps__label{color:var(--color-primary);font-weight:var(--font-weight-medium)}.steps--compact .steps__label{display:none}.steps--labeled{gap:var(--space-2)}.steps--labeled .steps__dot{width:26px}.steps--dated{gap:3px}.steps__pill{min-width:40px;height:20px;padding:0 5px;border:1px solid transparent;border-radius:var(--radius-full);background:var(--color-neutral-tint);color:var(--color-text-muted);font-size:10px;font-weight:var(--font-weight-medium);line-height:1;display:inline-flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums;white-space:nowrap;transition:background .15s ease,color .15s ease,border-color .15s ease}.steps__item--done .steps__pill{background:var(--color-success);border-color:var(--color-success);color:#fff}.steps__item--current .steps__pill{background:var(--color-primary-tint);border-color:var(--color-primary-border);color:var(--color-primary);font-weight:var(--font-weight-semibold)}.steps__item--na .steps__pill{background:var(--color-primary-tint);border-style:dashed;border-color:var(--color-primary-border);color:var(--color-primary)}.steps__item--late .steps__pill{background:var(--color-danger);border-color:var(--color-danger);color:#fff;font-weight:var(--font-weight-semibold)}.steps__item--donelate .steps__pill{background:var(--color-success);border-color:var(--color-success);color:#fff}.tabs{display:inline-flex;gap:var(--space-1);padding:var(--space-1);background:var(--color-neutral-tint);border-radius:var(--radius-md)}.tabs__item{border:none;background:transparent;height:28px;padding:0 var(--space-3);border-radius:var(--radius-sm);font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);cursor:pointer;transition:background .15s ease,color .15s ease,box-shadow .15s ease}.tabs__item:hover{color:var(--color-text)}.tabs__item--active{background:var(--color-surface);color:var(--color-text);box-shadow:var(--shadow-sm)}.tabs__item:focus-visible{outline:none;box-shadow:0 0 0 3px var(--color-primary-ring)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:8vh var(--space-4) var(--space-4);background:#18181b6b;opacity:0;visibility:hidden;transition:opacity .18s ease,visibility .18s ease}.modal-overlay.is-open{opacity:1;visibility:visible}.modal{width:100%;max-width:520px;background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-modal);transform:translateY(8px) scale(.98);transition:transform .18s ease;max-height:84vh;display:flex;flex-direction:column}.modal-overlay.is-open .modal{transform:translateY(0) scale(1)}.modal__header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border-soft)}.modal__title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.modal__body{padding:var(--space-5);display:flex;flex-direction:column;gap:var(--space-4);overflow-y:auto}.modal__footer{display:flex;justify-content:flex-end;gap:var(--space-2);padding:var(--space-4) var(--space-5);border-top:1px solid var(--color-border-soft)}.modal__row{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4)}.alert{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3) var(--space-4);border:1px solid var(--color-neutral-border);border-radius:var(--radius-md);background:var(--color-neutral-tint);color:var(--color-neutral);font-size:var(--font-size-md);line-height:1.45}.alert svg{margin-top:1px}.alert__title{font-weight:var(--font-weight-semibold);display:block}.alert--success{background:var(--color-success-tint);border-color:var(--color-success-border);color:var(--color-success)}.alert--warning{background:var(--color-warning-tint);border-color:var(--color-warning-border);color:var(--color-warning)}.alert--error{background:var(--color-danger-tint);border-color:var(--color-danger-border);color:var(--color-danger)}.toast{display:inline-flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);font-size:var(--font-size-md)}.toast--success svg{color:var(--color-success)}.toast--warning svg{color:var(--color-warning)}.toast--error svg{color:var(--color-danger)}.empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--space-2);padding:var(--space-8) var(--space-5)}.empty-state__icon{width:48px;height:48px;border-radius:var(--radius-lg);background:var(--color-neutral-tint);color:var(--color-text-muted);display:inline-flex;align-items:center;justify-content:center;margin-bottom:var(--space-2)}.empty-state__title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold)}.empty-state__text{font-size:var(--font-size-md);color:var(--color-text-muted);max-width:320px}.empty-state .btn{margin-top:var(--space-3)}.pagination{display:flex;align-items:center;gap:var(--space-1)}.pagination__item{min-width:30px;height:30px;padding:0 var(--space-2);border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;font-family:var(--font-family);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:background .15s ease,color .15s ease,border-color .15s ease}.pagination__item:hover:not(:disabled){background:var(--color-neutral-tint);color:var(--color-text)}.pagination__item:disabled{opacity:.4;cursor:not-allowed}.pagination__item--active{background:var(--color-primary-tint);border-color:var(--color-primary-border);color:var(--color-primary)}.pagination__item--active:hover:not(:disabled){background:var(--color-primary-tint);color:var(--color-primary)}.pagination__ellipsis{color:var(--color-text-muted);padding:0 var(--space-1)}.pagination__info{font-size:var(--font-size-sm);color:var(--color-text-muted);margin-right:auto}.avatar{width:32px;height:32px;border-radius:var(--radius-full);background:var(--color-primary-tint);color:var(--color-primary);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.avatar--sm{width:24px;height:24px;font-size:10px}.avatar--lg{width:44px;height:44px;font-size:var(--font-size-base)}.checkbox,.radio,.switch{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-md);color:var(--color-text);cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox input,.radio input,.switch input{-moz-appearance:none;appearance:none;-webkit-appearance:none;margin:0;cursor:pointer;flex-shrink:0;border:1px solid var(--color-border);background:var(--color-surface);transition:background .15s ease,border-color .15s ease,box-shadow .15s ease;position:relative}.checkbox input:focus-visible,.radio input:focus-visible,.switch input:focus-visible{outline:none;box-shadow:0 0 0 3px var(--color-primary-ring)}.checkbox input{width:16px;height:16px;border-radius:5px}.checkbox input:checked{background:var(--color-primary);border-color:var(--color-primary)}.checkbox input:checked:after{content:"";position:absolute;left:3px;top:4px;width:7px;height:3px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg)}.radio input{width:16px;height:16px;border-radius:var(--radius-full)}.radio input:checked{border-color:var(--color-primary);background:var(--color-surface)}.radio input:checked:after{content:"";position:absolute;top:3px;right:3px;bottom:3px;left:3px;border-radius:var(--radius-full);background:var(--color-primary)}.switch input{width:34px;height:20px;border-radius:var(--radius-full);background:var(--color-border);border-color:var(--color-border)}.switch input:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:var(--radius-full);background:var(--color-surface);box-shadow:var(--shadow-sm);transition:transform .18s ease}.switch input:checked{background:var(--color-primary);border-color:var(--color-primary)}.switch input:checked:after{transform:translate(14px)}.filters{display:flex;align-items:flex-end;gap:var(--space-3);padding:var(--space-4) var(--space-5);flex-wrap:wrap}.filters .field{flex:1 1 160px;max-width:240px}.filters__spacer{flex:1 1 auto}@media (max-width: 1140px){.filters .field{flex:1 1 140px}}.kit{display:flex;flex-direction:column;gap:var(--space-4)}.kit__heading{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold)}.kit__caption{font-size:var(--font-size-md);color:var(--color-text-muted);margin-top:var(--space-1)}.kit__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-4)}.kit__row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3)}.kit__col{display:flex;flex-direction:column;gap:var(--space-3)}.kit__label{font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.1em;color:var(--color-text-muted);font-weight:var(--font-weight-medium);margin-top:var(--space-2)}.kit__label:first-child{margin-top:0}@media (max-width: 1140px){.kit__grid{grid-template-columns:1fr}}.login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--color-bg);padding:var(--space-5)}.login__card{width:100%;max-width:372px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);padding:var(--space-7);display:flex;flex-direction:column;gap:var(--space-5)}.login__brand{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);letter-spacing:.08em}.login__title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold)}.login__sub{font-size:var(--font-size-md);color:var(--color-text-muted);margin-top:2px}.login__form{display:flex;flex-direction:column;gap:var(--space-4)}.login__hint{font-size:var(--font-size-sm);color:var(--color-text-muted);text-align:center;line-height:1.6}.sidebar__role{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:var(--radius-full);background:var(--color-primary-tint);color:var(--color-primary);font-size:10px;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.06em;margin-top:3px}.sidebar__logout{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--color-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.sidebar__logout:hover{background:var(--color-neutral-tint);color:var(--color-text)}.drawer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;background:#18181b6b;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease}.drawer-overlay.is-open{opacity:1;visibility:visible}.drawer{position:fixed;top:0;right:0;height:100vh;width:468px;max-width:92vw;background:var(--color-surface);box-shadow:var(--shadow-modal);display:flex;flex-direction:column;transform:translate(100%);transition:transform .22s ease}.drawer-overlay.is-open .drawer{transform:translate(0)}.drawer__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);padding:var(--space-5);border-bottom:1px solid var(--color-border-soft)}.drawer__id{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold)}.drawer__client{font-size:var(--font-size-md);color:var(--color-text-secondary);margin-top:3px}.drawer__body{padding:var(--space-5);overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:var(--space-6)}.drawer__footer{padding:var(--space-4) var(--space-5);border-top:1px solid var(--color-border-soft);display:flex;align-items:center;justify-content:flex-end;gap:var(--space-2)}.drawer__section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.1em;color:var(--color-text-muted);margin-bottom:var(--space-3)}.drawer__fields{display:flex;flex-direction:column;gap:var(--space-4)}.drawer__grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4)}.readout{font-size:var(--font-size-md);color:var(--color-text);padding:8px 0;min-height:20px}.stage{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) 0;border-bottom:1px solid var(--color-border-soft)}.stage:last-child{border-bottom:none}.stage__main{flex:1;min-width:0}.stage__name{font-size:var(--font-size-md);color:var(--color-text);font-weight:var(--font-weight-medium)}.stage__late{display:inline-flex;align-items:center;height:17px;margin-left:var(--space-2);padding:0 6px;border-radius:var(--radius-full);font-size:10px;font-weight:var(--font-weight-semibold);text-transform:lowercase;white-space:nowrap;vertical-align:middle}.stage__late--overdue{background:var(--color-danger-tint);color:var(--color-danger)}.stage__late--doneLate{background:var(--color-warning-tint);color:var(--color-warning)}.ingest__endpoint{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}.ingest__url{flex:1;min-width:240px;padding:10px var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--font-size-md);color:var(--color-text);word-break:break-all}.ingest__pre{margin:0;padding:var(--space-3);border:1px solid var(--color-border-soft);border-radius:var(--radius-md);background:var(--color-bg);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--font-size-sm);line-height:1.5;color:var(--color-text-secondary);overflow:auto;max-height:420px;white-space:pre-wrap;word-break:break-word}.ingest__hint{margin-top:var(--space-3);font-size:var(--font-size-sm);color:var(--color-text-muted)}.ingest__hint code{font-family:ui-monospace,monospace}.ingest__list{display:flex;flex-direction:column}.ingest{border-bottom:1px solid var(--color-border-soft)}.ingest:last-child{border-bottom:none}.ingest__head{width:100%;display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-5);border:none;background:transparent;cursor:pointer;text-align:left;font-family:var(--font-family);font-size:var(--font-size-md);color:var(--color-text-secondary);transition:background .12s ease}.ingest__head:hover{background:var(--color-bg)}.ingest__id{font-weight:var(--font-weight-semibold);color:var(--color-text);min-width:42px}.ingest__ts{font-size:var(--font-size-sm);color:var(--color-text-muted);white-space:nowrap}.ingest__method{font-size:10px;font-weight:var(--font-weight-semibold);padding:2px 6px;border-radius:var(--radius-sm);background:var(--color-primary-tint);color:var(--color-primary)}.ingest__path{font-family:ui-monospace,monospace;font-size:var(--font-size-sm);white-space:nowrap}.ingest__meta{font-size:var(--font-size-xs);color:var(--color-text-muted);white-space:nowrap}.ingest__preview{flex:1;min-width:0;font-family:ui-monospace,monospace;font-size:var(--font-size-xs);color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ingest__body{padding:0 var(--space-5) var(--space-4);display:flex;flex-direction:column;gap:var(--space-3)}.ingest__summary{font-size:var(--font-size-sm);color:var(--color-text-muted);cursor:pointer;margin-bottom:var(--space-2)}.stagebars{display:flex;flex-direction:column;gap:var(--space-3)}.stagebar{display:grid;grid-template-columns:130px 1fr 34px 110px;align-items:center;gap:var(--space-3)}.stagebar__name{font-size:var(--font-size-md);color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stagebar__track{height:8px;border-radius:var(--radius-full);background:var(--color-neutral-tint);overflow:hidden}.stagebar__fill{height:100%;border-radius:var(--radius-full);background:var(--color-danger);min-width:2px;transition:width .2s ease}.stagebar__count{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-danger);text-align:right;font-variant-numeric:tabular-nums}.stagebar__days{font-size:var(--font-size-xs);color:var(--color-text-muted);white-space:nowrap;font-variant-numeric:tabular-nums}@media (max-width: 1140px){.stagebar{grid-template-columns:110px 1fr 30px}.stagebar__days{display:none}}.stage__plan{font-size:var(--font-size-xs);color:var(--color-text-muted);margin-top:2px}.stage__toggle{flex-shrink:0;width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border:1.5px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}.stage__toggle:hover:not(:disabled){border-color:var(--color-primary)}.stage__toggle:disabled{cursor:not-allowed}.stage__toggle--done{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.stage--milestone .stage__name{color:var(--color-text-secondary)}.numfield{display:inline-flex;align-items:center;gap:var(--space-2)}.numfield__input{width:72px;height:32px;padding-inline:var(--space-2);text-align:right;font-variant-numeric:tabular-nums}.numfield__unit{font-size:var(--font-size-sm);color:var(--color-text-muted);white-space:nowrap}.offset{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.offset__select{height:32px;width:auto;padding-inline:var(--space-2)}.offset__preview{font-size:var(--font-size-sm);font-variant-numeric:tabular-nums;color:var(--color-text-muted);background:var(--color-bg);border:1px solid var(--color-border-soft);border-radius:var(--radius-sm);padding:2px var(--space-2);white-space:nowrap}.rowdel{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.rowdel:hover{background:var(--color-danger-tint);border-color:var(--color-danger-border);color:var(--color-danger)}.tag-muted{font-size:var(--font-size-xs);color:var(--color-text-muted)}.table__muted{color:var(--color-text-muted)}.table__step-head{text-align:center;white-space:nowrap;font-size:var(--font-size-xs);letter-spacing:.02em}.table__step{text-align:center;padding-inline:4px}.table__step .steps__item{display:inline-flex}.table--planfact td{vertical-align:middle}.pf{text-align:center;white-space:nowrap;font-size:11px;font-variant-numeric:tabular-nums;padding:4px 6px;border-radius:var(--radius-sm)}.pf__plan{color:var(--color-text-muted)}.pf__arrow{margin:0 3px;color:var(--color-text-muted);opacity:.6}.pf__fact{font-weight:var(--font-weight-semibold)}.pf__delta{margin-left:4px;padding:0 4px;border-radius:var(--radius-full);background:#0000000f;font-size:10px}.pf--ontime .pf__fact{color:var(--color-success)}.pf--donelate .pf__fact{color:var(--color-warning)}.pf--late .pf__fact{color:var(--color-danger)}.pf--pending .pf__fact{color:var(--color-text-muted)}.pf--na{opacity:.45}.pf--late{background:var(--color-danger-tint)}.pf--donelate{background:var(--color-warning-tint)}.pf__legend{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border-soft);font-size:var(--font-size-sm);color:var(--color-text-secondary)}.pf__legend-item{display:inline-flex;align-items:center;gap:var(--space-2)}.pf__legend-note{margin-left:auto;color:var(--color-text-muted)}.pf__chip{width:12px;height:12px;border-radius:var(--radius-sm);border:1px solid var(--color-border)}.pf__chip.pf--ontime{background:var(--color-success);border-color:var(--color-success)}.pf__chip.pf--donelate{background:var(--color-warning);border-color:var(--color-warning)}.pf__chip.pf--late{background:var(--color-danger);border-color:var(--color-danger)}.pf__chip.pf--pending{background:var(--color-neutral-tint)}.pf__help p{margin:0 0 var(--space-2);color:var(--color-text-secondary);font-size:var(--font-size-sm)}.pf__help code{background:var(--color-bg);border:1px solid var(--color-border-soft);border-radius:var(--radius-sm);padding:0 4px}.erp-spec__steps{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-2)}.erp-spec__step{display:inline-flex;align-items:baseline;gap:6px;padding:3px var(--space-2);border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-bg);font-size:var(--font-size-sm);color:var(--color-text-secondary)}.erp-spec__rules{margin:var(--space-4) 0 0;padding-left:var(--space-4);color:var(--color-text-secondary);font-size:var(--font-size-sm)}.erp-spec__rules li{margin-bottom:var(--space-2)}.row--muted td{opacity:.5}.combo{position:relative;display:block}.combo__input{padding-right:32px}.combo__toggle{position:absolute;top:50%;right:6px;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-muted);cursor:pointer;transition:color .15s ease,transform .15s ease}.combo__toggle:hover{color:var(--color-text-secondary)}.combo--open .combo__toggle{transform:translateY(-50%) rotate(180deg)}.combo__list{position:absolute;z-index:50;top:calc(100% + 4px);left:0;right:0;max-height:240px;overflow-y:auto;margin:0;padding:4px;list-style:none;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:0 8px 24px #18181b1a}.combo--up .combo__list{top:auto;bottom:calc(100% + 4px)}.combo__option{display:block;width:100%;padding:7px var(--space-2);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text);font-size:var(--font-size-md);text-align:left;cursor:pointer}.combo__option--active{background:var(--color-bg)}.combo__option--selected{color:var(--color-primary);font-weight:var(--font-weight-medium)}.combo__empty{padding:8px var(--space-2);color:var(--color-text-muted);font-size:var(--font-size-sm)}.subchips{display:inline-grid;grid-template-columns:repeat(2,max-content);gap:2px 4px;vertical-align:middle}.subchip{display:inline-flex;align-items:center;height:17px;padding:0 5px;border:1px solid transparent;border-radius:var(--radius-full);background:var(--color-neutral-tint);color:var(--color-text-secondary);font-size:10px;font-weight:var(--font-weight-medium);line-height:1;white-space:nowrap;font-variant-numeric:tabular-nums}.subchip__tip{font-weight:var(--font-weight-semibold);margin-right:3px}.subchips:has(>:only-child){grid-template-columns:max-content}.subchip__date{font-variant-numeric:tabular-nums}.subchip--done{background:var(--color-success);border-color:var(--color-success);color:#fff}.subchip--late{background:var(--color-danger);border-color:var(--color-danger);color:#fff;font-weight:var(--font-weight-semibold)}.subchip--pending{background:var(--color-neutral-tint);color:var(--color-text-secondary)}.subchip--na{background:var(--color-primary-tint);border-style:dashed;border-color:var(--color-primary-border);color:var(--color-primary)}.subchip--more{background:transparent;border-color:var(--color-border);color:var(--color-text-muted)}.table__teh-name{display:block;max-width:90px;margin:2px auto 0;font-size:10px;line-height:1.2;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.table__step-head--plan{color:var(--color-success)}.table__step--plan .steps__pill{border-color:var(--color-success)}.steps__pill--calc{text-decoration:underline dotted;text-underline-offset:2px}.stage--member{padding-left:var(--space-4)}.stage--member .stage__name{color:var(--color-text-secondary);font-weight:var(--font-weight-regular)}.stage--member .stage__plan{color:var(--color-text-muted)}.subtable-wrap{overflow-x:auto}.subtable{width:100%;border-collapse:collapse;font-size:var(--font-size-sm)}.subtable th{padding:0 var(--space-2) var(--space-2);text-align:left;font-size:10px;font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-muted);border-bottom:1px solid var(--color-border);white-space:nowrap}.subtable td{height:34px;padding:0 var(--space-2);border-bottom:1px solid var(--color-border-soft);color:var(--color-text-secondary);white-space:nowrap}.subtable tbody tr:last-child td{border-bottom:none}.subtable th:first-child,.subtable td:first-child{padding-left:0}.subtable th:last-child,.subtable td:last-child{padding-right:0;text-align:right}.subtable__tip{color:var(--color-text);font-weight:var(--font-weight-medium)}.subtable__date{height:28px;max-width:132px;padding-inline:6px;font-size:var(--font-size-sm)}.table__expand-cell{display:inline-flex;align-items:center;gap:4px}.table__expand{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex-shrink:0;padding:0;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.table__expand:hover{background:var(--color-primary-tint);color:var(--color-primary)}.table__expand--empty{cursor:default;pointer-events:none}.table__subrow>td{background:var(--color-bg);color:var(--color-text-secondary)}.table__subrow:hover>td{background:var(--color-primary-tint)}.table__subrow-id{position:relative}.table__subrow-mark{display:inline-flex;align-items:center;margin-left:22px;padding-left:var(--space-2);border-left:2px solid var(--color-primary-border);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-primary)}
