:root {
  color-scheme: light;
  --bg: #f3f6f4;
  --surface: #ffffff;
  --surface-raised: #ffffff;
  --surface-muted: #e9efec;
  --text: #17211d;
  --text-soft: #65716b;
  --border: #d8e0dc;
  --border-strong: #b9c6c0;
  --primary: #087f5b;
  --primary-hover: #066747;
  --primary-soft: #dcefe7;
  --accent: #d85d3f;
  --accent-soft: #fae6df;
  --warning: #a96a05;
  --warning-soft: #fff1d6;
  --danger: #c23c3c;
  --danger-soft: #fbe3e3;
  --info: #236a95;
  --info-soft: #deedf6;
  --shadow-sm: 0 1px 2px rgba(23, 33, 29, .06);
  --shadow-md: 0 14px 34px rgba(23, 33, 29, .11);
  --radius: 8px;
  --ease: cubic-bezier(.2, .8, .2, 1);
}

:root[data-theme="dark"] {
  color-scheme: dark;
  --bg: #111714;
  --surface: #18211d;
  --surface-raised: #1e2924;
  --surface-muted: #25312c;
  --text: #edf3f0;
  --text-soft: #9fada6;
  --border: #33413a;
  --border-strong: #46564e;
  --primary: #55c99a;
  --primary-hover: #78d8b2;
  --primary-soft: #193a2e;
  --accent: #f08064;
  --accent-soft: #44271f;
  --warning: #efbd67;
  --warning-soft: #3d301b;
  --danger: #f17d7d;
  --danger-soft: #442323;
  --info: #79b9dd;
  --info-soft: #1e3543;
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, .22);
  --shadow-md: 0 18px 44px rgba(0, 0, 0, .34);
}

@media (prefers-color-scheme: dark) {
  :root[data-theme="auto"] {
    color-scheme: dark;
    --bg: #111714;
    --surface: #18211d;
    --surface-raised: #1e2924;
    --surface-muted: #25312c;
    --text: #edf3f0;
    --text-soft: #9fada6;
    --border: #33413a;
    --border-strong: #46564e;
    --primary: #55c99a;
    --primary-hover: #78d8b2;
    --primary-soft: #193a2e;
    --accent: #f08064;
    --accent-soft: #44271f;
    --warning: #efbd67;
    --warning-soft: #3d301b;
    --danger: #f17d7d;
    --danger-soft: #442323;
    --info: #79b9dd;
    --info-soft: #1e3543;
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, .22);
    --shadow-md: 0 18px 44px rgba(0, 0, 0, .34);
  }
}

* { box-sizing: border-box; }
html { min-height: 100%; }
body {
  min-height: 100vh;
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: "Microsoft YaHei UI", "Microsoft YaHei", "PingFang SC", system-ui, sans-serif;
  font-size: 14px;
  line-height: 1.65;
  letter-spacing: 0;
  transition: background-color .28s var(--ease), color .28s var(--ease);
}
a { color: var(--primary); transition: color .18s ease, opacity .18s ease; }
a:hover, a:focus { color: var(--primary-hover); text-decoration: none; }
button, input, select, textarea { font: inherit; letter-spacing: 0; }
a:focus, a:focus-visible, button:focus, button:focus-visible, [role="button"]:focus, [role="button"]:focus-visible { outline: 0; }
input:focus-visible, select:focus-visible, textarea:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 28%, transparent); outline-offset: 2px; }

.app-body { padding-top: 78px; }
.container { width: min(1180px, calc(100% - 32px)); }
.app-main { min-height: calc(100vh - 160px); padding: 28px 0 48px; }
.eyebrow { margin: 0 0 8px; color: var(--primary); font-size: 12px; font-weight: 700; text-transform: uppercase; }
.text-muted { color: var(--text-soft) !important; }
.page-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; margin: 0 0 24px; }
.page-heading h1, .page-heading h2 { margin: 0; color: var(--text); font-size: 26px; font-weight: 700; }
.page-heading p { margin: 6px 0 0; color: var(--text-soft); }

.navbar {
  min-height: 64px;
  margin: 0;
  border: 0;
  border-bottom: 1px solid var(--border);
  border-radius: 0;
  background: color-mix(in srgb, var(--surface) 94%, transparent);
  box-shadow: var(--shadow-sm);
  backdrop-filter: blur(14px);
}
.navbar-fixed-top { min-height: 64px; }
.navbar .container { display: flex; align-items: center; }
.navbar-header { flex: 0 0 auto; }
.navbar-brand {
  display: flex;
  align-items: center;
  gap: 10px;
  height: 64px;
  padding: 0 18px 0 0;
  color: var(--text) !important;
  font-size: 17px;
  font-weight: 700;
}
.brand-mark {
  display: inline-grid;
  width: 34px;
  height: 34px;
  place-items: center;
  flex: 0 0 34px;
  border-radius: 7px;
  background: var(--primary);
  color: #fff;
  font-family: Georgia, "STSong", serif;
  font-size: 20px;
  font-weight: 700;
}
.navbar-collapse { flex: 1 1 auto; }
.navbar-nav { margin: 0; }
.navbar-nav > li > a {
  height: 64px;
  padding: 21px 14px;
  color: var(--text-soft) !important;
  font-weight: 600;
  background: transparent !important;
}
.navbar-nav > li > a i { width: 18px; text-align: center; }
.navbar-nav > li.active > a, .navbar-nav > li > a:hover { color: var(--text) !important; }
.navbar-nav > li.active > a::after { content: ""; position: absolute; right: 14px; bottom: 0; left: 14px; height: 3px; border-radius: 3px 3px 0 0; background: var(--primary); }
.navbar-toggle { margin-top: 14px; border-color: var(--border) !important; }
.navbar-toggle .icon-bar { background: var(--text) !important; }
.theme-toggle {
  display: inline-grid;
  width: 38px;
  height: 38px;
  margin: 13px 0 0 8px;
  padding: 0;
  place-items: center;
  border: 1px solid var(--border);
  border-radius: 7px;
  background: var(--surface-muted);
  color: var(--text);
}
.dropdown-menu { border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface-raised); box-shadow: var(--shadow-md); }
.dropdown-menu > li > a { padding: 10px 14px; color: var(--text); }
.dropdown-menu > li > a:hover { background: var(--surface-muted); color: var(--text); }

.panel, .well {
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  color: var(--text);
  box-shadow: var(--shadow-sm);
}
.well { padding: 22px; }
.panel-heading {
  padding: 16px 20px;
  border: 0 !important;
  border-bottom: 1px solid var(--border) !important;
  border-radius: var(--radius) var(--radius) 0 0;
  background: transparent !important;
  color: var(--text) !important;
}
.panel-title { color: inherit; font-size: 16px; font-weight: 700; }
.panel-body { padding: 20px; }
.panel-footer { border-top: 1px solid var(--border); border-radius: 0 0 var(--radius) var(--radius); background: var(--surface-muted); color: var(--text-soft); }
.panel-primary { border-top: 3px solid var(--primary); }
.panel-info { border-top: 3px solid var(--info); }
.panel-success { border-top: 3px solid var(--primary); }
.panel-warning { border-top: 3px solid var(--warning); }
.list-group-item { border-color: var(--border); background: transparent; color: var(--text); }

.btn {
  min-height: 40px;
  padding: 9px 15px;
  border: 1px solid transparent;
  border-radius: 6px;
  font-weight: 650;
  text-transform: none;
  box-shadow: none !important;
  transition: transform .16s var(--ease), background-color .18s ease, border-color .18s ease, color .18s ease, box-shadow .18s ease;
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn i { margin-right: 6px; }
.btn-primary, .btn-primary:focus { border-color: var(--primary); background: var(--primary) !important; color: #fff !important; }
.btn-primary:hover { border-color: var(--primary-hover); background: var(--primary-hover) !important; }
.btn-secondary, .btn-default, .btn-default:focus { border-color: var(--border); background: var(--surface) !important; color: var(--text) !important; }
.btn-secondary:hover, .btn-default:hover { border-color: var(--border-strong); background: var(--surface-muted) !important; color: var(--text) !important; }
.btn-danger { border-color: var(--danger); background: var(--danger) !important; color: #fff !important; }
.btn-info { border-color: var(--info); background: var(--info) !important; color: #fff !important; }
.btn-warning { border-color: var(--warning); background: var(--warning) !important; color: #fff !important; }
.btn-block { width: 100%; }
.btn-fab { border-radius: 50%; }
.btn-xs { min-height: 28px; padding: 4px 8px; }

.form-control {
  height: 42px;
  padding: 9px 12px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--surface);
  color: var(--text);
  box-shadow: none;
  transition: border-color .18s ease, box-shadow .18s ease, background-color .18s ease;
}
textarea.form-control { height: auto; min-height: 92px; resize: vertical; }
.form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 14%, transparent); }
.form-control::placeholder { color: var(--text-soft); opacity: .72; }
.control-label { padding-top: 10px !important; color: var(--text); font-weight: 650; }
.input-group-addon { border-color: var(--border); background: var(--surface-muted); color: var(--text-soft); }
.form-group { margin-bottom: 16px; }
.checkbox label, .radio label { color: var(--text); }
input[type="checkbox"], input[type="radio"] { accent-color: var(--primary); }

.table { margin: 0; color: var(--text); }
.table > thead > tr > th { padding: 13px 12px; border-bottom: 1px solid var(--border); color: var(--text-soft); font-size: 12px; font-weight: 700; text-transform: uppercase; }
.table > tbody > tr > td { padding: 13px 12px; border-top: 1px solid var(--border); vertical-align: middle; }
.table-hover > tbody > tr:hover { background: var(--surface-muted); }
.fixed-table-container, .bootstrap-table .fixed-table-container { border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface); }
.fixed-table-toolbar { margin-bottom: 12px; }
.pagination > li > a, .pagination > li > span { border-color: var(--border); background: var(--surface); color: var(--text); }
.pagination > .active > a, .pagination > .active > span { border-color: var(--primary); background: var(--primary); color: #fff; }

.alert { border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface-muted); color: var(--text); }
.alert-success { border-color: var(--primary); background: var(--primary-soft); }
.alert-danger { border-color: var(--danger); background: var(--danger-soft); }
.alert-warning { border-color: var(--warning); background: var(--warning-soft); }
.alert-info { border-color: var(--info); background: var(--info-soft); }

.footer { padding: 24px 0; border-top: 1px solid var(--border); background: var(--surface); }
.footer p { margin: 0; color: var(--text-soft); }

.segmented { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 4px; padding: 4px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface-muted); }
.segmented button { min-height: 36px; border: 0; border-radius: 5px; background: transparent; color: var(--text-soft); font-weight: 650; }
.segmented button.is-active { background: var(--surface); color: var(--text); box-shadow: var(--shadow-sm); }

.auth-page { overflow-x: hidden; }
.auth-shell { display: grid; grid-template-columns: minmax(320px, .85fr) minmax(420px, 1.15fr); min-height: 100vh; }
.auth-intro { display: flex; min-height: 100vh; padding: 48px clamp(36px, 6vw, 92px); flex-direction: column; justify-content: space-between; background: #172d25; color: #f1f7f4; }
.brand-lockup { display: inline-flex; align-items: center; gap: 12px; color: inherit; font-size: 18px; font-weight: 700; }
.brand-lockup:hover { color: inherit; opacity: .86; }
.auth-intro h1 { max-width: 500px; margin: 8px 0 18px; font-family: Georgia, "STSong", serif; font-size: 46px; line-height: 1.2; font-weight: 600; }
.auth-intro p { max-width: 480px; color: #b9ccc3; font-size: 16px; }
.auth-intro .eyebrow { color: #71d7ad; font-size: 12px; }
.auth-footnote { margin: 0; font-size: 13px !important; }
.auth-panel { width: min(560px, calc(100% - 48px)); margin: auto; padding: 48px 0; }
.auth-heading { margin-bottom: 20px; }
.auth-heading h2 { margin: 0; font-size: 30px; }
.auth-tabs { margin-bottom: 26px; }
.auth-link { justify-self: end; color: var(--accent); font-size: 13px; text-decoration: none; transition: color .2s ease; }
.auth-link:hover { color: var(--accent); text-decoration: underline; filter: brightness(.9); }
.auth-form { display: none; gap: 16px; animation: ql-rise .34s var(--ease); }
.auth-form.is-active { display: grid; }
.auth-form label, .access-form label { display: grid; gap: 7px; margin: 0; color: var(--text); font-size: 13px; font-weight: 650; }
.input-with-icon { position: relative; width: 100%; }
.input-with-icon > i { position: absolute; z-index: 1; top: 50%; left: 13px; width: 18px; color: var(--text-soft); text-align: center; transform: translateY(-50%); }
.input-with-icon input { width: 100%; height: 46px; padding: 10px 12px 10px 42px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--text); }
.input-with-icon input:focus { border-color: var(--primary); outline: 0; box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 14%, transparent); }
.form-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.verification-row { display: grid; grid-template-columns: 1fr 126px; gap: 10px; }
.verification-row .btn { min-height: 46px; }
.captcha-row { display: grid; grid-template-columns: minmax(0, 1fr) 126px; gap: 10px; align-items: stretch; }
.captcha-image { display: grid; width: 126px; min-height: 46px; padding: 2px; place-items: center; border: 1px solid var(--border); border-radius: 6px; background: var(--surface-muted); cursor: pointer; transition: border-color .18s ease, transform .18s ease; }
.captcha-image:hover { border-color: var(--primary); transform: translateY(-1px); }
.captcha-image img { display: block; width: 120px; height: 42px; border-radius: 5px; }

.access-shell { display: grid; min-height: 100vh; padding: 24px; place-items: center; }
.access-panel { width: min(460px, 100%); padding: 34px; border: 1px solid var(--border); border-top: 4px solid var(--primary); border-radius: var(--radius); background: var(--surface); box-shadow: var(--shadow-md); }
.access-panel .brand-lockup { margin-bottom: 38px; color: var(--text); }
.access-panel h1 { margin: 4px 0 8px; overflow-wrap: anywhere; font-size: 24px; }
.access-file-icon { display: grid; width: 52px; height: 52px; margin-bottom: 20px; place-items: center; border-radius: 8px; background: var(--primary-soft); color: var(--primary); font-size: 22px; }
.access-message { margin: 0 0 22px; color: var(--text-soft); }
.access-message.is-error { color: var(--danger); }
.access-form { display: grid; gap: 14px; }

.ql-toasts { position: fixed; z-index: 99999; top: 20px; right: 0; left: 0; display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 0 20px; pointer-events: none; }
.ql-toast { display: grid; width: min(420px, 100%); grid-template-columns: 40px minmax(0, 1fr) 28px; gap: 12px; align-items: center; padding: 16px; border: 1px solid color-mix(in srgb, var(--border) 78%, transparent); border-radius: 12px; background: color-mix(in srgb, var(--surface-raised) 92%, transparent); color: var(--text); box-shadow: 0 22px 54px rgba(15, 29, 22, .2); backdrop-filter: blur(18px) saturate(135%); opacity: 0; pointer-events: auto; transform: translateY(14px) scale(.97); transition: opacity .24s ease, transform .28s var(--ease); }
.ql-toast.is-visible { opacity: 1; transform: translateY(0) scale(1); }
.ql-toast-icon { display: grid; width: 40px; height: 40px; place-items: center; border-radius: 11px; background: var(--info-soft); color: var(--info); font-size: 16px; }
.ql-toast-message { min-width: 0; font-size: 14px; font-weight: 650; line-height: 1.55; overflow-wrap: anywhere; }
.ql-toast-success { border-color: color-mix(in srgb, var(--primary) 34%, var(--border)); }.ql-toast-success .ql-toast-icon { background: var(--primary-soft); color: var(--primary); }
.ql-toast-danger { border-color: color-mix(in srgb, var(--danger) 36%, var(--border)); }.ql-toast-danger .ql-toast-icon { background: var(--danger-soft); color: var(--danger); }
.ql-toast-warning { border-color: color-mix(in srgb, var(--warning) 36%, var(--border)); }.ql-toast-warning .ql-toast-icon { background: var(--warning-soft); color: var(--warning); }
.ql-toast button { display: grid; width: 28px; height: 28px; padding: 0; place-items: center; border: 0; border-radius: 7px; background: transparent; color: var(--text-soft); transition: background-color .18s ease, color .18s ease; }.ql-toast button:hover { background: var(--surface-muted); color: var(--text); }

.ql-dialog-backdrop { position: fixed; z-index: 99998; inset: 0; display: grid; padding: 20px; place-items: center; background: rgba(8, 15, 12, .56); opacity: 0; backdrop-filter: blur(5px); transition: opacity .18s ease; }
.ql-dialog-backdrop.is-visible { opacity: 1; }
.ql-dialog { display: grid; width: min(430px, 100%); grid-template-columns: 48px 1fr; gap: 16px; padding: 24px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface-raised); box-shadow: var(--shadow-md); transform: translateY(12px) scale(.98); transition: transform .22s var(--ease); }
.is-visible .ql-dialog { transform: translateY(0) scale(1); }
.ql-dialog-symbol { display: grid; width: 44px; height: 44px; place-items: center; border-radius: 8px; background: var(--info-soft); color: var(--info); font-size: 19px; }
.ql-dialog-warning { background: var(--warning-soft); color: var(--warning); }
.ql-dialog-danger { background: var(--danger-soft); color: var(--danger); }
.ql-dialog-success { background: var(--primary-soft); color: var(--primary); }
.ql-dialog-copy h3 { margin: 0 0 6px; font-size: 18px; }
.ql-dialog-copy p { margin: 0; color: var(--text-soft); white-space: pre-line; }
.ql-dialog-actions { grid-column: 1 / -1; display: flex; justify-content: flex-end; gap: 10px; padding-top: 8px; }
.ql-loading { display: flex; min-width: 190px; padding: 18px 22px; align-items: center; gap: 14px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface-raised); color: var(--text); box-shadow: var(--shadow-md); }
.ql-spinner { width: 22px; height: 22px; border: 3px solid var(--border); border-top-color: var(--primary); border-radius: 50%; animation: ql-spin .8s linear infinite; }

.upload-workspace { border: 1px dashed var(--border-strong) !important; background: var(--surface) !important; transition: border-color .2s ease, background-color .2s ease, transform .2s var(--ease); }
.upload-workspace:hover { border-color: var(--primary) !important; transform: translateY(-2px); }
.progress { height: 10px; border-radius: 5px; background: var(--surface-muted); box-shadow: none; }
.progress-bar { background: var(--primary); box-shadow: none; }
.image_view img { max-width: 100%; border-radius: var(--radius); }
.copy-bar { display: flex; gap: 8px; }

.admin-body { padding-top: 82px; }
.admin-shell { min-height: calc(100vh - 82px); padding: 26px 0 48px; }
.admin-version { display: inline-flex; align-items: center; padding: 3px 8px; border-radius: 4px; background: var(--primary-soft); color: var(--primary); font-size: 11px; font-weight: 700; }
.stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 22px; }
.stat-card { min-height: 132px; padding: 20px; border: 1px solid var(--border); border-top: 3px solid var(--primary); border-radius: var(--radius); background: var(--surface); color: var(--text); box-shadow: var(--shadow-sm); }
.stat-card:nth-child(2) { border-top-color: var(--info); }
.stat-card:nth-child(3) { border-top-color: var(--warning); }
.stat-card:nth-child(4) { border-top-color: var(--accent); }
.stat-card i { color: var(--text-soft); font-size: 20px; }
.stat-card strong { display: block; margin-top: 16px; font-size: 28px; }
.stat-card span { color: var(--text-soft); }
.label { border-radius: 4px; }
pre { border-color: var(--border); border-radius: var(--radius); background: var(--surface-muted); color: var(--text); }

@keyframes ql-rise { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
@keyframes ql-spin { to { transform: rotate(360deg); } }

@media (max-width: 991px) {
  .stat-grid { grid-template-columns: 1fr 1fr; }
  .navbar .container { display: block; }
  .navbar-collapse { border-color: var(--border); background: var(--surface); }
  .navbar-nav > li > a { height: 46px; padding: 13px 12px; }
  .navbar-nav > li.active > a::after { top: 9px; right: auto; bottom: 9px; left: 0; width: 3px; height: auto; border-radius: 0 3px 3px 0; }
  .theme-toggle { margin: 4px 0 12px 12px; }
}

@media (max-width: 767px) {
  .container { width: min(100% - 24px, 1180px); }
  .app-body { padding-top: 64px; }
  .app-main { padding-top: 18px; }
  .page-heading { align-items: flex-start; flex-direction: column; }
  .auth-shell { display: block; }
  .auth-intro { min-height: 240px; padding: 28px 24px; }
  .auth-intro > div { margin-top: 42px; }
  .auth-intro h1 { font-size: 32px; }
  .auth-intro p, .auth-footnote { display: none; }
  .auth-panel { width: min(100% - 32px, 560px); padding: 34px 0 48px; }
  .form-grid-2 { grid-template-columns: 1fr; }
  .verification-row { grid-template-columns: 1fr 112px; }
  .captcha-row { grid-template-columns: minmax(0, 1fr) 112px; }
  .captcha-image { width: 112px; }
  .captcha-image img { width: 108px; height: 38px; }
  .access-panel { padding: 26px 22px; }
  .stat-grid { grid-template-columns: 1fr 1fr; gap: 10px; }
  .stat-card { min-height: 116px; padding: 15px; }
  .stat-card strong { margin-top: 10px; font-size: 24px; }
  .ql-dialog { grid-template-columns: 40px 1fr; padding: 20px; }
  .ql-toasts { top: 12px; padding: 0 16px; }
}

@media (max-width: 420px) {
  .stat-grid { grid-template-columns: 1fr; }
  .verification-row { grid-template-columns: 1fr; }
  .verification-row .btn { width: 100%; }
  .captcha-row { grid-template-columns: 1fr 112px; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
}

/* Qinglv workspace system */
:root {
  --canvas: #eef2ef;
  --glass: rgba(255, 255, 255, .72);
  --glass-strong: rgba(255, 255, 255, .9);
  --ink: #15221e;
  --ink-muted: #64746c;
  --line: rgba(30, 58, 48, .13);
  --forest: #0a7a5d;
  --forest-deep: #075943;
  --coral: #e16a50;
  --fog: #f7f9f7;
  --shadow-float: 0 22px 58px rgba(27, 53, 43, .12);
  --shadow-lift: 0 14px 28px rgba(27, 53, 43, .1);
}

:root[data-theme="dark"] {
  --canvas: #101a17;
  --glass: rgba(24, 37, 32, .74);
  --glass-strong: rgba(29, 44, 38, .94);
  --ink: #edf6f1;
  --ink-muted: #aabbb2;
  --line: rgba(205, 231, 218, .14);
  --forest: #63d3a8;
  --forest-deep: #91e5c2;
  --coral: #f18b72;
  --fog: #17231e;
  --shadow-float: 0 22px 60px rgba(0, 0, 0, .3);
  --shadow-lift: 0 14px 28px rgba(0, 0, 0, .22);
}

@media (prefers-color-scheme: dark) {
  :root[data-theme="auto"] { --canvas:#101a17; --glass:rgba(24,37,32,.74); --glass-strong:rgba(29,44,38,.94); --ink:#edf6f1; --ink-muted:#aabbb2; --line:rgba(205,231,218,.14); --forest:#63d3a8; --forest-deep:#91e5c2; --coral:#f18b72; --fog:#17231e; --shadow-float:0 22px 60px rgba(0,0,0,.3); --shadow-lift:0 14px 28px rgba(0,0,0,.22); }
}

body.app-body,
body.admin-body {
  background-color: var(--canvas);
  background-image: linear-gradient(rgba(18, 66, 49, .045) 1px, transparent 1px), linear-gradient(90deg, rgba(18, 66, 49, .045) 1px, transparent 1px);
  background-size: 30px 30px;
  color: var(--ink);
}

body.app-body::before,
body.admin-body::before {
  content: "";
  position: fixed;
  z-index: -1;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(135deg, rgba(72, 167, 130, .12), transparent 38%), linear-gradient(315deg, rgba(225, 106, 80, .08), transparent 35%);
}

.app-main { min-height: calc(100vh - 148px); padding: 44px 0 64px; }
.admin-shell { min-height: calc(100vh - 82px); padding: 44px 0 64px; }
.container { width: min(1240px, calc(100% - 48px)); }

.navbar.navbar-default {
  min-height: 74px;
  border: 0;
  border-bottom: 1px solid var(--line);
  background: rgba(246, 250, 247, .68);
  box-shadow: none;
  backdrop-filter: blur(20px) saturate(135%);
}
:root[data-theme="dark"] .navbar.navbar-default { background: rgba(16, 26, 23, .72); }
.navbar-fixed-top { min-height: 74px; }
.app-body { padding-top: 74px; }
.admin-body { padding-top: 82px; }
.navbar .container { min-height: 74px; }
.navbar-brand { height: 74px; padding-right: 28px; color: var(--ink) !important; letter-spacing: 0; }
.brand-mark { width: 38px; height: 38px; flex-basis: 38px; border-radius: 11px; background: linear-gradient(135deg, var(--forest), #159a75); box-shadow: 0 8px 18px rgba(9, 122, 91, .23); }
.navbar-nav > li > a { position: relative; display: flex; height: 74px; align-items: center; padding: 0 13px; color: var(--ink-muted) !important; font-size: 13px; font-weight: 700; }
.navbar-nav > li > a i { width: auto; margin-right: 7px; color: var(--forest); }
.navbar-nav > li.active > a,
.navbar-nav > li > a:hover { color: var(--ink) !important; }
.navbar-nav > li.active > a::after { right: 13px; bottom: 12px; left: 13px; height: 2px; background: var(--coral); }
.theme-toggle { width: 38px; height: 38px; margin: 18px 0 0 10px; border-color: var(--line); border-radius: 50%; background: var(--glass); color: var(--ink); }
.theme-toggle:hover { border-color: var(--forest); color: var(--forest); }
.dropdown-menu { padding: 8px; border-color: var(--line); border-radius: 12px; background: var(--glass-strong); box-shadow: var(--shadow-float); backdrop-filter: blur(18px); }
.dropdown-menu > li > a { border-radius: 7px; color: var(--ink); }

.workspace-page,
.upload-page { animation: workspace-enter .52s cubic-bezier(.16, .84, .32, 1) both; }
.workspace-hero { display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; margin-bottom: 28px; }
.workspace-hero-copy { max-width: 650px; }
.section-kicker { display: block; margin-bottom: 9px; color: var(--forest); font-size: 11px; font-weight: 800; letter-spacing: .12em; line-height: 1; }
.workspace-hero h1 { margin: 0; color: var(--ink); font-family: Georgia, "STSong", "Songti SC", serif; font-size: 42px; font-weight: 600; line-height: 1.13; letter-spacing: 0; }
.workspace-hero p { margin: 12px 0 0; color: var(--ink-muted); font-size: 15px; }
.workspace-hero-actions { display: flex; align-items: center; gap: 12px; }
.search-tool { display: flex; width: min(330px, 40vw); height: 44px; align-items: center; border: 1px solid var(--line); border-radius: 11px; background: var(--glass); box-shadow: 0 1px 0 rgba(255,255,255,.5) inset; transition: border-color .18s ease, box-shadow .18s ease, background .18s ease; }
.search-tool:focus-within { border-color: color-mix(in srgb, var(--forest) 65%, var(--line)); background: var(--glass-strong); box-shadow: 0 0 0 4px color-mix(in srgb, var(--forest) 12%, transparent); }
.search-tool > i { width: 42px; color: var(--ink-muted); text-align: center; }
.search-tool input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; color: var(--ink); }
.search-tool button { display: grid; width: 36px; height: 36px; margin-right: 4px; padding: 0; place-items: center; border: 0; border-radius: 8px; background: transparent; color: var(--ink-muted); transition: background-color .16s ease, color .16s ease, transform .16s ease; }
.search-tool button:hover { background: var(--primary-soft); color: var(--forest); transform: translateX(2px); }
.upload-cta { display: inline-flex; min-height: 44px; align-items: center; gap: 3px; padding: 10px 17px; border-radius: 10px; background: var(--forest) !important; box-shadow: 0 10px 20px rgba(8, 127, 91, .2) !important; }
.upload-cta:hover { background: var(--forest-deep) !important; }

.notice-strip { display: flex; align-items: center; gap: 10px; margin-bottom: 18px; padding: 11px 14px; border: 1px solid color-mix(in srgb, var(--coral) 26%, var(--line)); border-radius: 10px; background: color-mix(in srgb, var(--coral) 8%, var(--glass)); color: var(--ink); font-size: 13px; }
.notice-strip i { color: var(--coral); }
.file-workbench { overflow: hidden; border: 1px solid var(--line); border-radius: 16px; background: var(--glass); box-shadow: var(--shadow-float); backdrop-filter: blur(18px) saturate(135%); }
.workbench-bar { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 18px 22px; border-bottom: 1px solid var(--line); }
.workbench-bar .section-kicker { margin-bottom: 4px; font-size: 9px; }
.workbench-bar strong { color: var(--ink); font-size: 15px; }
.workbench-meta { display: flex; align-items: center; gap: 16px; color: var(--ink-muted); font-size: 12px; }
.workbench-controls { display: flex; align-items: center; gap: 18px; }
.filter-pills { display: flex; align-items: center; gap: 5px; padding: 4px; border: 1px solid var(--line); border-radius: 10px; background: color-mix(in srgb, var(--fog) 72%, transparent); }
.filter-pills button { min-height: 27px; padding: 4px 8px; border: 0; border-radius: 6px; background: transparent; color: var(--ink-muted); font-size: 11px; font-weight: 700; transition: color .16s ease, background-color .16s ease, transform .16s ease; }
.filter-pills button i { margin-right: 3px; }.filter-pills button:hover { color: var(--ink); }.filter-pills button.is-active { background: var(--glass-strong); color: var(--forest); box-shadow: 0 2px 7px rgba(20,50,39,.1); }
.workbench-meta i { margin-right: 5px; color: var(--forest); }
.live-dot { display: inline-flex; align-items: center; gap: 6px; }
.live-dot::before { width: 6px; height: 6px; border-radius: 50%; background: var(--forest); box-shadow: 0 0 0 5px color-mix(in srgb, var(--forest) 13%, transparent); content: ""; animation: live-pulse 1.9s ease-out infinite; }
.file-table { display: grid; }
.file-row { display: grid; grid-template-columns: minmax(280px, 2.4fr) .7fr .58fr 1.15fr .9fr 94px; min-height: 76px; align-items: center; gap: 14px; padding: 10px 22px; border-bottom: 1px solid var(--line); color: var(--ink-muted); font-size: 13px; transition: background-color .22s ease, transform .22s cubic-bezier(.2,.8,.2,1), box-shadow .22s ease; animation: row-in .42s cubic-bezier(.16,.84,.32,1) both; }
.file-row:not(.file-row-head):hover { z-index: 1; background: color-mix(in srgb, var(--forest) 6%, var(--glass)); box-shadow: 0 8px 22px rgba(22, 62, 47, .06); transform: translateX(4px); }
.file-row:nth-child(2) { animation-delay: .04s; }.file-row:nth-child(3) { animation-delay: .08s; }.file-row:nth-child(4) { animation-delay: .12s; }.file-row:nth-child(5) { animation-delay: .16s; }.file-row:nth-child(6) { animation-delay: .2s; }
.file-row:last-child { border-bottom: 0; }
.file-row.is-filtered-out { display: none; }.file-row.is-filtered-in { animation: filter-in .28s cubic-bezier(.2,.8,.2,1) both; }
.file-row-head { min-height: 42px; padding-top: 10px; padding-bottom: 8px; background: color-mix(in srgb, var(--fog) 72%, transparent); color: var(--ink-muted); font-size: 10px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.file-name-cell { display: flex; min-width: 0; align-items: center; gap: 12px; }
.file-icon { display: grid; width: 42px; height: 42px; flex: 0 0 42px; place-items: center; border: 1px solid var(--line); border-radius: 11px; background: color-mix(in srgb, var(--forest) 8%, var(--glass-strong)); color: var(--forest); font-size: 17px; transition: background-color .18s ease, color .18s ease, transform .24s cubic-bezier(.2,.8,.2,1); }
.file-row:hover .file-icon { background: var(--forest); color: #fff; transform: rotate(-4deg) translateY(-1px); }
.file-name-copy { display: grid; min-width: 0; gap: 2px; }
.file-name-copy a { overflow: hidden; color: var(--ink); text-overflow: ellipsis; white-space: nowrap; }
.file-name-copy strong { font-size: 14px; font-weight: 750; }
.file-name-copy small { color: var(--ink-muted); font-size: 11px; }
.file-name-copy small i { margin-right: 4px; color: var(--coral); }
.file-type { display: inline-flex; width: fit-content; min-width: 40px; justify-content: center; padding: 3px 7px; border: 1px solid var(--line); border-radius: 5px; color: var(--ink-muted); font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 10px; text-transform: uppercase; }
.file-actions { display: flex; justify-content: flex-end; gap: 7px; }
.icon-button { display: grid; width: 34px; height: 34px; place-items: center; border: 1px solid var(--line); border-radius: 9px; background: transparent; color: var(--ink-muted); transition: transform .18s ease, border-color .18s ease, background-color .18s ease, color .18s ease; }
.icon-button:hover { border-color: var(--forest); background: var(--primary-soft); color: var(--forest); transform: translateY(-2px); }
.icon-button-primary { border-color: color-mix(in srgb, var(--forest) 38%, transparent); background: var(--forest); color: #fff; }
.icon-button-primary:hover { background: var(--forest-deep); color: #fff; }
.empty-state { display: grid; min-height: 300px; place-items: center; align-content: center; gap: 8px; color: var(--ink-muted); text-align: center; }
.empty-state i { margin-bottom: 8px; color: var(--forest); font-size: 34px; }.empty-state strong { color: var(--ink); font-size: 16px; }.empty-state span { font-size: 13px; }

.upload-page-header { align-items: flex-end; margin-bottom: 26px; }
.upload-page-status { display: inline-flex; align-items: center; gap: 8px; padding: 9px 12px; border: 1px solid var(--line); border-radius: 999px; background: var(--glass); color: var(--ink-muted); font-size: 12px; }
.upload-page-status i { color: var(--forest); }
.upload-layout { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(320px, .85fr); gap: 18px; align-items: stretch; }
.upload-stage { position: relative; display: grid; min-height: 518px; padding: 48px; place-items: center; overflow: hidden; border: 1px dashed color-mix(in srgb, var(--forest) 45%, var(--line)); border-radius: 18px; background: var(--glass); box-shadow: var(--shadow-float); text-align: center; transition: border-color .24s ease, background-color .24s ease, transform .24s cubic-bezier(.2,.8,.2,1); }
.upload-stage::before { position: absolute; inset: 18px; border: 1px solid color-mix(in srgb, var(--forest) 14%, transparent); border-radius: 12px; content: ""; pointer-events: none; }
.upload-stage:hover, .upload-stage.is-uploading { border-color: var(--forest); background: color-mix(in srgb, var(--forest) 5%, var(--glass)); transform: translateY(-2px); }
.upload-stage-graphic { position: relative; display: grid; width: 104px; height: 104px; margin-bottom: 24px; place-items: center; border: 1px solid color-mix(in srgb, var(--forest) 24%, transparent); border-radius: 50%; background: color-mix(in srgb, var(--forest) 10%, transparent); color: var(--forest); font-size: 34px; }
.upload-stage-graphic > .upload-orbit { position:absolute; z-index:0; inset:0; pointer-events:none; }
.upload-stage-graphic > i { position:relative; z-index:1; display:block; width:1em; height:1em; line-height:1; margin:0; transform:none; }
.upload-stage-graphic::before, .upload-stage-graphic::after { position: absolute; z-index:0; border: 1px solid color-mix(in srgb, var(--forest) 20%, transparent); border-radius: 50%; content: ""; pointer-events:none; }
.upload-stage-graphic::before { inset: -14px; }.upload-stage-graphic::after { inset: -29px; border-style: dashed; animation: slow-spin 17s linear infinite; }
.upload-stage-copy { position: relative; z-index: 1; max-width: 490px; }.upload-stage-copy h2 { margin: 0; color: var(--ink); font-family: Georgia, "STSong", serif; font-size: 29px; line-height: 1.25; }.upload-stage-copy p { margin: 13px 0 0; color: var(--ink-muted); font-size: 14px; }
.upload-action { position: relative; z-index: 1; margin-top: 28px; }.upload-select-button { min-height: 48px; padding: 10px 22px; border-radius: 10px; background: var(--forest) !important; box-shadow: 0 11px 20px rgba(8,127,91,.18) !important; font-size: 14px; }
.upload-progress { position: relative; z-index: 2; width: min(100%, 560px); margin-top: 26px; padding: 17px; border: 1px solid var(--line); border-radius: 12px; background: var(--glass-strong); box-shadow: var(--shadow-lift); text-align: left; animation: row-in .28s ease both; }.upload-stage.is-uploading .upload-stage-graphic, .upload-stage.is-uploading .upload-stage-copy, .upload-stage.is-uploading .upload-action { display: none; }.upload-progress-top,.upload-progress-bottom{display:flex;justify-content:space-between;gap:16px;}.upload-progress-top{margin-bottom:9px;color:var(--ink);font-size:12px;}.upload-progress-top strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.upload-progress-top span{color:var(--forest);font-weight:800;}.upload-progress-bottom{margin-top:8px;color:var(--ink-muted);font-size:11px;}.upload-progress .progress{height:7px;margin:0;border-radius:999px;background:var(--fog);}.upload-progress .progress-bar{border-radius:999px;background:var(--forest);transition:width .35s ease;}.upload-cancel-button{display:inline-flex;align-items:center;gap:7px;margin-top:14px;min-height:36px;padding:7px 13px;border-radius:8px;font-size:12px;}
.upload-result { position: absolute; z-index: 3; right: 34px; bottom: 34px; left: 34px; display: flex; align-items: center; gap: 10px; padding: 15px 17px; border: 1px solid var(--line); border-radius: 12px; background: var(--glass-strong); box-shadow: var(--shadow-lift); color: var(--ink); text-align: left; animation: row-in .28s ease both; }.upload-result i{color:var(--forest);font-size:18px;}.upload-result.is-danger i{color:var(--coral);}
.upload-complete-backdrop { position:fixed; z-index:10020; inset:0; display:grid; padding:24px; place-items:center; overflow-y:auto; background:rgba(16,32,25,.42); backdrop-filter:blur(8px); animation:modal-fade .2s ease both; }.upload-complete-dialog { position:relative; width:min(100%,540px); padding:34px; border:1px solid var(--line); border-radius:16px; background:var(--glass-strong); box-shadow:var(--shadow-float); text-align:left; animation:modal-rise .28s var(--ease) both; }.upload-complete-close { position:absolute; top:16px; right:16px; display:grid; width:32px; height:32px; padding:0; place-items:center; border:1px solid var(--line); border-radius:8px; background:var(--fog); color:var(--ink-muted); }.upload-complete-icon { display:grid; width:48px; height:48px; margin-bottom:18px; place-items:center; border-radius:14px 14px 6px 14px; background:color-mix(in srgb,var(--forest) 12%,transparent); color:var(--forest); font-size:20px; }.upload-complete-dialog h2 { margin:5px 0 5px; color:var(--ink); font-family:Georgia,"STSong",serif; font-size:27px; }.upload-complete-dialog > p { margin:0; color:var(--ink-muted); font-size:13px; }.share-field { display:grid; gap:6px; margin-top:23px; }.share-field label { color:var(--ink-muted); font-size:11px; font-weight:700; }.share-copy-row { display:grid; grid-template-columns:minmax(0,1fr) 39px; gap:8px; }.share-copy-row .form-control { min-width:0; height:42px; border-radius:8px; background:var(--fog); color:var(--ink); font-size:12px; }.upload-complete-dialog .icon-button { display:grid; width:39px; height:39px; padding:0; place-items:center; border:1px solid var(--line); border-radius:8px; background:var(--fog); color:var(--forest); }.extract-page { animation:workspace-enter .42s var(--ease) both; }.extract-page-hero { margin-bottom:22px; }.extract-page-status { display:flex; align-items:center; gap:8px; color:var(--ink-muted); font-size:12px; }.extract-page-status i { color:var(--forest); }.extract-workspace { display:grid; grid-template-columns:minmax(0,1.1fr) minmax(320px,.9fr); gap:28px; align-items:center; min-height:365px; padding:42px; border:1px solid var(--line); border-top:3px solid var(--forest); border-radius:16px; background:var(--glass); box-shadow:var(--shadow-float); backdrop-filter:blur(18px) saturate(135%); }.extract-workspace-copy { max-width:440px; }.extract-file-icon { display:grid; width:66px; height:66px; margin-bottom:20px; place-items:center; border:1px solid color-mix(in srgb,var(--forest) 22%,transparent); border-radius:18px 18px 7px 18px; background:color-mix(in srgb,var(--forest) 10%,transparent); color:var(--forest); font-size:27px; }.extract-workspace-copy h2 { margin:0; color:var(--ink); font-family:Georgia,"STSong",serif; font-size:29px; }.extract-workspace-copy p { margin:11px 0 0; color:var(--ink-muted); font-size:13px; line-height:1.8; }.extract-form { display:grid; gap:11px; padding:24px; border:1px solid var(--line); border-radius:12px; background:var(--glass-strong); box-shadow:var(--shadow-lift); }.extract-form label { margin:0; color:var(--ink); font-size:12px; font-weight:700; }.extract-form .input-with-icon input { height:48px; background:var(--fog); }.extract-form .btn { min-height:46px; margin-top:4px; }.extract-message { margin:0; min-height:21px; color:var(--ink-muted); font-size:12px; }.extract-message.is-error { color:var(--coral); }
.upload-inspector { padding: 30px; border: 1px solid var(--line); border-radius: 18px; background: var(--glass); box-shadow: var(--shadow-float); backdrop-filter: blur(18px) saturate(135%); }.inspector-heading{padding-bottom:20px;}.inspector-heading .section-kicker{margin-bottom:8px;}.inspector-heading h2{margin:0;color:var(--ink);font-family:Georgia,"STSong",serif;font-size:25px;}.inspector-heading p{margin:9px 0 0;color:var(--ink-muted);font-size:12px;line-height:1.65;}
.policy-switch { display: grid; grid-template-columns: 38px 1fr; gap: 12px; align-items: center; margin: 0; padding: 13px 0; cursor: pointer; }.policy-switch input{position:absolute;opacity:0;pointer-events:none;}.switch-control{position:relative;width:36px;height:22px;border:1px solid var(--line);border-radius:999px;background:var(--fog);transition:background-color .18s ease,border-color .18s ease;}.switch-control::after{position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:var(--ink-muted);content:"";transition:transform .2s cubic-bezier(.2,.8,.2,1),background-color .18s ease;}.policy-switch input:checked + .switch-control{border-color:var(--forest);background:var(--forest);}.policy-switch input:checked + .switch-control::after{background:#fff;transform:translateX(14px);}.policy-switch input:focus-visible + .switch-control{outline:3px solid color-mix(in srgb,var(--forest) 24%,transparent);outline-offset:3px;}.policy-switch strong{display:block;color:var(--ink);font-size:13px;}.policy-switch small{display:block;margin-top:2px;color:var(--ink-muted);font-size:11px;line-height:1.45;}.policy-divider{height:1px;background:var(--line);}.policy-detail{margin:0 0 6px 50px;padding:12px 0 6px;animation:reveal-down .24s cubic-bezier(.2,.8,.2,1) both;}.policy-detail label{display:grid;gap:6px;color:var(--ink-muted);font-size:11px;font-weight:700;}.policy-detail .form-control{height:39px;border-radius:8px;background:color-mix(in srgb,var(--fog) 72%,transparent);font-size:12px;}.policy-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}.policy-field-wide{grid-column:1/-1;}.policy-note{display:flex;gap:7px;margin:16px 0 0;color:var(--ink-muted);font-size:11px;line-height:1.55;}.policy-note i{margin-top:2px;color:var(--coral);}.upload-guidance{display:flex;flex-wrap:wrap;gap:22px;margin-top:18px;padding:0 4px;color:var(--ink-muted);font-size:12px;}.upload-guidance div{display:flex;align-items:center;gap:7px;}.upload-guidance i{color:var(--forest);}

.admin-shell .page-heading { margin-bottom: 30px; }.admin-shell .page-heading h1 { font-family: Georgia,"STSong",serif; font-size: 38px; }.stat-grid{gap:16px;margin-bottom:18px;}.stat-card{position:relative;min-height:150px;overflow:hidden;border:1px solid var(--line);border-top:0;border-radius:15px;background:var(--glass);box-shadow:var(--shadow-lift);transition:transform .2s cubic-bezier(.2,.8,.2,1),box-shadow .2s ease;}.stat-card::before{position:absolute;top:0;left:0;width:100%;height:4px;background:var(--forest);content:"";}.stat-card:hover{box-shadow:var(--shadow-float);transform:translateY(-4px);color:var(--ink);}.stat-card i{color:var(--forest);}.stat-card strong{color:var(--ink);font-family:Georgia,"STSong",serif;font-size:32px;}.stat-card span{color:var(--ink-muted);}.admin-shell .panel{border:1px solid var(--line);border-top:0;border-radius:15px;background:var(--glass);box-shadow:var(--shadow-lift);overflow:hidden;}.admin-shell .panel::before{display:block;height:3px;background:var(--forest);content:"";}.admin-shell .panel-heading{padding:16px 20px;background:transparent !important;}.admin-shell .panel-body{padding:18px 20px;}.admin-shell .table>tbody>tr>td,.admin-shell .table>tbody>tr>th{border-color:var(--line);}.admin-shell .table>tbody>tr>th{color:var(--ink-muted);font-weight:600;}.admin-shell .table>tbody>tr>td{color:var(--ink);}

.admin-body .container > .panel,
.admin-body .container > .row > [class*="col-"] > .panel,
.admin-body .panel,
.app-body .panel { border-color: var(--line); background: var(--glass); box-shadow: var(--shadow-lift); }
.admin-body .panel-heading { border-bottom-color: var(--line) !important; }
.admin-body .form-control,
.admin-body .bootstrap-table .form-control { border-color: var(--line); background: var(--glass-strong); color: var(--ink); }
.admin-body .fixed-table-container,
.admin-body .bootstrap-table .fixed-table-container { border-color: var(--line); background: var(--glass); box-shadow: var(--shadow-lift); }
body.is-leaving .app-main, body.is-leaving .admin-shell { opacity: 0; transform: translateY(5px); transition: opacity .12s ease, transform .12s ease; }

@keyframes workspace-enter { from { opacity:0; transform:translateY(12px); } to { opacity:1; transform:translateY(0); } }
@keyframes row-in { from { opacity:0; transform:translateY(9px); } to { opacity:1; transform:translateY(0); } }
@keyframes reveal-down { from { opacity:0; transform:translateY(-5px); } to { opacity:1; transform:translateY(0); } }
@keyframes live-pulse { 0%,100% { box-shadow:0 0 0 4px color-mix(in srgb,var(--forest) 10%,transparent); } 55% { box-shadow:0 0 0 8px transparent; } }
@keyframes slow-spin { to { transform:rotate(360deg); } }
@keyframes filter-in { from { opacity:0; transform:translateX(-8px); } to { opacity:1; transform:translateX(0); } }
@keyframes modal-fade { from { opacity:0; } to { opacity:1; } }
@keyframes modal-rise { from { opacity:0; transform:translateY(14px) scale(.98); } to { opacity:1; transform:translateY(0) scale(1); } }

@media (max-width: 991px) {
  .navbar.navbar-default,.navbar-fixed-top,.navbar .container,.navbar-brand { min-height: 64px; }.app-body{padding-top:64px;}.navbar-brand{height:64px;}.navbar-nav>li>a{height:47px;padding:0 14px;}.navbar-collapse{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--glass-strong);backdrop-filter:blur(18px);}.navbar-nav>li.active>a::after{top:10px;right:auto;bottom:10px;left:0;width:2px;height:auto;}.theme-toggle{margin:7px 0 11px 14px;}.upload-layout{grid-template-columns:1fr;}.upload-stage{min-height:430px;}.upload-inspector{padding:26px;}.file-row{grid-template-columns:minmax(220px,2fr) .7fr .55fr 1fr 80px;}.file-row>span:nth-child(5){display:none;}.file-row-head>span:nth-child(5){display:none;}
  .workbench-controls{width:100%;justify-content:space-between;}.filter-pills{overflow-x:auto;max-width:100%;}
}

@media (max-width: 767px) {
  .container{width:min(100% - 28px,1240px);}.app-main,.admin-shell{padding-top:26px;padding-bottom:42px;}.workspace-hero{align-items:flex-start;flex-direction:column;gap:18px;margin-bottom:22px;}.workspace-hero h1{font-size:34px;}.workspace-hero p{font-size:14px;}.workspace-hero-actions{width:100%;}.search-tool{width:100%;}.upload-cta{flex:0 0 48px;width:48px;justify-content:center;padding:0;}.upload-cta i{margin:0;}.upload-cta span{display:none;}.workbench-bar{align-items:flex-start;flex-direction:column;gap:10px;padding:16px;}.workbench-meta{justify-content:space-between;width:100%;}.file-row{grid-template-columns:minmax(0,1fr) auto;min-height:0;gap:12px;padding:14px 16px;}.file-row-head{display:none;}.file-row>span:nth-child(2),.file-row>span:nth-child(3),.file-row>span:nth-child(4),.file-row>span:nth-child(5){display:none;}.file-name-cell{min-width:0;}.file-actions{align-self:center;}.file-row:not(.file-row-head):hover{transform:none;}.upload-stage{min-height:405px;padding:34px 22px;}.upload-stage-copy h2{font-size:25px;}.upload-stage-graphic{width:84px;height:84px;font-size:29px;}.upload-progress,.upload-result{width:100%;margin-top:22px;}.upload-inspector{padding:22px;}.policy-detail{margin-left:0;}.upload-guidance{display:grid;gap:9px;margin-top:16px;}.admin-shell .page-heading h1{font-size:32px;}.stat-grid{grid-template-columns:1fr 1fr;}.stat-card{min-height:130px;padding:17px;}.stat-card strong{font-size:26px;}.admin-body .page-heading{margin-bottom:22px;}
}

@media (max-width: 420px) { .workspace-hero h1{font-size:31px;}.workbench-meta{font-size:11px;}.workbench-meta>span:first-child{display:none;}.file-icon{width:38px;height:38px;flex-basis:38px;}.file-name-copy strong{font-size:13px;}.file-actions{gap:5px;}.icon-button{width:32px;height:32px;}.policy-detail-grid{grid-template-columns:1fr;}.policy-field-wide{grid-column:auto;}.stat-grid{grid-template-columns:1fr;}.stat-card{min-height:115px;}.upload-stage-graphic::after{inset:-19px;}.upload-stage-graphic::before{inset:-9px;} }

@media (max-width: 767px) { .upload-complete-backdrop { padding:14px; }.upload-complete-dialog { padding:28px 20px 20px; }.upload-complete-dialog h2 { font-size:24px; }.extract-page-hero { margin-bottom:18px; }.extract-page-status { font-size:11px; } }

@media (max-width: 767px) { .extract-workspace { grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:12px; min-height:0; padding:20px 14px; border-radius:13px; }.extract-workspace-copy { min-width:0; }.extract-workspace-copy .extract-file-icon { width:48px; height:48px; margin-bottom:11px; border-radius:13px 13px 5px 13px; font-size:20px; }.extract-workspace-copy h2 { overflow-wrap:anywhere; font-size:20px; line-height:1.3; }.extract-workspace-copy p { margin-top:8px; font-size:11px; line-height:1.55; }.extract-form { min-width:0; padding:15px 12px; gap:9px; }.extract-form label { font-size:11px; }.extract-form .input-with-icon input { height:45px; padding-left:38px; font-size:12px; }.extract-form .btn { min-height:43px; padding-right:7px; padding-left:7px; font-size:11px; white-space:nowrap; } }

/* File detail workspace */
.file-page { animation: workspace-enter .42s var(--ease) both; }
.file-layout { display: grid !important; grid-template-columns: minmax(0, 1fr) 280px; gap: 18px; margin: 0 !important; }
.file-layout::before, .file-layout::after { display: none !important; content: none !important; }
.file-main-column, .file-side-column { float: none !important; width: auto !important; padding: 0 !important; min-width: 0; }
.file-main-column { grid-column: 1; }.file-side-column { grid-column: 2; }
.file-hero { display: flex; align-items: center; gap: 16px; margin-bottom: 20px; padding: 21px 24px; border: 1px solid var(--line); border-radius: 18px; background: var(--glass); box-shadow: var(--shadow-float); backdrop-filter: blur(18px) saturate(135%); }
.file-hero-icon { display: grid; width: 52px; height: 52px; flex: 0 0 52px; place-items: center; border-radius: 14px; background: color-mix(in srgb,var(--forest) 13%,transparent); color: var(--forest); font-size: 22px; }
.file-hero-copy { min-width: 0; flex: 1; }.file-hero-copy h1 { margin: 3px 0 2px; overflow: hidden; color: var(--ink); font-family: Georgia,"STSong",serif; font-size: clamp(22px,3vw,31px); font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }.file-hero-copy p { margin: 0; color: var(--ink-muted); font-size: 12px; }
.file-hero-actions { display: flex; align-items: center; gap: 9px; }.file-hero-actions .btn { min-height: 42px; }.icon-button { display: inline-grid; width: 38px; height: 38px; place-items: center; border: 1px solid var(--line); border-radius: 9px; background: var(--glass-strong); color: var(--ink-muted); transition: transform .2s var(--ease),border-color .18s ease,color .18s ease; }.icon-button:hover { border-color: var(--forest); color: var(--forest); transform: translateY(-2px); }
.preview-stage, .file-toolbox, .file-side-card { overflow: hidden; border: 1px solid var(--line); border-radius: 16px; background: var(--glass); box-shadow: var(--shadow-lift); backdrop-filter: blur(18px) saturate(135%); }.preview-stage { border-top: 0; }.preview-stage::before, .file-toolbox::before, .file-status-card::before { display:block; height: 3px; background: var(--forest); content:""; }.preview-stage .panel-heading { display:flex; align-items:center; min-height:58px; padding:15px 20px; }.preview-stage-body { min-height: 270px; padding: 30px 22px !important; display:grid; place-items:center; background: color-mix(in srgb,var(--fog) 74%,transparent); }.preview-stage-body .view { width:100%; }.preview-stage-body .image_view { max-width:100%; max-height:64vh; }.preview-stage-body .image { display:block; width:auto; max-width:min(100%, 980px); max-height:64vh; object-fit:contain; box-shadow:0 12px 32px rgba(10,30,23,.14); cursor:zoom-in; }.preview-stage-body .videoplayer { width:100%; min-height:360px; }.preview-stage-body .tubiao { color:var(--forest); font-size:72px; }.preview-stage-body .elsetext p { color:var(--ink-muted); }
.file-toolbox { margin-top: 18px; border-top: 0; }.file-toolbox .panel-body { padding: 0 !important; }.file-tabs { display:flex; flex-wrap:wrap; gap:4px; margin:0 !important; padding:8px 12px 0; border-bottom:1px solid var(--line) !important; background:color-mix(in srgb,var(--fog) 68%,transparent); }.file-tabs > li { float:none; margin:0; }.file-tabs > li > a { display:flex; align-items:center; gap:7px; min-height:40px; margin:0; padding:10px 13px; border:0 !important; border-radius:9px 9px 0 0; color:var(--ink-muted); font-size:12px; font-weight:700; transition:background-color .18s ease,color .18s ease; }.file-tabs > li > a:hover { background:var(--glass-strong); color:var(--ink); }.file-tabs > li.active > a { background:var(--glass-strong) !important; color:var(--forest) !important; box-shadow:0 -2px 0 var(--forest) inset; }.file-toolbox .tab-content { padding:23px; }.file-toolbox .form-group.row { display:grid; grid-template-columns:115px minmax(0,1fr); align-items:center; margin:0 0 13px; }.file-toolbox .form-group.row::before,.file-toolbox .form-group.row::after { display:none !important; content:none !important; }.file-toolbox .form-group.row > label { width:auto; padding:0 14px 0 0; text-align:left; }.file-toolbox .form-group.row > .col-md-10 { width:auto; min-width:0; padding:0; }.file-toolbox .input-group { display:flex; width:100%; }.file-toolbox .input-group .form-control { min-width:0; flex:1; }.file-toolbox .input-group-btn { width:auto; }.file-toolbox .input-group-btn .btn { height:42px; border-radius:0 8px 8px 0; }.toolbox-heading { display:flex; align-items:flex-end; justify-content:space-between; gap:18px; margin-bottom:20px; }.toolbox-heading h2 { margin:3px 0 0; color:var(--ink); font-family:Georgia,"STSong",serif; font-size:23px; }.toolbox-heading p { margin:0; color:var(--ink-muted); font-size:12px; }.fileinfo-table { width:100%; border-collapse:separate; border-spacing:0; overflow:hidden; border:1px solid var(--line); border-radius:10px; }.fileinfo-table th,.fileinfo-table td { padding:13px 14px !important; border-top:1px solid var(--line) !important; }.fileinfo-table tr:first-child th,.fileinfo-table tr:first-child td { border-top:0 !important; }.fileinfo-table th { width:22%; background:color-mix(in srgb,var(--fog) 68%,transparent); color:var(--ink-muted); font-size:12px; }.fileinfo-table td { color:var(--ink); }.file-side-column { display:grid; align-content:start; gap:18px; }.file-side-card { margin:0 !important; border-top:0; }.file-side-card::before { display:block; height:3px; background:var(--forest); content:""; }.file-side-card .panel-heading { padding:17px 18px 5px; border:0 !important; }.file-side-card .panel-body { padding:8px 18px 18px; }.file-side-card .panel-title { font-family:Georgia,"STSong",serif; font-size:18px; }.file-status-card .panel-body { display:grid; gap:0; }.side-status-row { display:flex; justify-content:space-between; gap:12px; padding:12px 0; border-top:1px solid var(--line); color:var(--ink-muted); font-size:12px; }.side-status-row strong { color:var(--ink); font-size:12px; }.qr-card .panel-body { display:grid; justify-items:center; gap:8px; }.qr-card img { width:160px; height:160px; border-radius:10px; background:#fff; }.qr-card small { color:var(--ink-muted); }.file-side-card .help-block { color:var(--ink-muted); }
@media (max-width: 991px) { .file-layout { grid-template-columns:1fr; }.file-main-column,.file-side-column { grid-column:1; }.file-side-column { grid-template-columns:repeat(2,minmax(0,1fr)); }.qr-card { display:none; } }
@media (max-width: 767px) { .file-hero { align-items:flex-start; flex-wrap:wrap; padding:17px; }.file-hero-copy { width:calc(100% - 68px); }.file-hero-copy h1 { font-size:22px; }.file-hero-actions { width:100%; margin-left:68px; }.file-hero-actions .btn { flex:1; }.file-layout { display:block !important; }.file-main-column,.file-side-column { display:block; }.file-side-column { margin-top:18px; }.file-toolbox .tab-content { padding:17px 14px; }.file-tabs { overflow-x:auto; flex-wrap:nowrap; }.file-tabs > li > a { white-space:nowrap; }.file-toolbox .form-group.row { grid-template-columns:1fr; gap:7px; }.file-toolbox .form-group.row > label { padding:0; }.file-toolbox .input-group-btn .btn { padding-right:11px; padding-left:11px; }.preview-stage-body .videoplayer { min-height:220px; }.toolbox-heading { align-items:flex-start; flex-direction:column; gap:5px; }.fileinfo-table { display:block; overflow-x:auto; white-space:nowrap; } }

/* Admin operations workspace */
.admin-workbench { min-height:calc(100vh - 82px); padding-top:44px; padding-bottom:64px; animation:workspace-enter .42s var(--ease) both; }.admin-workbench-heading { display:flex; align-items:flex-end; justify-content:space-between; gap:24px; margin-bottom:22px; }.admin-workbench-heading h1 { margin:3px 0 4px; color:var(--ink); font-family:Georgia,"STSong",serif; font-size:38px; font-weight:600; }.admin-workbench-heading p { margin:0; color:var(--ink-muted); }.admin-heading-mark { display:grid; width:58px; height:58px; place-items:center; border:1px solid var(--line); border-radius:16px 16px 6px 16px; background:var(--glass); color:var(--forest); font-size:23px; box-shadow:var(--shadow-lift); }.admin-data-surface { padding:20px; border:1px solid var(--line); border-top:3px solid var(--forest); border-radius:16px; background:var(--glass); box-shadow:var(--shadow-float); backdrop-filter:blur(18px) saturate(135%); }.admin-toolbar { display:flex; flex-wrap:wrap; align-items:end; gap:10px 8px; margin:0 0 18px; }.admin-toolbar .form-group { display:grid; gap:5px; margin:0; }.admin-toolbar .form-group > label { margin:0; color:var(--ink-muted); font-size:11px; font-weight:700; }.admin-toolbar .form-control { height:40px; border-radius:8px; background:var(--glass-strong); }.admin-toolbar .admin-toolbar-actions { display:flex; align-items:end; gap:7px; }.admin-toolbar .btn { min-height:40px; border-radius:8px; }.admin-toolbar .dropdown-menu { min-width:130px; }.admin-table-frame { overflow:hidden; border:1px solid var(--line); border-radius:11px; background:var(--glass-strong); }.admin-data-surface .bootstrap-table { margin:0; }.admin-data-surface .fixed-table-container { border:0 !important; border-radius:0 !important; background:transparent !important; box-shadow:none !important; }.admin-data-surface .table > thead > tr > th { padding:13px 11px; border-bottom:1px solid var(--line); background:color-mix(in srgb,var(--fog) 65%,transparent); color:var(--ink-muted); font-size:11px; letter-spacing:.03em; }.admin-data-surface .table > tbody > tr { transition:background-color .16s ease,transform .18s var(--ease); }.admin-data-surface .table > tbody > tr:hover { background:color-mix(in srgb,var(--forest) 6%,transparent); }.admin-data-surface .table > tbody > tr > td { padding:14px 11px; border-color:var(--line); color:var(--ink); font-size:12px; }.admin-data-surface .btn-xs { min-height:28px; margin:1px 2px 1px 0; border-radius:6px; font-size:11px; }.admin-data-surface .fixed-table-pagination { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:10px 13px; border-top:1px solid var(--line); }.admin-data-surface .pagination { margin:0; }.admin-body .modal-content { overflow:hidden; border:1px solid var(--line); border-radius:14px; background:var(--glass-strong); box-shadow:var(--shadow-float); }.admin-body .modal-header { padding:17px 20px; border-bottom:1px solid var(--line); background:color-mix(in srgb,var(--fog) 66%,transparent); }.admin-body .modal-title { color:var(--ink); font-family:Georgia,"STSong",serif; font-size:20px; }.admin-body .modal-body { padding:20px; }.admin-body .modal-footer { padding:14px 20px; border-top:1px solid var(--line); }.admin-body .modal .close { color:var(--ink-muted); opacity:1; }.admin-body .modal .alert { margin-bottom:18px; }.admin-body .modal .form-group { margin-bottom:14px; }.admin-body .modal .control-label { color:var(--ink); }.admin-body .modal .form-control { border-color:var(--line); background:var(--fog); color:var(--ink); }
@media (max-width:767px) { .admin-workbench { padding-top:26px; padding-bottom:42px; }.admin-workbench-heading { align-items:flex-start; margin-bottom:17px; }.admin-workbench-heading h1 { font-size:32px; }.admin-heading-mark { width:46px; height:46px; flex:0 0 46px; border-radius:12px 12px 5px 12px; font-size:18px; }.admin-data-surface { padding:14px; border-radius:13px; }.admin-toolbar { display:grid; grid-template-columns:1fr 1fr; gap:10px; }.admin-toolbar .form-group { min-width:0; }.admin-toolbar .form-group:nth-child(2) { grid-column:span 2; }.admin-toolbar .admin-toolbar-actions { grid-column:span 2; display:grid; grid-template-columns:1fr 1fr; }.admin-toolbar .admin-toolbar-actions .btn { width:100%; }.admin-toolbar .btn-group { grid-column:span 2; }.admin-toolbar .btn-group > .btn { width:100%; }.admin-table-frame { overflow-x:auto; }.admin-data-surface .fixed-table-pagination { align-items:flex-start; flex-direction:column; }.admin-body .modal-dialog { width:calc(100% - 28px); margin:28px auto; }.admin-body .modal .form-horizontal .control-label { padding-top:0 !important; text-align:left; }.admin-body .modal .form-group { display:grid; gap:6px; }.admin-body .modal [class*="col-sm-"] { width:100%; padding:0 15px; } }
.file-side-card .side-note { margin-top:12px; padding-top:13px; border-top:1px solid var(--line); color:var(--ink-muted); font-size:12px; line-height:1.7; }.file-side-card .side-note p:last-child { margin-bottom:0; }
.access-policy-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; }.access-policy-card { padding:5px 15px 15px; border:1px solid var(--line); border-radius:12px; background:color-mix(in srgb,var(--fog) 62%,transparent); }.access-policy-card .policy-switch { min-height:64px; padding:10px 0; }.access-policy-detail { display:grid; gap:6px; padding-top:7px; border-top:1px solid var(--line); }.access-policy-detail label { color:var(--ink-muted); font-size:11px; font-weight:700; }.access-policy-detail .form-control { height:40px; background:var(--glass-strong); }.access-limit-grid { display:grid; grid-template-columns:minmax(0,1fr) 150px; gap:10px; margin-top:14px; }.access-limit-grid .form-control { height:40px; background:var(--glass-strong); }.access-policy-actions { display:flex; flex-wrap:wrap; gap:9px; margin-top:18px; }.access-policy-actions .btn { min-height:42px; }.access-policy-actions .btn-danger { margin-left:auto; }
.ql-image-viewer { position:fixed; z-index:100000; inset:0; display:grid; grid-template-rows:58px minmax(0,1fr); padding:0 24px 24px; background:rgba(7,16,12,.82); opacity:0; backdrop-filter:blur(14px) saturate(125%); transition:opacity .2s ease; }.ql-image-viewer.is-visible { opacity:1; }.ql-image-viewer-bar { display:flex; align-items:center; justify-content:space-between; color:#edf7f1; font-size:13px; }.ql-image-viewer-bar button { display:grid; width:38px; height:38px; place-items:center; border:1px solid rgba(255,255,255,.22); border-radius:10px; background:rgba(255,255,255,.1); color:#fff; cursor:pointer; }.ql-image-viewer-stage { position:relative; display:grid; min-height:0; place-items:center; overflow:hidden; }.ql-image-viewer-stage img { display:block; max-width:min(96vw,1400px); max-height:calc(100vh - 90px); object-fit:contain; border-radius:8px; box-shadow:0 24px 80px rgba(0,0,0,.35); opacity:0; transform:scale(.96); transition:opacity .22s ease,transform .25s var(--ease); }.ql-image-viewer.is-loaded .ql-image-viewer-stage img { opacity:1; transform:scale(1); }.ql-image-viewer-loading { color:rgba(255,255,255,.78); font-size:13px; }.ql-image-viewer.is-loaded .ql-image-viewer-loading { display:none; }.ql-image-viewer.is-error .ql-image-viewer-loading { color:#f5a18e; }.ql-image-viewer.is-error .ql-image-viewer-stage img { display:none; }
.ql-field-invalid { border-color:var(--coral) !important; box-shadow:0 0 0 3px color-mix(in srgb,var(--coral) 16%,transparent) !important; }
.admin-settings-workspace { min-height:calc(100vh - 82px); padding-top:44px; padding-bottom:64px; animation:workspace-enter .42s var(--ease) both; }.admin-settings-column { width:min(880px,100%); margin:0 auto; }.admin-settings-column > .panel { overflow:hidden; border:1px solid var(--line); border-top:3px solid var(--forest); border-radius:16px; background:var(--glass); box-shadow:var(--shadow-float); backdrop-filter:blur(18px) saturate(135%); }.admin-settings-column > .panel + .panel { margin-top:18px; }.admin-settings-column .panel-heading { padding:18px 22px; }.admin-settings-column .panel-title { font-family:Georgia,"STSong",serif; font-size:19px; }.admin-settings-column .panel-body { padding:24px; }.admin-settings-column .panel-footer { padding:16px 22px; background:color-mix(in srgb,var(--fog) 68%,transparent); font-size:12px; line-height:1.7; }.admin-settings-column .form-horizontal .form-group { display:grid; grid-template-columns:190px minmax(0,1fr); align-items:start; gap:15px; margin:0 0 18px; }.admin-settings-column .form-horizontal .form-group::before,.admin-settings-column .form-horizontal .form-group::after { display:none !important; content:none !important; }.admin-settings-column .form-horizontal .form-group > .control-label { float:none !important; width:auto !important; padding:11px 0 0 !important; text-align:left; grid-column:1; }.admin-settings-column .form-horizontal .form-group > :not(.control-label)[class*="col-sm-"] { float:none !important; width:auto !important; min-width:0; padding:0; grid-column:2; }.admin-settings-column .form-horizontal .form-group > .col-sm-offset-2,.admin-settings-column .form-horizontal .form-group > .col-sm-offset-3 { grid-column:2; }.admin-settings-column .form-control { background:var(--glass-strong); }.admin-settings-column .form-horizontal .btn { min-height:42px; width:auto; min-width:130px; }.admin-settings-column font[color="green"] { display:block; margin-top:7px; color:var(--ink-muted) !important; font-size:11px; line-height:1.5; }.admin-settings-column br { display:none; }.admin-settings-column .table { background:var(--glass-strong); }
@media (max-width:767px) { .admin-settings-workspace { padding-top:26px; padding-bottom:42px; }.admin-settings-column .panel-body { padding:17px 14px; }.admin-settings-column .panel-heading { padding:16px 17px; }.admin-settings-column .form-horizontal .form-group { grid-template-columns:1fr; gap:6px; margin-bottom:15px; }.admin-settings-column .form-horizontal .form-group > .control-label,.admin-settings-column .form-horizontal .form-group > :not(.control-label)[class*="col-sm-"] { grid-column:1; }.admin-settings-column .form-horizontal .form-group > .control-label { padding:0 !important; }.admin-settings-column .form-horizontal .btn { width:100%; }.admin-settings-column .panel-footer { padding:14px 16px; } }
@media (max-width:767px) { .access-policy-grid { grid-template-columns:1fr; }.access-limit-grid { grid-template-columns:1fr; }.access-policy-actions { display:grid; grid-template-columns:1fr; }.access-policy-actions .btn-danger { margin-left:0; } }

/* 全站主题变体：每个主题同时改变材质、布局比例、控件形态和动效。 */
.file-hero-copy p { display:flex; flex-wrap:wrap; align-items:center; gap:8px 16px; }
.file-hero-copy p span { display:inline-flex; align-items:center; gap:5px; white-space:nowrap; }
.file-hero-copy .file-hero-size { padding:4px 9px; border:1px solid color-mix(in srgb,var(--forest) 28%,var(--line)); border-radius:999px; background:color-mix(in srgb,var(--forest) 9%,transparent); color:var(--forest); font-weight:700; }
.theme-settings-panel { overflow:visible !important; }
.theme-settings-intro { margin:0 0 18px; color:var(--ink-muted); font-size:12px; }
.theme-choice-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.theme-choice { position:relative; display:grid; grid-template-columns:86px minmax(0,1fr) 24px; gap:13px; align-items:center; min-height:104px; padding:11px; border:1px solid var(--line); border-radius:12px; background:color-mix(in srgb,var(--fog) 66%,transparent); cursor:pointer; transition:transform .2s var(--ease),border-color .2s ease,box-shadow .2s ease; }
.theme-choice:hover { border-color:var(--forest); transform:translateY(-2px); box-shadow:var(--shadow-lift); }
.theme-choice input { position:absolute; width:1px; height:1px; opacity:0; }
.theme-choice:has(input:checked) { border-color:var(--forest); box-shadow:0 0 0 3px color-mix(in srgb,var(--forest) 13%,transparent),var(--shadow-lift); }
.theme-choice-preview { position:relative; display:block; height:76px; overflow:hidden; border:1px solid rgba(0,0,0,.12); border-radius:8px; background:#edf2ef; box-shadow:inset 0 0 0 3px rgba(255,255,255,.38); }
.theme-choice-preview::before { position:absolute; inset:0 auto 0 0; width:20px; background:#16382d; content:""; }
.theme-choice-preview::after { position:absolute; top:10px; right:9px; left:29px; height:8px; border-radius:4px; background:#fff; box-shadow:0 17px 0 rgba(255,255,255,.82),0 34px 0 rgba(255,255,255,.68); content:""; }
.theme-choice-preview i,.theme-choice-preview b { position:absolute; z-index:1; display:block; width:12px; height:12px; border-radius:3px; background:#0a7a5d; }
.theme-choice-preview i:nth-child(1) { top:10px; left:34px; }.theme-choice-preview i:nth-child(2) { top:28px; left:52px; background:#e16a50; }.theme-choice-preview i:nth-child(3) { top:47px; left:38px; background:#d7b15c; }.theme-choice-preview b { right:9px; bottom:9px; width:20px; height:7px; border-radius:3px; background:#0a7a5d; }
.theme-choice-copy { display:grid; gap:4px; min-width:0; }.theme-choice-copy strong { color:var(--ink); font-size:14px; }.theme-choice-copy small { color:var(--ink-muted); font-size:11px; line-height:1.45; }.theme-choice-check { display:grid; width:22px; height:22px; place-items:center; border:1px solid var(--line); border-radius:50%; color:transparent; font-size:11px; }.theme-choice:has(input:checked) .theme-choice-check { border-color:var(--forest); background:var(--forest); color:#fff; }
.theme-choice-ink .theme-choice-preview { background:#e5d8bd; border-radius:2px; }.theme-choice-ink .theme-choice-preview::before { width:24px; background:#2b2722; }.theme-choice-ink .theme-choice-preview i:nth-child(1) { background:#ad3d32; }.theme-choice-ink .theme-choice-preview i:nth-child(2) { background:#2b2722; }.theme-choice-ink .theme-choice-preview i:nth-child(3) { background:#8d7857; }.theme-choice-ink .theme-choice-preview b { background:#ad3d32; border-radius:0; }
.theme-choice-paper .theme-choice-preview { background:#f4ecdc; border-radius:3px; }.theme-choice-paper .theme-choice-preview::before { width:14px; background:#b64840; }.theme-choice-paper .theme-choice-preview i:nth-child(1) { background:#264d72; }.theme-choice-paper .theme-choice-preview i:nth-child(2) { background:#d9a441; }.theme-choice-paper .theme-choice-preview i:nth-child(3) { background:#b64840; }.theme-choice-paper .theme-choice-preview b { background:#264d72; border-radius:0; }
.theme-choice-forge .theme-choice-preview { background:#34383a; border-color:#626668; border-radius:2px; }.theme-choice-forge .theme-choice-preview::before { width:20px; background:#1e2224; }.theme-choice-forge .theme-choice-preview::after { background:#656d6d; box-shadow:0 17px 0 #505758,0 34px 0 #444b4c; }.theme-choice-forge .theme-choice-preview i:nth-child(1) { background:#f2ae48; }.theme-choice-forge .theme-choice-preview i:nth-child(2) { background:#d95d45; }.theme-choice-forge .theme-choice-preview i:nth-child(3) { background:#68b7a4; }.theme-choice-forge .theme-choice-preview b { background:#f2ae48; border-radius:0; }
.theme-choice-pixel .theme-choice-preview { background:#07120f; border-color:#2a8065; border-radius:0; image-rendering:pixelated; }.theme-choice-pixel .theme-choice-preview::before { width:20px; background:#0c2b22; }.theme-choice-pixel .theme-choice-preview::after { background:#4de0a4; box-shadow:0 17px 0 #2c9873,0 34px 0 #1c674f; }.theme-choice-pixel .theme-choice-preview i { border-radius:0; background:#4de0a4; }.theme-choice-pixel .theme-choice-preview i:nth-child(2) { background:#e2ca68; }.theme-choice-pixel .theme-choice-preview i:nth-child(3) { background:#e16959; }.theme-choice-pixel .theme-choice-preview b { background:#4de0a4; border-radius:0; }
.theme-choice-collage .theme-choice-preview { background:#fff7e8; border-radius:0; }.theme-choice-collage .theme-choice-preview::before { width:24px; background:#ef5546; transform:skewY(-8deg); }.theme-choice-collage .theme-choice-preview i:nth-child(1) { background:#1d6ed0; border-radius:50%; }.theme-choice-collage .theme-choice-preview i:nth-child(2) { background:#f0c84b; border-radius:0; transform:rotate(12deg); }.theme-choice-collage .theme-choice-preview i:nth-child(3) { background:#ef5546; border-radius:50%; }.theme-choice-collage .theme-choice-preview b { background:#1d6ed0; border-radius:0; transform:rotate(-8deg); }
.theme-choice-blank .theme-choice-preview { background:#fff; border-color:#111; border-radius:0; }.theme-choice-blank .theme-choice-preview::before { width:8px; background:#111; }.theme-choice-blank .theme-choice-preview::after { background:#111; box-shadow:0 17px 0 #ddd,0 34px 0 #ddd; }.theme-choice-blank .theme-choice-preview i { width:8px; height:8px; border-radius:0; background:#111; }.theme-choice-blank .theme-choice-preview i:nth-child(2),.theme-choice-blank .theme-choice-preview i:nth-child(3) { background:#777; }.theme-choice-blank .theme-choice-preview b { background:#111; border-radius:0; }
.theme-save-button { margin-top:20px; }

/* 水墨卷轴 */
:root[data-site-theme="ink"] { --canvas:#e8dfce; --glass:rgba(251,246,233,.84); --glass-strong:#fbf6e9; --ink:#292620; --ink-muted:#766d5f; --line:rgba(67,56,42,.22); --forest:#2f2b27; --forest-deep:#171513; --coral:#ad3d32; --fog:#f2ead9; --shadow-float:0 18px 35px rgba(67,49,31,.14); --shadow-lift:0 8px 18px rgba(67,49,31,.12); --radius:2px; }
:root[data-site-theme="ink"] body.app-body,:root[data-site-theme="ink"] body.admin-body { background-image:linear-gradient(rgba(76,60,42,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(76,60,42,.035) 1px,transparent 1px); background-size:22px 22px; }
:root[data-site-theme="ink"] body::before { background:linear-gradient(110deg,rgba(173,61,50,.1),transparent 34%),linear-gradient(300deg,rgba(71,61,48,.1),transparent 38%); }
:root[data-site-theme="ink"] .navbar.navbar-default { background:#2f2b27; border-bottom:4px solid #ad3d32; box-shadow:0 6px 0 rgba(47,43,39,.08); }
:root[data-site-theme="ink"] .navbar-brand,:root[data-site-theme="ink"] .navbar-nav>li>a { color:#f8f1df !important; font-family:Georgia,"STSong",serif; }
:root[data-site-theme="ink"] .navbar-nav>li>a i,:root[data-site-theme="ink"] .navbar-nav>li.active>a { color:#e5b05f !important; }
:root[data-site-theme="ink"] .navbar-nav>li.active>a::after { right:18px; left:18px; height:3px; background:#ad3d32; }
:root[data-site-theme="ink"] .brand-mark { border-radius:2px; background:#ad3d32; box-shadow:4px 4px 0 #171513; }
:root[data-site-theme="ink"] .workspace-hero h1,:root[data-site-theme="ink"] .admin-workbench-heading h1,:root[data-site-theme="ink"] .inspector-heading h2,:root[data-site-theme="ink"] .toolbox-heading h2 { font-family:Georgia,"STSong",serif; letter-spacing:.04em; }
:root[data-site-theme="ink"] .workspace-hero { border-bottom:1px solid var(--line); padding-bottom:22px; }
:root[data-site-theme="ink"] .file-workbench,:root[data-site-theme="ink"] .upload-inspector,:root[data-site-theme="ink"] .preview-stage,:root[data-site-theme="ink"] .file-toolbox,:root[data-site-theme="ink"] .file-side-card,:root[data-site-theme="ink"] .admin-data-surface,:root[data-site-theme="ink"] .admin-settings-column>.panel { border-radius:2px; border-top:5px solid #2f2b27; box-shadow:8px 8px 0 rgba(47,43,39,.08); }
:root[data-site-theme="ink"] .file-row { border-bottom:1px solid var(--line); transition:background-color .2s ease,padding-left .25s ease; }
:root[data-site-theme="ink"] .file-row:not(.file-row-head):hover { padding-left:24px; background:rgba(173,61,50,.08); transform:none; }
:root[data-site-theme="ink"] .filter-pills { border-radius:2px; border-color:#8f806b; background:#e3d7c2; }
:root[data-site-theme="ink"] .filter-pills button.is-active,:root[data-site-theme="ink"] .btn-primary { border-radius:2px; background:#2f2b27 !important; color:#f8f1df !important; box-shadow:3px 3px 0 #ad3d32 !important; }
:root[data-site-theme="ink"] .upload-stage,:root[data-site-theme="ink"] .admin-data-surface,:root[data-site-theme="ink"] .file-row.is-filtered-in { animation:ink-unroll .5s var(--ease) both; }
@keyframes ink-unroll { from{opacity:0;transform:translateX(-14px) scaleX(.98)} to{opacity:1;transform:none} }

/* 纸页书阁 */
:root[data-site-theme="paper"] { --canvas:#f2eadc; --glass:#fffdf8; --glass-strong:#fffefa; --ink:#26364a; --ink-muted:#718096; --line:rgba(38,54,74,.16); --forest:#315b83; --forest-deep:#234362; --coral:#b84a43; --fog:#f8f1e5; --shadow-float:0 18px 36px rgba(79,61,39,.13); --shadow-lift:0 8px 20px rgba(79,61,39,.1); --radius:4px; }
:root[data-site-theme="paper"] body.app-body,:root[data-site-theme="paper"] body.admin-body { background-image:linear-gradient(90deg,rgba(184,74,67,.08) 0 1px,transparent 1px),linear-gradient(rgba(49,91,131,.035) 1px,transparent 1px); background-size:48px 100%,100% 28px; }
:root[data-site-theme="paper"] .navbar.navbar-default { background:#fffdf8; border-bottom:1px solid #d5c6ae; box-shadow:0 3px 0 rgba(184,74,67,.14); }
:root[data-site-theme="paper"] .navbar-brand { color:#26364a !important; font-family:Georgia,"STSong",serif; }
:root[data-site-theme="paper"] .brand-mark { border-radius:2px 2px 9px 2px; background:#b84a43; }
:root[data-site-theme="paper"] .navbar-nav>li.active>a::after { height:4px; background:#b84a43; }
:root[data-site-theme="paper"] .file-workbench,:root[data-site-theme="paper"] .upload-inspector,:root[data-site-theme="paper"] .preview-stage,:root[data-site-theme="paper"] .file-toolbox,:root[data-site-theme="paper"] .file-side-card,:root[data-site-theme="paper"] .admin-data-surface,:root[data-site-theme="paper"] .admin-settings-column>.panel { border-radius:4px; border-color:#d5c6ae; box-shadow:4px 6px 0 rgba(184,74,67,.1); }
:root[data-site-theme="paper"] .file-workbench { border-top:0; }
:root[data-site-theme="paper"] .workbench-bar { background:linear-gradient(90deg,rgba(184,74,67,.08),transparent); }
:root[data-site-theme="paper"] .file-row:not(.file-row-head):hover { background:#fff3d3; transform:translateX(4px); }
:root[data-site-theme="paper"] .btn-primary { border-radius:3px; background:#315b83 !important; box-shadow:3px 3px 0 #b84a43 !important; }
:root[data-site-theme="paper"] .workspace-hero,:root[data-site-theme="paper"] .admin-data-surface,:root[data-site-theme="paper"] .file-row.is-filtered-in { animation:paper-turn .5s var(--ease) both; }
@keyframes paper-turn { from{opacity:0;transform:rotateX(-7deg) translateY(10px);transform-origin:top} to{opacity:1;transform:none} }

/* 精密工坊 */
:root[data-site-theme="forge"] { --canvas:#d8dad7; --glass:#e7e9e5; --glass-strong:#f1f2ee; --ink:#202628; --ink-muted:#606b6d; --line:rgba(32,38,40,.24); --forest:#9b6208; --forest-deep:#724803; --coral:#b44b38; --fog:#ced2ce; --shadow-float:0 18px 40px rgba(33,39,40,.18); --shadow-lift:0 8px 16px rgba(33,39,40,.15); --radius:2px; }
:root[data-site-theme="forge"] body.app-body,:root[data-site-theme="forge"] body.admin-body { background-image:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px); background-size:16px 16px; }
:root[data-site-theme="forge"] body::before { background:linear-gradient(120deg,rgba(233,166,64,.13),transparent 35%),linear-gradient(320deg,rgba(223,105,84,.1),transparent 40%); }
:root[data-site-theme="forge"] .navbar.navbar-default { background:#1d2224; border-bottom:1px solid #e9a640; }
:root[data-site-theme="forge"] .navbar-brand,:root[data-site-theme="forge"] .navbar-nav>li>a { color:#f1eee5 !important; font-family:"Consolas","Microsoft YaHei UI",monospace; }
:root[data-site-theme="forge"] .brand-mark { border-radius:2px; background:#e9a640; color:#222; }
:root[data-site-theme="forge"] .file-workbench,:root[data-site-theme="forge"] .upload-inspector,:root[data-site-theme="forge"] .preview-stage,:root[data-site-theme="forge"] .file-toolbox,:root[data-site-theme="forge"] .file-side-card,:root[data-site-theme="forge"] .admin-data-surface,:root[data-site-theme="forge"] .admin-settings-column>.panel { border-radius:2px; border-color:color-mix(in srgb,var(--ink) 30%,transparent); background:var(--glass); box-shadow:0 0 0 1px rgba(233,166,64,.08),var(--shadow-float); }
:root[data-site-theme="forge"] .file-row { border-bottom:1px solid var(--line); }
:root[data-site-theme="forge"] .file-row:not(.file-row-head):hover { background:rgba(233,166,64,.12); transform:translateX(5px); }
:root[data-site-theme="forge"] .filter-pills { border-radius:2px; background:var(--fog); }
:root[data-site-theme="forge"] .btn-primary { border-radius:2px; background:#e9a640 !important; color:#202326 !important; box-shadow:3px 3px 0 #9e5b2f !important; }
:root[data-site-theme="forge"] .admin-data-surface,:root[data-site-theme="forge"] .file-row.is-filtered-in { animation:forge-slide .42s var(--ease) both; }
@keyframes forge-slide { from{opacity:0;transform:translateX(18px)} to{opacity:1;transform:none} }

/* 像素终端 */
:root[data-site-theme="pixel"] { --canvas:#dcebe3; --glass:#eaf4ef; --glass-strong:#f4faf7; --ink:#0b2c21; --ink-muted:#3f725f; --line:rgba(11,122,81,.32); --forest:#0b7a51; --forest-deep:#065638; --coral:#b8493c; --fog:#cde1d7; --shadow-float:4px 4px 0 rgba(6,80,53,.22); --shadow-lift:3px 3px 0 rgba(6,80,53,.18); --radius:0px; }
:root[data-site-theme="pixel"] body.app-body,:root[data-site-theme="pixel"] body.admin-body { background-image:linear-gradient(rgba(77,224,164,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(77,224,164,.07) 1px,transparent 1px); background-size:20px 20px; }
:root[data-site-theme="pixel"] body::before { background:repeating-linear-gradient(0deg,rgba(77,224,164,.035) 0 1px,transparent 1px 4px); }
:root[data-site-theme="pixel"] * { border-radius:0 !important; }
:root[data-site-theme="pixel"] body,:root[data-site-theme="pixel"] button,:root[data-site-theme="pixel"] input,:root[data-site-theme="pixel"] select,:root[data-site-theme="pixel"] textarea { font-family:"Consolas","Cascadia Mono","Microsoft YaHei UI",monospace; }
:root[data-site-theme="pixel"] .navbar.navbar-default { background:#07120f; border-bottom:1px solid #4de0a4; }
:root[data-site-theme="pixel"] .navbar-brand,:root[data-site-theme="pixel"] .navbar-nav>li>a { color:#d9f9e9 !important; }
:root[data-site-theme="pixel"] .brand-mark { background:#4de0a4; color:#07120f; box-shadow:4px 4px 0 #1d6e52; }
:root[data-site-theme="pixel"] .file-workbench,:root[data-site-theme="pixel"] .upload-inspector,:root[data-site-theme="pixel"] .preview-stage,:root[data-site-theme="pixel"] .file-toolbox,:root[data-site-theme="pixel"] .file-side-card,:root[data-site-theme="pixel"] .admin-data-surface,:root[data-site-theme="pixel"] .admin-settings-column>.panel { background:var(--glass); border:1px solid var(--forest); box-shadow:4px 4px 0 color-mix(in srgb,var(--forest) 28%,transparent); }
:root[data-site-theme="pixel"] .filter-pills { background:var(--fog); border:1px dashed var(--forest); }
:root[data-site-theme="pixel"] .file-row:not(.file-row-head):hover { background:color-mix(in srgb,var(--forest) 12%,transparent); transform:none; }
:root[data-site-theme="pixel"] .btn-primary { background:#4de0a4 !important; color:#07120f !important; box-shadow:4px 4px 0 #1d6e52 !important; }
:root[data-site-theme="pixel"] .admin-data-surface,:root[data-site-theme="pixel"] .file-row.is-filtered-in { animation:pixel-line .38s steps(4,end) both; }
@keyframes pixel-line { from{opacity:0;transform:translateY(7px);clip-path:inset(0 100% 0 0)} to{opacity:1;transform:none;clip-path:inset(0 0 0 0)} }

/* 活力拼贴 */
:root[data-site-theme="collage"] { --canvas:#fff6e6; --glass:#fffdf7; --glass-strong:#fffefa; --ink:#17243a; --ink-muted:#61718c; --line:rgba(23,36,58,.18); --forest:#1d6ed0; --forest-deep:#1555a4; --coral:#ef5546; --fog:#fff0cd; --shadow-float:8px 10px 0 rgba(23,36,58,.12); --shadow-lift:5px 6px 0 rgba(23,36,58,.13); --radius:18px; }
:root[data-site-theme="collage"] body.app-body,:root[data-site-theme="collage"] body.admin-body { background-image:radial-gradient(#ef5546 1px,transparent 1px),radial-gradient(#1d6ed0 1px,transparent 1px); background-position:0 0,12px 12px; background-size:24px 24px; }
:root[data-site-theme="collage"] body::before { background:linear-gradient(120deg,rgba(239,85,70,.12),transparent 32%),linear-gradient(300deg,rgba(29,110,208,.13),transparent 36%); }
:root[data-site-theme="collage"] .navbar.navbar-default { background:#fffdf7; border-bottom:3px solid #17243a; box-shadow:0 4px 0 #ef5546; }
:root[data-site-theme="collage"] .brand-mark { border-radius:50% 50% 8px 50%; background:#ef5546; transform:rotate(-8deg); }
:root[data-site-theme="collage"] .workspace-hero h1,:root[data-site-theme="collage"] .admin-workbench-heading h1 { font-weight:800; transform:rotate(-1deg); }
:root[data-site-theme="collage"] .file-workbench,:root[data-site-theme="collage"] .upload-inspector,:root[data-site-theme="collage"] .preview-stage,:root[data-site-theme="collage"] .file-toolbox,:root[data-site-theme="collage"] .file-side-card,:root[data-site-theme="collage"] .admin-data-surface,:root[data-site-theme="collage"] .admin-settings-column>.panel { border:2px solid #17243a; box-shadow:var(--shadow-float); }
:root[data-site-theme="collage"] .file-row:not(.file-row-head):nth-child(odd) { transform:rotate(-.35deg); }
:root[data-site-theme="collage"] .file-row:not(.file-row-head):nth-child(even) { transform:rotate(.35deg); }
:root[data-site-theme="collage"] .file-row:not(.file-row-head):hover { background:#fff0cd; transform:translateX(6px) rotate(0); }
:root[data-site-theme="collage"] .filter-pills { border:2px solid #17243a; border-radius:999px; background:#fffdf7; }
:root[data-site-theme="collage"] .filter-pills button.is-active,:root[data-site-theme="collage"] .btn-primary { border-radius:999px; background:#1d6ed0 !important; box-shadow:4px 4px 0 #ef5546 !important; }
:root[data-site-theme="collage"] .admin-data-surface,:root[data-site-theme="collage"] .file-row.is-filtered-in { animation:collage-pop .48s var(--ease) both; }
@keyframes collage-pop { from{opacity:0;transform:translateY(12px) scale(.94) rotate(-2deg)} to{opacity:1} }

/* 静谧留白 */
:root[data-site-theme="blank"] { --canvas:#fafafa; --glass:#fff; --glass-strong:#fff; --ink:#111; --ink-muted:#707070; --line:#dedede; --forest:#111; --forest-deep:#000; --coral:#555; --fog:#f5f5f5; --shadow-float:0 16px 35px rgba(0,0,0,.06); --shadow-lift:0 7px 18px rgba(0,0,0,.05); --radius:0px; }
:root[data-site-theme="blank"] body.app-body,:root[data-site-theme="blank"] body.admin-body { background-image:none; }
:root[data-site-theme="blank"] body::before { background:linear-gradient(90deg,rgba(0,0,0,.025) 1px,transparent 1px); background-size:80px 80px; }
:root[data-site-theme="blank"] .navbar.navbar-default { background:#fff; border-bottom:1px solid #111; box-shadow:none; }
:root[data-site-theme="blank"] .navbar-brand,:root[data-site-theme="blank"] .navbar-nav>li>a { color:#111 !important; }
:root[data-site-theme="blank"] .brand-mark { border-radius:0; background:#111; color:#fff; }
:root[data-site-theme="blank"] .navbar-nav>li.active>a::after { right:14px; left:14px; height:1px; background:#111; }
:root[data-site-theme="blank"] .file-workbench,:root[data-site-theme="blank"] .upload-inspector,:root[data-site-theme="blank"] .preview-stage,:root[data-site-theme="blank"] .file-toolbox,:root[data-site-theme="blank"] .file-side-card,:root[data-site-theme="blank"] .admin-data-surface,:root[data-site-theme="blank"] .admin-settings-column>.panel { border:1px solid #111; border-radius:0; box-shadow:none; background:#fff; }
:root[data-site-theme="blank"] .file-row:not(.file-row-head):hover { background:#f1f1f1; transform:none; }
:root[data-site-theme="blank"] .filter-pills { border:1px solid #111; border-radius:0; background:#fff; }
:root[data-site-theme="blank"] .filter-pills button.is-active,:root[data-site-theme="blank"] .btn-primary { border-radius:0; background:#111 !important; color:#fff !important; box-shadow:none !important; }
:root[data-site-theme="blank"] .admin-data-surface,:root[data-site-theme="blank"] .file-row.is-filtered-in { animation:blank-fade .55s ease both; }
@keyframes blank-fade { from{opacity:0;transform:translateY(5px)} to{opacity:1;transform:none} }

/* 让登录、提示和 Bootstrap 基础组件也读取当前全站主题。 */
:root[data-site-theme="ink"],:root[data-site-theme="paper"],:root[data-site-theme="forge"],:root[data-site-theme="pixel"],:root[data-site-theme="collage"],:root[data-site-theme="blank"] {
  --bg:var(--canvas); --surface:var(--glass); --surface-raised:var(--glass-strong); --surface-muted:var(--fog);
  --text:var(--ink); --text-soft:var(--ink-muted); --border:var(--line); --border-strong:color-mix(in srgb,var(--ink) 34%,var(--line));
  --primary:var(--forest); --primary-hover:var(--forest-deep); --primary-soft:color-mix(in srgb,var(--forest) 15%,transparent);
  --accent:var(--coral); --accent-soft:color-mix(in srgb,var(--coral) 14%,transparent); --warning:#bd7a18; --warning-soft:color-mix(in srgb,#bd7a18 14%,transparent);
  --danger:#c74d4d; --danger-soft:color-mix(in srgb,#c74d4d 14%,transparent); --info:var(--forest); --info-soft:color-mix(in srgb,var(--forest) 12%,transparent);
  --shadow-sm:var(--shadow-lift); --shadow-md:var(--shadow-float);
}
:root[data-site-theme="ink"][data-theme="dark"],:root[data-site-theme="paper"][data-theme="dark"],:root[data-site-theme="forge"][data-theme="dark"],:root[data-site-theme="pixel"][data-theme="dark"],:root[data-site-theme="collage"][data-theme="dark"],:root[data-site-theme="blank"][data-theme="dark"] { color-scheme:dark; }
:root[data-site-theme="ink"][data-theme="auto"],:root[data-site-theme="paper"][data-theme="auto"],:root[data-site-theme="forge"][data-theme="auto"],:root[data-site-theme="pixel"][data-theme="auto"],:root[data-site-theme="collage"][data-theme="auto"],:root[data-site-theme="blank"][data-theme="auto"] { color-scheme:light; }

/* 水墨/纸页/工坊/像素/拼贴在夜间仍保持各自材质，仅切换明度。 */
:root[data-site-theme="ink"][data-theme="dark"] { --canvas:#201e1a; --glass:rgba(48,44,38,.92); --glass-strong:#39342e; --ink:#f4ecdc; --ink-muted:#b9ab94; --line:rgba(244,236,220,.18); --fog:#2b2722; --shadow-float:0 18px 35px rgba(0,0,0,.35); --shadow-lift:0 8px 18px rgba(0,0,0,.3); }
:root[data-site-theme="paper"][data-theme="dark"] { --canvas:#1d2430; --glass:#263446; --glass-strong:#2e3d51; --ink:#f7f1e7; --ink-muted:#aebbd0; --line:rgba(247,241,231,.17); --fog:#222d3c; --shadow-float:0 18px 36px rgba(0,0,0,.34); --shadow-lift:0 8px 20px rgba(0,0,0,.28); }
:root[data-site-theme="collage"][data-theme="dark"] { --canvas:#1b2030; --glass:#252b3e; --glass-strong:#2d3448; --ink:#fff6e6; --ink-muted:#b9c4dc; --line:rgba(255,246,230,.18); --fog:#22283a; --shadow-float:8px 10px 0 rgba(0,0,0,.3); --shadow-lift:5px 6px 0 rgba(0,0,0,.28); }
:root[data-site-theme="blank"][data-theme="dark"] { --canvas:#101010; --glass:#171717; --glass-strong:#1c1c1c; --ink:#f5f5f5; --ink-muted:#a0a0a0; --line:#3b3b3b; --forest:#f5f5f5; --coral:#bdbdbd; --fog:#141414; --shadow-float:0 16px 35px rgba(0,0,0,.3); --shadow-lift:0 7px 18px rgba(0,0,0,.25); }
:root[data-site-theme="forge"][data-theme="dark"] { --canvas:#252a2d; --glass:#303639; --glass-strong:#373e41; --ink:#f1eee5; --ink-muted:#aeb6b4; --line:rgba(235,223,192,.2); --forest:#e9a640; --forest-deep:#ffc568; --coral:#df6954; --fog:#2a3033; --shadow-float:0 18px 40px rgba(0,0,0,.34); --shadow-lift:0 8px 16px rgba(0,0,0,.28); }
:root[data-site-theme="pixel"][data-theme="dark"] { --canvas:#07120f; --glass:#0d211a; --glass-strong:#102a21; --ink:#d9f9e9; --ink-muted:#78a994; --line:rgba(77,224,164,.28); --forest:#4de0a4; --forest-deep:#8af2c5; --coral:#e16959; --fog:#0a1914; --shadow-float:0 0 0 1px rgba(77,224,164,.08),0 18px 45px rgba(0,0,0,.4); --shadow-lift:0 0 0 1px rgba(77,224,164,.16),0 10px 25px rgba(0,0,0,.32); }
@media (prefers-color-scheme: dark) {
  :root[data-site-theme="ink"][data-theme="auto"] { --canvas:#201e1a; --glass:rgba(48,44,38,.92); --glass-strong:#39342e; --ink:#f4ecdc; --ink-muted:#b9ab94; --line:rgba(244,236,220,.18); --fog:#2b2722; --shadow-float:0 18px 35px rgba(0,0,0,.35); --shadow-lift:0 8px 18px rgba(0,0,0,.3); }
  :root[data-site-theme="paper"][data-theme="auto"] { --canvas:#1d2430; --glass:#263446; --glass-strong:#2e3d51; --ink:#f7f1e7; --ink-muted:#aebbd0; --line:rgba(247,241,231,.17); --fog:#222d3c; --shadow-float:0 18px 36px rgba(0,0,0,.34); --shadow-lift:0 8px 20px rgba(0,0,0,.28); }
  :root[data-site-theme="collage"][data-theme="auto"] { --canvas:#1b2030; --glass:#252b3e; --glass-strong:#2d3448; --ink:#fff6e6; --ink-muted:#b9c4dc; --line:rgba(255,246,230,.18); --fog:#22283a; --shadow-float:8px 10px 0 rgba(0,0,0,.3); --shadow-lift:5px 6px 0 rgba(0,0,0,.28); }
  :root[data-site-theme="blank"][data-theme="auto"] { --canvas:#101010; --glass:#171717; --glass-strong:#1c1c1c; --ink:#f5f5f5; --ink-muted:#a0a0a0; --line:#3b3b3b; --forest:#f5f5f5; --coral:#bdbdbd; --fog:#141414; --shadow-float:0 16px 35px rgba(0,0,0,.3); --shadow-lift:0 7px 18px rgba(0,0,0,.25); }
  :root[data-site-theme="forge"][data-theme="auto"] { --canvas:#252a2d; --glass:#303639; --glass-strong:#373e41; --ink:#f1eee5; --ink-muted:#aeb6b4; --line:rgba(235,223,192,.2); --forest:#e9a640; --forest-deep:#ffc568; --coral:#df6954; --fog:#2a3033; --shadow-float:0 18px 40px rgba(0,0,0,.34); --shadow-lift:0 8px 16px rgba(0,0,0,.28); }
  :root[data-site-theme="pixel"][data-theme="auto"] { --canvas:#07120f; --glass:#0d211a; --glass-strong:#102a21; --ink:#d9f9e9; --ink-muted:#78a994; --line:rgba(77,224,164,.28); --forest:#4de0a4; --forest-deep:#8af2c5; --coral:#e16959; --fog:#0a1914; --shadow-float:0 0 0 1px rgba(77,224,164,.08),0 18px 45px rgba(0,0,0,.4); --shadow-lift:0 0 0 1px rgba(77,224,164,.16),0 10px 25px rgba(0,0,0,.32); }
  :root[data-site-theme="ink"][data-theme="auto"],:root[data-site-theme="paper"][data-theme="auto"],:root[data-site-theme="forge"][data-theme="auto"],:root[data-site-theme="pixel"][data-theme="auto"],:root[data-site-theme="collage"][data-theme="auto"],:root[data-site-theme="blank"][data-theme="auto"] { color-scheme:dark; }
}

/* 六套变体的页面结构与提示语言。默认青律玻璃沿用原有结构。 */
:root[data-site-theme="ink"] .auth-shell { grid-template-columns:minmax(360px,.72fr) minmax(430px,1.28fr); }
:root[data-site-theme="ink"] .auth-intro { background:#2f2b27; border-right:7px double #ad3d32; }
:root[data-site-theme="ink"] .auth-intro h1 { font-family:Georgia,"STSong",serif; font-weight:500; }
:root[data-site-theme="ink"] .auth-panel { padding:64px 0; }
:root[data-site-theme="ink"] .ql-toast { border-radius:2px; border-left:5px solid #ad3d32; box-shadow:7px 7px 0 rgba(47,43,39,.13); transform:translateY(-12px); }
:root[data-site-theme="ink"] .ql-dialog { border-radius:2px; border-top:6px solid #2f2b27; box-shadow:9px 9px 0 rgba(47,43,39,.16); }

:root[data-site-theme="paper"] .auth-shell { grid-template-columns:minmax(440px,1.12fr) minmax(400px,.88fr); }
:root[data-site-theme="paper"] .auth-intro { background:#fffdf8; border-right:1px solid #d5c6ae; color:#26364a; box-shadow:inset -6px 0 0 rgba(184,74,67,.1); }
:root[data-site-theme="paper"] .auth-intro p { color:#718096; }:root[data-site-theme="paper"] .auth-intro .eyebrow { color:#b84a43; }
:root[data-site-theme="paper"] .auth-panel { width:min(500px,calc(100% - 48px)); }
:root[data-site-theme="paper"] .ql-toast { border-radius:3px; border-top:4px solid #b84a43; box-shadow:4px 5px 0 rgba(184,74,67,.1); }
:root[data-site-theme="paper"] .ql-dialog { border-radius:3px; box-shadow:5px 7px 0 rgba(49,91,131,.12); transform:rotateX(-6deg) translateY(12px); transform-origin:top; }
:root[data-site-theme="paper"] .is-visible .ql-dialog { transform:none; }

:root[data-site-theme="forge"] .auth-shell { grid-template-columns:minmax(400px,.9fr) minmax(430px,1.1fr); background:var(--canvas); }
:root[data-site-theme="forge"] .auth-intro { background:#1d2224; border-right:1px solid #e9a640; color:#f1eee5; }
:root[data-site-theme="forge"] .auth-intro h1,:root[data-site-theme="forge"] .auth-heading h2 { font-family:"Consolas","Microsoft YaHei UI",monospace; }
:root[data-site-theme="forge"] .auth-panel { padding:40px; border:1px solid var(--line); background:var(--glass); box-shadow:var(--shadow-float); }
:root[data-site-theme="forge"] .ql-toast { border-radius:2px; border:1px solid var(--forest); box-shadow:5px 5px 0 rgba(32,38,40,.32); transform:translateX(18px); }
:root[data-site-theme="forge"] .ql-toast.is-visible { transform:none; }
:root[data-site-theme="forge"] .ql-dialog { border-radius:2px; border-left:7px solid var(--forest); box-shadow:7px 7px 0 rgba(32,38,40,.3); }

:root[data-site-theme="pixel"] .auth-shell { grid-template-columns:minmax(390px,.86fr) minmax(430px,1.14fr); }
:root[data-site-theme="pixel"] .auth-intro { background:#07120f; border-right:1px dashed #4de0a4; color:#d9f9e9; }
:root[data-site-theme="pixel"] .auth-intro h1 { font-family:"Consolas","Cascadia Mono","Microsoft YaHei UI",monospace; font-size:40px; }
:root[data-site-theme="pixel"] .auth-panel { padding:34px; border:1px dashed var(--forest); background:var(--glass); box-shadow:6px 6px 0 color-mix(in srgb,var(--forest) 24%,transparent); }
:root[data-site-theme="pixel"] .ql-toast { border:1px dashed var(--forest); box-shadow:4px 4px 0 color-mix(in srgb,var(--forest) 32%,transparent); transition:opacity .16s steps(3,end),transform .16s steps(3,end); }
:root[data-site-theme="pixel"] .ql-dialog { border:1px solid var(--forest); box-shadow:6px 6px 0 color-mix(in srgb,var(--forest) 28%,transparent); transition:transform .18s steps(3,end); }

:root[data-site-theme="collage"] .auth-shell { grid-template-columns:minmax(390px,.78fr) minmax(440px,1.22fr); background:radial-gradient(#ef5546 1px,transparent 1px) 0 0/24px 24px,var(--canvas); }
:root[data-site-theme="collage"] .auth-intro { background:#1d6ed0; border-right:6px solid #17243a; color:#fff; clip-path:polygon(0 0,96% 0,100% 50%,96% 100%,0 100%); }
:root[data-site-theme="collage"] .auth-intro h1 { font-weight:800; transform:rotate(-2deg); }
:root[data-site-theme="collage"] .auth-panel { padding:38px; border:2px solid #17243a; border-radius:18px 4px 18px 4px; background:var(--glass); box-shadow:9px 10px 0 #ef5546; transform:rotate(.45deg); }
:root[data-site-theme="collage"] .ql-toast { border:2px solid #17243a; border-radius:18px 5px 18px 5px; box-shadow:6px 6px 0 #ef5546; transform:translateY(-12px) rotate(-1deg); }
:root[data-site-theme="collage"] .ql-toast.is-visible { transform:rotate(-1deg); }
:root[data-site-theme="collage"] .ql-dialog { border:2px solid #17243a; border-radius:18px 5px 18px 5px; box-shadow:8px 8px 0 #ef5546; transform:translateY(18px) rotate(2deg); }
:root[data-site-theme="collage"] .is-visible .ql-dialog { transform:rotate(-.5deg); }

:root[data-site-theme="blank"] .auth-shell { grid-template-columns:minmax(340px,.62fr) minmax(480px,1.38fr); }
:root[data-site-theme="blank"] .auth-intro { background:var(--canvas); border-right:1px solid var(--ink); color:var(--ink); }
:root[data-site-theme="blank"] .auth-intro p,:root[data-site-theme="blank"] .auth-intro .eyebrow { color:var(--ink-muted); }
:root[data-site-theme="blank"] .auth-panel { width:min(480px,calc(100% - 48px)); }
:root[data-site-theme="blank"] .ql-toast { border:1px solid var(--ink); border-radius:0; box-shadow:none; transform:translateY(-8px); }
:root[data-site-theme="blank"] .ql-toast-icon { border-right:1px solid var(--line); background:transparent; }
:root[data-site-theme="blank"] .ql-dialog { border:1px solid var(--ink); border-radius:0; box-shadow:none; }

@media (min-width:992px) {
  :root[data-site-theme="ink"] .file-layout { grid-template-columns:250px minmax(0,1fr); }
  :root[data-site-theme="ink"] .file-main-column { grid-column:2; }
  :root[data-site-theme="ink"] .file-side-column { grid-column:1; grid-row:1; }
  :root[data-site-theme="paper"] .upload-stage { order:2; }
  :root[data-site-theme="paper"] .upload-inspector { order:1; }
  :root[data-site-theme="forge"] .upload-layout { grid-template-columns:minmax(0,1.35fr) 340px; }
  :root[data-site-theme="forge"] .admin-workbench-heading { align-items:center; padding:13px 18px; border-left:5px solid var(--forest); background:color-mix(in srgb,var(--glass) 65%,transparent); }
  :root[data-site-theme="pixel"] .workbench-bar { display:grid; grid-template-columns:170px minmax(0,1fr); }
  :root[data-site-theme="pixel"] .workbench-controls { justify-content:space-between; }
  :root[data-site-theme="collage"] .workspace-hero { padding:18px; border:2px solid #17243a; background:var(--glass); box-shadow:7px 8px 0 #ef5546; transform:rotate(-.3deg); }
  :root[data-site-theme="blank"] .file-layout { grid-template-columns:1fr; }
  :root[data-site-theme="blank"] .file-main-column,:root[data-site-theme="blank"] .file-side-column { grid-column:1; }
  :root[data-site-theme="blank"] .file-side-column { grid-template-columns:repeat(2,minmax(0,1fr)); }
}

@media (max-width:767px) {
  .workbench-controls { width:100%; min-width:0; display:grid; gap:9px; }
  .filter-pills { display:grid; width:100%; max-width:none; grid-template-columns:repeat(2,minmax(0,1fr)); gap:4px; overflow:visible; }
  .filter-pills button { display:flex; min-width:0; min-height:34px; align-items:center; justify-content:center; white-space:nowrap; word-break:keep-all; writing-mode:horizontal-tb; }
  .theme-choice-grid { grid-template-columns:1fr; }
  .theme-choice { grid-template-columns:82px minmax(0,1fr) 22px; }
  .file-hero-copy p { gap:6px 9px; font-size:11px; }
  .file-hero-copy .file-hero-size { padding:3px 7px; }
}

/* 前台统一账号弹窗 */
.auth-modal-open { overflow:hidden; }
.auth-modal-backdrop { position:fixed; z-index:10020; inset:0; display:grid; padding:24px; place-items:center; background:rgba(12,28,20,.48); backdrop-filter:blur(8px); opacity:0; pointer-events:none; transition:opacity .22s ease; }
.auth-modal-backdrop.is-visible { opacity:1; pointer-events:auto; }
.auth-modal { position:relative; width:min(520px,100%); max-height:calc(100vh - 48px); overflow:auto; padding:30px; border:1px solid color-mix(in srgb,var(--line) 85%,transparent); border-radius:18px; background:color-mix(in srgb,var(--glass-strong) 94%,transparent); box-shadow:0 28px 78px rgba(7,26,17,.28); backdrop-filter:blur(28px) saturate(150%); transform:translateY(18px) scale(.97); transition:transform .28s var(--ease); }
.auth-modal-backdrop.is-visible .auth-modal { transform:none; }
.auth-modal-close { position:absolute; top:16px; right:16px; display:grid; width:34px; height:34px; padding:0; place-items:center; border:1px solid var(--line); border-radius:9px; background:var(--glass); color:var(--ink-muted); transition:background-color .18s ease,color .18s ease,transform .18s ease; }
.auth-modal-close:hover { background:var(--forest); color:#fff; transform:rotate(90deg); }
.auth-modal-brand { display:inline-flex; align-items:center; gap:10px; margin-bottom:28px; color:var(--ink); font-size:16px; font-weight:750; }
.auth-modal-brand .brand-mark { width:30px; height:30px; flex-basis:30px; font-size:18px; }
.auth-modal .auth-heading { margin-bottom:18px; }.auth-modal .auth-heading h2 { margin:0; color:var(--ink); font-family:Georgia,"STSong",serif; font-size:29px; }.auth-modal .auth-heading p:last-child { margin:6px 0 0; color:var(--ink-muted); font-size:13px; }
.auth-modal .auth-tabs { margin-bottom:22px; }.auth-modal .auth-link { justify-self:end; padding:0; border:0; background:transparent; color:var(--forest); font-size:13px; }
.auth-modal .auth-form { padding-bottom:2px; }.auth-modal .auth-form .btn-primary { min-height:46px; }
@media (max-width:767px) { .auth-modal-backdrop { padding:12px; align-items:end; }.auth-modal { width:100%; max-height:calc(100vh - 24px); padding:26px 18px 22px; border-radius:16px; }.auth-modal .form-grid-2 { grid-template-columns:1fr; gap:14px; }.auth-modal .auth-heading h2 { font-size:26px; }.auth-modal .captcha-row,.auth-modal .verification-row { grid-template-columns:minmax(0,1fr) 112px; }.auth-modal .captcha-image { width:112px; }.auth-modal .captcha-image img { width:106px; } }

/* 后台文件格式标识 */
.file-format-badge { display:inline-flex; min-width:44px; min-height:24px; align-items:center; justify-content:center; padding:3px 7px; border:1px solid currentColor; border-radius:6px; font-family:ui-monospace,SFMono-Regular,Consolas,monospace; font-size:10px; font-weight:800; line-height:1; text-transform:uppercase; }
.file-format-video { color:#b6448b; background:rgba(182,68,139,.11); }.file-format-image { color:#24805b; background:rgba(36,128,91,.11); }.file-format-audio { color:#7358c9; background:rgba(115,88,201,.11); }.file-format-document { color:#2471b8; background:rgba(36,113,184,.11); }.file-format-archive { color:#aa6914; background:rgba(170,105,20,.12); }.file-format-code { color:#177c87; background:rgba(23,124,135,.11); }.file-format-app { color:#ae4a3e; background:rgba(174,74,62,.11); }.file-format-other { color:var(--ink-muted); background:color-mix(in srgb,var(--fog) 72%,transparent); }
.file-type.file-format-video,.file-type.file-format-image,.file-type.file-format-audio,.file-type.file-format-document,.file-type.file-format-archive,.file-type.file-format-code,.file-type.file-format-app,.file-type.file-format-other { border-color:currentColor; background:transparent; }
.admin-preview-trigger { display:inline-flex; min-height:27px; align-items:center; gap:4px; margin-left:7px; padding:3px 7px; border:1px solid color-mix(in srgb,var(--forest) 32%,var(--line)); border-radius:6px; background:color-mix(in srgb,var(--forest) 7%,transparent); color:var(--forest); font-size:11px; font-weight:700; line-height:1; transition:background-color .18s ease,transform .18s ease; }.admin-preview-trigger:hover { background:var(--forest); color:#fff; transform:translateY(-1px); }
.ql-media-viewer { position:fixed; z-index:100000; inset:0; display:grid; grid-template-rows:58px minmax(0,1fr); padding:0 24px 24px; background:rgba(7,16,12,.84); opacity:0; backdrop-filter:blur(14px) saturate(125%); transition:opacity .2s ease; }.ql-media-viewer.is-visible { opacity:1; }.ql-media-viewer-bar { display:flex; align-items:center; justify-content:space-between; color:#edf7f1; font-size:13px; }.ql-media-viewer-bar button { display:grid; width:38px; height:38px; place-items:center; border:1px solid rgba(255,255,255,.22); border-radius:10px; background:rgba(255,255,255,.1); color:#fff; cursor:pointer; }.ql-media-viewer-stage { display:grid; min-height:0; place-items:center; }.ql-media-viewer-stage video { width:min(1100px,96vw); max-height:calc(100vh - 90px); background:#000; box-shadow:0 24px 80px rgba(0,0,0,.35); }.ql-media-viewer-stage audio { width:min(620px,90vw); }
@media (max-width:767px) { .ql-media-viewer { padding:0 12px 12px; }.admin-preview-trigger span { display:none; }.admin-preview-trigger { margin-left:5px; } }
