:root{--bg:#f4f7fb;--card:#fff;--line:#e4eaf2;--text:#14213d;--muted:#6c7890;--blue:#2f67e8;--blue-dark:#2255cb;--soft:#eef4ff;--danger:#cf3348;--shadow:0 16px 42px rgba(32,55,88,.08);--radius:16px}*{box-sizing:border-box}html{font-family:Inter,"Pretendard","Noto Sans KR","Malgun Gothic",sans-serif;color:var(--text);background:var(--bg)}body{margin:0;min-height:100vh}a{color:inherit;text-decoration:none}button,input,textarea{font:inherit}.topbar{height:64px;padding:0 28px;display:flex;align-items:center;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:30}.brand{font-weight:700;font-size:18px;letter-spacing:-.02em;white-space:nowrap}.brand span{font-weight:850}.brand.big{font-size:24px}.nav{display:flex;gap:8px;margin-left:auto;margin-right:20px}.nav a{padding:9px 12px;border-radius:9px;font-size:14px;font-weight:650}.nav a:hover,.nav a.active{background:var(--soft);color:var(--blue)}.top-actions{display:flex;align-items:center;gap:10px}.env-badge,.user-badge{font-size:12px;border:1px solid var(--line);border-radius:999px;padding:7px 10px;background:#f8fafc;max-width:280px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.env-badge{background:#eaf7ff;color:#1771a5;border-color:#c9e8fa}.link-btn{border:0;background:none;cursor:pointer;color:var(--text);padding:8px}.shell{width:min(1180px,calc(100% - 40px));margin:0 auto;padding:38px 0 70px}.page-head{margin-bottom:22px}.page-head.split{display:flex;justify-content:space-between;align-items:flex-end;gap:20px}.page-head h1{font-size:32px;margin:4px 0 6px;letter-spacing:-.04em}.eyebrow{font-size:11px;font-weight:800;color:var(--blue);letter-spacing:.12em;margin:0}.muted{color:var(--muted)}.head-actions,.hero-actions,.project-actions,.dialog-actions,.preview-actions,.file-actions{display:flex;gap:8px;align-items:center}.btn{border:1px solid var(--line);border-radius:10px;padding:10px 15px;background:#fff;color:var(--text);font-weight:700;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.btn:hover{transform:translateY(-1px)}.btn.primary{background:var(--blue);color:#fff;border-color:var(--blue)}.btn.primary:hover{background:var(--blue-dark)}.btn.secondary{background:#fff}.btn.ghost{background:transparent}.btn.compact{padding:7px 10px;font-size:12px;border-radius:8px}.btn.full{width:100%}.toolbar-card,.panel,.file-table-card,.smart-preview,.project-hero,.readme-section{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.toolbar-card{padding:12px 14px;margin-bottom:26px}.search{display:flex;align-items:center;gap:8px}.search span{font-size:22px;color:var(--muted)}.search input{flex:1;border:0;outline:0;background:transparent;padding:9px;font-size:15px}.section-block{margin-top:28px}.section-title{display:flex;align-items:center;gap:10px;justify-content:space-between;margin-bottom:12px}.section-title h2{font-size:18px;margin:0}.count{font-size:12px;color:var(--muted)}.recent-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.recent-item{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;background:#fff;border:1px solid var(--line);padding:12px 14px;border-radius:12px}.recent-item div:nth-child(2){display:flex;flex-direction:column;gap:2px}.recent-item span,.recent-item time{font-size:12px;color:var(--muted)}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.project-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:0 8px 26px rgba(44,62,92,.05)}.project-main{display:flex;gap:14px;min-height:100px}.project-avatar{width:56px;height:56px;flex:0 0 56px;border-radius:14px;background:linear-gradient(135deg,#edf3ff,#dbe8ff);color:#235fd6;display:grid;place-items:center;font-weight:900;letter-spacing:-.04em}.project-avatar.sm{width:36px;height:36px;flex-basis:36px;border-radius:10px;font-size:12px}.project-avatar.xl{width:76px;height:76px;flex-basis:76px;font-size:23px;border-radius:18px}.project-copy{min-width:0;flex:1}.project-copy p{color:var(--muted);margin:8px 0 12px;line-height:1.5;min-height:42px}.project-name-line{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.project-name-line h1,.project-name-line h3{margin:0}.project-name-line h3{font-size:18px}.version-pill,.latest-badge,.pre-badge,.primary-file,.auto-badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:800;background:#edf4ff;color:#2c63d8}.version-pill.large{font-size:12px}.latest-badge{background:#e9f8ef;color:#1c8d51}.pre-badge{background:#fff3da;color:#9b6b00}.primary-file{background:#f2edff;color:#6541c6}.auto-badge{background:#e7f7ff;color:#1777a9}.meta-row{display:flex;gap:12px;flex-wrap:wrap;color:var(--muted);font-size:12px}.project-actions{justify-content:flex-end;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}.empty-state{background:#fff;border:1px dashed #cdd8e8;border-radius:16px;text-align:center;padding:52px 20px;color:var(--muted)}.empty-state.slim{padding:28px}.empty-state h3{color:var(--text);margin:8px}.empty-icon{font-size:32px}.dialog{border:0;border-radius:18px;padding:0;width:min(500px,calc(100% - 28px));box-shadow:0 30px 90px rgba(25,40,70,.25)}.dialog::backdrop{background:rgba(20,29,46,.4)}.dialog>form,.dialog>div{padding:22px}.dialog-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:18px}.dialog-head h2{margin:0 0 4px}.dialog-head p{margin:0;color:var(--muted);font-size:13px}.icon-btn{border:0;background:#f2f5f9;border-radius:9px;width:34px;height:34px;font-size:22px;cursor:pointer}.dialog label,.login-card label,.form-panel label,.smart-preview label{display:flex;flex-direction:column;gap:7px;font-weight:700;font-size:13px;margin-bottom:14px}.dialog input,.dialog textarea,.login-card input,.form-panel input,.smart-preview input,.smart-preview textarea{border:1px solid #d7dfeb;border-radius:10px;padding:11px 12px;outline:none;background:#fff}.dialog input:focus,.dialog textarea:focus,.login-card input:focus,.form-panel input:focus,.smart-preview input:focus,.smart-preview textarea:focus{border-color:#6e95f0;box-shadow:0 0 0 3px rgba(47,103,232,.1)}em{color:var(--danger);font-style:normal}.optional{font-weight:500;color:var(--muted);font-size:11px}.dialog-actions{justify-content:flex-end;margin-top:8px}.login-page{display:grid;place-items:center;background:linear-gradient(180deg,#f8fbff,#eef3f9);padding:24px}.login-card{width:min(400px,100%);background:#fff;padding:32px;border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow)}.login-card h1{margin:28px 0 5px}.login-card .muted{margin:0 0 22px}.alert{padding:11px 13px;border-radius:10px;margin:12px 0;font-size:13px}.alert.error{background:#fff0f2;color:#a72337;border:1px solid #ffd2d8}.project-hero{padding:22px;display:flex;gap:18px;align-items:center;margin-bottom:20px}.hero-copy{flex:1}.hero-copy>p{color:var(--muted);margin:9px 0 12px}.backline{margin-bottom:12px;color:var(--muted);font-size:13px}.smart-zone{border:2px dashed #bfcce0;border-radius:18px;text-align:center;padding:32px 20px;background:linear-gradient(180deg,#fbfdff,#f6f9fd);transition:.15s}.smart-zone.dragover{border-color:var(--blue);background:#eef5ff;transform:translateY(-1px)}.smart-icon{font-size:36px;color:var(--blue)}.smart-zone h2{margin:7px 0}.smart-zone p{color:var(--muted);line-height:1.6}.smart-hint{margin-top:14px;font-size:12px;color:#8a95a7}.smart-preview{margin-top:16px;padding:20px}.hidden{display:none!important}.analysis-table{border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:16px}.analysis-row{display:grid;grid-template-columns:minmax(0,2fr) 120px 170px;gap:12px;padding:11px 13px;border-bottom:1px solid var(--line);align-items:center}.analysis-row:last-child{border-bottom:0}.analysis-row.header{background:#f8fafc;color:var(--muted);font-size:11px;font-weight:800}.analysis-row .needs{color:#b06c00;font-weight:700}.form-grid{display:grid;gap:14px}.form-grid.two{grid-template-columns:2fr 1fr}.form-grid.three{grid-template-columns:2fr .7fr auto;align-items:end}.form-grid.four{grid-template-columns:repeat(4,minmax(0,1fr));align-items:end}.checkline{flex-direction:row!important;align-items:center!important;font-weight:500!important;gap:8px!important}.checkline input{padding:0!important}.compact-check{margin-top:25px}.preview-actions{justify-content:flex-end}.release-list{display:flex;flex-direction:column;gap:12px}.release-card{background:#fff;border:1px solid var(--line);border-radius:15px;overflow:hidden}.release-card.latest{border-color:#bcd2ff}.release-head{display:flex;justify-content:space-between;align-items:center;padding:16px 17px;background:#fbfcfe;border-bottom:1px solid var(--line)}.release-version{display:flex;align-items:center;gap:8px}.release-head time{font-size:12px;color:var(--muted)}.release-notes{padding:14px 17px;margin:0;border-bottom:1px solid var(--line);white-space:pre-wrap}.release-files{display:flex;flex-direction:column}.release-file{display:flex;align-items:center;gap:12px;padding:13px 17px;border-bottom:1px solid var(--line)}.release-file:last-child{border-bottom:0}.file-icon{width:38px;height:38px;border-radius:10px;background:#f0f4fa;display:grid;place-items:center}.file-copy{min-width:0;flex:1}.file-copy strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-actions{flex-wrap:wrap;justify-content:flex-end}.readme-section{margin-top:28px;padding:20px}.markdown-body{border-top:1px solid var(--line);padding-top:18px;line-height:1.65}.markdown-body pre{overflow:auto;background:#f6f8fb;border-radius:10px;padding:13px}.markdown-body code{background:#f1f4f8;padding:2px 5px;border-radius:5px}.empty-inline{color:var(--muted);padding:18px 4px}.empty-inline.big{text-align:center;padding:42px}.inline-upload{margin:0}.breadcrumbs{display:flex;gap:6px;align-items:center;color:var(--muted);font-size:13px}.file-table-card{overflow:visible}.file-table{display:grid;grid-template-columns:minmax(0,2fr) 130px 180px 48px;align-items:center}.file-table.header{background:#f8fafc;color:var(--muted);font-size:11px;font-weight:800;border-radius:16px 16px 0 0}.file-table.header>div,.file-table.row>div{padding:13px 16px}.file-table.row{border-top:1px solid var(--line);font-size:13px;position:relative}.name-cell{display:flex;align-items:center;gap:10px;min-width:0}.name-cell a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.folder-icon{color:#f5b51b}.doc-icon{color:#8091aa}.row-actions{position:relative}.more-btn{border:0;background:transparent;cursor:pointer;color:#718096}.context-menu{position:absolute;right:12px;top:42px;width:150px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);padding:5px;display:none;z-index:20}.context-menu.open{display:block}.context-menu a,.context-menu button{display:block;width:100%;padding:9px 10px;border:0;background:transparent;text-align:left;border-radius:7px;cursor:pointer;font-size:13px}.context-menu a:hover,.context-menu button:hover{background:#f5f7fb}.danger-text{color:var(--danger)}.panel{padding:20px;margin-top:16px}.panel h2{margin-top:0}.simple-list{display:flex;flex-direction:column}.simple-row{display:flex;justify-content:space-between;align-items:center;gap:15px;padding:13px 0;border-bottom:1px solid var(--line)}.simple-row:last-child{border-bottom:0}.align-end{display:flex;align-items:flex-end;height:100%}.log-table{overflow:auto}.log-row{display:grid;grid-template-columns:160px 110px 170px minmax(180px,1.2fr) minmax(160px,1fr);gap:10px;padding:11px 8px;border-bottom:1px solid var(--line);font-size:12px;align-items:center}.log-row.header{font-weight:800;color:var(--muted);background:#f8fafc}.action-pill{background:#f0f4fa;border-radius:7px;padding:5px 7px;font-weight:700}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(max-width:920px){.nav{display:none}.top-actions{margin-left:auto}.env-badge{display:none}.project-grid{grid-template-columns:1fr}.recent-strip{grid-template-columns:1fr}.project-hero{align-items:flex-start;flex-wrap:wrap}.hero-actions{width:100%}.form-grid.two,.form-grid.three,.form-grid.four{grid-template-columns:1fr}.file-table{grid-template-columns:minmax(0,1fr) 90px 48px}.file-table>*:nth-child(3){display:none}.shell{width:min(100% - 24px,1180px);padding-top:24px}.page-head.split{align-items:flex-start;flex-direction:column}.topbar{padding:0 14px}.user-badge{display:none}}@media(max-width:620px){.project-actions,.hero-actions,.file-actions{flex-direction:column;align-items:stretch}.project-main{align-items:flex-start}.analysis-row{grid-template-columns:1fr}.analysis-row.header{display:none}.file-table{grid-template-columns:minmax(0,1fr) 44px}.file-table>*:nth-child(2){display:none}}

.project-icon-img{object-fit:cover;background:#fff}.project-avatar.project-icon-img{display:block}

/* ================= File Explorer: lazy folder tree ================= */
.file-explorer-layout{--tree-width:270px;display:grid;grid-template-columns:var(--tree-width) 7px minmax(0,1fr);align-items:stretch;min-height:620px;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:0 8px 26px rgba(44,62,92,.05);overflow:hidden}.folder-tree-panel{min-width:0;background:#fbfcfe;border-right:1px solid var(--line);display:flex;flex-direction:column;max-height:calc(100vh - 185px);min-height:620px}.folder-tree-head{height:60px;padding:13px 12px 10px 16px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.folder-tree-head>div:first-child{display:flex;flex-direction:column;gap:2px;min-width:0}.folder-tree-head strong{font-size:14px}.folder-tree-head span{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.folder-tree-head-actions{display:flex;gap:3px}.tree-tool-btn{border:0;background:transparent;color:#6f7e94;width:30px;height:30px;border-radius:8px;cursor:pointer;font-size:18px;display:grid;place-items:center}.tree-tool-btn:hover{background:#eef3f9;color:var(--text)}.folder-tree-search-wrap{position:relative;padding:10px 12px;border-bottom:1px solid var(--line)}.tree-search-icon{position:absolute;left:21px;top:18px;color:#8a96a8;font-size:16px}.folder-tree-search{width:100%;height:34px;border:1px solid #dce3ec;border-radius:9px;background:#fff;padding:7px 9px 7px 30px;outline:none;font-size:12px}.folder-tree-search:focus{border-color:#8eacf2;box-shadow:0 0 0 3px rgba(47,103,232,.08)}.folder-tree-scroll{position:relative;flex:1;overflow:auto;padding:8px 7px 16px;overscroll-behavior:contain}.folder-tree-foot{height:38px;padding:0 13px;display:flex;align-items:center;gap:7px;border-top:1px solid var(--line);font-size:10px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree-status-dot{width:7px;height:7px;border-radius:50%;background:#32aa67;flex:0 0 auto}.tree-node{min-width:max-content}.tree-node-row{height:31px;display:flex;align-items:center;gap:4px;border-radius:7px;padding:0 4px 0 1px;min-width:190px;color:#3f4c61;user-select:none}.tree-node-row:hover{background:#f0f4f9}.tree-node-row.active{background:#e9f1ff;color:#1f5bd7;font-weight:700}.tree-node-row.drop-target{background:#dfeaff;outline:2px solid #7fa4f5;outline-offset:-2px}.tree-expander{width:22px;height:24px;flex:0 0 22px;border:0;background:transparent;color:#758399;cursor:pointer;border-radius:5px;padding:0;font-size:13px;display:grid;place-items:center}.tree-expander:hover{background:#e5eaf1}.tree-expander.leaf{opacity:.2;cursor:default}.tree-expander.loading{animation:tree-spin .8s linear infinite}.tree-folder-icon{width:19px;color:#e8ab18;font-size:15px;line-height:1;transform:scaleX(1.08)}.tree-label{height:29px;display:flex;align-items:center;min-width:0;flex:1;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree-node-menu-btn{border:0;background:transparent;color:#8c98aa;border-radius:5px;height:23px;min-width:28px;opacity:0;cursor:pointer;font-size:12px}.tree-node-row:hover .tree-node-menu-btn,.tree-node-row.active .tree-node-menu-btn{opacity:1}.tree-node-menu-btn:hover{background:#dde5ef;color:#415168}.tree-children{margin-left:17px}.tree-loading,.tree-error{padding:9px 12px;font-size:11px;color:var(--muted)}.tree-error{color:var(--danger);background:#fff0f2;border-radius:8px;margin:5px}.tree-filter-hidden{display:none}.tree-resizer{cursor:col-resize;background:#fff;position:relative;z-index:4}.tree-resizer::after{content:"";position:absolute;top:0;bottom:0;left:3px;width:1px;background:transparent}.tree-resizer:hover,.tree-resizing .tree-resizer{background:#edf3ff}.tree-resizer:hover::after,.tree-resizing .tree-resizer::after{background:#7da1f2}.tree-resizing{cursor:col-resize!important;user-select:none!important}.file-list-pane{min-width:0;background:#fff;padding:0 18px 20px;overflow:visible}.file-list-toolbar{height:60px;margin:0 -18px 0;padding:0 18px;display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--line)}.tree-reopen-btn{display:none;border:1px solid var(--line);background:#fff;border-radius:8px;height:34px;padding:0 10px;cursor:pointer;font-size:12px;font-weight:700}.current-folder-summary{display:flex;align-items:center;gap:9px;min-width:0;flex:1}.current-folder-icon{color:#e6a814;font-size:18px}.current-folder-summary>div{min-width:0;display:flex;flex-direction:column;gap:1px}.current-folder-summary strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.current-folder-summary small{font-size:10px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-count{font-size:11px;color:var(--muted)}.file-list-pane .file-table-card{border:0;box-shadow:none;border-radius:0;margin:0 -18px}.file-list-pane .file-table.header{border-radius:0}.file-entry-row{transition:opacity .12s,background .12s}.file-entry-row.dragging{opacity:.42;background:#eef4ff}.file-drop-help{padding:13px 4px 0;font-size:10px;color:#919caf}.tree-context-menu{position:fixed;width:172px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 16px 40px rgba(30,48,78,.18);padding:5px;display:none;z-index:100}.tree-context-menu.open{display:block}.tree-context-menu button{width:100%;border:0;background:transparent;text-align:left;padding:9px 10px;border-radius:7px;font-size:12px;cursor:pointer}.tree-context-menu button:hover{background:#f1f5fa}.tree-mobile-toggle{display:none}.file-explorer-layout.tree-collapsed{grid-template-columns:0 0 minmax(0,1fr)}.file-explorer-layout.tree-collapsed .folder-tree-panel,.file-explorer-layout.tree-collapsed .tree-resizer{visibility:hidden;overflow:hidden;border:0}.file-explorer-layout.tree-collapsed .tree-reopen-btn{display:inline-flex;align-items:center;gap:5px}@keyframes tree-spin{to{transform:rotate(360deg)}}

@media(max-width:920px){.tree-mobile-toggle{display:inline-flex}.file-explorer-layout{display:block;min-height:520px}.folder-tree-panel{display:none}.tree-resizer{display:none}.file-explorer-layout.tree-mobile-open .folder-tree-panel{display:flex;position:fixed;z-index:80;left:10px;top:74px;bottom:10px;width:min(320px,calc(100vw - 20px));max-height:none;min-height:0;border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 70px rgba(20,35,58,.25);overflow:hidden}.file-explorer-layout.tree-mobile-open::before{content:"";position:fixed;inset:64px 0 0;background:rgba(19,29,47,.22);z-index:70}.file-explorer-layout.tree-collapsed .folder-tree-panel{display:none}.file-list-pane{padding:0 12px 16px}.file-list-toolbar{margin:0 -12px;padding:0 12px}.file-list-pane .file-table-card{margin:0 -12px}.file-drop-help{display:none}}
