[hidden]{display:none!important}
:root{
  --navy:#112944;--navy-2:#193a60;--navy-3:#234b79;
  --brand:#2365d8;--brand-hover:#1a55ba;--brand-soft:#edf4ff;
  --bg:#f4f7fb;--panel:#fff;--text:#162033;--muted:#6f7e93;
  --line:#e5eaf1;--line-dark:#d7dee8;--danger:#c33b4a;--danger-soft:#fff0f2;
  --success:#317650;--success-soft:#edf8f1;
  --warning:#a66b12;--warning-soft:#fff8e8;
  --shadow:0 18px 55px rgba(28,42,62,.12);--radius:14px
}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;font-family:Inter,Pretendard,"Noto Sans KR",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--text);background:var(--bg)}
body{min-width:320px}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.6}

.boot-view{min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(140deg,#f7faff,#eef3fa)}
.boot-card{display:flex;align-items:center;gap:16px;padding:22px 24px;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow)}
.boot-copy strong,.boot-copy span{display:block}.boot-copy strong{font-size:13px;letter-spacing:.04em}.boot-copy span{font-size:12px;color:var(--muted);margin-top:4px}

.brand-mark{display:grid;place-items:center;width:44px;height:44px;border-radius:12px;background:var(--navy);color:#fff;font-size:22px;font-weight:900;box-shadow:0 8px 20px rgba(17,41,68,.18)}
.brand-mark.large{width:54px;height:54px;border-radius:16px;font-size:25px}.brand-mark.small{width:38px;height:38px;border-radius:11px;font-size:19px}

.auth-shell{min-height:100vh;display:grid;place-items:center;padding:28px;background:radial-gradient(circle at 20% 10%,#e5efff 0,transparent 34%),radial-gradient(circle at 85% 90%,#f0f5fb 0,transparent 40%),linear-gradient(145deg,#f8fbff,#eef3f8)}
.auth-card{width:min(430px,100%);background:#fff;border:1px solid var(--line);border-radius:24px;padding:36px;box-shadow:0 24px 70px rgba(35,51,73,.15)}
.auth-brand{display:flex;align-items:center;gap:15px}.eyebrow{margin:0 0 5px;color:var(--brand);font-size:11px;font-weight:900;letter-spacing:.13em}.auth-card h1{font-size:29px;line-height:1.2;margin:0}.auth-lead{margin:24px 0;color:var(--muted);font-size:14px}
#loginForm{display:grid;gap:16px}.field{display:grid;gap:8px;font-size:13px;font-weight:750}.field input,.modal-input,.search-wrap input,.select-control{width:100%;border:1px solid var(--line-dark);background:#fff;border-radius:11px;outline:none;transition:.15s}
.field>input,.modal-input{padding:13px 14px}.field input:focus,.modal-input:focus,.search-wrap:focus-within,.select-control:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(35,101,216,.1)}
.password-field{display:grid;grid-template-columns:1fr auto;border:1px solid var(--line-dark);border-radius:11px;overflow:hidden}.password-field:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px rgba(35,101,216,.1)}.password-field input{border:0!important;box-shadow:none!important;border-radius:0;padding:13px 14px}.text-button{border:0;background:transparent;color:#55657b;padding:0 13px;font-size:12px;font-weight:750}
.field-hint{font-size:11px;font-weight:650}.field-hint.warning{color:var(--warning)}
.remember-row{display:flex;align-items:center;gap:8px;color:#59687d;font-size:12px}.remember-row input{accent-color:var(--brand)}
.button{border:1px solid transparent;border-radius:10px;padding:10px 14px;font-weight:800;line-height:1.15;transition:.15s}.button.primary{background:var(--brand);color:#fff}.button.primary:hover{background:var(--brand-hover)}.button.secondary{background:#fff;border-color:var(--line-dark);color:#33445b}.button.secondary:hover,.button.subtle:hover{background:#f7f9fc}.button.subtle{background:transparent;border-color:#315170;color:#d8e2ed}.button.wide{width:100%;min-height:44px}
.btn-spinner{display:inline-block;width:15px;height:15px;border-radius:50%;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;animation:spin .8s linear infinite}
.alert{display:grid;gap:3px;padding:12px 13px;border-radius:10px;font-size:12px}.alert strong{font-size:12px}.alert.error{color:#9f2835;background:var(--danger-soft);border:1px solid #ffdadd}
.auth-foot{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:24px;color:#8090a5;font-size:11px}.secure-dot{width:7px;height:7px;border-radius:50%;background:#55a16d}.dot{color:#c0c8d3}

.app-shell{min-height:100vh;display:grid;grid-template-columns:230px minmax(0,1fr);background:var(--bg)}
.sidebar{position:sticky;top:0;height:100vh;background:var(--navy);color:#fff;padding:20px 15px;display:flex;flex-direction:column;z-index:3}.sidebar-brand{display:flex;align-items:center;gap:11px;padding:3px 7px 25px}.sidebar-brand strong,.sidebar-brand span{display:block}.sidebar-brand strong{font-size:12px;letter-spacing:.04em}.sidebar-brand span{font-size:10px;color:#96aac0;margin-top:4px}.side-nav{display:grid;gap:5px}.nav-item{display:flex;align-items:center;gap:10px;width:100%;border:0;background:transparent;color:#b8c7d8;border-radius:9px;padding:11px 12px;text-align:left;font-weight:750}.nav-item:hover,.nav-item.active{background:#1c3a5f;color:#fff}.nav-icon{width:18px;text-align:center}.sidebar-bottom{margin-top:auto;display:grid;gap:12px}.user-card{display:flex;align-items:center;gap:10px;padding:10px;border-radius:12px;background:#183655}.user-avatar{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:#2c5b8d;font-weight:850}.user-copy strong,.user-copy small{display:block}.user-copy strong{font-size:12px}.user-copy small{color:#9eb2c8;font-size:10px;margin-top:2px}
.workspace{min-width:0}.workspace-header{position:sticky;top:0;z-index:2;min-height:92px;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 30px;background:rgba(255,255,255,.96);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}.workspace-header h2{margin:0;font-size:23px}.header-actions{display:flex;gap:8px}.workspace-body{padding:22px 30px 36px}
.path-bar{display:flex;align-items:center;gap:10px;margin-bottom:14px}.icon-button{display:grid;place-items:center;width:38px;height:38px;padding:0;border:1px solid var(--line-dark);background:#fff;border-radius:10px;color:#34455b;font-size:16px}.icon-button:hover{background:#f8fafc}.icon-button.compact{width:32px;height:32px;border:0;font-size:20px}.breadcrumbs{display:flex;align-items:center;gap:5px;min-width:0;overflow:auto;scrollbar-width:none}.crumb{border:0;background:transparent;color:#5c6a7e;padding:6px 3px;white-space:nowrap;font-weight:650}.crumb:hover{color:var(--brand)}.sep{color:#b2bcc8}.connection-badge{margin-left:auto;display:flex;align-items:center;gap:6px;border-radius:999px;padding:6px 9px;font-size:11px;font-weight:750;white-space:nowrap}.connection-badge.ok{color:var(--success);background:var(--success-soft);border:1px solid #d6edde}.connection-badge.bad{color:var(--danger);background:var(--danger-soft);border:1px solid #ffdadd}.connection-badge.busy{color:#78611e;background:var(--warning-soft);border:1px solid #f2e3b3}.status-dot{width:7px;height:7px;border-radius:50%;background:currentColor}
.controls{display:grid;grid-template-columns:minmax(220px,1fr) 110px 180px auto;gap:9px;align-items:center;margin-bottom:12px}.search-wrap{height:42px;display:grid;grid-template-columns:auto 1fr;align-items:center;border:1px solid var(--line-dark);background:#fff;border-radius:11px;padding:0 10px}.search-icon{color:#8a98aa;margin-right:6px}.search-wrap input{border:0!important;box-shadow:none!important;padding:0;min-width:0}.select-control{height:42px;padding:0 11px;color:#44556a}.item-count{color:#718096;font-size:12px;white-space:nowrap}
.drop-zone{display:grid;place-items:center;gap:3px;min-height:66px;border:1px dashed #cbd5e2;border-radius:12px;background:#fbfcfe;color:#738298;font-size:12px;margin-bottom:13px;transition:.15s}.drop-zone strong{font-size:12px;color:#637289}.drop-zone.drag{border-color:var(--brand);background:var(--brand-soft);color:var(--brand);transform:scale(.997)}
.file-panel{position:relative;min-height:430px;background:#fff;border:1px solid var(--line);border-radius:15px;overflow:hidden}.file-table-scroll{overflow:auto;max-height:calc(100vh - 310px);min-height:430px}.file-table{width:100%;border-collapse:collapse;table-layout:fixed}.file-table th{position:sticky;top:0;z-index:1;background:#fbfcfd;color:#7c899b;font-size:10px;letter-spacing:.05em;text-transform:uppercase;text-align:left;padding:12px 16px;border-bottom:1px solid var(--line)}.file-table th:nth-child(1){width:48%}.file-table th:nth-child(2){width:13%}.file-table th:nth-child(3){width:23%}.file-table th:nth-child(4){width:16%}.file-table td{padding:11px 16px;border-bottom:1px solid #eef1f5;font-size:12px}.file-table tbody tr:hover{background:#fafcff}.file-table tbody tr:last-child td{border-bottom:0}.name-cell{display:flex;align-items:center;gap:10px;min-width:0}.file-icon{width:34px;height:34px;flex:0 0 auto;display:grid;place-items:center;border-radius:9px;background:#edf3fb;color:#456d9c;font-size:15px;font-weight:800}.file-icon.folder{background:#eef5ff;color:#3169b0}.file-icon.pdf{background:#fff1f2;color:#b8434e}.file-icon.image{background:#eef8f1;color:#3a7e51}.file-icon.archive{background:#fff7e9;color:#96641b}.file-icon.doc{background:#edf3ff;color:#3b62a6}.file-name{min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:750}.folder-link{border:0;background:transparent;padding:0;text-align:left;color:inherit}.meta{color:#748196}.row-actions{display:flex;justify-content:flex-end;gap:4px}.action-btn{border:0;background:transparent;border-radius:8px;padding:7px 8px;color:#6b788b;font-size:14px}.action-btn:hover{background:#eef2f7;color:#24384f}.action-btn.danger:hover{background:var(--danger-soft);color:var(--danger)}.actions-head{text-align:right!important}
.panel-state{position:absolute;inset:44px 0 0;display:grid;place-items:center;align-content:center;text-align:center;padding:30px;color:#7c899b;background:#fff}.panel-state strong{color:#526176;margin-top:12px}.panel-state span{font-size:12px;margin-top:5px}.state-icon{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;background:#f2f5f8;color:#98a5b5;font-size:25px}.error-state .state-icon{background:var(--danger-soft);color:var(--danger);font-weight:900}.error-state .button{margin-top:15px}
.spinner{width:25px;height:25px;border-radius:50%;border:3px solid #e7ebf1;border-top-color:var(--brand);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.upload-tray{position:fixed;right:22px;bottom:22px;width:min(360px,calc(100vw - 30px));background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);z-index:20;overflow:hidden}.upload-tray-head{display:flex;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--line);font-size:12px}.upload-jobs{max-height:220px;overflow:auto}.upload-job{display:grid;grid-template-columns:1fr auto;gap:6px;padding:10px 14px;border-bottom:1px solid #f0f2f5}.upload-job:last-child{border-bottom:0}.upload-job strong{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.upload-job span{font-size:10px;color:#758295}.progress{grid-column:1/-1;height:4px;background:#edf0f4;border-radius:999px;overflow:hidden}.progress>i{display:block;height:100%;background:var(--brand);width:0;transition:.15s}
.modal-backdrop{position:fixed;inset:0;display:grid;place-items:center;padding:20px;background:rgba(12,25,41,.45);backdrop-filter:blur(3px);z-index:30}.modal{width:min(420px,100%);background:#fff;border-radius:17px;padding:20px;box-shadow:var(--shadow)}.modal-head{display:flex;justify-content:space-between;align-items:center}.modal-head h3{margin:0;font-size:17px}.modal-message{font-size:12px;line-height:1.6;color:#68778c;margin:13px 0}.modal-input{margin-top:14px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
.toast{position:fixed;right:22px;top:20px;max-width:min(420px,calc(100vw - 32px));background:#13283f;color:#fff;padding:11px 15px;border-radius:10px;box-shadow:var(--shadow);font-size:12px;z-index:40}
.mobile-nav{display:none}

@media(max-width:920px){
  .app-shell{grid-template-columns:190px minmax(0,1fr)}.sidebar{padding:17px 11px}.workspace-header,.workspace-body{padding-left:20px;padding-right:20px}.controls{grid-template-columns:minmax(160px,1fr) 100px 150px auto}.file-table th:nth-child(3),.file-table td:nth-child(3){display:none}.file-table th:nth-child(1){width:58%}.file-table th:nth-child(2){width:18%}.file-table th:nth-child(4){width:24%}
}
@media(max-width:720px){
  .app-shell{display:block;padding-bottom:62px}.sidebar{display:none}.workspace-header{min-height:70px;padding:13px 15px}.workspace-header .eyebrow{display:none}.workspace-header h2{font-size:19px}.workspace-body{padding:14px}.header-actions .secondary{display:none}.header-actions .button{padding:9px 12px}.controls{grid-template-columns:1fr auto}.controls .select-control{display:none}.item-count{justify-self:end}.drop-zone{display:none}.file-panel{min-height:calc(100vh - 235px)}.file-table-scroll{min-height:calc(100vh - 235px);max-height:none}.file-table th:nth-child(2),.file-table td:nth-child(2),.file-table th:nth-child(3),.file-table td:nth-child(3){display:none}.file-table th:nth-child(1){width:70%}.file-table th:nth-child(4){width:30%}.file-table td,.file-table th{padding-left:12px;padding-right:12px}.row-actions .action-btn[data-rename]{display:none}.path-bar{margin-bottom:10px}.connection-badge{padding:5px 7px}.mobile-nav{position:fixed;left:0;right:0;bottom:0;height:58px;display:grid;grid-template-columns:repeat(3,1fr);background:#fff;border-top:1px solid var(--line);z-index:10}.mobile-nav button{display:grid;place-items:center;align-content:center;gap:2px;border:0;background:transparent;color:#6f7d90;font-size:16px}.mobile-nav button span{font-size:9px}.mobile-nav button.active{color:var(--brand)}.auth-card{padding:28px 22px;border-radius:20px}
}

.danger-button{background:var(--danger);color:#fff;border-color:var(--danger)}.danger-button:hover{background:#aa303e}

.upload-job .progress>i.error{background:var(--danger)}
.upload-job .progress>i.verified{background:#45a36a}
.upload-job span.error-text{color:var(--danger);font-weight:700}

/* v3.3 Download Manager */
.transfer-stack{
  position:fixed;right:22px;bottom:22px;
  width:min(390px,calc(100vw - 30px));
  display:grid;gap:10px;z-index:24;
  pointer-events:none
}
.transfer-stack>*{pointer-events:auto}
.transfer-stack .upload-tray{
  position:relative;right:auto;bottom:auto;width:100%;
}
.download-tray{
  width:100%;background:#fff;border:1px solid var(--line);
  border-radius:14px;box-shadow:var(--shadow);overflow:hidden
}
.download-tray-head{
  display:flex;align-items:flex-start;justify-content:space-between;gap:10px;
  padding:12px 14px;border-bottom:1px solid var(--line)
}
.download-tray-head>div{min-width:0}
.download-tray-head strong{display:block;font-size:12px}
.download-destination{
  display:block;max-width:310px;margin-top:3px;color:#77869a;font-size:10px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
.transfer-close{
  flex:0 0 auto;width:28px;height:28px;border:0;border-radius:7px;
  background:transparent;color:#6e7d91;font-size:18px
}
.transfer-close:hover{background:#eef2f7}
.download-job{padding:12px 14px 13px}
.download-file-row{display:flex;justify-content:space-between;gap:12px;align-items:center}
.download-file-row strong{
  min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  font-size:11px
}
.download-file-row span{flex:0 0 auto;color:var(--brand);font-size:11px;font-weight:800}
.download-progress{
  height:7px;margin-top:10px;background:#edf1f5;border-radius:999px;overflow:hidden
}
.download-progress>i{
  display:block;height:100%;width:0;background:var(--brand);
  border-radius:999px;transition:width .15s linear
}
.download-progress>i.complete{background:#45a36a}
.download-progress>i.error{background:var(--danger)}
.download-stats{
  display:grid;grid-template-columns:1.25fr .8fr .9fr;gap:7px;
  margin-top:8px;color:#748196;font-size:10px
}
.download-stats span:nth-child(2),.download-stats span:nth-child(3){text-align:right}
.download-status{margin-top:8px;color:#66758a;font-size:10px}
.download-status.success{color:#348052;font-weight:750}
.download-status.error{color:var(--danger);font-weight:750}
.download-actions{display:flex;justify-content:flex-end;margin-top:10px}
.compact-action{padding:7px 11px;font-size:10px}
.location-button.selected{
  border-color:#b9d3fb;background:#f1f6ff;color:#205caf
}
@media(max-width:720px){
  .transfer-stack{right:10px;bottom:68px;width:calc(100vw - 20px)}
  .download-stats{grid-template-columns:1fr 1fr}
  .download-stats span:nth-child(3){grid-column:1/-1;text-align:left}
}
