:root{font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#1a1a1a}*,*:before,*:after{box-sizing:border-box}body{margin:0;min-height:100vh;background:#f5f5f4}body,button,input,select,textarea{font-family:inherit}.login-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem}.login-card{width:min(360px,100%);background:#fff;border-radius:12px;padding:2rem 1.75rem;border:1px solid #e5e5e5;display:flex;flex-direction:column;gap:.2rem}.login-brand{display:flex;align-items:center;gap:.6rem;margin-bottom:.75rem}.login-logo{width:2.4rem;height:2.4rem;border-radius:.4rem}.login-logo-text{font-weight:600;font-size:1.1rem;line-height:1;margin-top:.15rem;color:#1a1a1a;margin-bottom:1.25rem}.login-card h1{margin:0;font-size:1.2rem;font-weight:600;color:#1a1a1a}.login-card p{margin:.2rem 0 0;color:#737373;font-size:.85rem;line-height:1.5}.google-button{margin-top:1.25rem;min-height:44px}.login-config-alert{margin-top:1.25rem;padding:.9rem 1rem;border:1px solid #fca5a5;border-radius:10px;background:#fff5f5;color:#991b1b;display:flex;flex-direction:column;gap:.3rem}.login-config-alert strong{font-size:.9rem;font-weight:600}.login-config-alert span{font-size:.82rem;line-height:1.45}.dash{min-height:100vh;display:flex;flex-direction:column}.navbar{background:#fff;border-bottom:1px solid #e5e5e5;padding:0 1.5rem;height:3.25rem;display:flex;align-items:center;justify-content:space-between;position:-webkit-sticky;position:sticky;top:0;z-index:10}.nav-logo{width:1.6rem;height:1.6rem;border-radius:.25rem}.nav-brand{font-size:.9rem;color:#737373;font-weight:400}.nav-brand-section{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.nav-center{display:flex;justify-content:center;gap:1rem;flex-shrink:0}.nav-tab{font:inherit;background:none;border:none;color:#a3a3a3;font-size:.8rem;font-weight:500;padding:.25rem 0;cursor:pointer;border-bottom:2px solid transparent;transition:color .1s}.nav-tab:hover{color:#525252}.nav-tab.active{color:#1a1a1a;border-bottom-color:#1a1a1a}.nav-right{display:flex;align-items:center;justify-content:flex-end;gap:.75rem;flex:1;min-width:0}.nav-user{display:flex;align-items:center;gap:.5rem}.avatar{width:28px;height:28px;border-radius:999px;object-fit:cover}.avatar-fallback{background:#e5e5e5;color:#525252;font-weight:600;font-size:.65rem;display:flex;align-items:center;justify-content:center}.nav-name{font-size:.82rem;font-weight:500;color:#1a1a1a}.btn-ghost{font:inherit;background:none;border:none;color:#a3a3a3;font-size:.78rem;font-weight:500;padding:.25rem 0;cursor:pointer}.btn-ghost:hover{color:#525252}.btn-ghost:focus-visible{outline:2px solid #6366f1;outline-offset:2px;border-radius:4px}.dash-content{max-width:860px;width:100%;margin:0 auto;padding:2rem 1.5rem 4rem}.dash-header{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem}.dash-heading{margin:0;font-size:1rem;font-weight:600;color:#1a1a1a}.dash-count{font-size:.7rem;font-weight:600;background:#e5e5e5;color:#525252;padding:.1rem .45rem;border-radius:999px}.search-input{font:inherit;width:100%;padding:.55rem .85rem;border:1px solid #e5e5e5;border-radius:8px;font-size:.85rem;color:#1a1a1a;background:#fff;outline:none;margin-bottom:1.25rem;transition:border-color .12s}.search-input::placeholder{color:#a3a3a3}.search-input:focus{border-color:#a3a3a3}.no-results{color:#a3a3a3;font-size:.85rem;padding:.5rem 0}.app-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:.75rem}.app-card{font:inherit;text-align:left;cursor:pointer;background:#fff;border:1px solid #e5e5e5;border-radius:10px;padding:1.15rem;display:flex;flex-direction:column;gap:.5rem;transition:border-color .12s,box-shadow .12s,transform .12s}.app-card:hover{border-color:#d4d4d4;box-shadow:0 2px 8px #0000000d;transform:translateY(-1px)}.app-card-muted{opacity:.55;filter:grayscale(25%)}.app-card:active{transform:translateY(0);box-shadow:none}.app-card-icon{width:36px;height:36px;border-radius:8px;background:#f5f5f4;border:1px solid #e5e5e5;display:flex;align-items:center;justify-content:center;color:#525252;flex-shrink:0}.app-card h3{margin:0;font-size:.88rem;font-weight:600;color:#1a1a1a}.app-card p{margin:0;font-size:.8rem;color:#737373;line-height:1.45}.badge{align-self:flex-start;padding:.12rem .45rem;border-radius:999px;font-size:.6rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:#f5f5f4;color:#737373;border:1px solid #e5e5e5}.admin-sections{display:flex;flex-direction:column;gap:1.25rem}.admin-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden}.admin-card-header{display:flex;align-items:center;gap:.5rem;padding:.85rem 1.15rem;border-bottom:1px solid #f3f4f6;background:#fafafa}.admin-card-title{margin:0;font-size:.82rem;font-weight:700;color:#374151;text-transform:uppercase;letter-spacing:.04em}.admin-card-body{padding:1rem 1.15rem;display:flex;flex-direction:column;gap:.75rem}.admin-field{display:flex;flex-direction:column;gap:.3rem}.admin-field-label{font-size:.72rem;font-weight:600;color:#6b7280;text-transform:uppercase;letter-spacing:.04em}.admin-row{display:flex;gap:.75rem}.visibility-toggle{display:inline-flex;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;background:#f9fafb}.visibility-opt{font:inherit;font-size:.78rem;font-weight:500;padding:.4rem .85rem;border:none;background:transparent;color:#6b7280;cursor:pointer;transition:all .12s;border-right:1px solid #e5e7eb}.visibility-opt:last-child{border-right:none}.visibility-opt:hover{background:#f3f4f6;color:#374151}.visibility-opt-active{background:#111827;color:#fff}.visibility-opt-active:hover{background:#1f2937;color:#fff}.admin-user-list{display:flex;flex-direction:column}.admin-user-item{border-bottom:1px solid #f3f4f6}.admin-user-item:last-child{border-bottom:none}.admin-user-expanded{background:#f9fafb}.admin-user-row{display:flex;align-items:center;gap:.75rem;width:100%;padding:.65rem 1.15rem;background:none;border:none;cursor:pointer;text-align:left;font:inherit;transition:background .1s}.admin-user-row:hover{background:#f9fafb}.admin-user-identity{display:flex;align-items:center;gap:.6rem;flex:1;min-width:0}.admin-avatar{width:32px;height:32px;border-radius:999px;object-fit:cover;flex-shrink:0}.admin-avatar-placeholder{display:flex;align-items:center;justify-content:center;background:#e5e7eb;color:#6b7280;font-size:.75rem;font-weight:700}.admin-user-text{display:flex;flex-direction:column;min-width:0}.admin-user-name{font-size:.82rem;font-weight:600;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-user-email{font-size:.72rem;color:#9ca3af;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-user-actions{display:flex;align-items:center;gap:.75rem;padding:.5rem 1.15rem .75rem;flex-wrap:wrap}.admin-action-group{display:flex;align-items:center;gap:.35rem}.admin-action-label{font-size:.68rem;font-weight:600;color:#9ca3af;text-transform:uppercase;letter-spacing:.03em;margin-right:.15rem}.admin-project-list{display:flex;flex-direction:column}.admin-project-item{display:flex;align-items:center;padding:.65rem 1.15rem;border-bottom:1px solid #f3f4f6}.admin-project-item:last-child{border-bottom:none}.admin-project-info{display:flex;flex-direction:column;flex:1;min-width:0}.admin-project-name{font-size:.85rem;font-weight:600;color:#111827}.admin-project-slug{font-size:.72rem;color:#9ca3af}.status{font-size:.85rem;margin:0;padding:.25rem 0}.status.error{color:#dc2626}.status.info{color:#0284c7}.route-error-shell{min-height:calc(100vh - 3.25rem);display:flex;align-items:center;justify-content:center;padding:2rem 1.5rem}.route-error-card{width:min(680px,100%);background:linear-gradient(180deg,#fff,#fcfcfb);border:1px solid #e5e7eb;border-radius:18px;padding:1.4rem;box-shadow:0 20px 45px #0f172a12;display:grid;gap:.9rem}.route-error-eyebrow{font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#b45309}.route-error-title{margin:0;font-size:1.5rem;line-height:1.1;color:#111827}.route-error-message{margin:0;font-size:.92rem;line-height:1.6;color:#6b7280}.route-error-actions{display:flex;flex-wrap:wrap;gap:.65rem}.route-error-link{text-decoration:none}.route-error-context{display:flex;flex-wrap:wrap;gap:.5rem}.route-error-debug{margin:0;padding:.85rem;border-radius:12px;background:#111827;color:#e5e7eb;font-size:.76rem;line-height:1.5;overflow:auto;white-space:pre-wrap;word-break:break-word}.factory-nav{display:flex;flex-wrap:wrap;gap:.45rem;margin-bottom:1rem;padding:.4rem;border:1px solid #e5e7eb;border-radius:12px;background:#fafaf9}.factory-nav-link{display:inline-flex;align-items:center;justify-content:center;min-height:2.25rem;padding:0 .8rem;border-radius:8px;text-decoration:none;color:#6b7280;font-size:.82rem;font-weight:600;transition:background .12s,color .12s,border-color .12s}.factory-nav-link:hover{background:#f3f4f6;color:#111827}.factory-nav-link.active{background:#111827;color:#fff}.role-badge{font-size:.6rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding:.1rem .4rem;border-radius:999px;background:#f5f5f4;color:#737373;border:1px solid #e5e5e5}.role-badge.role-owner{background:#fef3c7;color:#92400e;border-color:#fde68a}.role-badge.role-admin{background:#dbeafe;color:#1e40af;border-color:#bfdbfe}.role-badge.role-member{background:#f5f5f4;color:#737373;border-color:#e5e5e5}.role-badge.role-viewer{background:#f5f3ff;color:#6d28d9;border-color:#ddd6fe}.role-badge.role-editor{background:#dcfce7;color:#166534;border-color:#bbf7d0}.role-badge.role-manager{background:#fee2e2;color:#991b1b;border-color:#fecaca}.role-badge.role-none{background:#f5f5f4;color:#737373;border-color:#e5e5e5}.user-list{display:flex;flex-direction:column;gap:.5rem}.user-row{background:#fff;border:1px solid #e5e5e5;border-radius:10px;overflow:hidden}.user-row-main{display:flex;align-items:center;gap:.75rem;padding:.85rem 1rem;cursor:pointer}.user-row-main:hover{background:#fafafa}.user-row-info{flex:1;min-width:0;display:flex;align-items:center;gap:.6rem}.avatar-sm{width:24px;height:24px;border-radius:999px;object-fit:cover;flex-shrink:0}.user-email{display:block;font-size:.75rem;color:#737373}.user-row-info strong{display:block;font-size:.85rem;font-weight:600}.user-row-info span{font-size:.75rem;color:#737373}.expand-arrow{color:#a3a3a3;font-size:.7rem}.user-row-detail{padding:.75rem 1rem 1rem;display:flex;flex-direction:column;gap:.75rem;border-top:1px solid #f0f0f0}.perm-group{display:flex;flex-direction:column;gap:.35rem}.perm-label{font-size:.75rem;font-weight:600;color:#525252;text-transform:uppercase;letter-spacing:.04em}.perm-hint{font-size:.78rem;color:#a3a3a3;margin:0}.perm-row{display:flex;gap:.35rem}.role-btn{font:inherit;font-size:.78rem;font-weight:500;padding:.3rem .75rem;border-radius:6px;border:1px solid #e5e5e5;background:#fff;cursor:pointer;color:#525252;transition:all .1s}.role-btn:hover{border-color:#d4d4d4}.role-btn.active{background:#1a1a1a;color:#fff;border-color:#1a1a1a}.role-select{font:inherit;width:100%;border-radius:8px;border:1px solid #e5e5e5;padding:.45rem .75rem;background:#fff;color:#1a1a1a;-webkit-appearance:none;-moz-appearance:none;appearance:none}.role-select:focus{outline:none;border-color:#a3a3a3;box-shadow:0 0 0 3px #3b82f626}.btn-danger{font:inherit;font-size:.78rem;font-weight:500;padding:.35rem .75rem;border-radius:6px;border:1px solid #fecaca;background:#fff;color:#dc2626;cursor:pointer;align-self:flex-start;transition:all .1s}.btn-danger:hover{background:#fef2f2}.upload-actions{display:flex;gap:.5rem;margin-bottom:1rem}.btn-primary{font:inherit;font-size:.82rem;font-weight:500;padding:.45rem 1rem;border-radius:8px;border:none;background:#1a1a1a;color:#fff;cursor:pointer;transition:background .1s}.btn-primary:hover{background:#333}.btn-primary:focus-visible{outline:2px solid #6366f1;outline-offset:2px}.btn-primary:disabled{background:#a3a3a3;cursor:not-allowed}.btn-secondary{font:inherit;font-size:.82rem;font-weight:500;padding:.45rem 1rem;border-radius:8px;border:1px solid #e5e5e5;background:#fff;color:#525252;cursor:pointer;transition:all .1s;display:inline-flex;align-items:center;gap:.35rem}.btn-secondary:hover{border-color:#d4d4d4}.btn-secondary:focus-visible{outline:2px solid #6366f1;outline-offset:2px}.btn-secondary:disabled{opacity:.5;cursor:not-allowed}.btn-sm{font-size:.75rem;padding:.3rem .65rem}.btn-icon{padding:.3rem .4rem;display:inline-flex;align-items:center;justify-content:center}.upload-form-card{background:#fff;border:1px solid #e5e5e5;border-radius:10px;padding:1.25rem;margin-bottom:1.25rem;display:flex;flex-direction:column;gap:.85rem}.upload-form-header{display:flex;align-items:center;justify-content:space-between}.upload-form-header h3{margin:0;font-size:.9rem;font-weight:600}.form-field{display:flex;flex-direction:column;gap:.3rem}.form-label{font-size:.75rem;font-weight:600;color:#525252;text-transform:uppercase;letter-spacing:.04em}.form-input{font:inherit;padding:.5rem .75rem;border:1px solid #e5e5e5;border-radius:8px;font-size:.85rem;color:#1a1a1a;background:#fff;outline:none;transition:border-color .12s}.form-input:focus{border-color:#a3a3a3}.form-input::placeholder{color:#a3a3a3}.drop-zone{border:2px dashed #e5e5e5;border-radius:10px;padding:2rem;display:flex;flex-direction:column;align-items:center;gap:.5rem;color:#a3a3a3;font-size:.85rem;cursor:pointer;transition:all .15s}.drop-zone:hover{border-color:#d4d4d4;background:#fafafa}.drop-zone.drag-over{border-color:#1a1a1a;background:#f5f5f4;color:#525252}.drop-zone.drop-zone-filled{border-color:#4f46e5;background:#f5f3ff;color:#4338ca}.file-list{display:flex;flex-direction:column;gap:.35rem}.upload-progress-panel{margin-top:.75rem;display:flex;flex-direction:column;gap:.35rem}.upload-progress-track{height:8px;border-radius:999px;background:#ece7df;overflow:hidden}.upload-progress-fill{height:100%;border-radius:inherit;background:linear-gradient(90deg,#111827,#3f3f46);transition:width .18s ease}.upload-progress-label{font-size:.72rem;color:#6b7280;font-weight:600}.file-item{display:flex;align-items:center;gap:.5rem;padding:.4rem .6rem;background:#f5f5f4;border-radius:6px;font-size:.8rem}.file-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#1a1a1a;font:inherit;font-weight:500;background:none;border:none;padding:0;text-align:left}.file-name-link{cursor:pointer;color:#2563eb;transition:color .12s}.file-name-link:hover{color:#1d4ed8;text-decoration:underline}.file-size{color:#a3a3a3;font-size:.75rem;flex-shrink:0}.file-meta{font-size:.65rem;color:#9ca3af;flex-shrink:0}.file-uploader{font-weight:600;color:#6b7280}.file-remove{font-size:1rem;padding:0;line-height:1}.file-status{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;flex-shrink:0}.preview-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:1.5rem}.preview-modal{background:#fff;border-radius:14px;box-shadow:0 20px 60px #00000040;max-width:960px;width:100%;max-height:85vh;display:flex;flex-direction:column;overflow:hidden}.preview-header{padding:1.25rem 1.5rem;border-bottom:1px solid #e5e7eb;flex-shrink:0}.preview-header h3{margin:0 0 .35rem;font-size:1.05rem;font-weight:700;color:#111827}.preview-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.75rem}.preview-card{border-radius:10px;border:2px solid #e5e7eb;overflow:hidden;background:#fafafa;transition:border-color .15s,box-shadow .15s;cursor:pointer;position:relative;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none}.preview-card.preview-new{border-color:#22c55e;box-shadow:0 0 0 1px #22c55e26}.preview-thumb{width:100%;aspect-ratio:8.5 / 11;object-fit:contain;background:#fff;display:block;border-bottom:1px solid #e5e7eb}.preview-info{display:flex;align-items:center;gap:.35rem;padding:.4rem .5rem .15rem;flex-wrap:wrap}.preview-page-num{font-size:.7rem;font-weight:700;color:#6b7280}.preview-type-badge{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;padding:.1rem .4rem;border-radius:4px}.badge-shop{background:#dcfce7;color:#166534}.badge-structural{background:#f3f4f6;color:#6b7280}.preview-sheet-type{font-size:.65rem;font-weight:600;color:#4b5563;background:#e5e7eb;padding:.05rem .35rem;border-radius:3px}.preview-walls{display:flex;flex-wrap:wrap;gap:.2rem;padding:.15rem .5rem}.preview-wall-tag{font-size:.58rem;font-weight:600;color:#1e40af;background:#dbeafe;padding:.05rem .3rem;border-radius:3px}.preview-file-label{font-size:.6rem;color:#9ca3af;padding:.15rem .5rem .4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.preview-actions{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid #e5e7eb;flex-shrink:0}.preview-card:hover{box-shadow:0 0 0 2px #6366f14d}.preview-card.preview-disabled{border-color:#d1d5db!important;opacity:.4;filter:grayscale(.6)}.preview-card.preview-already{border-color:#d1d5db!important;opacity:.32;filter:grayscale(1)}.preview-card.preview-replacing{border-color:#f59e0b!important;box-shadow:0 0 0 1px #f59e0b40}.preview-card.preview-dragging{opacity:.4;transform:scale(.97);box-shadow:0 4px 16px #00000026}.preview-card.preview-drag-over{border-color:#6366f1!important;box-shadow:0 0 0 2px #6366f1,0 4px 12px #6366f133;transform:scale(1.02)}.preview-checkbox{position:absolute;top:6px;left:6px;z-index:3;width:20px;height:20px;border-radius:5px;border:2px solid #d1d5db;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .12s,border-color .12s;padding:0;box-shadow:0 1px 3px #0000001f}.preview-checkbox--checked{background:#22c55e;border-color:#16a34a;color:#fff}.preview-checkbox:hover{border-color:#6366f1}.preview-checkbox--checked:hover{background:#16a34a;border-color:#15803d}.preview-already-label{position:absolute;bottom:38px;left:0;right:0;text-align:center;font-size:.6rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#9ca3af;pointer-events:none;z-index:2}.preview-replacing-badge{position:absolute;top:6px;right:6px;z-index:3;background:#f59e0b;color:#fff;font-size:.55rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:.15rem .4rem;border-radius:4px;pointer-events:none}.preview-type-btn{cursor:pointer;border:none;padding:.1rem .4rem;border-radius:4px;font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em}.preview-type-btn:hover{filter:brightness(.9);outline:1px solid currentColor}.preview-summary-excluded{color:#9ca3af;font-weight:600;font-size:.82rem}.preview-summary-already{color:#f59e0b;font-weight:600;font-size:.82rem}.preview-summary-hint{color:#9ca3af;font-weight:400;font-size:.75rem;margin-left:auto}.preview-summary-action{background:none;border:1px solid #d1d5db;border-radius:5px;padding:.2rem .55rem;font-size:.72rem;font-weight:600;color:#374151;cursor:pointer}.preview-summary-action:hover{background:#f3f4f6}.file-status-uploaded{color:#16a34a}.file-status-processing{color:#d97706}.file-status-error{color:#dc2626}.upload-page{display:flex;flex-direction:column;min-height:100%;position:relative}.upload-page-header{display:flex;align-items:center;gap:1rem;padding:0 0 1rem;border-bottom:1px solid #e5e7eb;margin-bottom:1.5rem}.upload-page-title{display:flex;align-items:baseline;gap:.75rem}.upload-page-title .dash-heading{margin:0}.upload-page-body{display:flex;flex-direction:column;gap:1.25rem;flex:1}.drop-zone-large{padding:3rem 2rem;border:2px dashed #d1d5db;border-radius:14px;text-align:center;cursor:pointer;transition:border-color .15s,background .15s;display:flex;flex-direction:column;align-items:center;gap:.6rem;background:#fafafa;color:#6b7280}.drop-zone-large:hover,.drop-zone-large.drag-over{border-color:#6366f1;background:#f5f3ff;color:#4338ca}.drop-zone-label{font-size:1rem;font-weight:600;color:inherit}.drop-zone-hint{font-size:.8rem;color:#9ca3af}.preview-page-summary{display:flex;align-items:center;gap:1.25rem;font-size:.82rem;font-weight:600;padding:.1rem 0}.preview-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:.35rem;vertical-align:middle}.preview-dot-shop{background:#22c55e}.preview-dot-struct{background:#d1d5db}.preview-summary-shop{color:#166534}.preview-summary-struct{color:#6b7280}.preview-summary-scanning{color:#9ca3af;font-weight:400;font-style:italic;margin-left:auto}.upload-page-actions{display:flex;justify-content:flex-end;gap:.75rem;padding-top:.5rem;border-top:1px solid #e5e7eb;margin-top:.5rem}.preview-grid--locked{pointer-events:none;opacity:.55}.goose-banner{border-top:1px solid #e5e7eb;padding:.75rem 0 .5rem;display:flex;flex-direction:column;align-items:center;gap:.5rem;background:#fafafa;border-radius:0 0 10px 10px}.goose-track{width:100%;height:80px;position:relative;overflow:hidden}.goose-runner{position:absolute;bottom:0;animation:run-lr 2.8s linear infinite;filter:drop-shadow(0 3px 8px rgba(0,0,0,.07))}@keyframes run-lr{0%{left:-90px}to{left:calc(100% + 10px)}}.goose{animation:goose-hop .45s ease-in-out infinite;transform-origin:50px 80px;display:block}@keyframes goose-hop{0%,to{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-7px) rotate(2deg)}}.goose-leg-l{animation:leg-l .45s ease-in-out infinite;transform-origin:40px 86px}.goose-leg-r{animation:leg-r .45s ease-in-out infinite;transform-origin:58px 86px}@keyframes leg-l{0%,to{transform:rotate(-30deg)}50%{transform:rotate(30deg)}}@keyframes leg-r{0%,to{transform:rotate(30deg)}50%{transform:rotate(-30deg)}}.upload-loading-label{font-size:.82rem;font-weight:600;color:#6b7280;letter-spacing:.04em;text-transform:uppercase;display:flex;align-items:flex-end;gap:1px}.upload-loading-dots{display:inline-flex;gap:1px;padding-bottom:1px}.upload-loading-dots span{display:inline-block;animation:dot-pop 1s ease-in-out infinite}.upload-loading-dots span:nth-child(2){animation-delay:.2s}.upload-loading-dots span:nth-child(3){animation-delay:.4s}@keyframes dot-pop{0%,to{transform:translateY(0);opacity:.35}40%{transform:translateY(-4px);opacity:1}}.conflict-warning{display:flex;align-items:flex-start;gap:.5rem;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;padding:.6rem .85rem;font-size:.8rem;color:#92400e;line-height:1.45}.conflict-warning svg{flex-shrink:0;margin-top:1px;color:#d97706}.conflict-warning--replace{background:#eff6ff;border-color:#bfdbfe;color:#1e3a5f}.conflict-warning--replace svg{color:#3b82f6}.file-item-conflict .file-name{color:#2563eb}.file-conflict-tag{font-size:.68rem;font-weight:600;background:#dbeafe;color:#1d4ed8;border-radius:4px;padding:1px 5px;white-space:nowrap;text-transform:uppercase;letter-spacing:.04em}@media(prefers-reduced-motion:reduce){.goose,.goose-leg-l,.goose-leg-r,.goose-runner,.upload-loading-dots span{animation:none}}.sets-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.set-card{background:#fff;border:1px solid #e5e5e5;border-radius:10px;overflow:hidden}.set-card-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.85rem 1rem;cursor:pointer}.set-card-header:hover{background:#fafafa}.set-card-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.15rem}.set-card-info strong{font-size:.88rem;font-weight:600}.set-meta{font-size:.75rem;color:#737373}.set-status{font-weight:600;text-transform:uppercase;letter-spacing:.03em;font-size:.7rem}.set-status-pending{color:#a3a3a3}.set-status-processing{color:#d97706}.set-status-complete{color:#16a34a}.set-status-error{color:#dc2626}.set-card-badges{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.badge-visible,.badge-vis-visible{background:#dcfce7;color:#166534;border-color:#bbf7d0}.badge-vis-hidden{background:#f5f5f4;color:#737373;border-color:#e5e5e5}.badge-vis-pending{background:#fef9c3;color:#854d0e;border-color:#fde68a}.badge-vis-on_hold{background:#fee2e2;color:#991b1b;border-color:#fecaca}.set-card-detail{padding:.75rem 1rem 1rem;border-top:1px solid #f0f0f0;display:flex;flex-direction:column;gap:.75rem}.set-detail-actions{display:flex;gap:.4rem}.draft-ready-callout{display:flex;align-items:flex-start;gap:.7rem;padding:.8rem .9rem;border:1px solid #e7dcc7;border-left:4px solid #b89a6a;border-radius:10px;background:linear-gradient(135deg,#fcf9f4fa,#f8f3eafa);box-shadow:inset 0 1px #ffffffb8,0 1px 2px #6d542c0d}.draft-ready-icon{width:1.9rem;height:1.9rem;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:#8b6b3f;background:#b89a6a1f;border:1px solid rgba(184,154,106,.2)}.draft-ready-content{display:flex;flex-direction:column;gap:.14rem;min-width:0}.draft-ready-content strong{font-size:.83rem;line-height:1.1;color:#5f4a2c}.draft-ready-content span{font-size:.78rem;line-height:1.35;color:#7b6850}.set-files-section{display:flex;flex-direction:column;gap:.35rem}.job-progress-card{border:1px solid #e5e5e5;border-radius:8px;padding:.75rem;background:#fafafa;display:flex;flex-direction:column;gap:.65rem}.progress-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;font-size:.82rem;font-weight:600}.progress-label{font-size:.75rem;color:#6b7280}.progress-bar{width:100%;height:6px;border-radius:999px;background:#e5e7eb;overflow:hidden}.progress-fill{height:100%;background:linear-gradient(90deg,#34d399,#10b981);border-radius:999px;transition:width .4s ease}.job-timeline{display:flex;flex-direction:column;gap:.65rem}.job-row{background:#fff;border:1px solid #e5e5e5;border-radius:6px;padding:.5rem .65rem}.job-row-running{border-color:#d97706;box-shadow:0 0 0 1px #d9770626}.job-row-failed{border-color:#dc2626;box-shadow:0 0 0 1px #dc262626}.job-row-complete{border-color:#16a34a}.job-row-main{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.job-row-main strong{font-size:.8rem}.job-status{padding:.1rem .5rem;border-radius:999px;font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;font-weight:600}.job-status-queued{background:#fef3c7;color:#92400e;border:1px solid #fde68a}.job-status-running{background:#ffedd5;color:#c2410c;border:1px solid #fbbf24}.job-status-complete{background:#dcfce7;color:#166534;border:1px solid #bbf7d0}.job-status-failed{background:#fee2e2;color:#991b1b;border:1px solid #fecaca}.job-row-meta{font-size:.72rem;color:#6b7280;display:flex;gap:.35rem;flex-wrap:wrap}.job-error{color:#dc2626}.vis-icon{display:inline-flex;align-items:center}.vis-icon-visible{color:#38bdf8}.vis-icon-hidden,.vis-icon-pending,.vis-icon-on_hold{color:#9ca3af}.btn-vis-toggle{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .65rem;border:1px solid #d1d5db;border-radius:6px;background:#fff;font-size:.78rem;cursor:pointer;transition:all .15s}.btn-vis-active{color:#38bdf8;border-color:#7dd3fc;background:#f0f9ff}.btn-vis-active:hover{background:#e0f2fe}.btn-vis-inactive{color:#9ca3af;border-color:#d1d5db}.btn-vis-inactive:hover{background:#f9fafb;color:#6b7280}.set-section{margin-top:.5rem;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.set-section-header{display:flex;align-items:center;gap:.4rem;padding:.45rem .7rem;background:#f9fafb;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:#374151;cursor:pointer;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;list-style:none}.set-section-header::-webkit-details-marker{display:none}.set-section-header:before{content:"▸";font-size:.65rem;color:#9ca3af;transition:transform .15s}details[open]>.set-section-header:before{transform:rotate(90deg)}.set-section-count{font-weight:500;color:#9ca3af;font-size:.65rem}.set-section-scroll{max-height:200px;overflow-y:auto;padding:.5rem .7rem}.wc-toolbar{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.5rem;padding:.45rem .6rem;background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;font-size:.75rem}.wc-filter{padding:.25rem .5rem;border:1px solid #d1d5db;border-radius:4px;font:inherit;font-size:.75rem;width:240px}.wc-filter:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f626}.wc-filter-clear{font-size:1rem;line-height:1;padding:0 .2rem;color:#9ca3af;background:none;border:none;cursor:pointer}.wc-filter-info{font-size:.7rem;color:#6b7280;margin:.25rem 0}.wc-toggles{display:flex;flex-wrap:wrap;gap:.3rem;margin-left:auto}.wc-toggle{font:inherit;display:inline-flex;align-items:center;gap:.3rem;padding:.25rem .6rem;border-radius:5px;font-size:.72rem;font-weight:600;cursor:pointer;transition:all .12s;border:1px solid}.wc-t-on{background:#dcfce7;color:#166534;border-color:#86efac}.wc-t-on:hover{background:#bbf7d0}.wc-t-partial{background:#fef9c3;color:#854d0e;border-color:#fde68a}.wc-t-partial:hover{background:#fef08a}.wc-t-off{background:#f3f4f6;color:#6b7280;border-color:#d1d5db}.wc-t-off:hover{background:#e5e7eb}.wc-t-count{font-size:.6rem;opacity:.7}.wc-t-reset{background:#fff;color:#6b7280;border-style:dashed;border-color:#d1d5db}.wc-t-reset:hover{background:#f3f4f6;color:#374151}.wc-order-bar{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;padding:.4rem .6rem;margin-bottom:.5rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px}.wc-order-label{font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#475569;white-space:nowrap}.wc-order-items{display:flex;flex-wrap:wrap;gap:.25rem}.wc-order-item{display:inline-flex;align-items:center;gap:.2rem;padding:.18rem .45rem;background:#fff;border:1px solid #cbd5e1;border-radius:4px;font-size:.7rem;cursor:grab;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;transition:all .1s}.wc-order-item:hover{border-color:#3b82f6;background:#eff6ff}.wc-order-item:active{cursor:grabbing}.wc-oi-num{font-size:.55rem;font-weight:700;color:#94a3b8;min-width:.8rem;text-align:center}.wc-oi-name{font-weight:600;color:#1e293b}.wc-oi-grip{color:#cbd5e1;font-size:.65rem}.wc-oi-drop{background:#dbeafe!important;border-color:#3b82f6!important}.wc-oi-drag{opacity:.35}.wc-order-reset{font-size:.62rem;color:#64748b;text-decoration:underline;background:none;border:none;cursor:pointer;margin-left:auto}.wc-list{display:flex;flex-direction:column;gap:1px;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;background:#e5e7eb}.wc-row{display:flex;align-items:center;gap:.5rem;padding:.4rem .6rem;background:#fff;min-height:2.1rem}.wc-row:hover{background:#fafbfc}.wc-row-dim{background:#fafafa!important}.wc-row-id{display:flex;align-items:center;gap:.35rem;flex-shrink:0;min-width:6rem}.wc-id{font-weight:700;font-size:.8rem;color:#1f2937;font-variant-numeric:tabular-nums}.wc-row-dim .wc-id{color:#9ca3af}.wc-hint{font-size:.55rem;color:#d1d5db;font-style:italic;white-space:nowrap}.wc-eye{all:unset;cursor:pointer;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;transition:all .12s;flex-shrink:0}.wc-eye-on{color:#16a34a;background:#dcfce7}.wc-eye-on:hover{background:#bbf7d0}.wc-eye-off{color:#9ca3af;background:#f3f4f6}.wc-eye-off:hover{background:#e5e7eb;color:#6b7280}.wc-eye-wait{color:#a16207;background:#fef9c3;cursor:wait}.wc-eye:disabled{opacity:.4;cursor:wait}.wc-chips{display:flex;align-items:center;flex-wrap:wrap;gap:.3rem;flex:1;min-width:0}.wc-group{display:inline-flex;align-items:center;gap:.15rem;padding-right:.45rem;border-right:1px solid #e5e7eb}.wc-group:last-child{border-right:none;padding-right:0}.wc-glabel{font-size:.55rem;font-weight:700;color:#9ca3af;text-transform:uppercase;letter-spacing:.04em;margin-right:.1rem;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none}.wc-chip{font:inherit;display:inline-flex;align-items:center;justify-content:center;padding:.18rem .5rem;border-radius:999px;font-size:.68rem;font-weight:600;cursor:pointer;transition:all .12s;border:1.5px solid;line-height:1.2;white-space:nowrap}.wc-c-on{background:#dcfce7;color:#166534;border-color:#86efac}.wc-c-on:hover{background:#bbf7d0;border-color:#4ade80;box-shadow:0 1px 3px #22c55e33}.wc-c-off{background:#fff;color:#9ca3af;border-color:#d1d5db}.wc-c-off:hover{background:#f9fafb;border-color:#9ca3af;color:#6b7280;box-shadow:0 1px 3px #0000000f}.wc-c-proc{background:#fef9c3;color:#a16207;border-color:#fde68a;cursor:wait;animation:wc-pulse 1.2s ease-in-out infinite}@keyframes wc-pulse{0%,to{opacity:1}50%{opacity:.5}}.wc-chip:disabled{cursor:wait}.wc-empty{font-size:.7rem;color:#d1d5db;font-style:italic}.btn-xs{font-size:.65rem;padding:.1rem .35rem;border:1px solid #d1d5db;border-radius:3px;background:#fff;cursor:pointer;color:#2563eb;line-height:1}.btn-xs:hover{background:#eff6ff;border-color:#93c5fd}.public-viewer{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f8fafc}.public-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:2.5rem;max-width:420px;width:100%;text-align:center;box-shadow:0 1px 3px #0000000f}.public-card h2{margin:.75rem 0 .25rem;font-size:1.3rem}.public-pdf-shell{height:100vh;display:flex;flex-direction:column;background:#1a1a1a}.public-pdf-header{display:flex;align-items:center;justify-content:space-between;padding:.6rem 1rem;background:#fff;border-bottom:1px solid #e5e7eb;flex-shrink:0}.public-pdf-title{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;font-size:.88rem;min-width:0}.public-pdf-divider{width:1px;height:18px;background:#d1d5db}.public-pdf-meta{color:#9ca3af;font-size:.78rem}.public-empty-pill{display:inline-flex;align-items:center;justify-content:center;padding:.38rem .7rem;border-radius:999px;background:#fff;color:#4b5563;border:1px solid #d1d5db;font-size:.76rem;font-weight:600}.public-version-strip{display:flex;gap:.5rem;padding:.65rem 1rem;background:#f8fafc;border-bottom:1px solid #e5e7eb;overflow-x:auto;flex-shrink:0}.public-version-chip{border:1px solid #d1d5db;background:#fff;color:#4b5563;border-radius:999px;padding:.35rem .75rem;font:inherit;font-size:.76rem;font-weight:600;cursor:pointer;white-space:nowrap}.public-version-chip.active{border-color:#111827;background:#111827;color:#fff}.public-pdf-body{flex:1;min-height:0}.public-pdf-frame{width:100%;height:100%;border:none}.public-pdf-loading{display:flex;align-items:center;justify-content:center;height:100%;color:#9ca3af}@media(max-width:720px){.public-pdf-header{align-items:flex-start;flex-direction:column;gap:.75rem}}.version-sidebar{margin-top:.75rem;border:1px solid #e5e5e5;border-radius:8px;padding:.75rem;background:#fafafa;max-height:300px;overflow-y:auto}.version-sidebar .perm-label{margin-bottom:.5rem}.wall-grid-header-toggle{cursor:pointer;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;display:flex;flex-direction:column;align-items:center;gap:2px;transition:background .15s,color .15s}.wall-grid-header-toggle:hover{background:#f0f0f0}.wgh-on{color:#16a34a}.wgh-partial{color:#d97706}.wgh-off{color:#a3a3a3}.wgh-count{font-size:.6rem;font-weight:400;opacity:.7}.version-list{display:flex;flex-direction:column;gap:.5rem}.version-item{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border:1px solid #e5e5e5;border-radius:6px;background:#fff;font-size:.8rem;transition:border-color .15s}.version-item.version-active{border-color:#10b981;background:#f0fdf4}.version-info{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.version-label{color:#6b7280;font-style:italic}.version-meta,.version-date{color:#9ca3af;font-size:.75rem}.version-actions{display:flex;gap:.35rem;flex-shrink:0}@media(max-width:640px){.nav-name{display:none}.dash-content{padding:1.5rem 1rem 3rem}}:root{--ff-bg-main: #ffffff;--ff-bg-card: #ffffff;--ff-bg-card-soft: #f8f9fb;--ff-text-strong: #1a1d23;--ff-text-muted: #5f6775;--ff-line: #e2e5ea;--ff-brand: #2563eb;--ff-brand-strong: #1d4ed8;--ff-warn: #d97706;--ff-danger: #d94f4f;--ff-good: #16a34a;--ff-chip: #e8ecf1;--ff-shadow: 0 1px 4px rgba(0, 0, 0, .08)}.page-grid{display:grid;gap:1rem}.page-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.page-title{margin:0;font-size:1.35rem;font-weight:700;letter-spacing:.02em;display:flex;align-items:center;gap:.45rem}.page-muted{margin:0;color:var(--ff-text-muted);font-size:.95rem}.card{background:var(--ff-bg-card);border:1px solid var(--ff-line);border-radius:.375rem;box-shadow:0 1px 3px #0000000f}.panel{padding:.9rem}.row{display:flex;gap:.5rem;align-items:center}.row.wrap{flex-wrap:wrap}.grow{flex:1;min-width:0}.mono{font-family:IBM Plex Mono,monospace}.divider{border:none;border-top:1px solid var(--ff-line);margin:.5rem 0}.stat-grid{display:grid;gap:.75rem;grid-template-columns:1fr 1fr}.stat-card{display:flex;align-items:center;gap:.75rem;padding:.9rem}.stat-icon{display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:.25rem;background:#4a90e21f;color:var(--ff-brand);flex-shrink:0}.stat-icon.warn{background:#f5a6231f;color:var(--ff-warn)}.stat-icon.good{background:#27ae601f;color:var(--ff-good)}.stat-icon.danger{background:#e74c3c1f;color:var(--ff-danger)}.stat-value{font-size:1.5rem;font-weight:700;line-height:1;font-family:IBM Plex Mono,monospace}.stat-label{font-size:.88rem;color:var(--ff-text-muted);margin-top:.15rem}.stat-grid.home-expanded{grid-template-columns:1fr 1fr}.dash-active-work{border:2px solid rgba(22,163,74,.4);border-radius:.5rem;background:linear-gradient(135deg,#f0fdf4,#ecfdf5,#f0fdf4);padding:1rem 1.1rem;display:flex;flex-direction:column;gap:.75rem}.dash-active-header{display:flex;align-items:center;gap:.55rem;color:#15803d}.dash-active-pulse{width:10px;height:10px;border-radius:50%;background:#22c55e;box-shadow:0 0 #22c55e80;animation:dash-pulse 2s ease-in-out infinite}@keyframes dash-pulse{0%,to{box-shadow:0 0 #22c55e80}50%{box-shadow:0 0 0 8px #22c55e00}}.dash-active-title{font-size:1.05rem;font-weight:700}.dash-active-grid{display:grid;grid-template-columns:1fr;gap:.55rem}.dash-active-card{display:flex;flex-direction:column;gap:.35rem;padding:.75rem .85rem;border:1px solid rgba(22,163,74,.2);border-radius:.4rem;background:#fff;cursor:pointer;text-align:left;transition:border-color .12s,box-shadow .12s,transform .1s}.dash-active-card:hover{border-color:#16a34a80;box-shadow:0 2px 12px #16a34a1f;transform:translateY(-1px)}.dash-active-card-top{display:flex;align-items:center;justify-content:space-between}.dash-active-card-id{display:flex;align-items:center;gap:.45rem;font-size:1rem;font-weight:700}.dash-active-card-pct{font-size:1.3rem;font-weight:800;font-family:IBM Plex Mono,monospace;color:#15803d}.dash-active-card-meta{display:flex;align-items:center;gap:.55rem;font-size:.85rem;color:var(--ff-text-muted)}.dash-active-card-stage{font-weight:600}.dash-active-card-progress{width:100%;height:6px;border-radius:999px;background:#16a34a1f;overflow:hidden}.dash-active-card-progress-fill{height:100%;border-radius:inherit;background:linear-gradient(90deg,#22c55e,#16a34a);transition:width .2s ease-out}.dash-active-card-action{display:flex;align-items:center;justify-content:space-between;font-size:.82rem;color:var(--ff-text-muted);margin-top:.1rem}.dash-active-card-go{display:flex;align-items:center;gap:.3rem;font-weight:700;color:#15803d;font-size:.88rem}.dash-no-work{display:flex;align-items:center;gap:.55rem;padding:.85rem 1rem;border:1px dashed var(--ff-line);border-radius:.4rem;color:var(--ff-text-muted);font-size:.92rem}.dash-no-work-link{background:none;border:none;color:var(--ff-brand);font-weight:700;cursor:pointer;text-decoration:underline;padding:0;font-size:inherit}.operations-page{gap:.85rem}.operations-page .work-header{align-items:stretch}.work-header-main{display:grid;gap:.25rem}.work-header-meta{display:flex;flex-wrap:wrap;gap:.35rem}.work-active-strip{position:-webkit-sticky;position:sticky;top:.25rem;z-index:12;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.55rem;border:1px solid var(--ff-line);border-radius:.5rem;background:#fff;padding:.6rem .75rem}.work-active-strip.mine{border-left:3px solid var(--ff-good);border-color:#16a34a52;background:linear-gradient(180deg,#f4fff8,#eefbf4)}.work-active-strip.busy{border-left:3px solid var(--ff-warn);border-color:#d9770652;background:linear-gradient(180deg,#fffaf1,#fff4df)}.work-active-main{display:flex;align-items:center;gap:.55rem;min-width:0;flex:1}.work-active-dot{width:.58rem;height:.58rem;border-radius:999px;background:var(--ff-brand);flex:0 0 auto}.work-active-dot.mine{background:var(--ff-good);box-shadow:0 0 0 3px #16a34a26}.work-active-dot.busy{background:var(--ff-warn);animation:work-pulse 1.2s ease-in-out infinite}.work-active-title{margin:0;font-family:IBM Plex Mono,monospace;font-size:1rem;font-weight:700}.work-active-sub{margin:0;color:var(--ff-text-muted);font-size:.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.work-active-continue{min-height:2.25rem;padding:0 .75rem;font-size:.84rem}@keyframes work-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.18);opacity:.6}}.work-list{display:grid;gap:.4rem}.work-item{border:1px solid var(--ff-line);border-radius:.375rem;background:#fff;padding:.7rem;display:grid;gap:.45rem;cursor:pointer;transition:border-color .12s ease}.work-item:hover{border-color:#93c5fd}.work-item.active{border-color:var(--ff-brand);background:#f5f8ff;border-left:3px solid var(--ff-brand)}.work-item.state-running{border-left:3px solid #f59e0b}.work-item.state-complete{border-left:3px solid #16a34a}.work-item.state-hold{border-left:3px solid #dc2626}.work-item.state-paused{border-left:3px solid #0ea5e9}.work-sort-row{display:flex;gap:.35rem;overflow-x:auto;padding-bottom:.2rem;margin-bottom:.55rem}.work-sort-btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--ff-line);background:#fff;color:var(--ff-text-muted);border-radius:999px;width:2.25rem;height:2.25rem;padding:0;flex:0 0 auto}.work-sort-btn.active{color:var(--ff-brand);border-color:var(--ff-brand);background:#eef4ff}.work-progress{width:100%;height:.38rem;border-radius:999px;overflow:hidden;background:var(--ff-line)}.work-progress-fill{height:100%;width:0;border-radius:inherit;background:var(--ff-brand);transition:width .15s ease-out}.work-photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:.5rem}.work-photo-card{border:1px solid var(--ff-line);border-radius:.375rem;background:#fff;padding:0;overflow:hidden;display:grid;gap:0;text-align:left;transition:border-color .12s ease}.work-photo-card:hover{border-color:var(--ff-brand)}.work-photo-thumb{width:100%;aspect-ratio:1 / 1;object-fit:cover;display:block}.work-photo-placeholder{width:100%;aspect-ratio:1 / 1;display:flex;align-items:center;justify-content:center;color:var(--ff-text-muted);background:#f1f5f9}.work-photo-caption{padding:.3rem .4rem;font-size:.76rem;color:var(--ff-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.work-session-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:120;display:flex;justify-content:center;align-items:center;padding:.8rem;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#07102073}.work-session-sheet{width:min(1060px,100%);height:min(900px,calc(100dvh - 1.6rem));display:flex;flex-direction:column;border:1px solid var(--ff-line);border-radius:.75rem;overflow:hidden;background:#f8f9fb;box-shadow:0 20px 50px #0f172a4d}.work-session-head{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.65rem .85rem;border-bottom:1px solid rgba(148,163,184,.3);background:linear-gradient(92deg,#1e293b,#0f172a)}.work-session-title{margin:0;font-size:1rem;font-weight:700;color:#f8fafc}.work-session-sub{margin:0;font-size:.82rem;color:#94a3b8}.work-session-tabs{display:flex;gap:.4rem;overflow-x:auto;padding:.5rem .75rem;border-bottom:1px solid var(--ff-line);background:#fff}.work-session-tab{display:inline-flex;align-items:center;gap:.3rem;border:1px solid var(--ff-line);background:#f8f9fb;color:var(--ff-text-muted);border-radius:999px;min-height:2.1rem;padding:0 .72rem;font-size:.8rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase;flex:0 0 auto}.work-session-tab.active{border-color:var(--ff-brand);background:#fff;color:var(--ff-brand)}.work-session-context{padding:.55rem .75rem;border-bottom:1px solid var(--ff-line);background:#fff}.work-session-context-inner{border:1px solid var(--ff-line);border-left-width:4px;border-radius:.375rem;background:#f8f9fb;padding:.5rem .65rem;display:grid;gap:.35rem}.work-session-context-inner.state-running{border-left-color:#f59e0b}.work-session-context-inner.state-paused{border-left-color:#0ea5e9}.work-session-context-inner.state-complete{border-left-color:#16a34a}.work-session-context-inner.state-hold{border-left-color:#dc2626}.work-session-context-sub{margin:0;font-size:.82rem;color:var(--ff-text-muted)}.work-session-body{flex:1;overflow-y:auto;padding:.65rem .75rem;display:grid;gap:.55rem}.state-running{border-left-color:#f59e0b}.state-paused{border-left-color:#0ea5e9}.state-complete{border-left-color:#16a34a}.state-hold{border-left-color:#dc2626}.state-skipped{border-left-color:#a78bfa}.split-grid{display:grid;gap:.75rem}.section-header{display:flex;align-items:center;gap:.4rem;font-size:.88rem;font-weight:700;color:var(--ff-text-muted);text-transform:uppercase;letter-spacing:.06em;padding-bottom:.4rem;border-bottom:1px solid var(--ff-line);margin-bottom:.5rem}.form-grid{display:grid;gap:.75rem}.field{display:grid;gap:.3rem}.field label{font-weight:600;font-size:.88rem;color:var(--ff-text-muted);text-transform:uppercase;letter-spacing:.04em}.input,.select,.textarea{width:100%;border:1px solid var(--ff-line);border-radius:.25rem;background:#fff;padding:.55rem .65rem;min-height:2.5rem;font-size:.95rem;color:var(--ff-text-strong)}.textarea{resize:vertical;min-height:4.5rem}.input:focus,.select:focus,.textarea:focus{outline:2px solid rgba(59,130,246,.4);outline-offset:1px;border-color:var(--ff-brand)}.list{display:grid;gap:.4rem}.item{border:1px solid var(--ff-line);border-radius:.25rem;background:var(--ff-bg-card-soft);padding:.7rem;display:grid;gap:.35rem;cursor:pointer;transition:border-color .15s,background .15s}.item:hover{border-color:#c0c6d0}.item.active{border-color:var(--ff-brand);background:#2563eb0f;border-left:3px solid var(--ff-brand)}.item-title{font-size:1.05rem;font-weight:700;margin:0}.item-sub{font-size:.9rem;margin:0;color:var(--ff-text-muted)}.tab-buttons{display:flex;gap:0;border-bottom:1px solid var(--ff-line)}.tab-button{border:none;background:none;padding:.5rem 1rem;font-size:.92rem;font-weight:600;color:var(--ff-text-muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s,border-color .15s}.tab-button:hover{color:var(--ff-text-strong)}.tab-button.active{color:var(--ff-brand);border-bottom-color:var(--ff-brand)}.btn{border:0;border-radius:.25rem;min-height:2.5rem;padding:0 .85rem;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;font-weight:600;font-size:.95rem;cursor:pointer;transition:background .15s,opacity .15s}.btn:hover{opacity:.88}.btn:active{opacity:.75}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.full{width:100%}.btn.primary{background:var(--ff-brand);color:#fff}.btn.primary:hover{background:var(--ff-brand-strong)}.btn.secondary{background:#fff;color:var(--ff-text-strong);border:1px solid var(--ff-line)}.btn.secondary:hover{background:var(--ff-bg-card-soft)}.btn.danger{background:var(--ff-danger);color:#fff}.btn.good{background:var(--ff-good);color:#fff}.btn.warn{background:var(--ff-warn);color:#fff}.badge.good{background:#16a34a1a;color:var(--ff-good)}.badge.warn{background:#d977061a;color:var(--ff-warn)}.badge.danger{background:#dc26261a;color:var(--ff-danger)}.audit-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.audit-table{width:100%;border-collapse:collapse;font-size:.88rem}.audit-table th{text-align:left;padding:.5rem .6rem;font-weight:700;font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ff-text-muted);border-bottom:2px solid var(--ff-line);white-space:nowrap}.audit-table td{padding:.45rem .6rem;border-bottom:1px solid var(--ff-line);vertical-align:top}.audit-table tr:hover td{background:var(--ff-bg-card-soft)}.create-page{gap:.85rem}.create-hero{border:1px solid rgba(37,99,235,.28);background:linear-gradient(125deg,#f5f9ff,#eef6ff 60%,#e6fff4)}.create-hero-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.55rem}.create-layout{display:grid;gap:.8rem;grid-template-columns:1fr}.create-card{border:1px solid var(--ff-line)}.create-card .section-header{margin-bottom:.65rem}.create-template-rule{border:1px dashed rgba(37,99,235,.3);border-radius:.35rem;background:#fff;padding:.45rem .55rem;display:flex;flex-wrap:wrap;align-items:center;gap:.45rem}.create-preview-row{display:flex;flex-wrap:wrap;gap:.35rem;min-height:2.4rem;padding:.38rem;border:1px solid var(--ff-line);border-radius:.3rem;background:#fff}.setup-page{display:grid;gap:.85rem}.stage-item{border:1px solid var(--ff-line);border-radius:.375rem;padding:.75rem;background:var(--ff-bg-card-soft);display:grid;gap:.5rem;transition:opacity .2s,border-color .2s}.stage-item.dragging{opacity:.4}.stage-item.drag-over{border-top:3px solid var(--ff-brand)}.stage-header{display:flex;align-items:center;gap:.5rem}.stage-body{display:flex;gap:.75rem;align-items:center;padding-left:1.75rem;flex-wrap:wrap}.checklist-item{display:flex;align-items:center;gap:.5rem;padding:.35rem 0;border-bottom:1px solid var(--ff-line)}.checklist-item:last-child{border-bottom:none}.qc-check-item{display:flex;align-items:center;gap:.5rem;padding:.4rem .5rem;border:1px solid var(--ff-line);border-radius:.25rem;background:var(--ff-bg-card-soft);transition:background .1s}.qc-check-item:hover{background:#eef0f4}.drag-over{border-top:3px solid var(--ff-brand)}.work-action-panel{border:1px solid var(--ff-line);border-radius:.375rem;background:#fff;padding:.55rem}.work-action-panel.mine{border-left:3px solid var(--ff-good)}.work-inline-section{border-top:1px solid var(--ff-line);padding-top:.5rem}.work-inline-section .section-header{display:flex;align-items:center;gap:.35rem;font-size:.78rem;font-weight:700;color:var(--ff-text-muted);margin-bottom:.35rem}.workpiece-item{border-color:var(--ff-line);border-radius:.375rem;padding:.7rem;background:#fff;transition:border-color .12s ease}.workpiece-item:hover{border-color:#93c5fd}.workpiece-item.active{border-color:var(--ff-brand);background:#f5f8ff;border-left:3px solid var(--ff-brand)}.workpiece-item.state-running{border-left:3px solid #f59e0b}.workpiece-item.state-complete{border-left:3px solid #16a34a}.workpiece-item.state-hold{border-left:3px solid #dc2626}.workpiece-item.state-paused{border-left:3px solid #0ea5e9}.workpiece-item-head{display:flex;align-items:flex-start;justify-content:space-between;gap:.55rem}.workpiece-item-id{display:flex;align-items:center;gap:.4rem;min-width:0}.workpiece-item-status{flex:0 0 auto}.workpiece-item-meta{margin-top:.05rem}.workpiece-active-self{color:#15803d;font-weight:700}.workpiece-active-other{color:#b45309;font-weight:700}.work-stage-chip-row{display:flex;flex-wrap:wrap;gap:.3rem}.work-stage-chip{display:flex;align-items:center;gap:.4rem;text-align:left;border:1px solid var(--ff-line);border-left:3px solid #cbd5e1;background:#fff;color:var(--ff-text-muted);border-radius:.35rem;padding:.35rem .6rem;font-size:.76rem;font-weight:600;flex:0 0 auto}.work-stage-chip.active{border-left-color:var(--ff-brand);background:#f5f8ff}.work-stage-chip.state-running{border-left-color:#f59e0b}.work-stage-chip.state-paused{border-left-color:#0ea5e9}.work-stage-chip.state-complete{border-left-color:#16a34a}.work-stage-chip.state-hold{border-left-color:#dc2626}.work-stage-chip.state-not-started{border-left-color:#cbd5e1}.work-stage-chip.state-skipped{border-left-color:#a78bfa}.work-stage-list-item{border-left:3px solid #cbd5e1}.work-stage-list-item.state-running{border-left-color:#f59e0b}.work-stage-list-item.state-paused{border-left-color:#0ea5e9}.work-stage-list-item.state-complete{border-left-color:#16a34a}.work-stage-list-item.state-hold{border-left-color:#dc2626}.actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.4rem}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:200;padding:1rem}.modal-card{background:var(--ff-bg-card);border-radius:.5rem;padding:1rem;width:100%;max-width:420px;box-shadow:0 8px 32px #00000059}.work-photo-lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:140;background:#020617e0;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.6rem;padding:1rem}.work-photo-lightbox-img,.work-photo-lightbox-placeholder{width:100%;max-height:calc(100dvh - 8rem);border-radius:.6rem;object-fit:contain;background:#0f172ae6;border:1px solid rgba(148,163,184,.35)}.issue-photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.55rem}.issue-photo-card{display:grid;gap:.35rem;border:1px solid var(--ff-line);background:var(--ff-bg-card-soft);border-radius:.35rem;padding:.45rem}@media(min-width:900px){.stat-grid{grid-template-columns:repeat(4,1fr)}.stat-grid.home-expanded{grid-template-columns:repeat(3,1fr)}.dash-active-grid{grid-template-columns:repeat(2,1fr)}.split-grid{grid-template-columns:1fr 1fr}}@media(min-width:980px){.create-layout{grid-template-columns:minmax(320px,.95fr) minmax(460px,1.05fr)}}@media(min-width:1280px){.split-grid.operations{grid-template-columns:minmax(320px,.9fr) minmax(480px,1.1fr)}}@media(max-width:899px){.work-active-strip{top:.4rem}.work-active-main{width:100%}.work-active-sub{white-space:normal}.work-session-overlay{padding:0}.work-session-sheet{width:100%;height:100dvh;border-radius:0;border:none;box-shadow:none}.work-session-body{padding:.55rem}.work-session-head{position:-webkit-sticky;position:sticky;top:0;z-index:2}.work-session-tabs{position:-webkit-sticky;position:sticky;top:3.45rem;z-index:2}.work-stage-chip-row{overflow-x:auto;flex-wrap:nowrap;padding-bottom:.15rem}.work-sort-row{-webkit-mask-image:linear-gradient(to right,#000 85%,transparent);mask-image:linear-gradient(to right,#000 85%,transparent)}}@media(max-width:640px){.page-title{font-size:1.15rem}.btn{min-height:2.75rem}.input,.select,.textarea{min-height:2.75rem;font-size:1rem}.stat-grid{gap:.5rem}.stat-card{padding:.65rem}.stat-value{font-size:1.25rem}.stat-label{font-size:.8rem}.stat-icon{width:2.1rem;height:2.1rem}.dash-active-work{padding:.75rem}.dash-active-card{padding:.65rem .75rem}.dash-active-card-pct{font-size:1.1rem}.panel{padding:.7rem}.split-grid,.form-grid{gap:.6rem}.create-layout{gap:.65rem}.create-hero{padding:.7rem}.textarea{min-height:6rem}.work-photo-grid{grid-template-columns:repeat(auto-fill,minmax(84px,1fr))}.issue-photo-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.work-sort-btn{width:2.5rem;height:2.5rem}.workpiece-item{padding:.85rem;gap:.5rem}.item-title{font-size:.95rem}.audit-table{font-size:.82rem}.audit-table th{padding:.4rem .45rem;font-size:.72rem}.audit-table td{padding:.4rem .45rem}.work-photo-lightbox{grid-template-columns:1fr;padding:.65rem;gap:.5rem}}.setup-stage-image-section{margin-top:.5rem}.setup-stage-image-preview{display:flex;align-items:center;gap:.75rem;margin-top:.35rem}.setup-stage-image-thumb{width:4rem;height:4rem;object-fit:cover;border-radius:.35rem;border:1px solid #e5e5e5}.user-role-badge{display:inline-flex;align-items:center;gap:.35rem;padding:.15rem .5rem;border-radius:999px;font-size:.7rem;font-weight:500;background:#f5f5f4;color:#525252}.user-role-dot{width:.5rem;height:.5rem;border-radius:50%;flex-shrink:0}@media(max-width:420px){.page-header{flex-wrap:wrap;gap:.5rem}.page-title{font-size:1.05rem}.stat-grid{grid-template-columns:1fr 1fr;gap:.4rem}.stat-card{padding:.5rem;gap:.5rem}.stat-icon{width:1.8rem;height:1.8rem}.stat-value{font-size:1.1rem}.stat-label{font-size:.74rem}.dash-active-title{font-size:.92rem}.dash-active-card-id .mono{font-size:.85rem}.create-template-rule{font-size:.82rem;padding:.35rem .45rem;overflow-x:auto}.create-preview-row{min-height:2rem;padding:.3rem;font-size:.82rem}}.app-shell{min-height:100dvh;display:flex;flex-direction:column}.topbar{position:-webkit-sticky;position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:.75rem;min-height:3.1rem;padding:.28rem .8rem;background:#0d0f12;color:#e8eaed;border-bottom:2px solid #2563eb}.topbar-brand{display:flex;align-items:center;gap:.55rem;min-width:0}.topbar-logo{width:1.6rem;height:1.6rem;border-radius:.2rem}.topbar-title{font-weight:700;font-size:.95rem;line-height:1;letter-spacing:.04em;text-transform:uppercase}.topbar-subtitle{font-size:.7rem;color:#8a909c;margin-top:.12rem}.topbar-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.topbar-btn{min-height:2rem;padding:0 .7rem;font-size:.82rem;font-weight:500;border-radius:.3rem;border:1px solid rgba(255,255,255,.12);background:#ffffff14;color:#e8eaed;cursor:pointer;transition:background .15s}.topbar-btn:hover{background:#ffffff24}.topbar-user{display:flex;align-items:center;gap:.4rem}.topbar-avatar{width:1.6rem;height:1.6rem;border-radius:50%;object-fit:cover}.topbar-avatar-fallback{display:flex;align-items:center;justify-content:center;background:#334155;color:#e8eaed;font-size:.6rem;font-weight:700}.topbar-name{font-size:.82rem;color:#c4c9d4;max-width:10rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.factory-layout{flex:1;display:grid;grid-template-columns:1fr;min-height:0}@media(min-width:900px){.factory-layout{grid-template-columns:var(--sidebar-w, 220px) 5px 1fr}}.side-nav{display:none}@media(min-width:900px){.side-nav{display:flex;flex-direction:column;gap:.3rem;padding:.6rem;background:#0d0f12;overflow-y:auto;border-right:1px solid #1e2228}}.resize-handle{display:none}@media(min-width:900px){.resize-handle{display:block;background:#1e2228;cursor:col-resize;transition:background .15s}.resize-handle:hover,.resize-handle:active{background:#2563eb}}.factory-content{padding:1rem 1rem 5.5rem;overflow-y:auto;background:#fff}@media(min-width:900px){.factory-content{padding:1.1rem}}.mobile-nav{position:fixed;left:0;right:0;bottom:0;z-index:30;display:grid;grid-template-columns:repeat(auto-fit,minmax(70px,1fr));gap:.25rem;padding:.35rem .5rem;background:#0d0f12;border-top:1px solid #1e2228}@media(min-width:900px){.mobile-nav{display:none}}.nav-link{min-height:2.5rem;border-radius:.25rem;display:flex;align-items:center;gap:.5rem;padding:0 .65rem;font-size:.85rem;font-weight:600;color:#8a909c;border:1px solid transparent;text-decoration:none;transition:color .15s,background .15s;cursor:pointer}.nav-link:hover{color:#e8eaed;background:#ffffff0f}.nav-link.active{color:#fff;background:#2563eb33;border-color:#2563eb66;border-left:3px solid #2563eb;padding-left:calc(.65rem - 3px)}.mobile-nav .nav-link{flex-direction:column;justify-content:center;text-align:center;gap:.15rem;padding:.25rem;min-height:3rem;font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;border-left:none}.mobile-nav .nav-link.active{border-left:none;padding-left:.25rem}.nav-sections{display:flex;flex-direction:column;gap:.6rem}.nav-section{display:flex;flex-direction:column;gap:.2rem}.nav-section+.nav-section{padding-top:.6rem;border-top:1px solid #1e2228}.nav-section-title{margin:0 .35rem .15rem;color:#8a909c;font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}@media(max-width:899px){.topbar-name{display:none}.topbar-user{gap:0}}
