.unified-file-upload{border:2px dashed #dee2e6;border-radius:12px;padding:24px;text-align:center;cursor:pointer;transition:.3s;background-color:#f8f9fa;position:relative;overflow:visible;min-height:120px;background-image:linear-gradient(90deg,transparent,rgba(0,123,255,.1),transparent);background-size:200% 100%;background-position:-200% 0;background-repeat:no-repeat}.unified-file-upload:hover{border-color:#007bff;background-color:#e7f3ff;background-position:200% 0;transform:translateY(-2px);box-shadow:0 4px 20px rgba(0,123,255,.15)}.unified-file-upload.dragging{border-color:#28a745;background-color:#d4edda;transform:scale(1.02)}.unified-file-upload .upload-text{font-size:1.1rem;font-weight:500;margin-top:8px;color:#495057}.unified-file-list .file-section-header{color:#495057;margin-bottom:10px;padding:10px 0;border-bottom:2px solid #e9ecef;font-weight:600;display:flex;align-items:center;gap:10px}.unified-file-list .file-section-header i{font-size:1.2rem}.ai-file-grid,.code-file-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:9px;margin-bottom:20px;list-style:none;padding:0}@media (min-width:900px){.ai-file-grid,.code-file-grid{grid-template-columns:repeat(3,1fr)}}.ai-file-grid .file-info,.code-file-info{background-color:#fff;border:1px solid #e9ecef;border-radius:12px;padding:9px;display:flex;flex-direction:column;transition:.3s cubic-bezier(.4, 0, .2, 1);position:relative;box-shadow:0 2px 8px rgba(0,0,0,.05);overflow:hidden}.ai-file-grid .file-info:hover,.code-file-info:hover{transform:translateY(-4px);box-shadow:0 8px 25px rgba(0,123,255,.15);border-color:#007bff}.unified-file-list .file-info-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.unified-file-list .file-info-details{flex:1;min-width:0}.unified-file-list .file-name{color:#212529;font-size:13px;font-weight:600;word-break:break-word;display:flex;align-items:center;gap:8px;margin-bottom:8px;line-height:1.3}.unified-file-list .file-icon{font-size:1.4rem;min-width:20px;display:flex;align-items:center;justify-content:center}.unified-file-list .file-icon.python{color:#3776ab}.unified-file-list .file-icon.javascript{color:#f7df1e}.unified-file-list .file-icon.java{color:#ed8b00}.unified-file-list .file-icon.html{color:#e34f26}.unified-file-list .file-icon.css{color:#1572b6}.unified-file-list .file-icon.markdown{color:#083fa1}.unified-file-list .file-icon.pdf{color:red}.unified-file-list .file-icon.word{color:#2b579a}.unified-file-list .file-icon.excel{color:#217346}.unified-file-list .file-icon.powerpoint{color:#d24726}.unified-file-list .file-icon.code{color:#007acc}.unified-file-list .file-icon.default,.unified-file-list .file-icon.text,.unified-file-list .file-meta-text{color:#6c757d}.unified-file-list .file-meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:.85rem}.unified-file-list .file-badge{font-size:.7rem;padding:4px 8px;border-radius:6px;font-weight:500;display:inline-flex;align-items:center;gap:4px}.unified-file-list .file-badge.badge-editor{background-color:#0dcaf0;color:#000}.unified-file-list .file-badge.badge-sandbox{background-color:#0d6efd;color:#fff}.unified-file-list .file-badge.badge-ai{background-color:#198754;color:#fff}.unified-file-list .sandbox-file{border-left:4px solid #0d6efd}.unified-file-list .default-file{border-left:4px solid #198754}.unified-file-list .file-close-btn{opacity:.6;transition:.3s;width:24px;height:24px;border:none;background:0 0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;color:#6c757d}.unified-file-list .file-close-btn:hover{opacity:1;transform:scale(1.1);background-color:#f8f9fa;color:#dc3545}.unified-file-list .file-close-btn::before{content:'×';font-size:18px;font-weight:700}.unified-file-list .show-more{color:#007bff;padding:9px;border-radius:12px;text-align:center;cursor:pointer;transition:.3s;border:1px solid #e9ecef;font-weight:500}.unified-file-list .show-more:hover{color:#0056b3;background-color:#e7f3ff;border-color:#007bff;transform:translateY(-2px)}.unified-file-list .show-more.hidden{display:none}.unified-file-list .file-id-display{color:#6c757d;font-size:.68rem;font-family:'Courier New',monospace;padding:4px;border-radius:4px;display:inline-block}.unified-file-upload .upload-error{background-color:#f8d7da;border:1px solid #f5c6cb;color:#721c24;padding:12px 16px;border-radius:8px;margin-top:15px;position:relative;box-shadow:0 2px 10px rgba(220,53,69,.2)}.unified-file-upload .upload-error .error-close{position:absolute;top:8px;right:12px;background:0 0;border:none;font-size:16px;cursor:pointer;color:#721c24;opacity:.7}.unified-file-upload .upload-error .error-close:hover{opacity:1}.dark-theme .error-close{color:#000}.unified-file-list .code-file-info.hidden,.unified-file-list .file-info.hidden{display:none!important}.unified-file-upload .uploading-message{color:#6c757d;margin:15px 0;font-style:italic}.dark-theme .unified-file-upload{border:2px dashed #2c5aa0;background-color:#1a2332;color:#e0e6ed}.dark-theme .unified-file-upload::before{background:linear-gradient(90deg,transparent,rgba(74,144,226,.2),transparent)}.dark-theme .unified-file-upload:hover{border-color:#4a90e2;background-color:#1e2a3a;box-shadow:0 4px 20px rgba(74,144,226,.25)}.dark-theme .unified-file-upload.dragging{border-color:#4a90e2;background-color:#243447}.dark-theme .unified-file-list .file-name,.dark-theme .unified-file-upload .upload-text{color:#e0e6ed}.dark-theme .unified-file-list .file-section-header{color:#a8b8d0;border-bottom:2px solid #2c3e50}.dark-theme .ai-file-grid .file-info,.dark-theme .code-file-info{background-color:#1e2a3a;border:1px solid #2c5aa0;color:#e0e6ed;box-shadow:0 2px 8px rgba(0,0,0,.3)}.dark-theme .ai-file-grid .file-info:hover,.dark-theme .code-file-info:hover{background-color:#243447;border-color:#4a90e2;box-shadow:0 8px 25px rgba(74,144,226,.3)}.dark-theme .unified-file-list .file-meta-text{color:#7a8ca5}.dark-theme .unified-file-list .file-badge.badge-ai,.dark-theme .unified-file-list .file-badge.badge-editor{background-color:#2c5aa0;color:#e0e6ed}.dark-theme .unified-file-list .file-badge.badge-sandbox{background-color:#4a90e2;color:#e0e6ed}.dark-theme .unified-file-list .sandbox-file{border-left:4px solid #4a90e2}.dark-theme .unified-file-list .default-file{border-left:4px solid #3a7bc8}.dark-theme .unified-file-list .file-close-btn,.dark-theme .unified-file-upload .uploading-message{color:#a8b8d0}.dark-theme .unified-file-list .file-close-btn:hover{background-color:#243447;color:#ff6b6b}.dark-theme .unified-file-list .show-more{color:#4a90e2;background-color:#1e2a3a;border-color:#2c5aa0}.dark-theme .unified-file-list .show-more:hover{color:#5ba3f5;background-color:#243447;border-color:#4a90e2}.dark-theme .unified-file-list .file-id-display{color:#7a8ca5;background-color:#243447}.dark-theme .unified-file-upload .upload-error{background-color:#2e1a1a;border-color:#5c2626;color:#f0b4b4;box-shadow:0 2px 10px rgba(220,53,69,.3)}.dark-theme .unified-file-upload .upload-error .error-close{color:#f0b4b4}@media (max-width:900px){.ai-file-grid,.code-file-grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}}@media (max-width:768px){.ai-file-grid,.code-file-grid{grid-template-columns:1fr}.unified-file-upload{padding:20px 16px;min-height:100px}.unified-file-list .file-info-header{flex-direction:column;gap:10px;align-items:flex-start}.unified-file-list .file-close-btn{align-self:flex-end;margin-top:-30px}}
/* ---- Project importer (client-side ZIP/folder tree) ---- */
.project-import{background:#fff;border:1px solid #e9ecef;border-left:4px solid #007bff;border-radius:12px;padding:14px 16px;margin-bottom:20px;box-shadow:0 2px 8px rgba(0,0,0,.05)}
.project-import .pi-header{display:flex;align-items:center;gap:10px}
.project-import .pi-header>i{color:#007bff;font-size:1.2rem}
.project-import .pi-title{flex:1;min-width:0}
.project-import .pi-title strong{display:block;font-size:.95rem;color:#212529;word-break:break-word}
.project-import .pi-summary{font-size:.8rem;color:#6c757d}
.project-import .pi-skipnote{color:#997404}
.project-import .pi-clear{border:none;background:0 0;color:#6c757d;cursor:pointer;width:28px;height:28px;border-radius:6px;display:flex;align-items:center;justify-content:center;transition:.2s}
.project-import .pi-clear:hover{background:#f8f9fa;color:#dc3545}
.project-import .pi-budget{height:6px;background:#e9ecef;border-radius:3px;margin:10px 0 4px;overflow:hidden}
.project-import .pi-budget-bar{height:100%;background:#198754;border-radius:3px;transition:width .3s}
.project-import .pi-budget-bar.pi-over{background:#dc3545}
.project-import .pi-warning{font-size:.8rem;color:#dc3545;margin-bottom:4px}
.project-import .pi-tree{max-height:280px;overflow-y:auto;margin-top:8px;font-size:.85rem}
.project-import .pi-dir summary{display:flex;align-items:center;gap:8px;cursor:pointer;padding:3px 4px;border-radius:6px;list-style:none}
.project-import .pi-dir summary::-webkit-details-marker{display:none}
.project-import .pi-dir summary:hover{background:#f8f9fa}
.project-import .pi-dir summary>i{color:#e8a33d}
.project-import .pi-children{margin-left:20px;border-left:1px solid #e9ecef;padding-left:8px}
.project-import .pi-file{display:flex;align-items:center;gap:8px;padding:3px 4px;border-radius:6px;cursor:pointer;margin:0}
.project-import .pi-file:hover{background:#f8f9fa}
.project-import .pi-file>i{color:#007acc}
.project-import .pi-file.pi-off .pi-name,.project-import .pi-file.pi-off>i{opacity:.45}
.project-import .pi-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#212529}
.project-import .pi-meta{font-size:.72rem;color:#6c757d;white-space:nowrap}
.project-import .pi-large{color:#997404;font-weight:600}
.project-import .pi-check{accent-color:#007bff;margin:0;cursor:pointer}
.project-import .pi-footnote{font-size:.72rem;color:#6c757d;margin-top:8px;font-style:italic}
.dark-theme .project-import{background:#1e2a3a;border-color:#2c5aa0;border-left-color:#4a90e2;box-shadow:0 2px 8px rgba(0,0,0,.3)}
.dark-theme .project-import .pi-header>i{color:#4a90e2}
.dark-theme .project-import .pi-title strong,.dark-theme .project-import .pi-name{color:#e0e6ed}
.dark-theme .project-import .pi-summary,.dark-theme .project-import .pi-meta,.dark-theme .project-import .pi-footnote,.dark-theme .project-import .pi-clear{color:#a8b8d0}
.dark-theme .project-import .pi-clear:hover{background:#243447;color:#ff6b6b}
.dark-theme .project-import .pi-budget{background:#2c3e50}
.dark-theme .project-import .pi-dir summary:hover,.dark-theme .project-import .pi-file:hover{background:#243447}
.dark-theme .project-import .pi-children{border-left-color:#2c3e50}
.dark-theme .project-import .pi-check{accent-color:#4a90e2}

/* ---- GitHub import ---- */
.github-import{border:1px solid #e9ecef;border-radius:12px;padding:10px 14px;margin-bottom:16px;background:#fff}
.github-import summary{cursor:pointer;font-weight:600;font-size:.92rem;color:#212529;display:flex;align-items:center;gap:8px;list-style:none}
.github-import summary::-webkit-details-marker{display:none}
.github-import summary>i{font-size:1.15rem}
.github-import .gh-optional{font-size:.75rem;color:#6c757d;font-weight:400;margin-left:auto}
.github-import .gh-optional.gh-set{color:#198754;font-weight:600;font-style:normal}
.dark-theme .github-import .gh-optional.gh-set{color:#5dd39e}
.github-import .gh-fields{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.github-import .gh-note{color:#6c757d;line-height:1.4}
.project-import .pi-sandbox-note{font-size:.8rem;color:#0a58ca;background:rgba(13,110,253,.08);border-radius:6px;padding:6px 10px;margin:4px 0;display:flex;align-items:flex-start;gap:8px}
.project-import .pi-sandbox-note i{margin-top:2px}
.dark-theme .github-import{background:#1e2a3a;border-color:#2c5aa0}
.dark-theme .github-import summary{color:#e0e6ed}
.dark-theme .github-import .gh-note,.dark-theme .github-import .gh-optional{color:#a8b8d0}
.dark-theme .project-import .pi-sandbox-note{color:#7db3f5;background:rgba(74,144,226,.12)}

/* ---- Sandbox upload / status message ---- */
.uploading-message.um-active{display:flex;align-items:center;gap:10px;font-style:normal;color:#0a4bab;background:linear-gradient(90deg,rgba(13,110,253,.1),rgba(13,110,253,.04));border:1px solid rgba(13,110,253,.25);border-left:4px solid #0d6efd;border-radius:10px;padding:14px 16px;margin:16px 0;font-size:.95rem;font-weight:500;box-shadow:0 2px 12px rgba(13,110,253,.12);animation:umpulse 1.6s ease-in-out infinite}
.uploading-message.um-active i{color:#0d6efd;font-size:1.1rem}
@keyframes umpulse{0%,100%{box-shadow:0 2px 12px rgba(13,110,253,.12)}50%{box-shadow:0 2px 18px rgba(13,110,253,.28)}}
.uploading-message.um-error{display:flex;align-items:center;gap:8px;font-style:normal;color:#842029;background:#f8d7da;border:1px solid #f5c2c7;border-left:4px solid #dc3545;border-radius:10px;padding:12px 16px;margin:16px 0;font-weight:500}
.dark-theme .uploading-message.um-active{color:#8ec0ff;background:linear-gradient(90deg,rgba(74,144,226,.16),rgba(74,144,226,.05));border-color:rgba(74,144,226,.35);border-left-color:#4a90e2}
.dark-theme .uploading-message.um-active i{color:#4a90e2}
.dark-theme .uploading-message.um-error{color:#f0b4b4;background:#2e1a1a;border-color:#5c2626;border-left-color:#dc3545}
