:root{--bg: #eae8e4;--panel: #f0efeb;--border: #dcd9d4;--text: #1a1714;--muted: #6e6660;--brand: #e07b2a;--brand-dark: #c4621a;--brand-soft: #f9f0e6;--ok-bg: #e9f9f0;--ok: #27935d;--warn-bg: #fff5df;--warn: #a27215;--danger-bg: #ffeaea;--danger: #c53030}*{box-sizing:border-box}body{margin:0;font-family:Yu Gothic UI,Yu Gothic UI Light,Segoe UI,sans-serif;font-weight:450;color:var(--text);background:var(--bg)}.app-shell{min-height:100vh;display:grid;grid-template-columns:240px 1fr}.sidebar{background:var(--panel);border-right:1px solid var(--border);padding:14px 12px;display:grid;grid-template-rows:auto auto 1fr auto;gap:12px;position:sticky;top:0;height:100vh}.project-chip{border-radius:10px;padding:10px 6px;font-size:12px;color:var(--muted)}.project-chip strong{display:block;font-size:15px;font-weight:600;letter-spacing:3px;text-transform:uppercase;color:var(--brand);text-shadow:0 0 18px rgba(240,138,36,.24),0 0 30px rgba(255,172,96,.16)}.side-nav{display:grid;gap:3px;align-content:start}.side-nav a{text-decoration:none;color:var(--muted);font-size:13px;border:1px solid transparent;border-radius:9px;padding:9px 10px;display:flex;justify-content:space-between;align-items:center;background:transparent;cursor:pointer}.side-nav a:hover{border-color:var(--border);background:#faf8f5;color:var(--text)}.side-nav a.active{border-color:var(--nav-active-border, #e8d4bc);background:var(--nav-active-bg, #fdf5ec);color:var(--nav-active-text, #c96a1a);font-weight:600}.nav-sep{height:1px;background:var(--border);margin:4px 2px}.side-bottom{display:none}.user-card{display:flex;align-items:center;gap:9px;padding:6px 4px;border-radius:9px}.user-avatar{width:34px;height:34px;border-radius:50%;background:var(--brand);color:#fff;display:grid;place-items:center;font-size:13px;font-weight:700;flex-shrink:0}.user-info{flex:1;min-width:0}.user-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-role{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.logout-btn{border:none;border-radius:6px;background:transparent;color:var(--muted);font-size:12px;padding:4px 7px;cursor:pointer;white-space:nowrap;flex-shrink:0}.logout-btn:hover{color:var(--danger);background:var(--danger-bg)}.main-col{min-width:0;display:grid;grid-template-rows:auto 1fr}.topbar{height:58px;border-bottom:1px solid var(--border);background:var(--panel);display:flex;align-items:center;justify-content:space-between;padding:0 22px;position:sticky;top:0;z-index:10}.brand{display:flex;align-items:center;gap:10px;font-size:14px;font-weight:600}.brand-icon{width:28px;height:28px;border-radius:7px;background:var(--brand);color:#fff;display:grid;place-items:center;font-size:13px;font-weight:700}.brand small{display:block;margin-top:1px;color:var(--muted);font-size:11px;font-weight:400}.topbar-user-card{border-left:1px solid var(--border);padding:4px 4px 4px 14px;margin-left:2px}.topbar-right{display:flex;align-items:center;gap:12px;font-size:13px;color:var(--muted)}.container{max-width:1300px;margin:0 auto;padding:22px 24px 36px}body.dashboard-route-pending .container{min-height:48vh}.overview-page{display:none}.overview-page.active{display:block}.projects-page{display:none}.projects-page.active{display:block}.roadmap-page{display:none}.roadmap-page.active{display:block}.settings-page{display:none}.settings-page.active{display:block}.admin-page{display:none}.admin-page.active{display:block}.admin-hint{color:var(--muted);font-size:13px;margin:0 0 10px}.admin-form-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px}.admin-check{font-size:13px;color:var(--text);display:flex;align-items:center;gap:6px;white-space:nowrap}.admin-multi-select{height:auto!important;min-height:140px!important;padding:6px 8px}.admin-pick-list{min-width:320px;max-width:460px;min-height:140px;max-height:180px;overflow:auto;background:#fff;border:1px solid var(--border);border-radius:9px;padding:6px}.admin-pick-empty{color:var(--muted);font-size:12px;padding:8px;text-align:center}.admin-pick-item{display:flex;align-items:flex-start;gap:8px;padding:5px 6px;border-radius:6px;cursor:pointer}.admin-pick-item:hover{background:#faf8f5}.admin-pick-item input{margin-top:2px}.admin-pick-text{font-size:13px;color:var(--text);line-height:1.3}.admin-source-badge{display:inline-block;font-size:11px;border-radius:999px;padding:2px 8px;border:1px solid var(--border);color:var(--muted);background:#fff}.admin-source-direct{color:#2a6fba;border-color:#c8ddf4;background:#eef5fc}.admin-source-client{color:#8a5b15;border-color:#ecd7b1;background:#fff8ea}.admin-source-both{color:#2f7f4f;border-color:#bfe4cd;background:#eefaf2}.admin-section-tabs{display:inline-flex;gap:4px;border:1px solid var(--border);border-radius:12px;background:#fff;padding:4px;margin:0 0 14px}.admin-section-tab{border:1px solid transparent;border-radius:9px;background:transparent;color:var(--muted);cursor:pointer;font-size:13px;padding:8px 12px}.admin-section-tab:hover{color:var(--text);background:#faf8f5}.admin-section-tab.active{border-color:var(--nav-active-border, #e8d4bc);background:var(--nav-active-bg, #fdf5ec);color:var(--nav-active-text, #c96a1a);font-weight:600}.admin-tab-panel{display:none}.admin-tab-panel.active{display:block}.email-admin-head,.email-admin-test,.email-outbox-toolbar,.email-outbox-item,.email-outbox-actions{display:flex;align-items:center;gap:10px}.email-admin-head{justify-content:space-between;margin-bottom:12px}.email-admin-head h3,.email-admin-card h4{margin:0}.email-admin-test{flex-wrap:wrap;margin-bottom:14px}.email-admin-grid{display:grid;grid-template-columns:minmax(260px,360px) 1fr;gap:14px}.email-admin-card{border:1px solid var(--border);border-radius:12px;background:#fffdfa;padding:12px}.email-toggle-list{display:grid;gap:8px;margin-top:10px}.email-toggle-row{display:flex;align-items:center;gap:9px;padding:8px;border:1px solid var(--border);border-radius:10px;background:#fff}.email-toggle-row small{display:block;color:var(--muted);font-size:11px}.email-users-card{margin-top:14px}.email-users-scroll{overflow:auto;max-height:420px;margin-top:10px}.email-users-table th,.email-users-table td{text-align:center;vertical-align:middle}.email-users-table th:first-child,.email-users-table td:first-child{text-align:left;min-width:220px}.email-outbox-toolbar{flex-wrap:wrap;margin:10px 0}.email-outbox-list{display:grid;gap:8px;max-height:360px;overflow:auto}.email-outbox-item{justify-content:space-between;border:1px solid var(--border);border-radius:10px;background:#fff;padding:9px}.email-outbox-meta{color:var(--muted);font-size:12px;margin-top:2px}.email-outbox-error{color:#c53030;font-size:12px;margin-top:4px}.email-status{display:inline-flex;border:1px solid var(--border);border-radius:999px;padding:3px 8px;background:#fff;color:var(--muted);font-size:11px}.email-status-sent{color:#2f7f4f;border-color:#bfe4cd;background:#eefaf2}.email-status-queued{color:#8a5b15;border-color:#ecd7b1;background:#fff8ea}.email-status-sending{color:#2a6fba;border-color:#c8ddf4;background:#eef5fc}.email-status-failed{color:#c53030;border-color:#f5c6c6;background:#fff5f5}.toolbar{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:18px}h1{margin:0;font-size:26px;font-weight:700;letter-spacing:-.2px}.sub{margin-top:4px;font-size:13px;color:var(--muted)}.btn{height:36px;border-radius:9px;border:1px solid var(--border);background:#fff;color:var(--text);font-size:13px;padding:0 14px;cursor:pointer;transition:background .12s,border-color .12s}.btn:hover{background:#faf8f5;border-color:#d6cfc6}.btn.primary{border-color:var(--brand);background:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-dark);border-color:var(--brand-dark)}.btn.danger{border-color:#e53935;background:#fff;color:#e53935}.btn.danger:hover{background:#e53935;color:#fff}.search{width:320px;height:36px;border:1px solid var(--border);border-radius:9px;background:#fff;padding:0 12px;font-size:13px;margin-bottom:16px;outline:none}.search:focus{border-color:var(--brand);box-shadow:0 0 0 3px #e07b2a1f}.dash-grid{display:grid;grid-template-columns:1.1fr 1fr 1fr;gap:14px;margin-top:16px}.dash-card{background:#fff;border:1px solid var(--border);border-radius:13px;padding:14px}.dash-title{margin:0 0 10px;font-size:14px;font-weight:650;color:#1f1c18}.metric{font-size:40px;line-height:1;font-weight:700;letter-spacing:-1px;margin:4px 0;color:var(--text)}.metric-sub{color:var(--muted);font-size:13px}.ok-time{color:#2aa86a}.ov-chart{width:100%;height:170px;display:block}.ov-loading{color:var(--muted);font-size:12px;padding:10px 4px}.roadmap-toolbar-actions{display:flex;gap:8px;flex-shrink:0}.roadmap-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:16px 0}.roadmap-stat{display:grid;gap:6px}.roadmap-stat span{color:var(--muted);font-size:13px}.roadmap-stat strong{color:var(--text);font-size:34px;line-height:1}.roadmap-controls{display:grid;grid-template-columns:minmax(240px,1fr) repeat(3,minmax(150px,180px));gap:10px;margin-bottom:14px}.roadmap-controls .files-search{width:100%;box-sizing:border-box;margin:0}.roadmap-section-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}.roadmap-section-head h3{margin:0;color:var(--text);font-size:16px}.roadmap-section-sub{margin:3px 0 0;color:var(--muted);font-size:12px}.roadmap-section-head span{color:var(--muted);font-size:12px}.roadmap-timeline-wrap{margin-bottom:14px}.roadmap-active-filter{display:inline-flex;align-items:center;min-height:26px;margin-bottom:10px;border:1px solid var(--border);border-radius:999px;background:#fff;padding:0 10px;color:var(--muted);font-size:12px}.roadmap-timeline{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(190px,1fr);gap:10px;overflow-x:auto;padding-bottom:2px}.roadmap-period{border:1px solid var(--border);background:#fffaf5;border-radius:12px;padding:12px 14px;cursor:pointer;text-align:left;display:grid;gap:7px;min-height:116px}.roadmap-period:hover,.roadmap-period.active{border-color:var(--brand);background:var(--brand-soft)}.roadmap-period-label{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.roadmap-period strong{color:var(--text);font-size:17px;line-height:1.2;font-weight:650}.roadmap-period small{color:var(--brand);font-size:15px;font-weight:650}.roadmap-period em{color:var(--muted);font-size:12px;font-style:normal}.roadmap-modules{display:grid;gap:16px}.roadmap-modules-title{margin:12px 0 10px}.roadmap-modules-title h3{margin:0;color:var(--text);font-size:17px}.roadmap-modules-title p{margin:4px 0 0;color:var(--muted);font-size:13px}.roadmap-module-group{background:#fff;border:1px solid var(--border);border-radius:14px;padding:14px}.roadmap-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.roadmap-card{border:1px solid var(--border);border-left:4px solid #d9d2ca;border-radius:12px;background:#fffdfa;padding:12px;display:grid;gap:9px}.roadmap-card h4{margin:0;color:var(--text);font-size:15px}.roadmap-card p{margin:0;color:var(--muted);font-size:13px;line-height:1.45}.roadmap-card-top,.roadmap-card-meta{display:flex;justify-content:space-between;align-items:center;gap:8px}.roadmap-card-meta{color:var(--muted);font-size:12px}.roadmap-badge,.roadmap-priority{display:inline-flex;align-items:center;border-radius:999px;border:1px solid var(--border);background:#fff;padding:3px 8px;color:var(--muted);font-size:11px;line-height:1}.roadmap-progress{height:7px;overflow:hidden;border-radius:999px;background:#eee8e0}.roadmap-progress span{display:block;height:100%;border-radius:inherit;background:var(--brand)}.roadmap-status-in_progress{border-left-color:#2a6fba}.roadmap-status-next{border-left-color:var(--brand)}.roadmap-status-planned{border-left-color:#9b8f83}.roadmap-status-done{border-left-color:#2f7f4f}.roadmap-status-paused{border-left-color:#b7791f}.roadmap-priority-critical .roadmap-priority{color:#b42318;border-color:#f2b8b5;background:#fff1f0}.roadmap-priority-high .roadmap-priority{color:#a85600;border-color:#f1d0ad;background:#fff7ed}.roadmap-edit-btn{justify-self:start}.roadmap-empty,.roadmap-loading,.roadmap-error{color:var(--muted);text-align:center;padding:34px 14px}.roadmap-error{color:#c53030}.roadmap-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.roadmap-form-grid label{display:grid;gap:6px;color:var(--text);font-size:13px;font-weight:500}.roadmap-form-grid .files-search{width:100%;box-sizing:border-box;margin:0}.roadmap-form-grid textarea.files-search{height:auto;min-height:92px;padding-top:9px;resize:vertical}.roadmap-form-wide{grid-column:1 / -1}.req{color:#c53030}.chart-placeholder{height:170px;border-radius:10px;border:1px dashed #d8d2c8;background:linear-gradient(180deg,#e07b2a12,#e07b2a05),repeating-linear-gradient(to right,transparent 0,transparent 24px,rgba(160,140,120,.09) 24px,rgba(160,140,120,.09) 25px);position:relative;overflow:hidden}.chart-placeholder:after{content:"";position:absolute;left:0;right:0;bottom:26px;height:2px;background:linear-gradient(90deg,#f5b07a,var(--brand),#f5b07a);transform:skew(-18deg);opacity:.8}.table-mini{width:100%;border-collapse:collapse;font-size:12px}.table-mini th,.table-mini td{border-bottom:1px solid var(--border);padding:7px 4px;text-align:left}.table-mini th{color:var(--muted);font-weight:500;font-size:11px}.projects-grid{display:grid;grid-template-columns:repeat(3,minmax(280px,1fr));gap:16px}.card{background:#fff;border:1px solid var(--border);border-radius:13px;overflow:hidden;cursor:pointer;transition:.15s}.card:hover{transform:translateY(-2px);box-shadow:0 10px 22px #1e140a14}.img{height:156px;background-size:cover;background-position:center}.img.a{background-image:linear-gradient(145deg,#8c7060,#4a3224)}.img.b{background-image:linear-gradient(145deg,#9a7a5a,#5a3c22)}.img.c{background-image:linear-gradient(145deg,#b89878,#7a5438)}.project-cover-img{transition:background-image .25s}.project-cover-img.has-cover{background-size:contain!important;background-repeat:no-repeat;background-position:center;background-color:#ece8e2}.project-cover-gradient-1{background-image:linear-gradient(145deg,#8c7060,#4a3224)}.project-cover-gradient-2{background-image:linear-gradient(145deg,#6a8a7a,#2a5a4a)}.project-cover-gradient-3{background-image:linear-gradient(145deg,#7a7aaa,#3a3a7a)}.project-card-actions{display:flex;gap:4px;margin-left:auto}.card-action-btn{background:#ffffffd9;border:none;border-radius:6px;width:26px;height:26px;cursor:pointer;font-size:13px;display:flex;align-items:center;justify-content:center;transition:background .15s}.card-action-btn:hover{background:#fff;box-shadow:0 2px 6px #0000001f}.card-action-btn:hover svg{stroke:var(--brand)}.card-action-del:hover svg{stroke:#e53e3e}.projects-empty{color:var(--muted);font-size:14px;padding:32px 0;text-align:center}#crop-modal{z-index:400!important}#crop-modal .box{max-width:600px}#crop-viewport{position:relative;width:100%;aspect-ratio:3 / 1;background:#1a1a1a;border-radius:8px;overflow:hidden;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}#crop-viewport:active{cursor:grabbing}#crop-canvas{position:absolute;top:0;left:0;width:100%;height:100%;display:block}#crop-crosshair{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:linear-gradient(rgba(255,255,255,.25) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.25) 1px,transparent 1px);background-size:33.33% 33.33%;border:2px solid rgba(255,255,255,.5);border-radius:8px;box-shadow:inset 0 0 0 1px #0000004d}.crop-hint{font-size:12px;color:var(--muted);text-align:center;margin:0}#project-modal .box,#client-modal .box{max-width:480px}.cover-upload-wrap{margin-bottom:16px}.cover-upload-area{width:100%;aspect-ratio:3 / 1;border:2px dashed var(--border);border-radius:10px;cursor:pointer;overflow:hidden;transition:border-color .15s}.cover-upload-area:hover{border-color:var(--brand)}.cover-upload-inner{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--muted);font-size:13px;background-size:contain;background-repeat:no-repeat;background-position:center;background-color:#ece8e2}.field-label{font-size:13px;font-weight:500;color:var(--text);display:block;margin-bottom:5px}.req{color:#e53e3e}.body{padding:12px}.head{display:flex;justify-content:space-between;gap:8px;align-items:center}.name{font-size:15px;font-weight:600}.badge{font-size:11px;padding:3px 8px;border-radius:999px;border:1px solid transparent;white-space:nowrap}.badge.ok{background:var(--ok-bg);color:var(--ok);border-color:#c8ebd8}.badge.warn{background:var(--warn-bg);color:var(--warn);border-color:#f0dfb7}.badge.orange{background:var(--brand-soft);color:var(--brand);border-color:#f0cba8}.meta{margin-top:8px;color:var(--muted);font-size:12px;line-height:1.45;min-height:35px}.foot{margin-top:10px;display:flex;gap:12px;color:var(--muted);font-size:12px}.project-detail{display:none}.back{border:none;background:none;color:var(--muted);font-size:13px;cursor:pointer;padding:0}.back:hover{color:var(--brand)}.project-title{margin:6px 0 0;font-size:22px;font-weight:700}.project-sub{margin:6px 0 0;color:var(--muted);font-size:13px}.tabs{margin-top:12px;display:flex;gap:6px}.tab{border:1px solid var(--border);border-radius:9px;background:#fff;color:var(--muted);font-size:13px;padding:7px 12px;cursor:pointer;transition:.12s}.tab.active{color:var(--brand);border-color:#f0cba8;background:var(--brand-soft);font-weight:600}.panel{margin-top:14px;background:#fff;border:1px solid var(--border);border-radius:13px;padding:16px}.files-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px}.files-search{width:280px;height:34px;border:1px solid var(--border);border-radius:8px;padding:0 11px;font-size:13px;background:#fff;outline:none}.files-search:focus{border-color:var(--brand);box-shadow:0 0 0 3px #e07b2a1a}.files-caption{color:var(--muted);font-size:12px;white-space:nowrap}.files-table{width:100%;border-collapse:collapse;font-size:13px}.files-table th,.files-table td{padding:9px 8px;border-bottom:1px solid var(--border);text-align:left;vertical-align:middle}.files-table th{color:var(--muted);font-weight:500;font-size:12px}.files-table tr:last-child td{border-bottom:none}.file-name{font-weight:600;color:var(--text)}.model-name-link{border:none;background:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;text-align:left;font-weight:600}.model-name-link:hover{color:var(--brand);text-decoration:underline}.file-version{display:inline-block;padding:2px 8px;border-radius:999px;border:1px solid #f0cba8;background:var(--brand-soft);color:var(--brand);font-size:11px;font-weight:600}.file-actions{display:flex;gap:6px}.tiny{border:1px solid var(--border);border-radius:7px;padding:5px 10px;background:#fff;font-size:12px;color:var(--muted);cursor:pointer;transition:.12s}.tiny:hover{color:var(--text);border-color:#c8c0b8}.open-direct-btn{border-color:#f0cba8;background:var(--brand-soft);color:var(--brand)}.open-direct-btn:hover{border-color:#e0b898;color:var(--brand-dark)}.kv{display:grid;grid-template-columns:220px 1fr;row-gap:10px;column-gap:10px;font-size:14px}.kv .k{color:var(--muted)}.kv .v{color:var(--text)}.tflex-folder-modal-label{font-size:13px;font-weight:600;color:var(--text)}.tflex-folder-modal-hint{margin:0;font-size:12px;color:var(--muted);line-height:1.45}.tflex-head{margin-bottom:14px}.tflex-title{font-size:15px;font-weight:650;color:var(--text)}.tflex-sub{margin-top:4px;font-size:12px;color:var(--muted)}.tflex-tree{display:grid;gap:10px}.tflex-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:8px}.tflex-folder-actions-hint{margin:0 0 12px;padding:8px 12px;font-size:12px;line-height:1.45;color:var(--text);background:#faf6f0;border:1px solid #e8dfd4;border-radius:8px}.tflex-toolbar-left{display:flex;align-items:center;gap:8px}.tflex-delete-folder-btn{border-color:#f1c4c4;color:var(--danger)}.tflex-delete-folder-btn:hover{border-color:#e49b9b;background:var(--danger-bg)}.tflex-delete-folder-btn:disabled{opacity:.55;cursor:not-allowed}.tflex-delete-folder-btn:disabled:hover{background:transparent;border-color:#f1c4c4}.tflex-toolbar-right{display:flex;align-items:center;gap:8px}.tflex-folder-select{width:190px;height:34px;margin:0}.tflex-files-search{width:280px;margin:0}.tflex-layout{display:grid;grid-template-columns:280px 1fr;gap:12px}.tflex-folders-list{border:1px solid var(--border);border-radius:10px;background:#fbfaf8;overflow:hidden}.tflex-folder-empty{padding:14px 12px;font-size:13px;color:var(--muted);line-height:1.45}.tflex-folder-row{display:flex;align-items:stretch;border-top:1px solid #ece8e2}.tflex-folder-row:first-child{border-top:none}.tflex-folder-item{flex:1;min-width:0;border:none;background:transparent;display:flex;align-items:center;gap:8px;padding:10px 12px;text-align:left;color:var(--text);cursor:pointer}.tflex-folder-toggle{width:18px;height:18px;flex-shrink:0;border:none;border-radius:4px;background:transparent;color:var(--muted);cursor:pointer;font-size:13px;line-height:18px;padding:0}.tflex-folder-toggle:hover{background:#e6782a1f;color:var(--brand)}.tflex-folder-toggle-spacer{display:inline-block;cursor:default}.tflex-folder-toggle-spacer:hover{background:transparent;color:var(--muted)}.tflex-folder-row-del{flex-shrink:0;width:36px;border:none;border-left:1px solid #ece8e2;background:transparent;color:var(--muted);font-size:18px;line-height:1;cursor:pointer;padding:0}.tflex-folder-row-del:hover{color:var(--danger);background:#c530300f}.tflex-folder-item.active{background:var(--brand-soft);box-shadow:inset 2px 0 0 var(--brand)}.tflex-folder-item:hover{background:#f4efe9}.tflex-folder-item-name{font-size:13px;font-weight:600}.tflex-folder-item-count{margin-left:auto;font-size:11px;color:var(--muted)}.tflex-empty{padding:14px;color:var(--muted);font-size:12px}.tflex-selected-folder-line{display:flex;align-items:center;gap:8px;margin-bottom:8px}.tflex-selected-label{font-size:12px;color:var(--muted)}.tflex-selected-name{font-size:13px;font-weight:600;color:var(--brand-dark);background:var(--brand-soft);border:1px solid #f0cba8;border-radius:999px;padding:2px 10px}.tflex-folder{border:1px solid var(--border);border-radius:10px;overflow:hidden;background:#fbfaf8}.tflex-folder-row{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border);background:#f6f3ef}.tflex-folder-icon{font-size:14px}.tflex-folder-name{font-size:13px;font-weight:600;color:var(--text)}.tflex-folder-count{margin-left:auto;font-size:11px;color:var(--muted)}.tflex-files{display:grid;gap:0}.tflex-file-row{display:flex;align-items:center;gap:8px;padding:9px 12px;font-size:13px;color:var(--text);border-top:1px solid #ece8e2}.tflex-file-row:first-child{border-top:none}.tflex-file-icon{font-size:12px}.settings-section{margin-bottom:22px}.settings-section h3{font-size:15px;margin:0 0 8px}.setting-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--border);gap:12px}.setting-row label{font-size:14px}.setting-row small{color:var(--muted);font-size:12px}#upload-modal,#tflex-folder-modal,#model-modal,#assembly-create-modal,#assembly-edit-modal,#roadmap-modal,#project-modal,#client-modal,#crop-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:none;align-items:center;justify-content:center;padding:16px}#upload-modal.open,#tflex-folder-modal.open,#model-modal.open,#assembly-create-modal.open,#assembly-edit-modal.open,#roadmap-modal.open,#project-modal.open,#client-modal.open,#crop-modal.open{display:flex}#upload-modal .backdrop,#tflex-folder-modal .backdrop,#model-modal .backdrop,#assembly-create-modal .backdrop,#assembly-edit-modal .backdrop,#roadmap-modal .backdrop,#project-modal .backdrop,#client-modal .backdrop,#crop-modal .backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#100e0a80;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}#upload-modal .box,#tflex-folder-modal .box,#model-modal .box,#assembly-create-modal .box,#assembly-edit-modal .box,#roadmap-modal .box,#project-modal .box,#client-modal .box,#crop-modal .box{position:relative;width:min(560px,100%);background:#fff;border:1px solid var(--border);border-radius:14px;box-shadow:0 22px 48px #1e140a2e;overflow:hidden;max-height:90vh;display:flex;flex-direction:column}#upload-modal .modal-head,#tflex-folder-modal .modal-head,#model-modal .modal-head,#assembly-create-modal .modal-head,#assembly-edit-modal .modal-head,#roadmap-modal .modal-head,#project-modal .modal-head,#client-modal .modal-head,#crop-modal .modal-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--brand-soft);flex-shrink:0}#upload-modal .modal-head h3,#tflex-folder-modal .modal-head h3,#model-modal .modal-head h3,#assembly-create-modal .modal-head h3,#assembly-edit-modal .modal-head h3,#roadmap-modal .modal-head h3,#client-modal .modal-head h3,#project-modal .modal-head span,#client-modal .modal-head span,#crop-modal .modal-head span{margin:0;font-size:16px;font-weight:600;color:var(--text)}#upload-modal .close,#tflex-folder-modal .close,#model-modal .close,#assembly-create-modal .close,#assembly-edit-modal .close,#roadmap-modal .close,#project-modal .close,#client-modal .close,#crop-modal .close{border:1px solid var(--border);border-radius:8px;background:#fff;width:30px;height:30px;cursor:pointer;color:var(--muted);font-size:16px;display:grid;place-items:center}#upload-modal .close:hover,#tflex-folder-modal .close:hover,#model-modal .close:hover,#assembly-create-modal .close:hover,#assembly-edit-modal .close:hover,#roadmap-modal .close:hover,#project-modal .close:hover,#client-modal .close:hover,#crop-modal .close:hover{color:var(--text)}#upload-modal .modal-body,#tflex-folder-modal .modal-body,#model-modal .modal-body,#assembly-create-modal .modal-body,#assembly-edit-modal .modal-body,#roadmap-modal .modal-body,#project-modal .modal-body,#client-modal .modal-body,#crop-modal .modal-body{padding:16px;display:grid;gap:12px;overflow-y:auto;flex:1}#upload-modal .modal-foot,#tflex-folder-modal .modal-foot,#model-modal .modal-foot,#assembly-create-modal .modal-foot,#assembly-edit-modal .modal-foot,#roadmap-modal .modal-foot,#project-modal .modal-foot,#client-modal .modal-foot,#crop-modal .modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--border);background:#fbfaf8;flex-shrink:0}.model-kv{display:grid;grid-template-columns:170px 1fr;gap:8px 10px;font-size:14px}.model-kv .k{color:var(--muted)}.model-kv .v{color:var(--text);font-weight:500}.m-processing-section{margin-top:18px;padding-top:14px;border-top:1px solid var(--border)}.m-processing-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}.m-processing-title{margin:0;font-size:13px;font-weight:600;color:var(--text);letter-spacing:.02em}.m-processing-refresh{flex-shrink:0;min-width:28px;height:28px;padding:0;border-radius:6px;border:1px solid var(--border);background:var(--panel);color:var(--muted);cursor:pointer;font-size:15px;line-height:1}.m-processing-refresh:hover{color:var(--brand);border-color:var(--brand)}.m-processing-summary{font-size:12px;color:var(--muted);line-height:1.45;margin-bottom:10px}.proc-timeline{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:0;max-height:220px;overflow-y:auto;border:1px solid var(--border);border-radius:10px;background:#faf9f7}.proc-tl-item{position:relative;padding:10px 12px 10px 28px;border-bottom:1px solid var(--border);font-size:12px}.proc-tl-item:last-child{border-bottom:none}.proc-tl-item:before{content:"";position:absolute;left:11px;top:14px;width:8px;height:8px;border-radius:50%;background:var(--border);border:2px solid #faf9f7}.proc-tl-item.proc-tl-current:before{background:var(--brand);box-shadow:0 0 0 2px #e07b2a40}.proc-tl-item.proc-tl-err:before{background:var(--danger)}.proc-tl-item.proc-tl-done:before{background:var(--ok)}.proc-tl-line1{font-weight:600;color:var(--text);margin-bottom:2px}.proc-tl-meta{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.proc-tl-note{margin-top:4px;font-size:11px;color:var(--warn)}.proc-tl-errtext{margin-top:4px;font-size:11px;color:var(--danger)}.proc-tl-loading,.proc-tl-muted{padding:12px;font-size:12px;color:var(--muted);text-align:center}.models-page{display:none}.models-page.active{display:block}.upload-dropzone{position:relative;border:2px dashed var(--border);border-radius:12px;padding:32px 20px;text-align:center;cursor:pointer;transition:border-color .15s,background .15s;background:#faf9f7}.upload-dropzone:hover,.upload-dropzone.drag-over{border-color:var(--brand);background:var(--brand-soft)}.upload-dropzone input[type=file]{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer;width:100%;height:100%}.upload-icon{font-size:36px;margin-bottom:8px}.upload-label{font-size:14px;color:var(--muted);line-height:1.5}.upload-label small{font-size:12px}.upload-file-list{list-style:none;margin:8px 0 0;padding:0}.upload-file-item{display:flex;align-items:center;justify-content:space-between;padding:6px 4px;border-bottom:1px solid var(--border);font-size:13px;color:var(--text)}.upload-file-item:last-child{border-bottom:none}.upload-file-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upload-file-size{color:var(--muted);font-size:12px;margin-left:10px;white-space:nowrap}.progress-bar-bg{height:8px;background:var(--border);border-radius:999px;overflow:hidden;margin-top:8px}.progress-bar{height:100%;background:var(--brand);border-radius:999px;transition:width .2s}.progress-label{font-size:13px;color:var(--muted);margin-top:4px}.upload-error{color:#c53030;font-size:13px;background:var(--danger-bg);border:1px solid #f5c6c6;padding:8px 10px;border-radius:8px;margin-top:8px}.delete-btn{border:1px solid #f5c6c6;background:#fff;color:#c53030;font-size:12px;border-radius:7px;padding:5px 9px;cursor:pointer;transition:.12s}.delete-btn:hover{background:var(--danger-bg)}.models-tabs{display:flex;gap:4px;margin-bottom:14px;border-bottom:1px solid var(--border);padding-bottom:0}.models-tab{background:none;border:none;border-bottom:3px solid transparent;padding:8px 16px;font-size:13px;font-weight:500;color:var(--muted);cursor:pointer;border-radius:0;margin-bottom:-1px;transition:color .15s,border-color .15s}.models-tab:hover{color:var(--text)}.models-tab.active{color:var(--brand);border-bottom-color:var(--brand)}.assemblies-list{display:flex;flex-direction:column;gap:12px}.assembly-card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px 18px;transition:box-shadow .15s}.assembly-card:hover{box-shadow:0 2px 10px #00000012}.assembly-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.assembly-card-name{font-size:15px;font-weight:600;color:var(--text);margin-bottom:4px}.assembly-card-meta{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:var(--muted)}.assembly-card-desc{margin-top:4px;font-size:12px;color:var(--muted);font-style:italic}.assembly-card-actions{display:flex;gap:6px;flex-shrink:0;align-items:center}.assembly-card-models{margin-top:10px;display:flex;flex-wrap:wrap;gap:6px}.assembly-file-tag{background:var(--brand-soft);border:1px solid #f2c99e;color:var(--brand-dark);border-radius:6px;padding:3px 9px;font-size:11px;font-weight:500;white-space:nowrap}.assembly-model-checklist{max-height:220px;overflow-y:auto;border:1px solid var(--border);border-radius:8px;padding:6px 0;background:#faf9f7}.assembly-check-row{display:flex;align-items:center;gap:8px;padding:6px 12px;font-size:13px;cursor:pointer;transition:background .1s}.assembly-check-row:hover{background:#f4f3f1}.assembly-check-row input[type=checkbox]{flex-shrink:0}@media (max-width: 1200px){.app-shell{grid-template-columns:210px 1fr}.dash-grid{grid-template-columns:1fr 1fr}}@media (max-width: 1100px){.app-shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;border-right:none;border-bottom:1px solid var(--border);grid-template-rows:auto}.side-bottom{display:none}.projects-grid{grid-template-columns:repeat(2,minmax(240px,1fr))}}@media (max-width: 760px){.dash-grid,.projects-grid{grid-template-columns:1fr}.search{width:100%}.toolbar{flex-direction:column;gap:10px}.files-search{width:100%}.kv{grid-template-columns:1fr;row-gap:4px}.kv .k{color:var(--muted);font-size:12px}.model-kv{grid-template-columns:1fr;row-gap:4px}.files-toolbar{flex-wrap:wrap}.container{padding:14px 14px 28px}.topbar{padding:0 14px}.files-table-wrap,.spec-table-wrap{overflow-x:auto}.files-table{min-width:560px}.tflex-layout{grid-template-columns:1fr}.tflex-files-search,.tflex-folder-select{width:100%}.tflex-toolbar-right{width:100%;flex-wrap:wrap}.box{padding:18px 16px!important}.cache-fab{right:12px;bottom:44px}.made-by{right:12px;bottom:6px;font-size:10px}}@media (max-width: 480px){.side-nav a{padding:7px 8px;font-size:12px}.project-chip strong{font-size:13px}.brand small,.topbar-right .topbar-user-card{display:none}.admin-form-row{flex-direction:column;align-items:flex-start;gap:6px}.dash-card{padding:14px}.projects-grid{gap:12px}.setting-row{flex-direction:column;align-items:flex-start;gap:4px}}.cache-fab{position:fixed;bottom:52px;right:24px;z-index:1200;display:flex;align-items:center;gap:7px;background:var(--brand);color:#fff;border:none;border-radius:999px;padding:9px 16px 9px 12px;font-size:13px;font-weight:600;cursor:pointer;box-shadow:0 4px 16px #c8641e59;transition:transform .15s,box-shadow .15s;-webkit-user-select:none;user-select:none}.cache-fab:hover{transform:translateY(-2px);box-shadow:0 6px 20px #c8641e73}.cache-fab-spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:cache-spin .7s linear infinite;flex-shrink:0}@keyframes cache-spin{to{transform:rotate(360deg)}}.cache-panel{position:fixed;bottom:102px;right:24px;z-index:1200;width:320px;background:#fff;border:1px solid var(--border);border-radius:14px;box-shadow:0 8px 32px #00000021;overflow:hidden}.cache-panel-head{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;background:#faf8f5;border-bottom:1px solid var(--border)}.cache-panel-title{font-size:13px;font-weight:650;color:var(--text)}.cache-panel-close{background:none;border:none;cursor:pointer;font-size:14px;color:var(--muted);padding:0 2px;line-height:1}.cache-panel-close:hover{color:var(--text)}.cache-panel-body{max-height:320px;overflow-y:auto;padding:8px 0}.cache-row{display:flex;align-items:center;gap:9px;padding:7px 14px;font-size:12.5px}.cache-row+.cache-row{border-top:1px solid #f3ede6}.cache-row-icon{flex-shrink:0;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px}.cache-row-icon.active{border:2px solid rgba(200,100,30,.35);border-top-color:var(--brand);animation:cache-spin .7s linear infinite}.cache-row-icon.queued{background:#f0ebe3;color:var(--muted)}.cache-row-icon.done{background:#e7f7ef;color:#2aa86a}.cache-row-icon.error{background:#fdecea;color:#d93025}.cache-row-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.cache-row-status{flex-shrink:0;font-size:11px;color:var(--muted)}.cache-section-label{padding:5px 14px 2px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}.cache-row-active{align-items:flex-start}.cache-row-main{flex:1;min-width:0}.cache-row-phase{font-size:10px;color:var(--muted);margin-top:2px}.cache-progress-bar-bg{height:4px;background:#f0ebe3;border-radius:2px;margin-top:5px;overflow:hidden}.cache-progress-bar{height:100%;background:var(--brand);border-radius:2px;transition:width .3s ease;min-width:4px}.made-by{position:fixed;bottom:10px;right:24px;z-index:50;font-size:15px;font-weight:400;color:#a08c7880;letter-spacing:.3px;pointer-events:none;-webkit-user-select:none;user-select:none}.made-by span{font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#c8782880}
