/* ============================================================
   theme-styles.css — 智能记账 V2
   深夜账本美学：近黑底 + 金绿双轨 + 纸张白卡
   职责：全局 CSS 变量、组件样式、响应式布局
   ============================================================ */

/* ═══════════════════════════════════════════
   DESIGN SYSTEM — 深夜账本美学
   主色：近黑底 + 金绿双轨 + 纸张白卡
═══════════════════════════════════════════ */
:root{
  --bg:        #0f172a;
  --bg2:       #1e293b;
  --bg3:       #263348;
  --surface:   #1e293b;
  --surface2:  #243044;
  --card:      #ffffff;
  --card-bg:   #f8f7f4;
  --ink:       #f1f5f9;
  --ink2:      #94a3b8;
  --ink3:      #64748b;
  --ink-dark:  #1a1a2e;
  --gold:      #d4a853;
  --gold2:     #e8c170;
  --green:     #10b981;
  --green2:    #34d399;
  --red:       #ef4444;
  --red2:      #fca5a5;
  --blue:      #3b82f6;
  --blue2:     #93c5fd;
  --amber:     #f59e0b;
  --purple:    #8b5cf6;
  --border:    rgba(148,163,184,0.12);
  --border2:   rgba(148,163,184,0.06);
  --glow-gold: 0 0 20px rgba(212,168,83,0.25);
  --glow-green:0 0 16px rgba(16,185,129,0.2);
  --shadow:    0 4px 24px rgba(0,0,0,0.4);
  --shadow-sm: 0 2px 8px rgba(0,0,0,0.25);
  --r:         12px;
  --r-sm:      8px;
  --r-xs:      5px;
  --serif:     'Noto Serif SC',serif;
  --mono:      'JetBrains Mono',monospace;
  --trans:     all 0.18s cubic-bezier(.4,0,.2,1);
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:16px}
body{font-family:var(--serif);background:var(--bg);color:var(--ink);min-height:100vh;overflow-x:hidden;-webkit-font-smoothing:antialiased}

/* ── Scrollbar ── */
::-webkit-scrollbar{width:4px;height:4px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}

/* ── Layout Shell ── */
#app{min-height:100vh;display:flex;flex-direction:column}
.shell{display:grid;grid-template-columns:220px 1fr;grid-template-rows:58px 1fr;height:100vh;overflow:hidden}
@media(max-width:900px){.shell{grid-template-columns:1fr;grid-template-rows:58px 1fr}}

/* ── Topbar ── */
.topbar{
  grid-column:1/-1;
  background:var(--bg2);
  border-bottom:1px solid var(--border);
  display:flex;align-items:center;padding:0 20px;gap:14px;
  position:relative;z-index:200;
}
.topbar-brand{
  display:flex;align-items:center;gap:10px;
  font-size:16px;font-weight:700;letter-spacing:-.3px;
  color:var(--gold);white-space:nowrap;
}
.topbar-brand .dot{
  width:8px;height:8px;border-radius:50%;
  background:var(--gold);
  animation:pulse-gold 2.5s ease-in-out infinite;
}
@keyframes pulse-gold{0%,100%{box-shadow:0 0 0 0 rgba(212,168,83,.5)}50%{box-shadow:0 0 0 6px rgba(212,168,83,0)}}
.topbar-brand small{color:var(--ink3);font-weight:400;font-size:11px;margin-left:4px;font-family:var(--mono)}
.topbar-sep{flex:1}
.topbar-ai-status{
  display:flex;align-items:center;gap:7px;
  font-size:11px;font-family:var(--mono);color:var(--ink3);
  background:var(--bg3);border-radius:100px;padding:5px 12px;
}
.ai-dot{width:6px;height:6px;border-radius:50%;background:var(--green);transition:background .3s}
.ai-dot.busy{background:var(--amber);animation:blink .6s ease-in-out infinite}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.3}}
.topbar-user{
  display:flex;align-items:center;gap:8px;cursor:pointer;
  padding:5px 12px;border-radius:var(--r-xs);
  transition:var(--trans);font-size:13px;
}
.topbar-user:hover{background:var(--bg3)}
.user-avatar{
  width:28px;height:28px;border-radius:50%;
  background:linear-gradient(135deg,var(--gold),var(--amber));
  display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:700;color:var(--bg);
  flex-shrink:0;
}
.topbar-logout{
  padding:5px 12px;border-radius:var(--r-xs);
  background:transparent;border:1px solid var(--border);
  color:var(--ink2);font-size:12px;font-family:var(--serif);
  cursor:pointer;transition:var(--trans);
}
.topbar-logout:hover{background:rgba(239,68,68,.1);border-color:var(--red);color:var(--red)}

/* ── Sidebar ── */
.sidebar{
  background:var(--bg2);border-right:1px solid var(--border);
  display:flex;flex-direction:column;overflow-y:auto;padding:14px 10px;gap:2px;
}
@media(max-width:900px){.sidebar{display:none}}
.nav-label{
  font-size:9px;letter-spacing:.12em;color:var(--ink3);
  padding:14px 10px 4px;text-transform:uppercase;font-family:var(--mono);
}
.nav-item{
  display:flex;align-items:center;gap:9px;
  padding:9px 10px;border-radius:var(--r-sm);cursor:pointer;
  font-size:13px;color:var(--ink2);transition:var(--trans);
  border:1px solid transparent;user-select:none;
}
.nav-item:hover{background:var(--bg3);color:var(--ink)}
.nav-item.active{
  background:rgba(212,168,83,.12);
  border-color:rgba(212,168,83,.25);color:var(--gold);
}
.nav-item .kb{
  margin-left:auto;background:var(--bg3);border-radius:3px;
  padding:1px 5px;font-size:10px;font-family:var(--mono);opacity:.6;color:inherit;
}
.nav-item.active .kb{background:rgba(212,168,83,.2);opacity:1}
.nav-item.ai-flash{animation:ai-flash .5s ease-out}
@keyframes ai-flash{0%{box-shadow:0 0 0 0 rgba(212,168,83,.7)}100%{box-shadow:0 0 0 10px rgba(212,168,83,0)}}

/* ── Main ── */
.main{overflow-y:auto;background:var(--bg)}

/* ── Section ── */
.sec-head{
  padding:20px 24px 12px;
  display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;
}
.sec-head h2{font-size:18px;font-weight:600;color:var(--ink)}
.sec-head p{font-size:12px;color:var(--ink3);margin-top:3px}

/* ── Cards ── */
.card{
  background:var(--card);border-radius:var(--r);
  color:var(--ink-dark);overflow:hidden;
}
.dark-card{
  background:var(--surface);border-radius:var(--r);
  border:1px solid var(--border);color:var(--ink);
}

/* ── Buttons ── */
.btn{
  display:inline-flex;align-items:center;gap:6px;
  padding:9px 18px;border-radius:var(--r-sm);
  font-size:13px;font-family:var(--serif);font-weight:600;
  cursor:pointer;border:1px solid transparent;transition:var(--trans);
  white-space:nowrap;line-height:1;
}
.btn-gold{background:var(--gold);color:#1a1006;border-color:var(--gold)}
.btn-gold:hover{background:var(--gold2)}
.btn-green{background:var(--green);color:#fff;border-color:var(--green)}
.btn-green:hover{background:var(--green2);color:var(--ink-dark)}
.btn-ghost{background:transparent;color:var(--ink2);border-color:var(--border)}
.btn-ghost:hover{background:var(--bg3);color:var(--ink)}
.btn-danger{background:var(--red);color:#fff;border-color:var(--red)}
.btn-danger:hover{background:#dc2626}
.btn-sm{padding:6px 12px;font-size:12px}
.btn-xs{padding:4px 9px;font-size:11px}
.btn:disabled{opacity:.35;cursor:not-allowed}

/* ── Badges ── */
.badge{
  display:inline-flex;align-items:center;
  padding:2px 8px;border-radius:100px;
  font-size:11px;font-family:var(--mono);font-weight:500;
}
.badge-green{background:rgba(16,185,129,.12);color:var(--green2)}
.badge-red{background:rgba(239,68,68,.12);color:var(--red2)}
.badge-gold{background:rgba(212,168,83,.12);color:var(--gold2)}
.badge-blue{background:rgba(59,130,246,.12);color:var(--blue2)}
.badge-purple{background:rgba(139,92,246,.12);color:#c4b5fd}
.badge-gray{background:var(--border2);color:var(--ink3)}

/* ── Form ── */
.form-field{display:flex;flex-direction:column;gap:5px}
.form-label{font-size:11px;color:var(--ink3);font-family:var(--mono);letter-spacing:.04em}
.form-input{
  padding:10px 14px;
  background:var(--bg3);border:1px solid var(--border);
  border-radius:var(--r-sm);font-size:14px;font-family:var(--serif);
  color:var(--ink);transition:var(--trans);width:100%;
}
.form-input:focus{outline:none;border-color:rgba(212,168,83,.5);background:var(--bg2)}
.form-input.light{background:#f4f3f0;border-color:#e2e0da;color:var(--ink-dark)}
.form-input.light:focus{border-color:var(--gold);background:#fff}
.form-input.amount-field{font-family:var(--mono);font-size:22px;font-weight:500;color:var(--red)}
.form-select{
  padding:10px 14px;
  background:var(--bg3);border:1px solid var(--border);
  border-radius:var(--r-sm);font-size:13px;font-family:var(--serif);
  color:var(--ink);cursor:pointer;width:100%;
  appearance:none;
}
.form-select.light{background:#f4f3f0;border-color:#e2e0da;color:var(--ink-dark)}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
@media(max-width:480px){.grid-2,.grid-3{grid-template-columns:1fr}}

/* ── Login Screen ── */
#login-screen{
  min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:var(--bg);position:relative;overflow:hidden;
}
.login-bg{
  position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(ellipse 60% 40% at 20% 20%, rgba(212,168,83,.06) 0%, transparent 60%),
    radial-gradient(ellipse 50% 50% at 80% 80%, rgba(16,185,129,.05) 0%, transparent 60%);
}
.login-grid{
  position:absolute;inset:0;
  background-image:
    linear-gradient(rgba(148,163,184,.04) 1px,transparent 1px),
    linear-gradient(90deg,rgba(148,163,184,.04) 1px,transparent 1px);
  background-size:48px 48px;pointer-events:none;
}
.login-box{
  position:relative;width:380px;
  background:var(--surface);border:1px solid var(--border);
  border-radius:20px;padding:40px 36px;
  box-shadow:var(--shadow);
  animation:login-appear .4s ease;
}
@keyframes login-appear{from{transform:translateY(16px);opacity:0}to{transform:translateY(0);opacity:1}}
.login-logo{text-align:center;margin-bottom:32px}
.login-logo .icon{
  width:56px;height:56px;border-radius:16px;
  background:linear-gradient(135deg,var(--gold),var(--amber));
  display:flex;align-items:center;justify-content:center;
  font-size:26px;margin:0 auto 12px;
  box-shadow:var(--glow-gold);
}
.login-logo h1{font-size:22px;font-weight:700;color:var(--ink);letter-spacing:-.3px}
.login-logo p{font-size:12px;color:var(--ink3);margin-top:4px;font-family:var(--mono)}
.login-tabs{display:flex;gap:0;margin-bottom:24px;background:var(--bg3);border-radius:var(--r-sm);padding:3px}
.login-tab{
  flex:1;padding:8px;text-align:center;font-size:13px;cursor:pointer;
  border-radius:6px;color:var(--ink3);transition:var(--trans);
}
.login-tab.active{background:var(--surface);color:var(--gold);box-shadow:var(--shadow-sm)}
.login-form{display:flex;flex-direction:column;gap:14px}
.login-footer{
  margin-top:8px;font-size:11px;text-align:center;color:var(--ink3);
  line-height:1.6;
}

/* ── Dashboard Stats ── */
.stats-grid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:12px;
  padding:0 24px 16px;
}
@media(max-width:900px){.stats-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:480px){.stats-grid{grid-template-columns:1fr 1fr}}
.stat-card{
  background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r);padding:16px 18px;
  position:relative;overflow:hidden;transition:var(--trans);
}
.stat-card:hover{border-color:rgba(212,168,83,.3);transform:translateY(-1px)}
.stat-card::after{
  content:'';position:absolute;top:0;left:0;right:0;height:2px;
}
.stat-card.income::after{background:linear-gradient(90deg,var(--green),transparent)}
.stat-card.expense::after{background:linear-gradient(90deg,var(--red),transparent)}
.stat-card.balance::after{background:linear-gradient(90deg,var(--gold),transparent)}
.stat-card.count::after{background:linear-gradient(90deg,var(--blue),transparent)}
.stat-label{font-size:11px;color:var(--ink3);font-family:var(--mono);margin-bottom:8px}
.stat-value{font-size:22px;font-weight:700;font-family:var(--mono);letter-spacing:-.5px}
.stat-value.pos{color:var(--green2)}
.stat-value.neg{color:var(--red2)}
.stat-value.gold{color:var(--gold2)}
.stat-value.blue{color:var(--blue2)}
.stat-sub{font-size:11px;color:var(--ink3);margin-top:4px}

/* ── Chart Area ── */
.charts-row{display:grid;grid-template-columns:1.6fr 1fr;gap:12px;padding:0 24px 16px}
@media(max-width:900px){.charts-row{grid-template-columns:1fr}}
.chart-card{
  background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r);padding:18px;
}
.chart-title{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:14px}
canvas{max-width:100%;display:block}

/* ── Pipeline / Photo Cards ── */
.pipeline{padding:0 24px;display:flex;flex-direction:column;gap:10px}
.upload-zone{
  background:var(--surface2);border:2px dashed var(--border);
  border-radius:var(--r);padding:28px 20px;text-align:center;
  cursor:pointer;transition:var(--trans);position:relative;overflow:hidden;
  margin:0 24px 12px;
}
.upload-zone:hover,.upload-zone.drag{
  border-color:rgba(212,168,83,.5);background:rgba(212,168,83,.03);
}
.upload-zone .up-icon{font-size:32px;margin-bottom:10px}
.upload-zone h3{font-size:14px;color:var(--ink);margin-bottom:4px}
.upload-zone p{font-size:12px;color:var(--ink3)}
.upload-actions{display:flex;gap:8px;justify-content:center;margin-top:16px;flex-wrap:wrap}

.photo-card{
  background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r);overflow:hidden;
  display:grid;grid-template-columns:110px 1fr;
  transition:var(--trans);
}
@media(max-width:500px){.photo-card{grid-template-columns:1fr}}
.photo-card.s-pending{border-left:3px solid var(--amber)}
.photo-card.s-matched{border-left:3px solid var(--green)}
.photo-card.s-conflict{border-left:3px solid var(--red)}
.photo-card.s-new{border-left:3px solid var(--blue)}
.photo-card.s-done{border-left:3px solid var(--ink3);opacity:.65}
.photo-card.s-merge{border-left:3px solid var(--purple)}
.photo-thumb{width:110px;height:110px;object-fit:cover;cursor:zoom-in;background:var(--bg3);display:block}
@media(max-width:500px){.photo-thumb{width:100%;height:160px}}
.photo-body{padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-width:0}
.photo-status-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.ai-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
@media(max-width:400px){.ai-fields{grid-template-columns:1fr 1fr}}
.ai-field{display:flex;flex-direction:column;gap:2px}
.af-label{font-size:9px;color:var(--ink3);font-family:var(--mono);letter-spacing:.04em}
.af-val{
  font-size:13px;color:var(--ink);font-weight:600;
  border-bottom:1px dashed transparent;transition:var(--trans);
}
.af-val[contenteditable]{cursor:text}
.af-val[contenteditable]:hover{border-bottom-color:var(--border)}
.af-val[contenteditable]:focus{outline:none;border-bottom-color:var(--gold);color:var(--gold2)}
.af-val.amt{color:var(--red2);font-family:var(--mono)}
.ai-suggest{
  background:rgba(139,92,246,.07);border:1px solid rgba(139,92,246,.2);
  border-radius:var(--r-sm);padding:9px 12px;
  display:flex;align-items:flex-start;gap:8px;font-size:12px;
}
.sug-icon{flex-shrink:0;font-size:14px;margin-top:1px}
.sug-text{flex:1;line-height:1.5;color:var(--ink2)}
.sug-actions{display:flex;gap:5px;flex-shrink:0}
.photo-actions{display:flex;gap:5px;flex-wrap:wrap;margin-top:2px}

/* ── Confirm Modal ── */
.modal-backdrop{
  position:fixed;inset:0;background:rgba(0,0,0,.65);
  backdrop-filter:blur(6px);z-index:500;
  display:flex;align-items:center;justify-content:center;padding:20px;
  animation:fd .15s ease;
}
@keyframes fd{from{opacity:0}to{opacity:1}}
.modal{
  background:var(--card);border-radius:var(--r);
  width:100%;max-width:520px;max-height:92vh;overflow-y:auto;
  box-shadow:var(--shadow);animation:mu .2s ease;color:var(--ink-dark);
}
@keyframes mu{from{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}
.modal-head{
  padding:18px 22px 14px;
  border-bottom:1px solid #e8e4dc;
  display:flex;align-items:center;justify-content:space-between;
}
.modal-title{font-size:15px;font-weight:700}
.modal-close{
  width:26px;height:26px;border-radius:50%;
  background:#f0ede7;border:none;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  font-size:15px;color:#888;transition:var(--trans);
}
.modal-close:hover{background:#e4e0d8}
.modal-body{padding:18px 22px;display:flex;flex-direction:column;gap:13px}
.modal-img{width:100%;max-height:200px;object-fit:contain;border-radius:var(--r-sm);background:#f4f3f0}
.modal-footer{padding:14px 22px 18px;border-top:1px solid #e8e4dc;display:flex;gap:8px;justify-content:flex-end}

/* ── Records Table ── */
.records-table-wrap{padding:0 24px 24px;overflow-x:auto}
.records-table{width:100%;border-collapse:collapse;font-size:13px}
.records-table th{
  text-align:left;padding:10px 12px;
  font-size:10px;letter-spacing:.06em;color:var(--ink3);
  font-family:var(--mono);border-bottom:1px solid var(--border);
  white-space:nowrap;
}
.records-table td{
  padding:10px 12px;border-bottom:1px solid var(--border2);
  vertical-align:middle;color:var(--ink);
}
.records-table tr:hover td{background:var(--surface2)}
.records-table .amt{font-family:var(--mono);font-weight:600}
.records-table .amt.pos{color:var(--green2)}
.records-table .amt.neg{color:var(--red2)}
.thumb-mini{width:34px;height:34px;border-radius:5px;object-fit:cover;cursor:zoom-in;background:var(--bg3)}
.table-actions{display:flex;gap:4px}

/* ── Voice ── */
.voice-wrap{margin:0 24px 16px;display:flex;flex-direction:column;gap:14px}
.voice-hero{
  background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r);padding:20px;
  display:flex;flex-direction:column;gap:14px;align-items:center;
}
.voice-btn{
  width:64px;height:64px;border-radius:50%;
  background:var(--surface2);border:2px solid var(--border);
  display:flex;align-items:center;justify-content:center;
  font-size:26px;cursor:pointer;transition:var(--trans);
}
.voice-btn:hover{border-color:var(--blue);background:rgba(59,130,246,.1)}
.voice-btn.rec{border-color:var(--red);background:rgba(239,68,68,.12);animation:vp 1s ease-in-out infinite}
@keyframes vp{0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(239,68,68,.4)}50%{transform:scale(1.07);box-shadow:0 0 0 10px rgba(239,68,68,0)}}
.wave-bars{display:flex;align-items:center;gap:2px;height:40px}
.wbar{width:3px;border-radius:2px;background:var(--green2);transition:height .08s}
.voice-transcript{
  width:100%;min-height:56px;padding:12px 14px;
  background:var(--bg3);border-radius:var(--r-sm);
  font-size:14px;line-height:1.6;color:var(--ink2);font-style:italic;
}
.nlp-results{margin-top:4px;display:flex;flex-direction:column;gap:6px}
.nlp-row{
  background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r-sm);padding:10px 14px;
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
}

/* ── Import View ── */
.import-wrap{padding:0 24px;display:flex;flex-direction:column;gap:16px}
.import-step{
  background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r);padding:20px 22px;
}
.step-num{
  width:26px;height:26px;border-radius:50%;
  background:var(--gold);color:var(--bg);
  font-size:12px;font-weight:700;font-family:var(--mono);
  display:inline-flex;align-items:center;justify-content:center;
  margin-right:8px;flex-shrink:0;
}
.step-title{font-size:14px;font-weight:600;color:var(--ink);display:flex;align-items:center}
.step-desc{font-size:12px;color:var(--ink3);margin:8px 0 14px;line-height:1.6}
.import-progress-row{display:flex;align-items:center;gap:10px;margin-top:10px}
.imp-track{flex:1;height:5px;background:var(--border);border-radius:3px;overflow:hidden}
.imp-fill{height:100%;background:linear-gradient(90deg,var(--green),var(--gold));border-radius:3px;transition:width .3s}
.import-preview{
  background:var(--bg3);border-radius:var(--r-sm);padding:12px;
  max-height:240px;overflow-y:auto;
  font-size:12px;font-family:var(--mono);color:var(--ink2);line-height:1.8;
}
.match-table{width:100%;border-collapse:collapse;font-size:12px;margin-top:8px}
.match-table th{padding:7px 10px;text-align:left;color:var(--ink3);font-family:var(--mono);font-size:10px;border-bottom:1px solid var(--border)}
.match-table td{padding:7px 10px;border-bottom:1px solid var(--border2);color:var(--ink)}
.match-table tr:hover td{background:var(--surface2)}

/* ── History ── */
.history-wrap{padding:0 24px;display:flex;flex-direction:column;gap:10px}
.hist-item{
  background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r-sm);padding:11px 14px;
  display:flex;align-items:flex-start;gap:12px;
  transition:var(--trans);
}
.hist-item:hover{border-color:rgba(212,168,83,.2)}
.hist-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:4px}
.hd-create{background:var(--blue)}
.hd-link{background:var(--green)}
.hd-edit{background:var(--amber)}
.hd-delete{background:var(--red)}
.hd-merge{background:var(--purple)}
.hd-ai{background:var(--gold)}
.hd-login{background:var(--blue2)}
.hd-import{background:var(--green2)}
.hist-body{flex:1;font-size:13px;line-height:1.5;color:var(--ink)}
.hist-time{font-size:10px;color:var(--ink3);font-family:var(--mono);flex-shrink:0;white-space:nowrap}
.hist-undo{font-size:11px;color:var(--blue2);cursor:pointer;flex-shrink:0;text-decoration:underline}

/* ── Auth / Login log table ── */
.log-table{width:100%;border-collapse:collapse;font-size:12px;font-family:var(--mono)}
.log-table th{padding:8px 12px;text-align:left;color:var(--ink3);font-size:10px;border-bottom:1px solid var(--border)}
.log-table td{padding:8px 12px;border-bottom:1px solid var(--border2);color:var(--ink)}

/* ── Court ── */
.court-dual{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:0 24px;margin-bottom:14px}
@media(max-width:640px){.court-dual{grid-template-columns:1fr}}
.court-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);overflow:hidden}
.court-panel.new-side{border-top:3px solid var(--blue)}
.court-panel.old-side{border-top:3px solid var(--red)}
.court-head{padding:11px 14px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;font-size:13px;font-weight:600}
.court-img{width:100%;max-height:200px;object-fit:contain;background:var(--bg3);cursor:zoom-in;display:block}
.court-data{padding:10px 14px;font-size:12px;display:flex;flex-direction:column;gap:5px;color:var(--ink2)}
.verdict-wrap{padding:0 24px 20px}
.verdict-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
@media(max-width:480px){.verdict-grid{grid-template-columns:1fr}}
.verdict-btn{
  padding:12px 14px;border-radius:var(--r-sm);
  border:1px solid var(--border);background:var(--surface2);
  cursor:pointer;font-size:13px;font-family:var(--serif);
  text-align:left;display:flex;align-items:center;gap:8px;
  color:var(--ink);transition:var(--trans);
}
.verdict-btn:hover{border-color:var(--gold);background:rgba(212,168,83,.07)}

/* ── Reports ── */
.report-wrap{padding:0 24px 24px;display:flex;flex-direction:column;gap:14px}
.report-tabs{display:flex;gap:0;background:var(--surface);border-radius:var(--r-sm);padding:3px;width:fit-content;margin-bottom:4px}
.rt{padding:7px 16px;border-radius:6px;font-size:13px;cursor:pointer;color:var(--ink3);transition:var(--trans)}
.rt.active{background:var(--gold);color:var(--bg);font-weight:600}
.report-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:700px){.report-row{grid-template-columns:1fr}}
.cat-bar-row{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13px}
.cat-bar-name{width:70px;color:var(--ink2);font-size:12px;flex-shrink:0}
.cat-bar-track{flex:1;height:7px;background:var(--border);border-radius:4px;overflow:hidden}
.cat-bar-fill{height:100%;border-radius:4px;transition:width .5s cubic-bezier(.4,0,.2,1)}
.cat-bar-amt{width:70px;text-align:right;font-family:var(--mono);font-size:12px;color:var(--ink)}

/* ── Lightbox ── */
.lightbox{position:fixed;inset:0;background:rgba(0,0,0,.93);z-index:2000;display:none;align-items:center;justify-content:center;cursor:zoom-out}
.lightbox.open{display:flex}
.lightbox img{max-width:95vw;max-height:92vh;object-fit:contain;border-radius:6px;touch-action:pinch-zoom;pointer-events:none}
.lb-close{position:absolute;top:18px;right:22px;color:rgba(255,255,255,.6);font-size:30px;cursor:pointer;background:none;border:none;transition:var(--trans)}
.lb-close:hover{color:#fff}

/* ── Toast ── */
.toasts{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);z-index:3000;display:flex;flex-direction:column;gap:7px;align-items:center;pointer-events:none}
.toast{
  background:var(--ink);color:var(--bg);
  padding:9px 20px;border-radius:100px;font-size:13px;
  box-shadow:var(--shadow);animation:tin .25s ease;
  pointer-events:auto;display:flex;align-items:center;gap:7px;
  max-width:360px;
}
.toast.ok{background:var(--green)}
.toast.warn{background:var(--amber);color:var(--bg)}
.toast.err{background:var(--red)}
@keyframes tin{from{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}

/* ── Dedupe ── */
.dedupe-group{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);overflow:hidden;margin-bottom:10px}
.dedupe-group-head{padding:10px 16px;background:rgba(239,68,68,.07);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;font-size:13px;font-weight:600}
.dedupe-thumbs{display:flex;gap:10px;padding:14px 16px;flex-wrap:wrap}
.dt-wrap{position:relative}
.dt-wrap img{width:76px;height:76px;object-fit:cover;border-radius:var(--r-sm);cursor:zoom-in;background:var(--bg3)}
.dt-keep{position:absolute;bottom:3px;left:3px;background:var(--green);color:#fff;font-size:9px;padding:1px 5px;border-radius:3px;font-family:var(--mono)}

/* ── Permission panel ── */
.perm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}
.perm-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);padding:14px;display:flex;flex-direction:column;gap:8px}
.perm-user{display:flex;align-items:center;gap:10px}
.perm-avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--gold),var(--amber));display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:var(--bg);flex-shrink:0}
.toggle{position:relative;width:36px;height:20px;flex-shrink:0}
.toggle input{opacity:0;width:0;height:0;position:absolute}
.toggle-track{position:absolute;inset:0;background:var(--border);border-radius:20px;cursor:pointer;transition:var(--trans)}
.toggle input:checked+.toggle-track{background:var(--green)}
.toggle-thumb{position:absolute;top:2px;left:2px;width:16px;height:16px;background:#fff;border-radius:50%;transition:.2s;pointer-events:none}
.toggle input:checked~.toggle-thumb{transform:translateX(16px)}

/* ── Empty state ── */
.empty{display:flex;flex-direction:column;align-items:center;padding:50px 20px;gap:10px;color:var(--ink3)}
.empty-icon{font-size:42px;opacity:.3}
.empty p{font-size:13px}