/* ============================================================
   Dimple Finance — dashboard stylesheet
   Same V49 texture as the storefront (Fraunces + Nunito Sans,
   cream/blush/lavender, plum ink, pink primary, gold accents)
   extended with dashboard components.
   ============================================================ */

:root{
  /* Palette (shared with V49 storefront) */
  --df-cream:#fffaf6;
  --df-blush:#fdeef4;
  --df-peach:#ffe9df;
  --df-lavender:#f3edff;
  --df-powder:#e8f1fb;
  --df-pink:#ee5f95;
  --df-coral:#ff7f80;
  --df-gold:#b98a2f;
  --df-gold-soft:#f3e3c3;
  --df-ink:#2b1c40;
  --df-text:#5c4f6e;
  --df-muted:#796d8a;
  --df-green:#2f9e7d;
  --df-red:#d2566e;
  --df-line:rgba(214,178,200,.42);
  --df-line-soft:rgba(214,178,200,.28);
  /* Shape */
  --df-radius-lg:26px;
  --df-radius:20px;
  --df-radius-sm:14px;
  --df-shadow:0 14px 34px rgba(64,38,70,.07);
  --df-shadow-lift:0 20px 44px rgba(64,38,70,.11);
  --df-card-bg:linear-gradient(180deg,rgba(255,255,255,.97),rgba(255,250,252,.93));
  /* Type */
  --df-display:"Fraunces",Georgia,"Times New Roman",serif;
  --df-body:"Nunito Sans",Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  /* Layout */
  --df-sidebar:248px;
  --df-topbar:68px;
}

*{box-sizing:border-box}
html,body{margin:0;max-width:100%;overflow-x:hidden}
body{
  font-family:var(--df-body);
  color:var(--df-ink);
  font-size:15px;
  line-height:1.55;
  background:
    radial-gradient(circle at 4% -2%,rgba(255,214,226,.30),transparent 26%),
    radial-gradient(circle at 98% 2%,rgba(226,216,255,.32),transparent 28%),
    linear-gradient(180deg,#fff9fb 0%,#fff7f9 50%,#fffaf6 100%);
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
img{max-width:100%}
button{font-family:inherit;cursor:pointer}
h1,h2,h3,h4{font-family:var(--df-display);font-weight:600;letter-spacing:-.02em;color:var(--df-ink);margin:0;line-height:1.1}
:focus-visible{outline:3px solid rgba(238,95,149,.35);outline-offset:3px}

/* ---------- Buttons / chips ---------- */
.df-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:44px;padding:0 18px;border-radius:14px;
  border:1px solid rgba(238,95,149,.30);background:#fff;color:var(--df-ink);
  font-weight:800;font-size:14px;white-space:nowrap;
  transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease,background .16s ease;
}
.df-btn:hover{transform:translateY(-1px);box-shadow:0 12px 26px rgba(64,38,70,.09)}
.df-btn.primary{background:linear-gradient(135deg,#ee5f95,#ff7f80);color:#fff;border-color:transparent;box-shadow:0 12px 26px rgba(238,95,149,.24)}
.df-btn.ghost{background:transparent;border-color:var(--df-line)}
.df-btn.danger{border-color:rgba(210,86,110,.5);color:var(--df-red)}
.df-btn.sm{min-height:38px;padding:0 14px;font-size:13px;border-radius:12px}
.df-chip{
  display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 12px;border-radius:999px;
  font-size:12px;font-weight:800;border:1px solid var(--df-line);background:#fff;color:var(--df-text);
}
.df-badge{
  display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:999px;
  font-size:11px;font-weight:800;letter-spacing:.02em;text-transform:capitalize;
}
.df-badge.gold{background:linear-gradient(180deg,#fffdf8,#fbf3e2);border:1px solid rgba(185,138,47,.3);color:var(--df-gold)}
.df-badge.uploaded{background:var(--df-powder);color:#3a6ea5}
.df-badge.extracting{background:#fff5e6;color:#b8860b}
.df-badge.needs_review{background:#fff0f5;color:var(--df-pink)}
.df-badge.confirmed{background:#e9f7f1;color:var(--df-green)}
.df-badge.failed{background:#fdeaee;color:var(--df-red)}

/* ============================================================
   App shell (sidebar + topbar + main)
   ============================================================ */
.df-app{display:grid;grid-template-columns:var(--df-sidebar) 1fr;min-height:100vh}
.df-app.is-auth{display:block}
.df-scrim{display:none}

.df-sidebar{
  position:sticky;top:0;height:100vh;
  display:flex;flex-direction:column;gap:6px;
  padding:22px 16px;
  background:linear-gradient(180deg,rgba(255,255,255,.86),rgba(253,244,248,.82));
  border-right:1px solid var(--df-line);
  backdrop-filter:saturate(140%) blur(10px);
}
.df-brand{display:flex;align-items:center;gap:10px;padding:6px 8px 14px;margin-bottom:6px}
.df-brand img{height:34px;width:auto;display:block}
.df-brand .df-brand-sub{font-family:var(--df-display);font-size:13px;color:var(--df-gold);font-weight:600;letter-spacing:.02em}
.df-nav{display:flex;flex-direction:column;gap:3px}
.df-nav a{
  display:flex;align-items:center;gap:12px;min-height:44px;padding:0 14px;border-radius:13px;
  color:var(--df-text);font-weight:800;font-size:14px;
  transition:background .15s ease,color .15s ease;
}
.df-nav a svg{width:19px;height:19px;flex:none;opacity:.85}
.df-nav a:hover{background:#fff;color:var(--df-pink)}
.df-nav a.is-active{background:linear-gradient(135deg,rgba(238,95,149,.14),rgba(255,127,128,.12));color:var(--df-pink)}
.df-nav a.is-active svg{opacity:1}
.df-sidebar-foot{margin-top:auto;padding-top:14px;border-top:1px solid var(--df-line-soft);font-size:12px;color:var(--df-muted)}
.df-sidebar-foot .df-user{font-weight:800;color:var(--df-ink);display:block;margin-bottom:8px;word-break:break-all}

.df-main{min-width:0;display:flex;flex-direction:column}
.df-topbar{
  position:sticky;top:0;z-index:20;min-height:var(--df-topbar);
  display:flex;align-items:center;gap:14px;
  padding:12px 28px;
  background:rgba(255,249,252,.9);
  backdrop-filter:saturate(140%) blur(12px);
  border-bottom:1px solid var(--df-line);
}
.df-topbar h1{font-size:22px}
.df-topbar .df-spacer{flex:1}
.df-menu-toggle{display:none;width:42px;height:42px;border-radius:12px;border:1px solid var(--df-line);background:#fff;align-items:center;justify-content:center}
.df-menu-toggle span,.df-menu-toggle span:before,.df-menu-toggle span:after{display:block;width:18px;height:2px;background:var(--df-ink);border-radius:2px;position:relative}
.df-menu-toggle span:before,.df-menu-toggle span:after{content:"";position:absolute;left:0}
.df-menu-toggle span:before{top:-6px}.df-menu-toggle span:after{top:6px}
.df-view{padding:24px 28px 60px;max-width:1280px;width:100%}

/* ---------- Section header ---------- */
.df-section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin:0 0 18px}
.df-section-head .df-eyebrow{font-size:11px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--df-gold)}
.df-section-head h2{font-size:26px;margin-top:4px}
.df-section-head p{margin:4px 0 0;color:var(--df-muted);font-size:14px}

/* ============================================================
   KPI cards
   ============================================================ */
.df-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:22px}
.df-kpi{
  border:1px solid var(--df-line);border-radius:var(--df-radius);background:var(--df-card-bg);
  box-shadow:var(--df-shadow);padding:18px 18px 16px;position:relative;overflow:hidden;
}
.df-kpi .df-kpi-label{font-size:12px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--df-muted);padding-right:44px}
.df-kpi .df-kpi-value{font-family:var(--df-display);font-size:30px;font-weight:600;color:var(--df-ink);margin:8px 0 2px;line-height:1}
.df-kpi .df-kpi-sub{font-size:12.5px;color:var(--df-muted)}
.df-kpi .df-kpi-sub.up{color:var(--df-red)}
.df-kpi .df-kpi-sub.down{color:var(--df-green)}
.df-kpi .df-kpi-icon{position:absolute;top:16px;right:16px;width:36px;height:36px;border-radius:12px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#fdeff6,#f3edff);border:1px solid var(--df-line-soft)}
.df-kpi .df-kpi-icon svg{width:18px;height:18px;color:var(--df-pink)}

/* ---------- Card / panel ---------- */
.df-card{border:1px solid var(--df-line);border-radius:var(--df-radius);background:var(--df-card-bg);box-shadow:var(--df-shadow);padding:20px}
.df-card .df-card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.df-card .df-card-head h3{font-size:17px}
.df-card .df-card-head .df-card-hint{font-size:12px;color:var(--df-muted)}
.df-grid-2{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;margin-bottom:16px}
.df-grid-2b{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}
.df-chart-wrap{position:relative;height:260px}
.df-chart-wrap.sm{height:220px}

/* ---------- Renewals / list rows ---------- */
.df-list{display:flex;flex-direction:column;gap:2px}
.df-list-row{display:grid;grid-template-columns:36px 1fr auto;gap:12px;align-items:center;padding:11px 8px;border-radius:12px}
.df-list-row:hover{background:#fff6fa}
.df-list-row .df-avatar{width:36px;height:36px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-family:var(--df-display);font-weight:600;font-size:15px;color:#fff;background:linear-gradient(135deg,#ee5f95,#ff7f80)}
.df-list-row .df-row-main{min-width:0}
.df-list-row .df-row-title{font-weight:800;font-size:14px;color:var(--df-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.df-list-row .df-row-sub{font-size:12.5px;color:var(--df-muted)}
.df-list-row .df-row-amt{font-weight:800;font-size:14px;text-align:right;white-space:nowrap}
.df-row-amt small{display:block;font-weight:700;color:var(--df-muted);font-size:11px}

/* ============================================================
   Data table (Bills)
   ============================================================ */
.df-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.df-search{flex:1;min-width:220px;position:relative}
.df-search input{width:100%;min-height:44px;border:1px solid var(--df-line);border-radius:13px;background:#fff;padding:0 14px 0 40px;font-size:14px;color:var(--df-ink)}
.df-search svg{position:absolute;left:13px;top:50%;transform:translateY(-50%);width:18px;height:18px;color:var(--df-muted)}
.df-select{min-height:44px;border:1px solid var(--df-line);border-radius:13px;background:#fff;padding:0 12px;font-size:13.5px;font-weight:700;color:var(--df-ink)}
.df-table-wrap{border:1px solid var(--df-line);border-radius:var(--df-radius);overflow:hidden;background:#fff;box-shadow:var(--df-shadow)}
table.df-table{width:100%;border-collapse:collapse;font-size:14px}
.df-table thead th{text-align:left;font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--df-muted);font-weight:800;padding:13px 16px;background:#fdf3f7;border-bottom:1px solid var(--df-line)}
.df-table tbody td{padding:13px 16px;border-bottom:1px solid var(--df-line-soft);vertical-align:middle}
.df-table tbody tr{cursor:pointer;transition:background .12s ease}
.df-table tbody tr:hover{background:#fff6fa}
.df-table tbody tr:last-child td{border-bottom:0}
.df-table .df-cell-vendor{font-weight:800;color:var(--df-ink)}
.df-table .df-cell-amt{font-weight:800;text-align:right;white-space:nowrap}
.df-table .df-cell-amt small{color:var(--df-muted);font-weight:700}
.df-empty{padding:48px 24px;text-align:center;color:var(--df-muted)}
.df-empty h3{font-size:20px;color:var(--df-ink);margin-bottom:6px}

/* ============================================================
   Upload (dropzone + progress + review)
   ============================================================ */
.df-dropzone{
  border:2px dashed rgba(238,95,149,.4);border-radius:var(--df-radius-lg);
  background:linear-gradient(180deg,#fff,#fff6fa);
  padding:42px 24px;text-align:center;transition:border-color .15s ease,background .15s ease;
}
.df-dropzone.is-drag{border-color:var(--df-pink);background:#fff0f5}
.df-dropzone .df-dz-icon{width:62px;height:62px;border-radius:20px;margin:0 auto 14px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#fdeff6,#f3edff);border:1px solid var(--df-line-soft)}
.df-dropzone .df-dz-icon svg{width:28px;height:28px;color:var(--df-pink)}
.df-dropzone h3{font-size:20px;margin-bottom:6px}
.df-dropzone p{color:var(--df-muted);font-size:13.5px;margin:0 0 16px}
.df-dz-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.df-upload-queue{margin-top:18px;display:flex;flex-direction:column;gap:12px}
.df-upload-item{border:1px solid var(--df-line);border-radius:var(--df-radius);background:#fff;box-shadow:var(--df-shadow);overflow:hidden}
.df-upload-item-head{display:grid;grid-template-columns:48px 1fr auto;gap:12px;align-items:center;padding:14px 16px}
.df-upload-thumb{width:48px;height:48px;border-radius:12px;object-fit:cover;background:var(--df-blush);border:1px solid var(--df-line-soft);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;color:var(--df-muted)}
.df-progress{height:6px;border-radius:999px;background:#f1e2ea;overflow:hidden;margin-top:6px}
.df-progress > i{display:block;height:100%;width:0;background:linear-gradient(90deg,#ee5f95,#ff7f80);transition:width .3s ease}

/* ---------- Review / detail form ---------- */
.df-detail{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:20px;align-items:start}
.df-doc-preview{border:1px solid var(--df-line);border-radius:var(--df-radius);background:#fff;box-shadow:var(--df-shadow);padding:14px;position:sticky;top:84px}
.df-doc-preview img{width:100%;border-radius:14px;display:block;background:var(--df-blush)}
.df-doc-preview .df-doc-placeholder{height:320px;border-radius:14px;display:flex;align-items:center;justify-content:center;color:var(--df-muted);background:linear-gradient(135deg,#fdeff6,#f3edff);text-align:center;padding:20px}
.df-field-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.df-field{display:flex;flex-direction:column;gap:6px}
.df-field.full{grid-column:1/-1}
.df-field label{font-size:11.5px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--df-muted)}
.df-field input,.df-field select,.df-field textarea{
  min-height:44px;border:1px solid var(--df-line);border-radius:12px;background:#fff;
  padding:10px 12px;font-size:14px;color:var(--df-ink);font-family:inherit;
}
.df-field textarea{min-height:74px;resize:vertical;line-height:1.45}
.df-field input:focus,.df-field select:focus,.df-field textarea:focus{border-color:rgba(238,95,149,.55);box-shadow:0 0 0 4px rgba(238,95,149,.12);outline:none}
.df-lineitems{margin-top:6px;border:1px solid var(--df-line-soft);border-radius:14px;overflow:hidden}
.df-lineitems table{width:100%;border-collapse:collapse;font-size:13px}
.df-lineitems th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--df-muted);padding:9px 12px;background:#fdf3f7}
.df-lineitems td{padding:9px 12px;border-top:1px solid var(--df-line-soft)}
.df-lineitems td.amt{text-align:right;font-weight:700;white-space:nowrap}
.df-detail-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}
.df-raw{margin-top:14px}
.df-raw summary{cursor:pointer;font-weight:800;font-size:13px;color:var(--df-muted)}
.df-raw pre{margin:10px 0 0;padding:14px;background:#2b1c40;color:#f7eef4;border-radius:12px;overflow:auto;font-size:12px;line-height:1.5;max-height:300px}

/* ============================================================
   Login screen
   ============================================================ */
.df-login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.df-login-card{
  width:100%;max-width:420px;border:1px solid var(--df-line);border-radius:var(--df-radius-lg);
  background:var(--df-card-bg);box-shadow:var(--df-shadow-lift);padding:34px;
}
.df-login-card .df-brand{justify-content:center;padding-bottom:18px}
.df-login-card h1{font-size:26px;text-align:center}
.df-login-card .df-login-sub{text-align:center;color:var(--df-muted);font-size:14px;margin:6px 0 22px}
.df-login-card .df-field{margin-bottom:14px}
.df-login-card .df-btn{width:100%}
.df-login-note{margin-top:16px;font-size:12.5px;color:var(--df-muted);text-align:center;line-height:1.5}
.df-error{margin-top:12px;padding:11px 14px;border-radius:12px;background:#fdeaee;border:1px solid rgba(210,86,110,.3);color:var(--df-red);font-size:13px;font-weight:700}
.df-toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);z-index:200;background:var(--df-ink);color:#fff;padding:13px 20px;border-radius:14px;font-weight:700;font-size:14px;box-shadow:0 20px 44px rgba(0,0,0,.25);opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease}
.df-toast.show{opacity:1;transform:translateX(-50%) translateY(-4px)}

/* ---------- Insights mini stats ---------- */
.df-stat-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:16px}
.df-mini-stat{border:1px solid var(--df-line);border-radius:var(--df-radius);background:var(--df-card-bg);box-shadow:var(--df-shadow);padding:16px}
.df-mini-stat .l{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--df-muted);font-weight:800}
.df-mini-stat .v{font-family:var(--df-display);font-size:24px;font-weight:600;margin-top:6px}

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width:1080px){
  .df-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .df-grid-2,.df-grid-2b{grid-template-columns:1fr}
  .df-detail{grid-template-columns:1fr}
  .df-doc-preview{position:static}
  .df-stat-row{grid-template-columns:1fr}
}
@media (max-width:760px){
  :root{--df-sidebar:0px}
  .df-app{grid-template-columns:1fr}
  .df-sidebar{
    position:fixed;left:0;top:0;z-index:60;width:264px;height:100vh;
    background:#fffafc;
    transform:translateX(-100%);transition:transform .22s ease;box-shadow:0 20px 60px rgba(64,38,70,.18);
  }
  .df-app.menu-open .df-sidebar{transform:translateX(0)}
  .df-scrim{display:none;position:fixed;inset:0;z-index:55;background:rgba(43,28,64,.4)}
  .df-app.menu-open .df-scrim{display:block}
  .df-menu-toggle{display:flex}
  .df-view{padding:18px 16px 50px}
  .df-topbar{padding:10px 16px}
  .df-topbar h1{font-size:19px}
  .df-field-grid{grid-template-columns:1fr}
  .df-toolbar .df-select{flex:1}
  .df-table thead{display:none}
  .df-table,.df-table tbody,.df-table tr,.df-table td{display:block;width:100%}
  .df-table tbody tr{padding:10px 4px;border-bottom:1px solid var(--df-line)}
  .df-table tbody td{padding:4px 14px;border:0;display:flex;justify-content:space-between;gap:12px}
  .df-table tbody td::before{content:attr(data-label);font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--df-muted);font-weight:800}
  .df-table .df-cell-amt{text-align:right}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none!important;animation:none!important}
}
