:root{--canvas: #f8f9f6;--surface: #ffffff;--surface-sunk: #f2f5f1;--ink: #17231e;--muted: #63716a;--accent: #326b56;--accent-ink: #ffffff;--accent-soft: #e8f2ec;--border: #e1e8e2;--danger: #b33a3a;--danger-soft: #fbeeee;--warning: #a3681d;--warning-soft: #fbf3e6;--success: #2f7a4f;--success-soft: #e9f5ee;--info-soft: #eef3f8;--info: #3b5f80;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 20px;--radius-pill: 999px;--shadow: 0 8px 30px rgba(20, 40, 30, .07);--shadow-sm: 0 1px 3px rgba(20, 40, 30, .06);--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 24px;--s6: 32px;--s7: 48px;--rail: 232px;--topbar: 64px;--touch: 44px;--font: Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font);font-size:15px;line-height:1.45;color:var(--ink);background:var(--canvas)}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--accent)}h1{font-size:30px;letter-spacing:-.5px;line-height:1.15;margin:var(--s1) 0 var(--s2)}h2{font-size:18px;margin:0}p{margin:0 0 var(--s3)}:focus-visible{outline:3px solid var(--accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.skip-link{position:absolute;left:-999px;top:var(--s2);background:var(--surface);padding:var(--s2) var(--s3);z-index:50;border-radius:var(--radius-sm)}.skip-link:focus{left:var(--s2)}.muted{color:var(--muted)}.eyebrow{font-size:11px;font-weight:700;letter-spacing:1.6px;color:var(--accent);margin:0}.stack{display:flex;flex-direction:column;gap:var(--s4)}.row-gap{display:flex;gap:var(--s2);flex-wrap:wrap;align-items:center}.pad{padding:var(--s4)}.ok{color:var(--success)}.shell{min-height:100vh;display:grid;grid-template-columns:var(--rail) minmax(0,1fr)}.rail{position:sticky;top:0;height:100vh;background:var(--surface);border-right:1px solid var(--border);padding:var(--s5) var(--s3);display:flex;flex-direction:column;gap:var(--s1)}.brand{font-size:20px;font-weight:700;color:var(--accent);margin:0 var(--s3) var(--s6)}.brand span{font-weight:400;color:var(--muted)}.rail-link{display:flex;align-items:center;gap:var(--s3);min-height:var(--touch);padding:0 var(--s3);border:0;border-radius:var(--radius-md);background:transparent;color:var(--muted);text-decoration:none;cursor:pointer;text-align:left;width:100%}.rail-link:hover{background:var(--surface-sunk);color:var(--ink)}.rail-link.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.rail-foot{margin-top:auto;display:flex;flex-direction:column;gap:var(--s1)}.rail-foot small{color:var(--muted);padding:0 var(--s3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shell-main{min-width:0;display:flex;flex-direction:column}.topbar{height:var(--topbar);display:flex;align-items:center;gap:var(--s3);padding:0 var(--s6);background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.brand-compact,.topbar-signout{display:none}.switcher select{min-height:40px;max-width:320px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);padding:0 var(--s3)}.content{width:100%;max-width:1600px;margin:0 auto;padding:var(--s6);display:flex;flex-direction:column;gap:var(--s4)}.bottom-nav{display:none}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);min-height:var(--touch);padding:0 var(--s4);border-radius:var(--radius-md);border:1px solid var(--border);background:var(--surface);color:var(--ink);font-weight:600;text-decoration:none;cursor:pointer;white-space:nowrap}.btn:hover{background:var(--surface-sunk)}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn-primary:hover{background:var(--accent);filter:brightness(1.08)}.btn-quiet{border-color:transparent;background:transparent}.btn-destructive{background:var(--danger);border-color:var(--danger);color:#fff}.btn:disabled{opacity:.5;cursor:not-allowed;filter:none}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.link{border:0;background:none;padding:var(--s2) 0;color:var(--accent);cursor:pointer;text-decoration:underline;min-height:var(--touch)}.field{display:flex;flex-direction:column;gap:var(--s1);min-width:0}.field label{font-size:13px;font-weight:600}.field .req{color:var(--danger)}.field input,.field select,.search input,.inline-select select,.mapping-row select{min-height:var(--touch);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);padding:0 var(--s3);width:100%;min-width:0}.field input[aria-invalid=true]{border-color:var(--danger)}.field-hint{color:var(--muted);font-size:12px}.field-error{color:var(--danger);font-size:12px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:var(--s5);display:flex;flex-direction:column;gap:var(--s4);min-width:0}.card.flush{padding:0;overflow:hidden}.card-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);flex-wrap:wrap}.card-head h2{display:flex;align-items:center;gap:var(--s2)}.alert{display:flex;gap:var(--s2);align-items:flex-start;padding:var(--s3);border-radius:var(--radius-md);font-size:14px}.alert svg{flex-shrink:0;margin-top:2px}.alert-error{background:var(--danger-soft);color:var(--danger)}.alert-warning{background:var(--warning-soft);color:var(--warning)}.alert-success{background:var(--success-soft);color:var(--success)}.alert-info{background:var(--info-soft);color:var(--info)}.page-header{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--s4);flex-wrap:wrap}.back-link{display:inline-flex;align-items:center;gap:var(--s1);color:var(--muted);text-decoration:none;font-size:14px;min-height:var(--touch);align-self:flex-start}.empty{text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--s3);padding:var(--s7) var(--s4);background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius-lg)}.empty p{color:var(--muted);max-width:420px}.card .empty{border:0}.empty-icon{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent)}.skeleton{display:flex;flex-direction:column;gap:var(--s3)}.skeleton span{height:18px;border-radius:var(--radius-sm);background:linear-gradient(90deg,var(--surface-sunk),var(--border),var(--surface-sunk));background-size:200% 100%;animation:shimmer 1.2s infinite}.skeleton span:first-child{height:32px;width:40%}@keyframes shimmer{to{background-position:-200% 0}}.pill{display:inline-flex;align-items:center;gap:var(--s1);padding:2px 10px;border-radius:var(--radius-pill);font-size:12px;font-weight:600;border:1px solid transparent;white-space:nowrap}.pill-fulfillment{background:var(--accent-soft);color:var(--accent)}.pill-exception{background:var(--danger-soft);color:var(--danger);border-color:var(--danger)}.pill-neutral{background:var(--surface-sunk);color:var(--muted)}.center-card{width:min(440px,calc(100% - 2 * var(--s4)));margin:10vh auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:var(--s6);display:flex;flex-direction:column;gap:var(--s3)}.center-card .brand{margin:0}.auth-links{display:flex;justify-content:space-between;flex-wrap:wrap;gap:var(--s2)}.search{position:relative;display:flex;align-items:center;max-width:420px;flex:1 1 240px}.search svg{position:absolute;left:var(--s3);color:var(--muted)}.search input{padding-left:36px}.project-grid{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--s4)}.project-card{display:flex;flex-direction:column;gap:var(--s1);padding:var(--s5);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);color:var(--ink);text-decoration:none;min-height:120px}.project-card:hover{box-shadow:var(--shadow);border-color:var(--accent-soft)}.project-card span,.project-card small{color:var(--muted)}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--s4)}.form-actions{display:flex;justify-content:flex-end;gap:var(--s2);flex-wrap:wrap}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--s4)}.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--s4)}.stat p{color:var(--muted);font-size:13px;margin:0 0 var(--s1)}.stat strong{font-size:24px}.card .stat{background:var(--surface-sunk);border:0}.toolbar{display:flex;gap:var(--s3);flex-wrap:wrap;align-items:center}.inline-select{min-width:160px}.check{display:inline-flex;align-items:center;gap:var(--s2);min-height:var(--touch);font-size:14px}.check input{width:18px;height:18px;accent-color:var(--accent)}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.grid{width:100%;border-collapse:separate;border-spacing:0;font-size:14px}.grid th{position:sticky;top:0;background:var(--surface-sunk);color:var(--muted);font-size:12px;font-weight:600;text-align:left;padding:var(--s3) var(--s4);white-space:nowrap;border-bottom:1px solid var(--border)}.grid td{padding:var(--s3) var(--s4);border-bottom:1px solid var(--border);white-space:nowrap;vertical-align:top}.grid td.wrap{white-space:normal;min-width:220px}.grid .num{text-align:right;font-variant-numeric:tabular-nums}.grid .sticky-col{position:sticky;left:0;background:var(--surface);z-index:1}.grid th.sticky-col{background:var(--surface-sunk);z-index:2}.grid tbody tr:hover td{background:var(--canvas)}.item-cards{list-style:none;margin:0;padding:0}.item-card{display:flex;justify-content:space-between;gap:var(--s3);align-items:flex-start;padding:var(--s4);border-bottom:1px solid var(--border);color:var(--ink);text-decoration:none}.item-card div{display:flex;flex-direction:column;gap:2px;min-width:0}.item-card span{color:var(--muted);font-size:13px}.mobile-only{display:none}.detail-layout{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:var(--s4);align-items:start}.sticky-actions{grid-column:1 / -1;display:flex;justify-content:flex-end;align-items:center;gap:var(--s3);flex-wrap:wrap}.kv{margin:0;display:flex;flex-direction:column;gap:var(--s3)}.kv dt{font-size:12px;color:var(--muted)}.kv dd{margin:0;overflow-wrap:anywhere}.stepper{list-style:none;padding:0;margin:0;display:flex;gap:var(--s2);flex-wrap:wrap}.stepper li{display:flex;align-items:center;gap:var(--s2);padding:var(--s2) var(--s3);border-radius:var(--radius-pill);background:var(--surface);border:1px solid var(--border);color:var(--muted);font-size:13px}.stepper li span{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--surface-sunk);font-size:12px;font-weight:700}.stepper li.current{border-color:var(--accent);color:var(--accent);font-weight:600}.stepper li.current span,.stepper li.done span{background:var(--accent);color:var(--accent-ink)}.dropzone{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--s3);padding:var(--s7) var(--s4);border:2px dashed var(--border);border-radius:var(--radius-lg);background:var(--canvas);cursor:pointer;color:var(--accent)}.dropzone span{color:var(--muted);font-size:14px;max-width:420px}.dropzone input{max-width:260px;color:var(--muted)}.mapping-list{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.mapping-row{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1.5fr) minmax(200px,1fr);gap:var(--s4);align-items:center;padding:var(--s3) var(--s4);border-bottom:1px solid var(--border)}.mapping-row:last-child{border-bottom:0}.mapping-row>span:first-child{display:flex;flex-direction:column;align-items:flex-start;gap:var(--s1)}.mapping-head{background:var(--surface-sunk);font-size:12px;font-weight:600;color:var(--muted)}.issue-list{list-style:none;margin:0;padding:0;border:1px solid var(--border);border-radius:var(--radius-md)}.issue-list li{padding:var(--s3) var(--s4);border-bottom:1px solid var(--border)}.issue-list li:last-child{border-bottom:0}.issue-list p{margin:var(--s1) 0 0;font-size:14px}.issue-head{display:flex;justify-content:space-between;align-items:center;gap:var(--s2);flex-wrap:wrap}.samples{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:1023px){.shell{grid-template-columns:72px minmax(0,1fr)}.rail{padding:var(--s4) var(--s2);align-items:center}.rail .brand,.rail-foot small{display:none}.rail-link{width:var(--touch);padding:0;justify-content:center;font-size:0;gap:0}.content{padding:var(--s5)}.topbar{padding:0 var(--s5)}.detail-layout{grid-template-columns:1fr}}@media(max-width:767px){.shell{display:block;padding-bottom:calc(64px + env(safe-area-inset-bottom))}.rail{display:none}.topbar{padding:0 var(--s4);height:56px}.brand-compact{display:block;margin:0;font-size:17px}.switcher{flex:1;min-width:0}.switcher select{width:100%;max-width:none}.topbar-signout{display:inline-flex;padding:0 var(--s2)}.content{padding:var(--s4)}h1{font-size:24px}.page-header{align-items:flex-start}.page-header .row-gap{width:100%}.page-header .row-gap .btn{flex:1}.bottom-nav{display:flex;position:fixed;inset:auto 0 0 0;z-index:20;background:var(--surface);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom)}.bottom-nav a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:60px;font-size:11px;color:var(--muted);text-decoration:none}.bottom-nav a.active{color:var(--accent);font-weight:600}.desktop-only{display:none}.mobile-only{display:block}.card{padding:var(--s4)}.stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s2)}.stat{padding:var(--s3)}.stat p{font-size:11px}.stat strong{font-size:16px;overflow-wrap:anywhere}.form-actions .btn{flex:1}.mapping-head{display:none}.mapping-row{grid-template-columns:1fr;gap:var(--s2)}.sticky-actions{position:sticky;bottom:calc(64px + env(safe-area-inset-bottom));background:var(--surface);padding:var(--s3);margin:0 calc(-1 * var(--s4));border-top:1px solid var(--border)}.sticky-actions .btn{flex:1}.center-card{margin:var(--s5) auto;padding:var(--s5)}}
