:root{--gray-50: #fafafa;--gray-100: #f4f4f5;--gray-200: #e4e4e7;--gray-300: #d4d4d8;--gray-400: #a1a1aa;--gray-500: #71717a;--gray-600: #52525b;--gray-700: #3f3f46;--gray-800: #27272a;--gray-900: #18181b;--primary: #18181b;--primary-dark: #000000;--primary-light: #e4e4e7;--bg: var(--gray-100);--bg-card: #ffffff;--bg-hover: var(--gray-50);--border: var(--gray-200);--text: var(--gray-900);--text-muted: var(--gray-500);--text-light: var(--gray-400);--orange: #f97316;--orange-light: #fff7ed;--green: #16a34a;--green-light: #f0fdf4;--red: #dc2626;--red-light: #fef2f2;--yellow: #ca8a04;--yellow-light: #fefce8;--text-xs: 11px;--text-sm: 12px;--text-body: 13px;--text-base: 14px;--text-md: 15px;--text-lg: 16px;--text-xl: 20px;--text-2xl: 24px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--radius-xs: 4px;--radius-sm: 6px;--radius: 8px;--radius-md: 10px;--radius-lg: 12px;--radius-full: 999px;--shadow-xs: 0 1px 2px rgba(0,0,0,.04);--shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.04);--shadow-md: 0 4px 12px rgba(0,0,0,.08);--shadow-lg: 0 10px 30px rgba(0,0,0,.12);--focus-ring: 0 0 0 3px var(--primary-light);--dur-fast: .12s;--dur: .18s;--dur-slow: .28s;--ease-out: cubic-bezier(.2, 0, 0, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-spring: cubic-bezier(.34, 1.3, .64, 1);--topbar-h: 56px;--projectnav-h: 44px;--page-pad: 24px}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.6}a{color:var(--gray-900);font-weight:500;text-decoration:none}a:hover{text-decoration:underline}.page-header{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);margin-bottom:var(--space-4)}.page-title{font-size:var(--text-xl);font-weight:700;margin-top:var(--space-1)}.page-subtitle{font-size:var(--text-body);color:var(--text-muted)}.back-link{font-size:var(--text-body)}.header-actions{display:flex;gap:var(--space-2);flex-shrink:0}.row{display:flex;gap:var(--space-2)}.row-wrap{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:center}.text-sm-muted{font-size:var(--text-sm);color:var(--text-muted)}.mt-1{margin-top:var(--space-1)}.mt-2{margin-top:var(--space-2)}.mt-3{margin-top:var(--space-3)}.mt-4{margin-top:var(--space-4)}.mb-1{margin-bottom:var(--space-1)}.mb-2{margin-bottom:var(--space-2)}.mb-3{margin-bottom:var(--space-3)}.mb-4{margin-bottom:var(--space-4)}.btn-file{cursor:pointer;margin:0}button{cursor:pointer;border:none;border-radius:var(--radius-sm);font-size:14px;font-family:inherit;transition:all .15s}.btn{padding:8px 16px;border-radius:var(--radius-sm);font-weight:500;transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),opacity var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}.btn:active:not(:disabled){transform:scale(.97)}.btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.btn-primary:hover:not(:disabled){box-shadow:var(--shadow)}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-dark)}.btn-primary:disabled{background:var(--text-light);cursor:not-allowed}.btn-secondary{background:var(--bg-card);color:var(--text);border:1px solid var(--border)}.btn-secondary:hover{background:var(--bg-hover)}.btn-danger{background:var(--red);color:#fff}.btn-danger:hover{opacity:.9}.btn-sm{padding:4px 10px;font-size:13px}.btn-lg{padding:12px 24px;font-size:15px}.app-layout{min-height:100vh;display:flex;flex-direction:column}.topbar{background:#fff;border-bottom:1px solid var(--border);padding:0 24px;height:56px;display:flex;align-items:center;gap:24px;position:sticky;top:0;z-index:100}.topbar-brand{font-weight:700;font-size:16px;color:var(--primary);display:flex;align-items:center;gap:8px}.topbar-brand svg{width:24px;height:24px}.topbar-nav{display:flex;gap:4px;flex:1}.topbar-nav a{padding:6px 14px;border-radius:var(--radius-sm);color:var(--text-muted);font-weight:500;text-decoration:none;transition:all .15s}.topbar-nav a:hover{background:var(--bg);color:var(--text)}.topbar-nav a.active{background:var(--primary-light);color:var(--primary)}.topbar-auth-btn{display:flex;align-items:center;gap:6px;padding:6px 12px;margin-left:8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card);color:var(--text-muted);font-size:13px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all .15s}.topbar-auth-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.topbar-auth-btn:disabled{opacity:.55;cursor:not-allowed}.topbar-auth-btn.authed{color:#16a34a;border-color:#16a34a}.hamburger-btn{display:none;align-items:center;justify-content:center;width:36px;height:36px;margin-left:auto;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card);color:var(--text);cursor:pointer;transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}.hamburger-btn:hover{background:var(--bg-hover)}.mobile-menu{position:absolute;top:100%;right:12px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);min-width:160px;padding:6px;z-index:150;animation:fadeIn var(--dur) var(--ease-out)}.mobile-menu-item{display:block;padding:10px 12px;border-radius:var(--radius-sm);font-size:var(--text-body);color:var(--text);font-weight:500;text-decoration:none;transition:background var(--dur-fast) var(--ease-out)}.mobile-menu-item:hover{background:var(--bg-hover);text-decoration:none}.project-nav{position:sticky;top:var(--topbar-h);z-index:99;background:var(--bg-card);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:var(--space-3);padding:0 var(--space-6);height:var(--projectnav-h)}.project-nav-crumb{font-size:var(--text-body);color:var(--text-muted);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px;flex-shrink:0}.project-nav-crumb:after{content:" /";margin-left:2px}.project-nav-tabs{display:flex;gap:var(--space-1);overflow-x:auto;scrollbar-width:none;height:100%;align-items:center}.project-nav-tabs::-webkit-scrollbar{display:none}.project-nav-tab{position:relative;padding:0 var(--space-3);height:100%;display:inline-flex;align-items:center;font-size:var(--text-body);font-weight:500;color:var(--text-muted);text-decoration:none;white-space:nowrap;transition:color var(--dur) var(--ease-out)}.project-nav-tab:hover{color:var(--text);text-decoration:none}.project-nav-tab.active{color:var(--gray-900)}.project-nav-tab.active:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--gray-900);border-radius:var(--radius-full)}.main-content{flex:1;padding:24px;max-width:1400px;margin:0 auto;width:100%;animation:pageEnter var(--dur-slow) var(--ease-out) both}@keyframes pageEnter{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);transition:box-shadow var(--dur) var(--ease-out),transform var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out)}.card.interactive:hover{transform:translateY(-1px);box-shadow:var(--shadow-md, 0 4px 12px rgba(0,0,0,.08));border-color:var(--text-light)}.card-header{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.card-title{font-weight:600;font-size:15px}.card-body{padding:20px}.form-group{margin-bottom:16px}.form-label{display:block;margin-bottom:6px;font-weight:500;font-size:13px;color:var(--text-muted)}.form-input,.form-select,.form-textarea{width:100%;padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:14px;font-family:inherit;background:#fff;transition:border-color .15s}.form-input:focus,.form-select:focus,.form-textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.form-textarea{min-height:80px;resize:vertical}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:500}.badge-blue{background:var(--primary-light);color:var(--primary)}.badge-green{background:var(--green-light);color:var(--green)}.badge-red{background:var(--red-light);color:var(--red)}.badge-yellow{background:var(--yellow-light);color:var(--yellow)}.badge-gray{background:var(--bg);color:var(--text-muted)}.badge-orange{background:var(--orange-light);color:var(--orange)}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}.project-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:20px;cursor:pointer;transition:border-color var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out),transform var(--dur) var(--ease-out)}.project-card:hover{border-color:var(--text-light);box-shadow:var(--shadow-md);transform:translateY(-2px)}.project-card:active{transform:translateY(0) scale(.99)}.project-card-name{font-weight:600;font-size:16px;margin-bottom:8px}.project-card-meta{font-size:12px;color:var(--text-muted);display:flex;gap:12px;flex-wrap:wrap}.dashboard-layout{display:grid;grid-template-columns:240px 1fr;gap:20px;height:calc(100vh - var(--topbar-h) - var(--projectnav-h) - 48px)}.file-tree{background:#fff;border:1px solid var(--border);border-radius:var(--radius);overflow-y:auto;max-height:100%}.file-tree-header{padding:12px 16px;border-bottom:1px solid var(--border);font-weight:600;font-size:13px;color:var(--text-muted);display:flex;align-items:center;justify-content:space-between;gap:8px}.file-export-btn{flex-shrink:0;text-decoration:none}.file-search{position:relative;padding:8px 12px;border-bottom:1px solid var(--border)}.file-search-input{width:100%;padding:6px 28px 6px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;font-family:inherit;background:var(--bg-card);transition:border-color .15s,box-shadow .15s}.file-search-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.file-search-clear{position:absolute;right:16px;top:50%;transform:translateY(-50%);width:18px;height:18px;padding:0;border:none;border-radius:50%;background:var(--text-light);color:#fff;font-size:12px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background var(--dur-fast) var(--ease-out)}.file-search-clear:hover{background:var(--text-muted)}.file-tree-item{padding:6px 16px;font-size:13px;cursor:pointer;display:flex;align-items:center;gap:6px;border-left:2px solid transparent}.file-tree-item:hover{background:var(--bg-hover)}.file-tree-item.active{background:var(--primary-light);border-left-color:var(--primary);color:var(--primary)}.file-tree-item svg{width:14px;height:14px;flex-shrink:0;color:var(--text-light)}.file-tree-time{flex-shrink:0;font-size:11px;color:var(--text-light);white-space:nowrap;opacity:.85}.file-tree-item:hover .file-tree-time,.file-tree-item.active .file-tree-time{color:var(--text-muted)}.file-delete-btn{display:none;flex-shrink:0;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:none;border-radius:4px;background:transparent;color:var(--text-light);font-size:13px;line-height:1;cursor:pointer;transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}.file-tree-item:hover .file-delete-btn{display:inline-flex}.file-tree-item:hover .file-delete-btn:hover{background:#ef4444;color:#fff}.file-tree-item:hover .file-tree-time{display:none}.dashboard-main{overflow-y:auto;display:flex;flex-direction:column;gap:16px}.review-layout{display:grid;grid-template-columns:var(--review-cols, 1fr 300px);gap:12px;min-height:0;flex:1;transition:grid-template-columns .25s ease}.preview-container{position:relative;background:#fff;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column}.preview-toolbar{padding:8px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;background:var(--bg-card)}.preview-url{flex:1;font-size:12px;color:var(--text-muted);font-family:monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-switcher-label{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--text-muted)}.page-switcher{max-width:220px;font-size:13px;padding:4px 8px;border:1px solid var(--border);border-radius:6px;background:var(--bg-card);color:var(--text);cursor:pointer;outline:none}.page-switcher:focus{border-color:var(--primary)}.preview-sync-hint{display:flex;align-items:center;gap:8px;padding:6px 16px;font-size:12px;color:var(--text-muted);background:var(--yellow-light);border-bottom:1px solid var(--border)}.preview-iframe-wrapper{position:relative;flex:1;overflow:hidden}.preview-iframe{width:100%;height:100%;border:none}.annotation-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:auto}.annotation-overlay.mode-annotate{cursor:crosshair}.annotation-pin{position:absolute;width:28px;height:28px;transform:translate(-50%,-100%);cursor:pointer;z-index:11}.annotation-pin svg{width:28px;height:28px;filter:drop-shadow(0 2px 4px rgba(0,0,0,.3))}.annotation-pin-number{position:absolute;top:4px;left:50%;transform:translate(-50%);color:#fff;font-size:11px;font-weight:700}.annotation-pin.resolved svg path{fill:var(--green)}.annotation-pin.rejected svg path{fill:var(--gray-400);opacity:.7}.annotation-panel{background:#fff;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;min-height:0}.annotation-panel-header{padding:12px 16px;border-bottom:1px solid var(--border);font-weight:600;display:flex;justify-content:space-between;align-items:center}.annotation-panel-toggle{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);color:var(--text-light);cursor:pointer;transition:background .15s,color .15s,border-color .15s}.annotation-panel-toggle:hover{background:var(--bg-hover);color:var(--text);border-color:var(--text-light)}.annotation-panel-toggle svg{width:16px;height:16px}.annotation-panel-collapsed{width:44px;align-items:center;padding:8px 0;gap:12px;overflow:hidden;cursor:default;-webkit-user-select:none;user-select:none}.annotation-panel-collapsed .annotation-panel-toggle{margin-bottom:4px}.annotation-panel-collapsed-title{writing-mode:vertical-rl;font-size:13px;font-weight:600;color:var(--text-light);letter-spacing:2px}.annotation-panel-collapsed-counts{display:flex;flex-direction:column;align-items:center;gap:6px}.annotation-panel-collapsed-counts .badge{min-width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;padding:0 6px;font-size:11px}.annotation-panel-toggle-generate{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:none;border-radius:50%;background:var(--primary);color:#fff;cursor:pointer;transition:background .15s,transform .15s;margin-top:auto}.annotation-panel-toggle-generate:hover{background:var(--primary-dark);transform:scale(1.05)}.annotation-panel-toggle-generate:disabled{opacity:.6;cursor:not-allowed;transform:none}.annotation-panel-toggle-generate svg{width:14px;height:14px}.annotation-filters{display:flex;gap:4px;flex-wrap:wrap;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0}.annotation-sort{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg-card);font-size:13px;color:var(--text-muted);flex-shrink:0}.annotation-sort-select{flex:1;padding:4px 8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card);font-size:13px;color:var(--text);cursor:pointer}.annotation-sort-count{white-space:nowrap}.annotation-list{flex:1;overflow-y:auto;min-height:0;background:var(--bg-card)}.annotation-panel-footer{padding:12px;border-top:1px solid var(--border);background:var(--bg-card);flex-shrink:0}.annotation-export{display:flex;gap:8px;align-items:center}.annotation-export-select{flex:1;padding:6px 8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card);font-size:13px;color:var(--text);cursor:pointer}.annotation-export-btn{flex-shrink:0}.annotation-type-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:middle}.annotation-type-badge{display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border:1px solid;border-radius:999px;font-size:11px;line-height:18px;white-space:nowrap}.annotation-type-badge .annotation-type-dot{margin-right:0;width:7px;height:7px}.annotation-draft-type-row{display:flex;align-items:center;gap:6px;margin-bottom:8px}.annotation-draft-type-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.annotation-draft-type-select{flex:1;padding:4px 8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card);font-size:12px;color:var(--text);cursor:pointer}.annotation-active-hl{position:absolute;z-index:10;pointer-events:none;box-sizing:border-box;border:2px solid var(--orange);background:#f973161a;border-radius:3px;animation:annotation-hl-fade 1.6s ease-out infinite}@keyframes annotation-hl-fade{0%{box-shadow:0 0 #f9731680}to{box-shadow:0 0 0 4px #f9731600}}.annotation-hover-hint{position:absolute;bottom:12px;left:12px;z-index:12;pointer-events:none;display:inline-flex;align-items:center;gap:6px;max-width:60%;padding:5px 10px;background:#18181bd1;color:#fff;border-radius:6px;font-size:12px}.annotation-hover-hint b{font-weight:600;color:#fdba74;white-space:nowrap}.annotation-hover-hint em{font-style:normal;color:#ffffffbf;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.annotation-scope-badge{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border:1px solid var(--border);border-radius:999px;background:var(--bg-muted, #f4f4f5);color:var(--text-muted);font-size:11px;line-height:1.5;white-space:nowrap}.annotation-draft-warn{display:flex;align-items:center;gap:6px;margin:0 0 8px;padding:5px 8px;border-radius:6px;font-size:12px;line-height:1.4}.annotation-draft-warn span{flex-shrink:0;font-weight:600;padding:1px 6px;border-radius:999px;color:#fff;font-size:11px}.annotation-draft-warn.fail{background:#dc262614;border:1px solid rgba(220,38,38,.35);color:#b91c1c}.annotation-draft-warn.fail span{background:#dc2626}.annotation-draft-warn.warn{background:#d977061a;border:1px solid rgba(217,119,6,.4);color:#b45309}.annotation-draft-warn.warn span{background:#d97706}.annotation-draft-anchor{display:flex;align-items:center;gap:6px;margin:0 0 8px;padding:4px 8px;border-radius:6px;background:#2563eb12;border:1px solid rgba(37,99,235,.25);color:#1d4ed8;font-size:12px}.annotation-draft-anchor-probe{color:var(--text-muted);background:transparent;border-color:var(--border)}.annotation-mag-dot{width:8px;height:8px;border-radius:50%;background:#2563eb;flex-shrink:0}.preview-pin-toggle{margin-left:auto;flex-shrink:0;display:inline-flex;align-items:center;gap:4px}.preview-pin-toggle svg{color:var(--orange)}.preview-pin-toggle:not(.on) svg{color:var(--gray-400)}.review-main{height:100%;max-width:none;padding:16px}.review-main .page-header{position:sticky;top:calc(var(--topbar-h) + var(--projectnav-h));z-index:96;background:var(--bg);padding:8px 0;margin-bottom:var(--space-2)}.annotation-item{padding:12px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .15s}.annotation-item:hover{background:var(--bg-hover)}.annotation-item.active{background:var(--orange-light)}.annotation-item-header{display:flex;align-items:center;gap:8px;margin-bottom:4px}.annotation-pin-mini{width:20px;height:20px;background:var(--orange);color:#fff;border-radius:50% 50% 50% 0;transform:rotate(-45deg);display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;flex-shrink:0}.annotation-pin-mini span{transform:rotate(45deg)}.annotation-pin-mini.resolved{background:var(--green)}.annotation-pin-mini.rejected{background:var(--gray-400)}.annotation-item-content{font-size:13px;color:var(--text)}.annotation-item-meta{font-size:11px;color:var(--text-muted);margin-top:4px}.annotation-item-page{display:inline-flex;align-items:center;gap:4px;margin-top:4px;font-size:11px;color:var(--primary);background:var(--primary-light);padding:2px 8px;border-radius:10px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border:none;font-family:inherit;transition:background .15s ease}.annotation-item-page:hover{background:var(--gray-200)}.plan-change-card{border:1px solid var(--border);border-radius:var(--radius);margin-bottom:12px;overflow:hidden}.plan-change-header{padding:12px 16px;background:var(--bg-hover);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:12px}.plan-change-body{padding:16px}.code-block{background:var(--gray-800);color:var(--gray-200);padding:12px;border-radius:var(--radius-sm);font-family:SF Mono,Fira Code,monospace;font-size:12px;overflow-x:auto;margin:8px 0;white-space:pre-wrap;word-break:break-all}.code-label{font-size:11px;font-weight:600;color:var(--text-muted);margin-bottom:2px;text-transform:uppercase}.empty-state{text-align:center;padding:48px 24px;color:var(--text-muted)}.empty-state-icon{margin-bottom:16px;opacity:.4}.empty-state-icon svg{width:64px;height:64px}.empty-state-title{font-size:16px;font-weight:600;margin-bottom:8px;color:var(--text)}.empty-state-desc{font-size:13px}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000;animation:overlayIn var(--dur-fast) var(--ease-out) both}@keyframes overlayIn{0%{opacity:0}to{opacity:1}}.modal{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow-lg);width:90%;max-width:480px;max-height:90vh;overflow-y:auto;animation:modalIn var(--dur) var(--ease-spring) both}@keyframes modalIn{0%{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.modal-header{padding:16px 20px;border-bottom:1px solid var(--border);font-weight:600;font-size:16px;display:flex;justify-content:space-between;align-items:center}.modal-body{padding:20px}.modal-footer{padding:16px 20px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end}.toast-stack{position:fixed;bottom:24px;right:24px;display:flex;flex-direction:column;gap:8px;z-index:2000}.toast{padding:12px 20px;border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);font-weight:500;cursor:pointer;animation:slideIn var(--dur) var(--ease-out)}.toast.leaving{animation:toastOut var(--dur) var(--ease-in-out) forwards}.toast-success{background:var(--green);color:#fff}.toast-error{background:var(--red);color:#fff}.toast-info{background:var(--bg-card);color:var(--text);border:1px solid var(--border)}@keyframes slideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes toastOut{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}.plan-ready-banner{position:fixed;bottom:80px;right:24px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:12px 16px;display:flex;align-items:center;gap:12px;z-index:1500;min-width:320px;max-width:400px;animation:slideIn .3s ease}.plan-ready-dot{width:8px;height:8px;border-radius:50%;background:var(--green);display:inline-block;animation:pulse 1.5s infinite}.plan-ready-close{border:none;background:none;font-size:18px;line-height:1;color:var(--text-light);cursor:pointer;padding:4px 6px;border-radius:4px}.plan-ready-close:hover{background:var(--bg-hover);color:var(--text)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.regenerate-banner{background:#fff7ed;border:1px solid #fdba74;border-left:4px solid var(--orange, #f97316);border-radius:var(--radius-md);padding:12px 14px}.regenerate-cmd{margin-top:8px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.regenerate-cmd code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;background:#fef3c7;border:1px solid #fcd34d;color:#78350f;border-radius:4px;padding:6px 10px;word-break:break-all;flex:1;min-width:200px}@media (max-width: 768px){.plan-ready-banner{left:12px;right:12px;bottom:76px;min-width:0;max-width:none}}@media (max-width: 1024px){.main-content{padding:var(--space-4)}.dashboard-layout{grid-template-columns:200px 1fr;gap:var(--space-4)}.project-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}}@media (max-width: 768px){.main-content{padding:var(--space-3)}.dashboard-layout,.review-layout{grid-template-columns:1fr;height:auto}.file-tree{max-height:200px}.annotation-panel{max-height:400px}.project-grid{grid-template-columns:1fr}.topbar{padding:0 12px}.topbar-nav{gap:0}.topbar-nav a{padding:6px 8px;font-size:13px}.hamburger-btn{display:inline-flex}.project-nav{padding:0 12px}.project-nav-crumb{display:none}.page-header{flex-wrap:wrap}.page-header .header-actions{width:100%}.modal{width:calc(100vw - 24px);margin:0 auto}.toast-stack{left:12px;right:12px;bottom:12px}.toast{width:100%}.plan-ready-banner{left:12px;right:12px;bottom:76px;min-width:0;max-width:none}.task-board{grid-template-columns:1fr}}@media (max-width: 480px){.main-content{padding:var(--space-2)}.topbar-brand span{display:none}.project-nav-tabs{overflow-x:auto}.project-nav-tabs a{padding:10px;font-size:13px}.page-title{font-size:var(--text-lg)}.header-actions .btn{padding:6px 10px;font-size:13px}.modal-body{padding:var(--space-4)}.modal-tabs{padding:0 12px}.modal-tab{padding:10px}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-light)}.spinner{width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .6s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.loading-container{display:flex;align-items:center;justify-content:center;padding:48px;flex-direction:column;gap:12px;color:var(--text-muted)}.auth-error{padding:10px 12px;margin-bottom:12px;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;color:#b91c1c;font-size:13px}.auth-locked{padding:10px 12px;margin-bottom:12px;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;color:#92400e;font-size:13px}.auth-note{margin-top:10px;font-size:12px;color:var(--text-muted)}.btn-accent{background:var(--primary);color:#fff}.btn-accent:hover{background:var(--primary-dark)}.modal-title{font-weight:600;font-size:15px}.modal-close{background:none;border:none;font-size:20px;cursor:pointer;color:var(--text-muted);line-height:1}.modal-tabs{display:flex;border-bottom:1px solid var(--border);padding:0 20px}.modal-tab{padding:10px 16px;font-size:13px;cursor:pointer;color:var(--text-muted);border-bottom:2px solid transparent;margin-bottom:-1px}.modal-tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}.form-check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text);padding:4px 0;cursor:pointer}.dropdown-menu{position:absolute;right:0;top:calc(100% + 4px);background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #0000001f;min-width:220px;z-index:100;overflow:hidden}.dropdown-item{padding:10px 14px;font-size:13px;cursor:pointer}.dropdown-item:hover{background:var(--bg-hover)}.task-board{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;align-items:start}.task-column{background:var(--bg);border:1px solid var(--border);border-radius:10px;min-height:240px;display:flex;flex-direction:column}.task-column-header{display:flex;align-items:center;gap:8px;padding:10px 12px;font-size:13px;font-weight:600;border-bottom:1px solid var(--border)}.task-column-dot{width:8px;height:8px;border-radius:50%}.task-column-count{margin-left:auto;background:var(--bg-hover);border-radius:999px;padding:1px 8px;font-size:12px;font-weight:500}.task-column-body{padding:8px;display:flex;flex-direction:column;gap:8px;overflow-y:auto;max-height:68vh}.task-empty{font-size:12px;color:var(--text-muted);text-align:center;padding:24px 0}.task-card{background:#fff;border:1px solid var(--border);border-radius:8px;padding:10px 12px;cursor:pointer;transition:box-shadow .15s,border-color .15s}.task-card:hover{box-shadow:0 2px 8px #00000014}.task-card-selected{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-light)}.task-card-synced{border-left:3px solid var(--orange, #f59e0b)}.task-sync-badge{animation:task-sync-pulse 2s ease-in-out 3}@keyframes task-sync-pulse{0%,to{opacity:1}50%{opacity:.55}}.task-card-top{display:flex;gap:4px;align-items:center;margin-bottom:6px;flex-wrap:wrap}.task-card-merge{cursor:pointer}.task-card-merge:hover{background:var(--primary-light)}.task-merge-checkbox{width:16px;height:16px;margin-right:4px;accent-color:var(--primary);cursor:pointer;flex-shrink:0}.task-merge-checkbox:focus{outline:2px solid var(--primary);outline-offset:2px}.task-card-title{font-size:13px;font-weight:600;line-height:1.4;margin-bottom:4px}.task-card-module{font-size:11px;color:var(--text-muted);margin-bottom:4px}.task-card-labels{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:6px}.task-label{font-size:11px;background:var(--bg);border:1px solid var(--border);color:var(--text-muted);border-radius:4px;padding:1px 6px}.task-card-progress{display:flex;align-items:center}.progress-track{flex:1;height:4px;background:var(--bg-hover);border-radius:999px;overflow:hidden}.progress-fill{height:100%;border-radius:999px;transition:width .3s}.task-card-error{margin-top:6px;font-size:11px;color:var(--red)}.granularity-options{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.granularity-option{border:1px solid var(--border);border-radius:8px;padding:10px;cursor:pointer;text-align:center}.granularity-option.active{border-color:var(--primary);background:var(--primary-light);box-shadow:0 0 0 1px var(--primary)}.granularity-label{font-size:13px;font-weight:600}.granularity-desc{font-size:11px;color:var(--text-muted);margin-top:2px}.preview-list{border:1px solid var(--border);border-radius:8px;padding:8px;max-height:260px;overflow-y:auto}.preview-item{display:flex;align-items:center;gap:8px;padding:5px 4px;border-bottom:1px solid var(--bg-hover)}.preview-item:last-child{border-bottom:none}.annotation-link-list{display:flex;flex-direction:column;gap:6px}.annotation-link-item{display:flex;align-items:center;gap:8px;border:1px solid var(--border);border-radius:6px;padding:6px 10px}.annotation-link-item.resolved{opacity:.65;background:var(--bg)}@media (max-width: 900px){.task-board,.granularity-options{grid-template-columns:1fr}}.task-column{transition:background .15s,border-color .15s,box-shadow .15s}.task-column-over{background:var(--primary-light);border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-light),inset 0 0 0 1px var(--primary-light)}.task-column-over .task-column-header{color:var(--primary)}.task-card{touch-action:none;-webkit-user-select:none;user-select:none}.task-card:focus-visible{outline:none;box-shadow:0 0 0 2px var(--primary-light);border-color:var(--primary)}.task-card-dragging{opacity:.35;transform:scale(.98);box-shadow:inset 0 0 0 1px var(--primary-light)}.task-card-ghost{cursor:grabbing!important}.task-card-menu{margin-left:auto;padding:0 4px;font-size:16px;line-height:1;color:var(--text-light);background:transparent;border:none;border-radius:4px;cursor:pointer;opacity:0;transition:opacity .15s,background .15s,color .15s}.task-card:hover .task-card-menu,.task-card:focus-within .task-card-menu,.task-card-selected .task-card-menu{opacity:1}.task-card-menu:hover{background:var(--bg-hover);color:var(--text)}.task-card-menu:focus-visible{opacity:1;outline:2px solid var(--primary);outline-offset:1px}.task-move-menu{background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #00000024;min-width:180px;padding:6px 0;animation:fadeIn .12s ease}.task-move-menu-title{padding:6px 12px 8px;font-size:12px;color:var(--text-muted);border-bottom:1px solid var(--bg-hover);margin-bottom:4px;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-move-menu-item{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:13px;cursor:pointer;transition:background .12s}.task-move-menu-item:hover{background:var(--bg-hover)}.task-move-menu-divider{height:1px;background:var(--border);margin:4px 0}@keyframes fadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.task-card-menu{opacity:1;padding:2px 6px}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.spinner{animation-duration:.6s!important}}.review-mode-switch{display:inline-flex;margin-left:auto;flex-shrink:0;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;background:var(--bg)}.review-mode-switch button{padding:3px 12px;font-size:12px;border:none;background:transparent;color:var(--text-muted);cursor:pointer;font-family:inherit;transition:background .15s,color .15s}.review-mode-switch button+button{border-left:1px solid var(--border)}.review-mode-switch button:hover{background:var(--bg-hover);color:var(--text)}.review-mode-switch button.active{background:var(--primary);color:#fff}.review-mode-switch:focus-within{outline:2px solid var(--primary-light);outline-offset:1px}.preview-fullscreen-btn{display:inline-flex;align-items:center;gap:4px;flex-shrink:0}.preview-fullscreen-btn.active{color:var(--primary);border-color:var(--primary);background:var(--primary-light)}.preview-pin-toggle{margin-left:0}.preview-toolbar{flex-wrap:wrap;row-gap:8px}.review-layout.tri-active{display:flex;align-items:stretch;gap:0}.review-layout.tri-active>.preview-container{flex:1;min-width:0}.tri-rail{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;flex-shrink:0}.tri-rail>.annotation-panel,.tri-rail>.annotation-detail{flex:1;min-height:0;width:100%}.tri-grip{flex:0 0 8px;cursor:col-resize;display:flex;align-items:stretch;justify-content:center;position:relative;z-index:5}.tri-grip:after{content:"";width:3px;margin:8px 0;border-radius:2px;background:var(--gray-200);transition:background var(--dur-fast) var(--ease-out)}.tri-grip:hover:after,.tri-grip:active:after{background:var(--gray-400)}.tri-grip:active{cursor:col-resize}.list-pane{min-width:0;min-height:0;display:flex;overflow:hidden}.list-pane>.annotation-panel{flex:1;min-height:0;width:100%}.annotation-edit-form{display:flex;flex-direction:column;gap:6px}.annotation-edit-form-inline{padding:8px;background:var(--bg);border:1px solid var(--border);border-radius:6px}.annotation-edit-label{font-size:11px;color:var(--text-muted);font-weight:500}.annotation-edit-type{padding:5px 8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card);font-size:12px;color:var(--text);cursor:pointer}.annotation-edit-textarea{width:100%;padding:6px 8px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;font-size:13px;line-height:1.5;resize:vertical;color:var(--text);outline:none;box-sizing:border-box}.annotation-edit-textarea:focus{border-color:var(--primary);box-shadow:var(--focus-ring)}.annotation-edit-actions{display:flex;justify-content:flex-end;gap:6px}.annotation-item-modified{display:inline-block;margin-left:6px;font-size:11px;color:var(--text-muted);vertical-align:middle}.annotation-detail{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;min-height:0}.annotation-detail-header{padding:12px 16px;border-bottom:1px solid var(--border);font-weight:600;display:flex;justify-content:space-between;align-items:center}.annotation-detail-toggle{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);color:var(--text-light);cursor:pointer;transition:background .15s,color .15s,border-color .15s}.annotation-detail-toggle:hover{background:var(--bg-hover);color:var(--text);border-color:var(--text-light)}.annotation-detail-toggle svg{width:16px;height:16px}.annotation-detail-body{flex:1;overflow-y:auto;min-height:0;padding:12px 16px}.annotation-detail-badges{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.annotation-detail-content{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);padding:10px 12px}.annotation-detail-text{font-size:13px;line-height:1.6;white-space:pre-wrap;word-break:break-word;color:var(--text)}.annotation-detail-modified{margin-top:8px;font-size:11px;color:var(--text-muted)}.annotation-detail-meta{margin-top:12px;display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--text)}.annotation-detail-meta>div{display:flex;align-items:baseline;flex-wrap:wrap}.annotation-detail-meta-label{display:inline-block;min-width:44px;color:var(--text-muted);flex-shrink:0}.annotation-detail-jump{margin-left:8px;font-size:11px;color:var(--primary);background:var(--primary-light);border:none;border-radius:10px;padding:1px 8px;cursor:pointer;font-family:inherit}.annotation-detail-jump:hover{background:var(--gray-200)}.annotation-detail-actions{margin-top:12px;display:flex;flex-direction:column;gap:6px}.annotation-detail-collapsed{display:flex;flex-direction:column;align-items:center;padding:8px 0;gap:12px;overflow:hidden;cursor:default;-webkit-user-select:none;user-select:none}.annotation-detail-collapsed-title{writing-mode:vertical-rl;font-size:13px;font-weight:600;color:var(--text-light);letter-spacing:2px}.annotation-detail-collapsed-counts{display:flex;flex-direction:column;align-items:center;gap:6px}.review-main.screen-fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:12000;height:100%!important;max-width:none;margin:0;padding:0!important;background:#0b0d10;animation:none;overflow:hidden}.review-main.screen-fullscreen .page-header{display:none}.review-main.screen-fullscreen .review-layout{display:block;width:100%;height:100%}.review-main.screen-fullscreen .review-layout>.list-pane,.review-main.screen-fullscreen .review-layout>.tri-rail,.review-main.screen-fullscreen .review-layout>.tri-grip{display:none}.review-main.screen-fullscreen .review-layout>.preview-container{border:none;border-radius:0;width:100%;height:100%}.review-main.screen-fullscreen .preview-toolbar{background:var(--gray-900);color:var(--gray-100)}.review-main.screen-fullscreen .page-switcher,.review-main.screen-fullscreen .page-switcher-label{color:var(--gray-300)}.annotation-detail-element{margin:14px 0 4px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--bg)}.annotation-detail-element-title{font-size:12px;font-weight:600;color:var(--text-muted);margin-bottom:6px}.annotation-detail-tag{font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:13px;color:var(--gray-800);word-break:break-all;line-height:1.5}.annotation-detail-tag-name{font-weight:700;color:var(--gray-900)}.annotation-detail-element-path{margin-top:4px;font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:11px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.annotation-detail-element-text{margin-top:6px;font-size:12px;color:var(--gray-600);line-height:1.5;word-break:break-all;max-height:60px;overflow:hidden}.annotation-detail-element-empty{font-size:12px;color:var(--text-muted);font-style:italic}
