/* NetDisk UI -- light/dark theme, no external assets. */

:root{
  --bg:#f3f5f6;
  --panel:#ffffff;
  --panel-2:#fafbfc;
  --panel-3:#f0f2f4;
  --line:#e2e6e9;
  --line-2:#cfd6db;
  --text:#15191d;
  --muted:#69737d;
  --faint:#98a1aa;
  --accent:#1a5fd0;
  --accent-h:#154ba6;
  --accent-soft:#e9f0fd;
  --danger:#c4372b;
  --danger-soft:#fdecea;
  --ok:#158049;
  --warn:#a86600;
  --k-image:#2e8b57;
  --k-video:#6b4fbb;
  --k-audio:#c2721c;
  --k-doc:#1a5fd0;
  --k-archive:#b08800;
  --k-other:#7b8794;
  --k-trash:#8a6a3b;
  --k-dup:#b23a48;
  --radius:4px;
  --radius-sm:3px;
  --shadow:0 1px 2px rgba(16,24,40,.05),0 1px 3px rgba(16,24,40,.07);
  --shadow-lg:0 14px 40px rgba(16,24,40,.16);
  --head-h:56px;
  --fs:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei","PingFang SC","Hiragino Sans GB","Source Han Sans SC","Noto Sans CJK SC",sans-serif;
  --fm:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
}
[data-theme="dark"]{
  --bg:#14171a;
  --panel:#1b1f23;
  --panel-2:#20252a;
  --panel-3:#262c32;
  --line:#2b3238;
  --line-2:#3a424a;
  --text:#e7eaed;
  --muted:#939ca5;
  --faint:#6f7881;
  --accent:#4d8ff0;
  --accent-h:#6ba3f5;
  --accent-soft:#1b2a42;
  --danger:#e0645a;
  --danger-soft:#33201f;
  --ok:#3aa871;
  --warn:#d29b3c;
  --shadow:0 1px 2px rgba(0,0,0,.4);
  --shadow-lg:0 16px 44px rgba(0,0,0,.55);
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--text);
  font-family:var(--fs);font-size:14px;line-height:1.5;
  -webkit-font-smoothing:antialiased;overflow:hidden;
}
button,input,select{font-family:inherit;font-size:inherit;color:inherit}
.hidden{display:none !important}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:6px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:var(--faint);background-clip:content-box}

/* ------------------------------------------------------------- controls -- */
.ic{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
.ic.big{width:40px;height:40px;stroke-width:1.3}
.btn{
  display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;
  background:var(--panel);border:1px solid var(--line-2);border-radius:var(--radius-sm);
  color:var(--text);cursor:pointer;white-space:nowrap;transition:background .12s,border-color .12s,opacity .12s;
}
.btn:hover{background:var(--panel-3);border-color:var(--faint)}
.btn:active{transform:translateY(.5px)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn-primary:hover{background:var(--accent-h);border-color:var(--accent-h)}
.btn-danger{color:var(--danger);border-color:var(--line-2)}
.btn-danger:hover{background:var(--danger-soft);border-color:var(--danger)}
.btn-icon{width:32px;padding:0;justify-content:center}
.btn-sm{height:28px;padding:0 10px;font-size:13px}
.btn-block{width:100%;justify-content:center;height:38px}
.icon-btn{
  display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  background:transparent;border:0;border-radius:var(--radius-sm);color:var(--muted);cursor:pointer;
}
.icon-btn:hover{background:var(--panel-3);color:var(--text)}
input[type=text],input[type=password],input[type=search],select{
  height:32px;padding:0 10px;background:var(--panel);border:1px solid var(--line-2);
  border-radius:var(--radius-sm);outline:none;width:100%;
}
input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.select-sm{height:28px;font-size:13px;width:auto;cursor:pointer}
label.field{display:block;margin:14px 0}
label.field > span{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}

/* ---------------------------------------------------------------- login -- */
.login-screen{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:var(--bg);z-index:60;padding:20px}
.login-card{width:100%;max-width:380px;background:var(--panel);border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow-lg);padding:26px}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:6px}
.login-title{font-size:18px;font-weight:600}
.login-sub{font-size:12px;color:var(--muted);margin-top:2px}
.login-error{color:var(--danger);font-size:13px;min-height:20px;margin:2px 0 6px}
.login-hint{margin-top:14px;font-size:12px;color:var(--faint);text-align:center}
.logo{
  width:32px;height:32px;border-radius:var(--radius-sm);background:var(--accent);color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;letter-spacing:.5px;flex:none;
}
.logo.lg{width:40px;height:40px;font-size:15px}

/* --------------------------------------------------------------- shell --- */
.app{display:flex;flex-direction:column;height:100%}
.topbar{
  height:var(--head-h);flex:none;display:flex;align-items:center;gap:16px;padding:0 16px;
  background:var(--panel);border-bottom:1px solid var(--line);z-index:20;
}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.brand-text{min-width:0}
.brand-name{font-weight:600;font-size:15px;line-height:1.2}
.brand-sub{font-size:11px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}
.search-wrap{
  flex:1;max-width:520px;position:relative;display:flex;align-items:center;gap:6px;
  background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 8px;
}
.search-wrap:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);background:var(--panel)}
.search-wrap > .ic{color:var(--faint);margin-left:4px}
.search-wrap input{flex:1;border:0;background:transparent;box-shadow:none !important;padding:0 4px}
.search-wrap select{width:auto;border:0;background:transparent;color:var(--muted);font-size:12px;padding:0 2px;cursor:pointer}
.search-wrap select:focus{box-shadow:none}
.topbar-actions{display:flex;align-items:center;gap:8px;margin-left:auto}

.body{flex:1;display:flex;min-height:0}
.sidebar{
  width:236px;flex:none;background:var(--panel);border-right:1px solid var(--line);
  display:flex;flex-direction:column;overflow-y:auto;padding:14px 10px 10px;gap:16px;
}
.storage-card{
  display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--line);
  border-radius:var(--radius);background:var(--panel-2);
}
.donut{width:56px;height:56px;flex:none;transform:rotate(-90deg)}
.donut-bg{fill:none;stroke:var(--line-2);stroke-width:11}
.donut-fg{fill:none;stroke:var(--accent);stroke-width:11;stroke-linecap:round;stroke-dasharray:0 999}
.storage-meta{min-width:0}
.storage-label{font-size:11px;color:var(--muted)}
.storage-value{font-size:19px;font-weight:600;letter-spacing:-.3px;color:var(--accent)}
.storage-sub{font-size:11px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.nav-title{font-size:11px;color:var(--faint);text-transform:uppercase;letter-spacing:.6px;margin-bottom:6px;padding-left:8px}
.nav-item{
  width:100%;display:flex;align-items:center;gap:8px;height:30px;padding:0 8px;
  background:transparent;border:0;border-radius:var(--radius-sm);color:var(--muted);
  cursor:pointer;text-align:left;font-size:13px;
}
.nav-item:hover{background:var(--panel-3);color:var(--text)}
.nav-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}
.ni-dot{width:7px;height:7px;border-radius:50%;background:var(--k-other);flex:none}
.nav-item.active .ni-dot{background:var(--accent)}
.ni-dot.k-image{background:var(--k-image)}.ni-dot.k-video{background:var(--k-video)}
.ni-dot.k-audio{background:var(--k-audio)}.ni-dot.k-doc{background:var(--k-doc)}
.ni-dot.k-archive{background:var(--k-archive)}.ni-dot.k-other{background:var(--k-other)}
.ni-dot.k-trash{background:var(--k-trash)}.ni-dot.k-dup{background:var(--k-dup)}.ni-dot.k-info{background:var(--faint)}
.ni-count{margin-left:auto;font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}
.nav-item.active .ni-count{color:var(--accent)}

.tree-wrap{flex:1;min-height:80px}
.tree{font-size:13px}
.tree-node{margin-left:12px}
.tree-row{
  display:flex;align-items:center;gap:6px;height:26px;padding:0 6px;border-radius:var(--radius-sm);
  cursor:pointer;color:var(--muted);width:100%;background:transparent;border:0;text-align:left;
}
.tree-row:hover{background:var(--panel-3);color:var(--text)}
.tree-row.active{background:var(--accent-soft);color:var(--accent);font-weight:600}
.tree-caret{width:14px;height:14px;display:flex;align-items:center;justify-content:center;color:var(--faint);flex:none}
.tree-caret svg{width:10px;height:10px;fill:none;stroke:currentColor;stroke-width:2;transition:transform .15s}
.tree-caret.open svg{transform:rotate(90deg)}
.tree-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-foot{border-top:1px solid var(--line);padding-top:8px;display:flex;flex-direction:column;gap:1px}
.mode-note{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--muted);padding:0 2px 8px;line-height:1.4}
.mode-note .md-dot{width:7px;height:7px;border-radius:50%;background:var(--faint);flex:none}
.mode-note.is-open .md-dot{background:var(--ok)}
.mode-note.is-locked .md-dot{background:var(--warn)}

/* ---------------------------------------------------------------- main --- */
.main{flex:1;min-width:0;display:flex;flex-direction:column;position:relative}
.crumbbar{
  height:44px;flex:none;display:flex;align-items:center;gap:12px;padding:0 16px;
  background:var(--panel);border-bottom:1px solid var(--line);
}
.crumbs{display:flex;align-items:center;gap:2px;overflow-x:auto;scrollbar-width:none;min-width:0}
.crumbs::-webkit-scrollbar{display:none}
.crumb{
  background:transparent;border:0;cursor:pointer;color:var(--muted);padding:4px 7px;border-radius:var(--radius-sm);
  white-space:nowrap;font-size:13px;
}
.crumb:hover{background:var(--panel-3);color:var(--text)}
.crumb:last-child{color:var(--text);font-weight:600}
.crumb-sep{color:var(--faint);flex:none}
.crumb-actions{margin-left:auto;display:flex;gap:8px;flex:none}

.toolbar{
  height:42px;flex:none;display:flex;align-items:center;gap:10px;padding:0 16px;
  background:var(--panel);border-bottom:1px solid var(--line);
}
.toolbar-info{font-size:13px;color:var(--muted)}
.toolbar-spacer{flex:1}
.sel-actions{display:flex;align-items:center;gap:8px}
.sel-count{
  min-width:22px;height:22px;padding:0 6px;border-radius:11px;background:var(--accent);color:#fff;
  font-size:12px;display:inline-flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums;
}
.check{position:relative;display:inline-flex;align-items:center;cursor:pointer}
.check input{position:absolute;opacity:0;width:0;height:0}
.check span{
  width:16px;height:16px;border:1px solid var(--line-2);border-radius:var(--radius-sm);background:var(--panel);
  display:inline-block;position:relative;transition:background .1s,border-color .1s;
}
.check input:checked + span{background:var(--accent);border-color:var(--accent)}
.check input:checked + span::after{
  content:"";position:absolute;left:5px;top:1.5px;width:4px;height:9px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);
}
.check input:indeterminate + span{background:var(--accent);border-color:var(--accent)}
.check input:indeterminate + span::after{content:"";position:absolute;left:3px;top:6.5px;width:8px;height:2px;background:#fff;border-radius:1px}

.content{flex:1;overflow:auto;padding:12px 16px 80px;position:relative}

/* ------------------------------------------------------------ file list -- */
.list{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
.list thead th{
  position:sticky;top:0;z-index:5;background:var(--bg);text-align:left;font-weight:500;color:var(--muted);
  font-size:12px;padding:6px 10px;border-bottom:1px solid var(--line);white-space:nowrap;
}
.list thead th.col-check{width:36px;padding-left:16px}
.list tbody td{padding:0 10px;border-bottom:1px solid var(--line);height:42px;vertical-align:middle}
.list tbody td.col-check{width:36px;padding-left:16px}
.list tbody tr{background:var(--panel);cursor:default;transition:background .1s}
.list tbody tr:hover{background:var(--panel-2)}
.list tbody tr.selected{background:var(--accent-soft)}
.list tbody tr.selected td:first-child{box-shadow:inset 3px 0 0 var(--accent)}
.col-name{display:flex;align-items:center;gap:9px;min-width:0}
.name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.name-text .ext{color:var(--faint)}
.col-size{width:110px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.col-time{width:160px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.col-act{width:96px;text-align:right;white-space:nowrap}
.row-actions{display:inline-flex;gap:2px;opacity:0;transition:opacity .1s}
tr:hover .row-actions, tr.selected .row-actions{opacity:1}
.col-act .icon-btn{width:26px;height:26px}

.thumb{
  width:28px;height:28px;border-radius:var(--radius-sm);object-fit:cover;flex:none;
  border:1px solid var(--line);background:var(--panel-3);
}
.file-ic{
  width:28px;height:28px;border-radius:var(--radius-sm);flex:none;display:flex;align-items:center;justify-content:center;
  font-size:10px;font-weight:700;color:#fff;letter-spacing:.3px;
}
.k-image{background:var(--k-image)}.k-video{background:var(--k-video)}.k-audio{background:var(--k-audio)}
.k-doc{background:var(--k-doc)}.k-archive{background:var(--k-archive)}.k-other{background:var(--k-other)}
.k-folder{background:var(--warn)}
.badge{
  display:inline-block;padding:1px 6px;border-radius:9px;font-size:11px;line-height:16px;
  background:var(--panel-3);color:var(--muted);border:1px solid var(--line);
}
.badge.dup{background:var(--danger-soft);color:var(--danger);border-color:var(--danger)}

/* ------------------------------------------------------------ file grid -- */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:12px}
.card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;
  cursor:pointer;position:relative;transition:border-color .12s,box-shadow .12s;
}
.card:hover{border-color:var(--line-2);box-shadow:var(--shadow)}
.card.selected{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
.card-preview{
  height:104px;background:var(--panel-3);display:flex;align-items:center;justify-content:center;
  overflow:hidden;position:relative;border-bottom:1px solid var(--line);
}
.card-preview img{width:100%;height:100%;object-fit:cover}
.card-preview .file-ic{width:40px;height:40px;font-size:12px;border-radius:var(--radius)}
.card-info{padding:8px 10px 10px}
.card-name{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:3px}
.card-sub{font-size:11px;color:var(--faint);display:flex;justify-content:space-between;gap:6px}
.card-check{position:absolute;top:6px;left:6px;z-index:2;background:var(--panel);border-radius:2px}

/* --------------------------------------------------------------- empty --- */
.empty{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  padding:70px 20px;color:var(--faint);text-align:center;
}
.empty .ic{width:44px;height:44px;stroke-width:1.2}
.empty-title{font-size:15px;color:var(--muted)}
.empty-sub{font-size:12.5px}

.drop-hint{position:absolute;inset:8px;border:2px dashed var(--accent);border-radius:8px;background:var(--accent-soft);opacity:.92;display:flex;align-items:center;justify-content:center;z-index:30;pointer-events:none}
.drop-inner{text-align:center;color:var(--accent);font-weight:600;display:flex;flex-direction:column;align-items:center;gap:8px}

/* ----------------------------------------------------------- upload dock - */
.dock{
  position:fixed;right:16px;bottom:16px;width:352px;max-height:56vh;z-index:40;
  background:var(--panel);border:1px solid var(--line-2);border-radius:var(--radius);box-shadow:var(--shadow-lg);
  display:flex;flex-direction:column;overflow:hidden;
}
.dock-head{display:flex;align-items:center;gap:8px;padding:9px 10px;border-bottom:1px solid var(--line);background:var(--panel-2)}
.dock-title{font-size:13px;font-weight:600}
.dock-head-actions{margin-left:auto;display:flex;gap:2px}
.dock-body{overflow:auto;padding:4px}
.dock.collapsed .dock-body{display:none}
.task{padding:8px 8px;border-bottom:1px solid var(--line)}
.task:last-child{border-bottom:0}
.task-top{display:flex;align-items:center;gap:8px}
.task-name{flex:1;min-width:0;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.task-size{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums;flex:none}
.task-sub{display:flex;align-items:center;gap:6px;margin-top:4px;font-size:11px;color:var(--faint)}
.bar{height:4px;border-radius:2px;background:var(--panel-3);overflow:hidden;margin-top:6px}
.bar > i{display:block;height:100%;background:var(--accent);border-radius:2px;transition:width .2s}
.task.done .bar > i{background:var(--ok)}
.task.error .bar > i{background:var(--danger)}
.task-state.ok{color:var(--ok)}
.task-state.err{color:var(--danger)}

/* -------------------------------------------------------------- modals --- */
.modal-back{
  position:fixed;inset:0;background:rgba(16,24,40,.45);z-index:70;display:flex;align-items:center;justify-content:center;padding:20px;
  animation:fade .14s ease;
}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{
  background:var(--panel);border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow-lg);
  width:100%;max-width:520px;max-height:88vh;display:flex;flex-direction:column;overflow:hidden;
}
.modal.wide{max-width:860px}
.modal-head{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line)}
.modal-title{font-size:15px;font-weight:600}
.modal-head .icon-btn{margin-left:auto}
.modal-body{padding:16px;overflow:auto}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--line);background:var(--panel-2)}
.modal-body p{margin:0 0 12px}
.modal-note{font-size:12.5px;color:var(--muted)}

.preview-body{padding:0;background:#0d1117;display:flex;align-items:center;justify-content:center;min-height:260px;max-height:74vh;overflow:auto}
.preview-body img{max-width:100%;max-height:74vh;object-fit:contain;display:block}
.preview-body video{max-width:100%;max-height:74vh;background:#000}
.preview-body audio{width:min(520px,90%);margin:30px 0}
.preview-body iframe{width:100%;height:74vh;border:0;background:#fff}
.preview-body pre{
  margin:0;padding:18px;color:#e6edf3;background:#0d1117;font-family:var(--fm);font-size:12.5px;
  white-space:pre-wrap;word-break:break-word;width:100%;max-height:74vh;overflow:auto;
}
.preview-meta{display:flex;flex-wrap:wrap;gap:14px;font-size:12.5px;color:var(--muted);padding:10px 16px;border-top:1px solid var(--line);background:var(--panel)}
.preview-meta b{color:var(--text);font-weight:600}

.picker{border:1px solid var(--line);border-radius:var(--radius);max-height:320px;overflow:auto;padding:6px}
.picker-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 6px;border-radius:var(--radius-sm);cursor:pointer;font-size:13px}
.picker-row:hover{background:var(--panel-3)}
.picker-row.active{background:var(--accent-soft);color:var(--accent);font-weight:600}
.picker-row .ni-dot{background:var(--warn)}

.kv{display:grid;grid-template-columns:96px 1fr;gap:6px 14px;font-size:13px}
.kv dt{color:var(--muted)}
.kv dd{margin:0;word-break:break-all}

.stat-bars{display:flex;flex-direction:column;gap:8px;margin-top:4px}
.stat-bar{display:grid;grid-template-columns:74px 1fr 92px;align-items:center;gap:10px;font-size:12.5px}
.stat-bar .track{height:8px;border-radius:4px;background:var(--panel-3);overflow:hidden}
.stat-bar .track > i{display:block;height:100%}
.stat-bar .num{text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}
.dup-group{border:1px solid var(--line);border-radius:var(--radius);margin-bottom:12px;overflow:hidden}
.dup-head{padding:8px 12px;background:var(--panel-2);font-size:12.5px;display:flex;justify-content:space-between;gap:10px}
.dup-file{display:flex;align-items:center;gap:8px;padding:7px 12px;border-top:1px solid var(--line);font-size:12.5px}
.dup-file .p{color:var(--muted);font-size:11.5px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* -------------------------------------------------------------- menu ---- */
.menu-pop{
  position:fixed;z-index:80;background:var(--panel);border:1px solid var(--line-2);
  border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:4px;min-width:180px;
}
.menu-item{
  display:block;width:100%;text-align:left;height:30px;padding:0 10px;border:0;background:transparent;
  border-radius:var(--radius-sm);color:var(--text);cursor:pointer;font-size:13px;
}
.menu-item:hover{background:var(--panel-3)}
.menu-sep{height:1px;background:var(--line);margin:4px 2px}

/* -------------------------------------------------------------- toasts --- */
#toast-root{position:fixed;left:50%;transform:translateX(-50%);bottom:22px;z-index:90;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{
  background:var(--text);color:var(--bg);padding:8px 14px;border-radius:var(--radius-sm);font-size:13px;
  box-shadow:var(--shadow-lg);animation:rise .18s ease;max-width:70vw;
}
.toast.err{background:var(--danger);color:#fff}
.toast.ok{background:var(--ok);color:#fff}
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ------------------------------------------------- view switcher + views --- */
.viewtabs{
  flex:none;display:flex;gap:2px;padding:2px;background:var(--panel-2);
  border:1px solid var(--line);border-radius:var(--radius-sm);
}
.viewtab{
  height:26px;padding:0 12px;border:0;background:transparent;border-radius:var(--radius-sm);
  color:var(--muted);font-size:13px;font-family:inherit;cursor:pointer;white-space:nowrap;
}
.viewtab:hover{color:var(--text)}
.viewtab.active{background:var(--panel);color:var(--accent);font-weight:600;box-shadow:var(--shadow)}

.view{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--bg)}
.view-head{
  flex:none;display:flex;align-items:center;gap:16px;padding:14px 16px;
  background:var(--panel);border-bottom:1px solid var(--line);
}
.view-head-text{min-width:0;flex:1}
.view-title{font-size:15px;font-weight:600}
.view-sub{font-size:12px;color:var(--muted);margin-top:2px}
.view-actions{display:flex;gap:8px;flex:none}
.nick-field{display:flex;align-items:center;gap:8px;flex:none}
.nick-field span{font-size:12px;color:var(--muted);white-space:nowrap}
.nick-field input{width:150px;height:30px}

/* ---------------------------------------------------------------- chat --- */
.chat-list{flex:1;min-height:0;overflow:auto;padding:14px 16px;display:flex;flex-direction:column;gap:12px}
.msg{display:flex;gap:10px;align-items:flex-start;max-width:860px}
.msg-ava{
  width:32px;height:32px;flex:none;border-radius:var(--radius-sm);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;
}
.msg-body{min-width:0;flex:1}
.msg-head{display:flex;align-items:baseline;gap:8px;margin-bottom:3px}
.msg-nick{font-size:13px;font-weight:600}
.msg-time{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}
.msg-text{
  font-size:13.5px;line-height:1.55;color:var(--text);white-space:pre-wrap;word-break:break-word;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;
}
.chat-compose{
  flex:none;display:flex;gap:10px;align-items:flex-end;padding:12px 16px;
  background:var(--panel);border-top:1px solid var(--line);
}
.chat-compose textarea{
  flex:1;min-height:44px;max-height:140px;resize:vertical;
  font-family:inherit;font-size:13.5px;line-height:1.5;
}
.chat-compose .btn{height:44px;padding:0 20px}

/* ------------------------------------------------------------- scratch --- */
.scratch-drop{
  margin:14px 16px;padding:26px;border:1px dashed var(--line-2);border-radius:var(--radius);
  background:var(--panel);text-align:center;color:var(--muted);
}
.scratch-drop .ic.big{width:34px;height:34px;stroke-width:1.4;color:var(--faint)}
.scratch-drop-title{font-size:13.5px;color:var(--text);margin-top:8px}
.scratch-drop-sub{font-size:12px;color:var(--faint);margin-top:3px}
.scratch-drop.over{border-color:var(--accent);background:var(--accent-soft)}
.scratch-list{flex:1;min-height:0;overflow:auto;padding:0 16px 20px;display:flex;flex-direction:column;gap:8px}
.scratch-item{
  display:flex;align-items:center;gap:12px;padding:10px 12px;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--radius);
}
.si-ic{
  width:34px;height:34px;flex:none;border-radius:var(--radius-sm);display:flex;align-items:center;
  justify-content:center;font-size:10px;font-weight:700;letter-spacing:.3px;
  background:var(--panel-3);color:var(--muted);
}
.si-main{min-width:0;flex:1}
.si-name{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.si-sub{font-size:11.5px;color:var(--faint);margin-top:2px}
.si-actions{display:flex;gap:6px;flex:none}

/* the breadcrumb bar, the file toolbar and the search box belong to the
   file view only -- the chat and transfer views bring their own header. */
body[data-mode="chat"] .crumbbar,
body[data-mode="chat"] .toolbar,
body[data-mode="chat"] .search-wrap,
body[data-mode="scratch"] .crumbbar,
body[data-mode="scratch"] .toolbar,
body[data-mode="scratch"] .search-wrap,
body[data-mode="chat"] #content,
body[data-mode="scratch"] #content{display:none}

/* --------------------------------------------------------- responsive --- */
@media (max-width:980px){
  .sidebar{position:fixed;left:0;top:var(--head-h);bottom:0;z-index:50;transform:translateX(-100%);transition:transform .18s;box-shadow:var(--shadow-lg)}
  .sidebar.open{transform:none}
  .brand-sub{display:none}
  .col-time{display:none}
  .dock{left:12px;right:12px;width:auto}
}
@media (max-width:720px){
  .search-wrap select{display:none}
  .topbar{gap:8px;padding:0 10px}
  .btn span{display:none}
  .btn-primary{width:32px;padding:0;justify-content:center}
  .grid{grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
  .col-size{width:78px}
  .content{padding:10px 10px 80px}
  /* collapse the breadcrumb bar buttons to icons only */
  .crumb-actions .btn{font-size:0;gap:0;width:28px;padding:0;justify-content:center}
  .crumb-actions .btn .ic{width:15px;height:15px}
  .crumbbar{padding:0 10px}
  /* the switcher stays compact so the top bar never wraps */
  .viewtab{padding:0 8px;font-size:12px}
  .view-head{padding:10px 12px;flex-wrap:wrap;gap:8px}
  .view-sub{display:none}
  .nick-field input{width:120px}
  .chat-list,.chat-compose,.scratch-list{padding-left:12px;padding-right:12px}
  .scratch-drop{margin:10px 12px;padding:18px}
  .si-actions .btn{padding:0 8px;font-size:12px}
}
