/* R11.7 · Google Fonts · MUST be at top of file (CSS spec requires @import first) */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+Thai:wght@400;500;600;700&display=swap');

/* ============================================================
 * PKKT Atlas · Global Design System · R11.7
 * Apply by adding class="df-app" on <body>
 *
 * Research baseline (8 world-class systems):
 *   · Stripe Dashboard      → sectioned forms · status pills
 *   · Linear (linear.app)   → keyboard-first · sticky footers
 *   · Notion                → side-rail previews · empty states
 *   · Vercel / Geist UI     → typography ramp · clean tables
 *   · Atlassian (Jira)      → tabbed filter headers
 *   · Material 3 (Google)   → motion + elevation tokens
 *   · Polaris (Shopify)     → form-as-document model
 *   · IBM Carbon            → accessibility + token discipline
 *
 * PKKT distinctives (NOT borrowed):
 *   · Primary       #5B6CFF (our brand purple-blue · per INSTRUCTIONS.md)
 *   · Mint accent   #06D6A0 (our brand · success/payments)
 *   · Amber warn    #FFB800 (our brand · alerts)
 *   · Magenta AI    #EC4899 (our brand for AI suggestion cues)
 *   · Typography    Inter + IBM Plex Sans Thai (Thai-first)
 *   · Anomaly badge inline (no competitor has this)
 *   · AI ghost text in fields (no competitor has this)
 *
 * Layers:
 *   1. Tokens          (CSS variables · always available)
 *   2. Global uplift   (typography · spacing · only inside .df-app)
 *   3. Components      (.df-* classes · scoped · always available)
 *   4. Utility classes (margins · flex · grid · spacing helpers)
 *   5. Print           (sticky bars hidden · ink colors)
 * ============================================================ */

/* ───────── 1 · TOKENS ─────────────────────────────────────── */
:root {
  /* color · PKKT brand · per INSTRUCTIONS.md */
  --df-primary:    #5B6CFF;        /* PKKT purple-blue (ours) */
  --df-primary-dk: #4254E5;
  --df-primary-bg: #EEF1FF;
  --df-accent:     #06D6A0;        /* PKKT mint (ours · per brand palette) */
  --df-accent-dk:  #05B888;
  --df-accent-bg:  #D1FAEC;
  --df-magenta:    #EC4899;        /* PKKT AI cue (ours · distinct purpose) */
  --df-magenta-bg: #FCE7F3;

  --df-success:    #06D6A0;        /* aliased to mint accent */
  --df-success-bg: #D1FAEC;
  --df-warning:    #FFB800;        /* PKKT amber (ours · brand) */
  --df-warning-bg: #FFF4D6;
  --df-danger:     #EF4444;
  --df-danger-bg:  #FEE2E2;
  --df-info:       #0EA5E9;
  --df-info-bg:    #E0F2FE;

  --df-surface:    #FFFFFF;
  --df-bg:         #F8FAFC;
  --df-bg-2:       #F1F5F9;
  --df-border:     #E2E8F0;
  --df-border-2:   #CBD5E1;
  --df-text:       #0F172A;
  --df-text-2:     #475569;
  --df-text-3:     #94A3B8;

  /* radius */
  --df-radius-sm: 6px;
  --df-radius:    10px;
  --df-radius-lg: 14px;
  --df-radius-xl: 20px;

  /* shadow */
  --df-shadow-1: 0 1px 2px rgba(15,23,42,.06);
  --df-shadow-2: 0 4px 12px rgba(15,23,42,.08);
  --df-shadow-3: 0 12px 32px rgba(15,23,42,.12);

  /* spacing */
  --df-gutter:    24px;
  --df-gutter-lg: 32px;

  /* type · R11.7 Typography (Inter + Noto Sans Thai · loaded via @import at top) */
  --df-font:      'Inter', 'Noto Sans Thai', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --df-font-mono: 'JetBrains Mono', 'Roboto Mono', ui-monospace, 'SF Mono', monospace;

  /* Type scale (rem-based · 1rem = 16px) */
  --df-text-xs:   0.75rem;     /* 12px · tiny meta · pill counts */
  --df-text-sm:   0.875rem;    /* 14px · table cells · captions */
  --df-text-base: 1rem;        /* 16px · body default (was 14px) */
  --df-text-md:   1rem;        /* 16px · buttons + inputs */
  --df-text-nav:  0.9375rem;   /* 15px · top-nav · readable but not heavy */
  --df-text-lg:   1.125rem;    /* 18px */
  --df-text-xl:   1.375rem;    /* 22px */
  --df-text-2xl:  1.75rem;     /* 28px */

  /* Line-height */
  --df-leading-tight:  1.25;
  --df-leading-normal: 1.5;    /* body default (was 1.55) · denser whitespace · still breathable */
  --df-leading-loose:  1.75;

  /* Weight */
  --df-weight-normal:   400;
  --df-weight-medium:   500;
  --df-weight-semibold: 600;
  --df-weight-bold:     700;

  /* Control heights · ≥40px touch target */
  --df-control-h-sm:  32px;
  --df-control-h:     40px;    /* default · buttons + inputs */
  --df-control-h-lg:  48px;

  /* motion */
  --df-anim:    .15s cubic-bezier(.4,0,.2,1);
  --df-anim-lg: .25s cubic-bezier(.4,0,.2,1);
}

/* ───────── 2 · GLOBAL UPLIFT (R11.7 · enforced everywhere) ─────────── */
/* R11.7 · BULLETPROOF · ครอบทุก element ที่อาจตกหล่น */
html, body,
body.df-app,
.df-app,
input, button, select, textarea {
  font-family: var(--df-font) !important;
  font-size: 15px;
  line-height: 1.6;
  color: var(--df-text);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

body.df-app {
  font-feature-settings: 'cv11', 'ss03';
  background: var(--df-bg);
}

body.df-app .main,
body.df-app main {
  padding: var(--df-gutter);
}
@media (min-width: 1024px) {
  body.df-app .main,
  body.df-app main {
    padding: var(--df-gutter-lg);
  }
}

body.df-app h1 { font-size: 26px; font-weight: 800; letter-spacing: -.02em; line-height: 1.25; margin: 0 0 8px; }
body.df-app h2 { font-size: 20px; font-weight: 700; letter-spacing: -.01em; line-height: 1.3;  margin: 0 0 8px; }
body.df-app h3 { font-size: 16px; font-weight: 700; line-height: 1.4;  margin: 0 0 6px; }
body.df-app p  { margin: 0 0 12px; }

body.df-app a       { color: var(--df-primary); }
body.df-app a:hover { color: var(--df-primary-dk); }

/* ───────── 3 · COMPONENTS · always-available ─────────────── */

/* === df-page (wrapper) === */
.df-page         { max-width: 1280px; margin: 0 auto; padding-bottom: 88px; }
.df-page-head    {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 16px; margin-bottom: var(--df-gutter); flex-wrap: wrap;
}
.df-page-crumb   { font-size: 13px; color: var(--df-text-2); margin-bottom: 6px; }
.df-page-crumb a { color: var(--df-text-2); text-decoration: none; }
.df-page-crumb a:hover { color: var(--df-text); }
.df-page-title   { font-size: 26px; font-weight: 800; letter-spacing: -.02em; margin: 0; }
.df-page-actions { display: flex; gap: 8px; }

/* === df-card === */
.df-card {
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius-lg);
  padding: var(--df-gutter);
  box-shadow: var(--df-shadow-1);
}
.df-card + .df-card { margin-top: 16px; }

/* === df-tabs (status tabs row) === */
.df-tabs {
  display: flex; gap: 4px; overflow-x: auto; scrollbar-width: none;
  border-bottom: 1px solid var(--df-border);
  padding: 0; margin: 0 0 var(--df-gutter); list-style: none;
}
.df-tabs::-webkit-scrollbar { display: none; }
.df-tab {
  display: flex; align-items: center; gap: 6px;
  padding: 12px 18px; font-size: 14px; font-weight: 600;
  color: var(--df-text-2); border: 0; background: transparent;
  border-bottom: 2px solid transparent; cursor: pointer; white-space: nowrap;
  transition: var(--df-anim);
  text-decoration: none;
}
.df-tab:hover { color: var(--df-text); }
.df-tab.is-active {
  color: var(--df-primary);
  border-bottom-color: var(--df-primary);
}
.df-tab .df-tab-count {
  display: inline-grid; place-items: center;
  min-width: 20px; height: 20px; padding: 0 6px;
  font-size: 11px; font-weight: 700; line-height: 1;
  background: var(--df-bg-2); color: var(--df-text-2);
  border-radius: 999px;
}
.df-tab.is-active .df-tab-count { background: var(--df-primary-bg); color: var(--df-primary); }

/* === df-table · R11.7 · forced readable size === */
.df-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius-lg);
  overflow: hidden;
  font-family: var(--df-font);
}
.df-table thead th,
.df-table th {
  text-align: left;
  padding: 12px 16px !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  color: var(--df-text-2) !important;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  background: var(--df-bg);
  border-bottom: 1px solid var(--df-border);
}
.df-table tbody td,
.df-table td {
  padding: 16px !important;
  font-size: 15px !important;
  color: var(--df-text) !important;
  border-bottom: 1px solid var(--df-border);
  vertical-align: middle;
}
.df-table tbody tr:last-child td { border-bottom: 0; }
.df-table tbody tr:hover { background: var(--df-bg); }
.df-table .df-mono { font-family: var(--df-font-mono); font-size: 13px; }
.df-table .df-num  { text-align: right; font-variant-numeric: tabular-nums; }

/* === df-statuspill === */
.df-pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 10px; font-size: 12px; font-weight: 600;
  border-radius: 999px;
  background: var(--df-bg-2); color: var(--df-text-2);
  white-space: nowrap;
}
.df-pill::before {
  content: ''; display: inline-block;
  width: 6px; height: 6px; border-radius: 50%; background: currentColor;
}
.df-pill--success { background: var(--df-success-bg); color: var(--df-success); }
.df-pill--warning { background: var(--df-warning-bg); color: #B45309; }
.df-pill--danger  { background: var(--df-danger-bg);  color: #B91C1C; }
.df-pill--info    { background: var(--df-info-bg);    color: #0369A1; }
.df-pill--primary { background: var(--df-primary-bg); color: var(--df-primary); }
.df-pill--accent  { background: var(--df-accent-bg);  color: var(--df-accent); }
.df-pill--ai      { background: var(--df-magenta-bg); color: var(--df-magenta); }

/* === df-avatar (activity column) === */
.df-avatar {
  display: inline-grid; place-items: center;
  width: 32px; height: 32px; border-radius: 50%;
  background: var(--df-accent); color: #fff;
  font-size: 13px; font-weight: 700;
}

/* === df-form-section (Accordion / sectioned form) === */
.df-form-section {
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius-lg);
  margin-bottom: 16px;
  overflow: hidden;
}
.df-form-section-head {
  display: flex; align-items: center; gap: 12px;
  padding: 18px 20px; cursor: pointer; user-select: none;
  background: var(--df-surface);
}
.df-form-section-check {
  display: inline-grid; place-items: center;
  width: 28px; height: 28px; border-radius: 50%;
  border: 2px solid var(--df-border-2); color: transparent;
  font-size: 14px; font-weight: 700;
  transition: var(--df-anim);
}
.df-form-section.is-valid .df-form-section-check {
  background: var(--df-accent); border-color: var(--df-accent); color: #fff;
}
.df-form-section.is-valid .df-form-section-check::after { content: '✓'; }
.df-form-section-title { font-size: 16px; font-weight: 700; flex: 1; }
.df-form-section-chev  { color: var(--df-text-3); transition: transform var(--df-anim); }
.df-form-section.is-open .df-form-section-chev { transform: rotate(180deg); }
.df-form-section-body  { padding: 0 20px 20px; display: none; }
.df-form-section.is-open .df-form-section-body { display: block; }

/* === df-field (input + label + help) === */
.df-field { margin-bottom: 16px; display: flex; flex-direction: column; gap: 6px; }
.df-field-label {
  display: flex; align-items: center; gap: 4px;
  font-size: 13px; font-weight: 600; color: var(--df-text-2);
}
.df-field-label .df-req { color: var(--df-danger); }
.df-field-help {
  display: inline-grid; place-items: center;
  width: 16px; height: 16px; border-radius: 50%;
  background: var(--df-bg-2); color: var(--df-text-3);
  font-size: 11px; font-weight: 700; cursor: help;
  position: relative;
}
.df-field-help:hover::after {
  content: attr(data-help);
  position: absolute; left: 50%; bottom: calc(100% + 8px);
  transform: translateX(-50%);
  padding: 8px 12px; min-width: 200px; max-width: 280px;
  background: var(--df-text); color: #fff; font-size: 12px; font-weight: 400;
  line-height: 1.4; border-radius: 8px; white-space: normal;
  z-index: 100; box-shadow: var(--df-shadow-2);
  pointer-events: none;
}
.df-field-help:hover::before {
  content: ''; position: absolute; left: 50%; bottom: 100%;
  transform: translateX(-50%);
  border: 5px solid transparent; border-top-color: var(--df-text);
  z-index: 100;
}
.df-input, .df-select, .df-textarea {
  width: 100%; padding: 10px 14px;
  font-family: inherit; font-size: 14px; color: var(--df-text);
  background: var(--df-surface);
  border: 1px solid var(--df-border-2);
  border-radius: var(--df-radius);
  transition: var(--df-anim);
  box-sizing: border-box;
}
.df-input:focus, .df-select:focus, .df-textarea:focus {
  outline: none;
  border-color: var(--df-primary);
  box-shadow: 0 0 0 3px var(--df-primary-bg);
}
.df-textarea { resize: vertical; min-height: 80px; }
.df-field-error { color: var(--df-danger); font-size: 12px; }
.df-field.has-error .df-input,
.df-field.has-error .df-select,
.df-field.has-error .df-textarea {
  border-color: var(--df-danger);
}

/* === df-btn · R11.7 · 40px min · 15px (body match) · touch-friendly === */
.df-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 40px;
  padding: 9px 18px;
  font-family: var(--df-font);
  font-size: 15px;
  font-weight: 600;
  line-height: 1.25;
  border: 1px solid transparent; border-radius: var(--df-radius);
  cursor: pointer; text-decoration: none;
  transition: var(--df-anim);
  white-space: nowrap;
}
.df-btn--primary {
  background: var(--df-primary); color: #fff; border-color: var(--df-primary);
}
.df-btn--primary:hover { background: var(--df-primary-dk); border-color: var(--df-primary-dk); color: #fff; }
.df-btn--accent {
  background: var(--df-accent); color: #fff; border-color: var(--df-accent);
}
.df-btn--accent:hover { filter: brightness(.92); color: #fff; }
.df-btn--outline {
  background: var(--df-surface); color: var(--df-text); border-color: var(--df-border-2);
}
.df-btn--outline:hover { background: var(--df-bg); color: var(--df-text); }
.df-btn--ghost {
  background: transparent; color: var(--df-text-2);
}
.df-btn--ghost:hover { background: var(--df-bg-2); color: var(--df-text); }
.df-btn--danger {
  background: var(--df-danger); color: #fff; border-color: var(--df-danger);
}
.df-btn--sm { min-height: 32px; padding: 6px 12px; font-size: 13px; }
.df-btn--lg { min-height: 48px; padding: 12px 22px; font-size: 17px; }
.df-btn[disabled], .df-btn.is-disabled { opacity: .5; cursor: not-allowed; pointer-events: none; }

/* === df-stickybar (bottom action bar) === R11.5e · fixed-viewport · full width ===
   was: position:sticky;bottom:0 + negative margins (looked detached & misaligned inside grid)
   now: position:fixed;left:0;right:0 spans the viewport · always glued to bottom · z-index above content
   Forms that include this bar should add bottom padding via .pv-bottom-spacer so the last
   field isn't hidden under it.
 */
.df-stickybar {
  position: fixed; bottom: 0; left: 0; right: 0; z-index: 50;
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; padding: 12px max(var(--df-gutter), 5vw);
  background: var(--df-surface);
  border-top: 1px solid var(--df-border);
  box-shadow: 0 -6px 20px rgba(15,23,42,.08);
  margin: 0;
}
.df-stickybar-info  { font-size: 13px; color: var(--df-text-2); }
.df-stickybar-actions { display: flex; gap: 8px; }

/* === df-empty (empty state) === */
.df-empty {
  display: flex; flex-direction: column; align-items: center; gap: 12px;
  padding: 48px 24px; text-align: center;
  background: var(--df-surface);
  border: 1px dashed var(--df-border-2);
  border-radius: var(--df-radius-lg);
  color: var(--df-text-2);
}
.df-empty-icon { font-size: 48px; line-height: 1; opacity: .6; }
.df-empty-title { font-size: 16px; font-weight: 700; color: var(--df-text); margin: 0; }
.df-empty-desc  { font-size: 13px; max-width: 360px; margin: 0; }

/* === df-skeleton === */
.df-skeleton {
  display: block; background: linear-gradient(90deg, var(--df-bg-2) 0%, var(--df-bg) 50%, var(--df-bg-2) 100%);
  background-size: 200% 100%;
  animation: df-shimmer 1.2s ease-in-out infinite;
  border-radius: var(--df-radius-sm);
  height: 14px; margin-bottom: 8px;
}
@keyframes df-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }

/* === df-toast === */
.df-toast-stack {
  position: fixed; bottom: 24px; right: 24px; z-index: 9999;
  display: flex; flex-direction: column; gap: 8px;
  pointer-events: none;
}
.df-toast {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 16px;
  background: var(--df-text); color: #fff;
  border-radius: var(--df-radius);
  font-size: 13.5px; font-weight: 500;
  box-shadow: var(--df-shadow-3);
  pointer-events: auto;
  animation: df-slidein .25s ease;
}
.df-toast--success { background: var(--df-success); }
.df-toast--danger  { background: var(--df-danger); }
.df-toast--warning { background: var(--df-warning); color: #1F1B0A; }
@keyframes df-slidein { from { transform: translateX(20px); opacity: 0; } to { transform: translateX(0); opacity: 1; } }

/* === df-side-preview (right-rail · 320px) === */
.df-layout-with-preview { display: grid; grid-template-columns: 1fr 340px; gap: var(--df-gutter); }
@media (max-width: 1024px) {
  .df-layout-with-preview { grid-template-columns: 1fr; }
  .df-side-preview { position: static; }
}
.df-side-preview {
  position: sticky; top: var(--df-gutter);
  align-self: start;
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius-lg);
  padding: 18px;
  max-height: calc(100vh - 48px); overflow-y: auto;
}
.df-side-preview h4 {
  margin: 0 0 12px;
  font-size: 12px; text-transform: uppercase; letter-spacing: .06em;
  color: var(--df-text-3); font-weight: 700;
}

/* === df-search-combo (Search + dropdown) === */
.df-combo { position: relative; }
.df-combo-list {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 30;
  background: var(--df-surface); border: 1px solid var(--df-border);
  border-radius: var(--df-radius); padding: 4px;
  box-shadow: var(--df-shadow-2); max-height: 280px; overflow-y: auto;
  display: none;
}
.df-combo.is-open .df-combo-list { display: block; }
.df-combo-item {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px; border-radius: var(--df-radius-sm);
  cursor: pointer; font-size: 13.5px;
}
.df-combo-item:hover, .df-combo-item.is-focused { background: var(--df-bg-2); }
.df-combo-item--create { color: var(--df-primary); font-weight: 600; }

/* === df-ai-suggest (ghost text inside fields) === */
.df-input.has-ghost { position: relative; }
.df-ghost-hint {
  display: inline-flex; align-items: center; gap: 4px;
  margin-top: 4px; font-size: 11.5px; color: var(--df-magenta);
  font-style: italic;
}
.df-ghost-hint::before { content: '💡'; font-style: normal; }

/* === df-anomaly-badge (inline warning beside field) === */
.df-anomaly-badge {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 8px; font-size: 11px; font-weight: 600;
  background: var(--df-warning-bg); color: #B45309;
  border-radius: 999px;
  margin-left: 6px;
}

/* ───────── 4 · UTILITIES ─────────────────────────────────── */
.df-row    { display: flex; gap: 16px; }
.df-col    { display: flex; flex-direction: column; gap: 12px; }
.df-grow   { flex: 1; }
.df-center { display: flex; align-items: center; justify-content: center; }
.df-spacer { flex: 1; }
.df-mt-0 { margin-top: 0; } .df-mt-2 { margin-top: 8px; } .df-mt-4 { margin-top: 16px; }
.df-mt-6 { margin-top: 24px; } .df-mt-8 { margin-top: 32px; }
.df-text-2 { color: var(--df-text-2); }
.df-text-3 { color: var(--df-text-3); }
.df-text-success { color: var(--df-success); }
.df-text-danger  { color: var(--df-danger); }
.df-mono { font-family: var(--df-font-mono); }
.df-hide-print { /* visible on screen, hidden on paper */ }

/* ============================================================
 * R11.1.4 · Payment Vouchers (and any list+filter page) · Stripe-grade
 * Spacing scale strict multiples of 4 · CSS Grid for alignment
 * ============================================================ */

/* AI Inbox slim banner (Part 1) */
.df-inbox-banner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 16px;
  background: var(--df-magenta-bg);
  border: 1px solid var(--df-magenta);
  border-radius: 8px;
  margin-bottom: 24px;
}
.df-inbox-banner-left  { display: flex; align-items: center; gap: 12px; min-width: 0; }
.df-inbox-banner-icon  { font-size: 20px; line-height: 1; }
.df-inbox-banner-text  { font-size: 14px; color: var(--df-text); line-height: 1.4; }
.df-inbox-banner-text strong { color: var(--df-text); font-weight: 600; }

/* List page header row (Part 2) · tabs left · search right */
.df-list-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  border-bottom: 1px solid var(--df-border);
  padding-bottom: 12px;
  margin-bottom: 24px;
  flex-wrap: wrap;
}
.df-list-header-left  { display: flex; align-items: center; gap: 16px; flex: 1; min-width: 280px; }
.df-list-header-right { display: flex; align-items: center; gap: 8px; }

/* Advanced filter box (Part 3) */
.df-filter-box {
  background: var(--df-bg-2);
  border-radius: 8px;
  padding: 24px;
  margin-bottom: 24px;
}
.df-filter-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
}
.df-filter-grid + .df-filter-grid { margin-top: 16px; }

/* Field standard (Part 4) · 40px height · clean borders */
.df-field            { display: flex; flex-direction: column; margin-bottom: 0; min-width: 0; }
.df-field-label      { font-size: 12px; font-weight: 500; margin-bottom: 4px; color: var(--df-text-2); }
.df-field-control    { position: relative; }
.df-field input[type="text"],
.df-field input[type="search"],
.df-field input[type="date"],
.df-field input[type="number"],
.df-field input[type="email"],
.df-field select,
.df-field .df-multiselect {
  height: var(--df-control-h);              /* R11.5 · 40px */
  border: 1px solid var(--df-border);
  border-radius: 8px;
  padding: 0 14px;
  width: 100%;
  box-sizing: border-box;
  font-family: inherit;
  font-size: var(--df-text-md);             /* R11.5 · 16px */
  background: var(--df-surface);
  color: var(--df-text);
  transition: border-color .15s, box-shadow .15s;
}
.df-field input:focus,
.df-field select:focus {
  outline: none;
  border-color: var(--df-primary);
  box-shadow: 0 0 0 3px var(--df-primary-bg);
}

/* Multi-select trigger · same height as inputs */
.df-multiselect {
  display: flex;
  align-items: center;
  justify-content: space-between;
  cursor: pointer;
  color: var(--df-text-2);
  user-select: none;
}
.df-multiselect::after { content: '▾'; color: var(--df-text-3); font-size: 10px; }
.df-multiselect-panel {
  display: none;
  position: absolute;
  top: calc(100% + 4px);
  left: 0; right: 0;
  z-index: 30;
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: 6px;
  padding: 8px;
  max-height: 240px;
  overflow-y: auto;
  box-shadow: var(--df-shadow-2);
}
.df-field-control.is-open .df-multiselect-panel { display: block; }

/* Inline pair (date-from/to · amount min/max) inside one .df-field */
.df-field-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }

/* Filter actions footer (Part 5) */
.df-filter-actions-row {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 16px;
  margin-top: 24px;
  padding-top: 24px;
  border-top: 1px solid var(--df-border);
}
.df-filter-checks { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; }
.df-filter-checks label {
  display: inline-flex;
  gap: 6px;
  align-items: center;
  font-size: 13.5px;
  color: var(--df-text-2);
  cursor: pointer;
  user-select: none;
}
.df-filter-checks input[type="checkbox"] { width: 16px; height: 16px; cursor: pointer; }
.df-filter-cta { display: flex; gap: 12px; align-items: flex-end; }
.df-filter-cta .df-field { min-width: 200px; }

/* Responsive · rule 43.1 (375 · 768 · ≥1280) */
@media (max-width: 1024px) {
  .df-filter-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 768px) {
  .df-list-header { flex-direction: column; align-items: stretch; }
  .df-list-header-right { width: 100%; }
  .df-filter-actions-row { flex-direction: column; align-items: stretch; }
  .df-filter-cta { flex-wrap: wrap; }
  .df-filter-cta .df-field { flex: 1; min-width: 0; }
}
@media (max-width: 480px) {
  .df-filter-grid { grid-template-columns: 1fr; }
  .df-filter-box  { padding: 16px; }
  .df-inbox-banner { flex-direction: column; align-items: stretch; gap: 8px; }
}

/* ============================================================
 * R11.1.5 · Refined UX · tabs + kbd + alert + saved-view + date-range
 * ============================================================ */

/* Tab strip · pill button style · ทุกแท็บเห็นชัดเป็นปุ่ม (R11.1.6) */
.df-tab-strip {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 4px;
  overflow-x: auto;
  scrollbar-width: none;
  background: var(--df-bg-2);
  border: 1px solid var(--df-border);
  border-radius: 10px;
  flex: 1;
  min-width: 0;
}
.df-tab-strip::-webkit-scrollbar { display: none; }

.df-tab-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  font-size: 13.5px;
  font-weight: 500;
  color: var(--df-text-2);
  background: transparent;
  border: 1px solid transparent;
  border-radius: 7px;
  cursor: pointer;
  white-space: nowrap;
  font-family: inherit;
  transition: background .12s, color .12s, border-color .12s, box-shadow .12s;
  text-decoration: none;
}
.df-tab-item:hover {
  background: var(--df-surface);
  color: var(--df-text);
}
.df-tab-item.active {
  background: var(--df-surface);
  color: var(--df-primary);
  font-weight: 600;
  border-color: var(--df-border);
  box-shadow: 0 1px 2px rgba(15,23,42,.06);
}
.df-tab-item--warn { color: var(--df-danger); }
.df-tab-item--warn:hover { color: var(--df-danger); }
.df-tab-item--warn.active { color: var(--df-danger); }

.df-tab-item .df-badge {
  display: inline-grid;
  place-items: center;
  min-width: 20px;
  height: 18px;
  padding: 0 6px;
  font-size: 11px;
  font-weight: 600;
  background: var(--df-bg-2);
  color: var(--df-text-3);
  border-radius: 999px;
}
.df-tab-item:hover .df-badge { background: var(--df-bg); }
.df-tab-item.active .df-badge { background: var(--df-primary-bg); color: var(--df-primary); }
.df-tab-item--warn .df-badge { background: var(--df-danger-bg); color: var(--df-danger); }

/* Keyboard hint badge (⌘K · ⌃K) */
.df-kbd {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 2px 6px;
  font-family: var(--df-font-mono);
  font-size: 11px;
  color: var(--df-text-3);
  background: var(--df-bg-2);
  border: 1px solid var(--df-border);
  border-radius: 4px;
  font-weight: 500;
  line-height: 1;
}

/* Search field with embedded icon + ⌘K hint */
.df-search-field {
  position: relative;
  flex: 1;
  min-width: 220px;
  max-width: 360px;
}
.df-search-field > input {
  width: 100%;
  height: 40px;
  padding: 0 56px 0 36px;
  border: 1px solid var(--df-border);
  border-radius: 6px;
  font-size: 14px;
  font-family: inherit;
  color: var(--df-text);
  background-color: var(--df-surface);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394A3B8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m21 21-4.35-4.35'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: 12px center;
  transition: border-color .15s, box-shadow .15s;
  box-sizing: border-box;
}
.df-search-field > input:focus {
  outline: none;
  border-color: var(--df-primary);
  box-shadow: 0 0 0 3px var(--df-primary-bg);
}
.df-search-field > .df-kbd {
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  pointer-events: none;
}

/* Slim alert (Linear/Notion style) */
.df-alert {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 16px;
  border-radius: 8px;
  border: 1px solid var(--df-border);
  background: var(--df-surface);
  margin-bottom: 16px;
  font-size: 14px;
}
.df-alert-content { display: flex; align-items: center; gap: 12px; min-width: 0; color: var(--df-text); }
.df-alert-icon    { font-size: 18px; line-height: 1; flex-shrink: 0; }
.df-alert-text    { line-height: 1.4; }
.df-alert-text strong { font-weight: 600; }
.df-alert--magenta { background: var(--df-magenta-bg); border-color: var(--df-magenta); }
.df-alert--success { background: var(--df-accent-bg);  border-color: var(--df-accent); }
.df-alert--warning { background: var(--df-warning-bg); border-color: var(--df-warning); }
.df-alert--danger  { background: var(--df-danger-bg);  border-color: var(--df-danger); }

/* Saved view pill */
.df-saved-view {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  font-size: 13px;
  color: var(--df-text-2);
  background: var(--df-bg-2);
  border-radius: 999px;
  border: 1px solid var(--df-border);
  cursor: pointer;
  user-select: none;
  transition: background .15s, border-color .15s;
  text-decoration: none;
}
.df-saved-view:hover { background: var(--df-surface); border-color: var(--df-border-2); color: var(--df-text); }
.df-saved-view strong { color: var(--df-text); font-weight: 600; }
.df-saved-view-chevron { font-size: 10px; color: var(--df-text-3); margin-left: 2px; }

/* Date range group · visually joined */
.df-date-range {
  display: flex;
  align-items: center;
  gap: 8px;
}
.df-date-range > input { flex: 1; min-width: 0; }
.df-date-range-sep { font-size: 13px; color: var(--df-text-3); flex-shrink: 0; padding: 0 2px; }

/* Filter grid · auto-fit (replaces fixed 4-col for smarter responsive) */
.df-filter-grid--auto {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px;
}

/* ============================================================
 * R11.2 · Payment Voucher refactor · pill date · pagination · icon btn
 * ============================================================ */

/* Pill group (date shortcuts) */
.df-pill-group {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
}

/* Clickable pill · button variant (date shortcuts) */
.df-pill--clickable {
  cursor: pointer;
  font-family: inherit;
  font-size: 13px;
  font-weight: 500;
  padding: 6px 14px;
  border: 1px solid var(--df-border);
  border-radius: 999px;
  background: var(--df-surface);
  color: var(--df-text-2);
  transition: background .15s, border-color .15s, color .15s, box-shadow .15s;
  user-select: none;
  line-height: 1.4;
}
.df-pill--clickable:hover {
  background: var(--df-bg);
  border-color: var(--df-border-2);
  color: var(--df-text);
}
.df-pill--clickable.is-active {
  background: var(--df-primary-bg);
  border-color: var(--df-primary);
  color: var(--df-primary-dk);
  font-weight: 600;
  box-shadow: 0 0 0 2px rgba(91, 108, 255, .12);
}

/* Custom date range (shown when "กำหนดเอง" pill is active) */
.df-date-range-custom {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
}

/* Toggle Filter button · active state when filter box is open */
#toggleFilterBtn.is-active {
  background: var(--df-primary-bg);
  border-color: var(--df-primary);
  color: var(--df-primary-dk);
}

/* Pagination bar · 3-col flex (left · center · right) */
.df-pagination-bar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  padding: 14px 16px;
  margin-top: 16px;
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius);
  font-size: 13px;
  color: var(--df-text-2);
  flex-wrap: wrap;
}
.df-pg-left   { flex: 1 1 200px; }
.df-pg-center { flex: 0 0 auto; }
.df-pg-right  {
  flex: 1 1 200px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
}
.df-pg-left strong { color: var(--df-text); font-weight: 600; }

.df-page-num {
  display: inline-grid;
  place-items: center;
  min-width: 32px;
  height: 32px;
  padding: 0 8px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  background: var(--df-primary-bg);
  color: var(--df-primary-dk);
  border-radius: 6px;
}
.df-page-sep { color: var(--df-text-3); }

/* Square icon button (←  →) */
.df-btn--icon {
  display: inline-grid;
  place-items: center;
  width: 32px;
  height: 32px;
  padding: 0;
  font-size: 14px;
  font-weight: 600;
  background: var(--df-surface);
  color: var(--df-text-2);
  border: 1px solid var(--df-border);
  border-radius: 6px;
  cursor: pointer;
  font-family: inherit;
  transition: background .12s, border-color .12s, color .12s;
}
.df-btn--icon:hover:not(:disabled) {
  background: var(--df-bg);
  border-color: var(--df-border-2);
  color: var(--df-text);
}
.df-btn--icon:disabled {
  opacity: .4;
  cursor: not-allowed;
}

/* Compact input · used in pagination dropdown */
.df-input {
  height: 40px;
  padding: 0 12px;
  border: 1px solid var(--df-border);
  border-radius: 6px;
  background: var(--df-surface);
  color: var(--df-text);
  font-family: var(--df-font);
  font-size: 15px;
  box-sizing: border-box;
  transition: border-color .15s, box-shadow .15s;
}
.df-input:focus {
  outline: none;
  border-color: var(--df-primary);
  box-shadow: 0 0 0 3px var(--df-primary-bg);
}
.df-input--sm {
  height: 32px;
  font-size: 13px;
  padding: 0 10px;
}

/* Mobile · stack pagination */
@media (max-width: 640px) {
  .df-pagination-bar { flex-direction: column; align-items: stretch; }
  .df-pg-left, .df-pg-center, .df-pg-right { justify-content: center; text-align: center; }
}

/* ============================================================
 * R11.4 · Modal overlay + AI magic box + anomaly badge
 * ============================================================ */

.df-modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, .55);
  z-index: 1000;
  display: flex;                /* shown via inline style:flex */
  align-items: center;
  justify-content: center;
  padding: 16px;
  backdrop-filter: blur(2px);
}

.df-modal {
  background: var(--df-surface);
  border-radius: var(--df-radius-lg);
  box-shadow: var(--df-shadow-3);
  width: 100%;
  max-width: 520px;
  display: flex;
  flex-direction: column;
  max-height: 90vh;
  overflow: hidden;
}
.df-modal--md { max-width: 600px; }
.df-modal--lg { max-width: 800px; }

.df-modal-head {
  padding: 16px 20px;
  border-bottom: 1px solid var(--df-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.df-modal-body {
  padding: 16px 20px;
  overflow-y: auto;
  flex: 1;
}
.df-modal-foot {
  padding: 12px 20px;
  border-top: 1px solid var(--df-border);
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  background: var(--df-bg);
}
.df-modal-close {
  background: transparent;
  border: 0;
  font-size: 22px;
  line-height: 1;
  color: var(--df-text-3);
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 6px;
}
.df-modal-close:hover {
  color: var(--df-text);
  background: var(--df-bg-2);
}

/* Anomaly badge (inline in row) */
.df-anomaly {
  display: inline-grid;
  place-items: center;
  width: 22px;
  height: 22px;
  font-size: 12px;
  line-height: 1;
  border-radius: 50%;
  cursor: help;
  margin-left: 4px;
  vertical-align: middle;
  border: 1px solid transparent;
}
.df-anomaly--low {
  background: var(--df-info-bg);
  color: #075985;
  border-color: var(--df-info);
}
.df-anomaly--mid {
  background: var(--df-warning-bg);
  color: #92400E;
  border-color: var(--df-warning);
}
.df-anomaly--high {
  background: var(--df-danger-bg);
  color: #991B1B;
  border-color: var(--df-danger);
  animation: df-anomaly-pulse 2s ease-in-out infinite;
}
@keyframes df-anomaly-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, .25); }
  50%      { box-shadow: 0 0 0 4px rgba(239, 68, 68, 0); }
}

/* ============================================================
 * R11.5 · Top Navigation Uplift · Stripe/Linear/Vercel-grade
 *   · gap 24px between top-level menus
 *   · 15px medium weight nav text · ample padding
 *   · hover: bg-2 rounded · active: 2px primary underline
 *   · dropdown: white · radius 12 · soft shadow · flat list
 * Scoped to body.df-app to override existing pkkt-professional-v2.css
 * ============================================================ */

body.df-app .tn-bar {
  background: var(--df-surface);
  border-bottom: 1px solid var(--df-border);
  box-shadow: 0 1px 2px rgba(15, 23, 42, .04);
}
body.df-app .tn-row-nav {
  padding: 0 var(--df-gutter) !important;
  min-height: 56px;
}

/* Top-level items · 24px gap · readable size */
body.df-app .tn-items {
  display: flex !important;
  gap: 24px !important;
  align-items: stretch;
}

body.df-app .tn-item {
  position: relative;
}

/* Top-level link/trigger · 15px medium · pill hover · underline active */
body.df-app .tn-items > .tn-item > .tn-link,
body.df-app .tn-items > .tn-item > .tn-trigger,
body.df-app .tn-items > .tn-item > a {
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 10px 14px !important;
  margin: 8px 0 !important;
  font-family: inherit !important;
  font-size: var(--df-text-nav) !important;       /* 15px */
  font-weight: var(--df-weight-medium) !important; /* 500 */
  line-height: 1.3;
  color: var(--df-text-2) !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 8px !important;
  cursor: pointer;
  text-decoration: none !important;
  white-space: nowrap;
  transition: background .15s, color .15s;
  position: relative;
}

/* Hover · soft gray pill (df-bg-2) hugs the text */
body.df-app .tn-items > .tn-item > .tn-link:hover,
body.df-app .tn-items > .tn-item > .tn-trigger:hover,
body.df-app .tn-items > .tn-item > a:hover {
  background: var(--df-bg-2) !important;
  color: var(--df-text) !important;
}

/* Active · 2px primary underline + darker text · NO border on hover transient */
body.df-app .tn-items > .tn-item.active > .tn-link,
body.df-app .tn-items > .tn-item.active > .tn-trigger,
body.df-app .tn-items > .tn-item.active > a {
  color: var(--df-text) !important;
  font-weight: var(--df-weight-semibold) !important;
  background: transparent !important;
}
body.df-app .tn-items > .tn-item.active > .tn-link::after,
body.df-app .tn-items > .tn-item.active > .tn-trigger::after,
body.df-app .tn-items > .tn-item.active > a::after {
  content: '';
  position: absolute;
  left: 14px;
  right: 14px;
  bottom: -8px;
  height: 2px;
  background: var(--df-primary);
  border-radius: 2px;
}

/* Top-level emoji · slightly smaller for visual balance */
body.df-app .tn-items > .tn-item > .tn-link .tn-emoji,
body.df-app .tn-items > .tn-item > .tn-trigger .tn-emoji,
body.df-app .tn-items > .tn-item > a .tn-emoji {
  font-size: 16px !important;
}

/* Top-level chevron · subtle · rotates on hover */
body.df-app .tn-items > .tn-item > .tn-trigger .tn-chev {
  font-size: 10px !important;
  opacity: .5;
  margin-left: 2px;
  transition: transform .15s;
}
body.df-app .tn-items > .tn-item:hover > .tn-trigger .tn-chev {
  transform: rotate(180deg);
  opacity: .8;
}

/* ============================================================
 * Dropdown panel · Stripe/Vercel-style
 *   · white bg · 12px radius · soft shadow · 12px padding
 *   · flat list (no nested chevrons) · section headings group items
 * ============================================================ */
body.df-app .tn-dropdown {
  position: absolute !important;
  top: 100% !important;
  left: 0 !important;
  margin-top: 6px !important;
  min-width: 300px !important;
  background: var(--df-surface) !important;
  border: 1px solid var(--df-border) !important;
  border-radius: 12px !important;
  box-shadow: 0 10px 40px -10px rgba(15, 23, 42, .15),
              0 4px 12px -4px rgba(15, 23, 42, .08) !important;
  padding: 10px !important;
  z-index: 200;
  display: none;
  animation: df-tn-fadein .12s ease-out;
}
@keyframes df-tn-fadein {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}
body.df-app .tn-item:hover > .tn-dropdown,
body.df-app .tn-item.open > .tn-dropdown,
body.df-app .tn-trigger[aria-expanded="true"] + .tn-dropdown {
  display: block;
}

/* Hover-bridge · ป้องกัน dropdown ปิดเร็วเกินไป */
body.df-app .tn-dropdown::before {
  content: '';
  position: absolute;
  top: -6px; left: 0; right: 0;
  height: 6px;
}

/* Items inside dropdown · flat list · NO nested chevrons */
body.df-app .tn-dropdown .tn-link,
body.df-app .tn-dropdown .tn-trigger,
body.df-app .tn-dropdown .tn-sub-item > .tn-link,
body.df-app .tn-dropdown .tn-sub-item > .tn-trigger,
body.df-app .tn-dropdown a {
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  width: 100%;
  padding: 9px 12px !important;
  font-size: var(--df-text-md) !important;       /* 16px */
  font-weight: var(--df-weight-medium) !important;
  line-height: 1.3;
  color: var(--df-text) !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 8px !important;
  text-decoration: none !important;
  cursor: pointer;
  transition: background .12s, color .12s;
  text-align: left;
  justify-content: flex-start !important;
  margin: 1px 0 !important;
  white-space: normal;
}

body.df-app .tn-dropdown .tn-link:hover,
body.df-app .tn-dropdown .tn-trigger:hover,
body.df-app .tn-dropdown .tn-sub-item > .tn-link:hover,
body.df-app .tn-dropdown .tn-sub-item > .tn-trigger:hover,
body.df-app .tn-dropdown a:hover {
  background: var(--df-bg-2) !important;
  color: var(--df-text) !important;
}

/* Active item in dropdown */
body.df-app .tn-dropdown .tn-link.active,
body.df-app .tn-dropdown .tn-item.active > .tn-link,
body.df-app .tn-dropdown a.active {
  background: var(--df-primary-bg) !important;
  color: var(--df-primary-dk) !important;
  font-weight: var(--df-weight-semibold) !important;
}

/* Emoji inside dropdown */
body.df-app .tn-dropdown .tn-emoji {
  font-size: 16px !important;
  width: 20px;
  text-align: center;
  flex-shrink: 0;
  opacity: .9;
}

/* Section headings inside dropdown (groups flat items) */
body.df-app .tn-dropdown .tn-section {
  padding: 12px 12px 4px !important;
  font-size: 11px !important;
  font-weight: var(--df-weight-bold) !important;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--df-text-3) !important;
  margin-top: 4px;
}
body.df-app .tn-dropdown .tn-section:first-child {
  padding-top: 4px !important;
  margin-top: 0;
}

/* Divider */
body.df-app .tn-dropdown .tn-divider {
  height: 1px;
  background: var(--df-border);
  margin: 6px 4px;
}

/* Hide chevron on dropdown sub-items (flat list per spec) */
body.df-app .tn-dropdown .tn-sub-item .tn-trigger::after,
body.df-app .tn-dropdown .tn-trigger > .tn-chev {
  display: none !important;
}

/* AI badge (magenta) for special items like Cash Flow AI */
body.df-app .tn-badge--ai {
  background: var(--df-magenta) !important;
  color: #fff !important;
  font-size: 10px !important;
  font-weight: var(--df-weight-bold) !important;
  padding: 2px 6px !important;
  border-radius: 4px !important;
  letter-spacing: 0.04em;
  margin-left: auto;
}

/* ============================================================
 * R11.6 · CLEAN DROPDOWN OVERRIDE + RESPONSIVE DRAWER
 *   · Section heading: uppercase 12px bold gray · NO divider line
 *   · Item: 15px medium · 40px min · hover bg-2 radius 6
 *   · No emoji bullets (nav_config.php already cleans this · CSS confirms)
 *   · Side-icon items (ตั้งค่า · ออกจากกิจการ) render as 40px icon buttons
 *   · @media ≤1024px: hide tn-items, show hamburger + drawer
 * ============================================================ */

/* Top-level pill polish (R11.6 · slight refinement of R11.5) */
body.df-app .tn-items {
  gap: 4px !important;
}
body.df-app .tn-items > .tn-item > .tn-link,
body.df-app .tn-items > .tn-item > .tn-trigger,
body.df-app .tn-items > .tn-item > a {
  font-size: 15px !important;
  font-weight: 500 !important;
  min-height: 40px !important;
  padding: 8px 14px !important;
  margin: 6px 0 !important;
}

/* Dropdown items · clean 15px · 40px min · 6px radius hover */
body.df-app .tn-dropdown .tn-link,
body.df-app .tn-dropdown .tn-trigger,
body.df-app .tn-dropdown a {
  font-size: 15px !important;
  font-weight: 500 !important;
  min-height: 40px !important;
  padding: 8px 12px !important;
  border-radius: 6px !important;
}
body.df-app .tn-dropdown .tn-link:hover,
body.df-app .tn-dropdown .tn-trigger:hover,
body.df-app .tn-dropdown a:hover {
  background: var(--df-bg-2) !important;
  color: var(--df-text) !important;
}

/* Section heading inside dropdown · uppercase tiny gray · NO divider */
body.df-app .tn-dropdown .tn-section {
  font-size: 12px !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.06em !important;
  color: var(--df-text-3) !important;
  padding: 14px 12px 4px !important;
  margin: 0 !important;
  background: transparent !important;
  border: 0 !important;       /* no divider line under heading */
}
body.df-app .tn-dropdown .tn-section:first-child {
  padding-top: 4px !important;
}
/* Hide redundant divider lines · sections do the visual grouping */
body.df-app .tn-dropdown .tn-divider {
  display: none !important;
}
/* Hide emoji from dropdown items (clean text-only per R11.6 spec) */
body.df-app .tn-dropdown .tn-emoji {
  display: none !important;
}

/* Right-aligned dropdown (for settings icon on the right side of bar) */
body.df-app .tn-dropdown--right {
  left: auto !important;
  right: 0 !important;
}

/* Side-icon (40x40 round button · settings + leave) */
body.df-app .tn-item.tn-item--side {
  position: relative;
  display: inline-flex;
  align-items: center;
}

/* Hamburger button · hidden on desktop · shown ≤1024px */
.tn-hamburger {
  display: none;
  width: 40px;
  height: 40px;
  border: 1px solid var(--df-border);
  background: var(--df-surface);
  border-radius: 8px;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  cursor: pointer;
  padding: 0;
  margin-right: 12px;
}
.tn-hamburger span {
  width: 18px;
  height: 2px;
  background: var(--df-text);
  border-radius: 2px;
  transition: transform .15s, opacity .15s;
}

/* ============================================================
 * Mobile drawer · slides from left · accordion inside
 * ============================================================ */
.tn-drawer-overlay {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, .5);
  opacity: 0;
  visibility: hidden;
  transition: opacity .2s, visibility .2s;
  z-index: 998;
}
.tn-drawer-overlay.is-open {
  opacity: 1;
  visibility: visible;
}
.tn-drawer {
  position: fixed;
  top: 0;
  left: 0;
  width: 320px;
  max-width: 85vw;
  height: 100vh;
  background: var(--df-surface);
  box-shadow: 4px 0 24px rgba(15, 23, 42, .15);
  transform: translateX(-100%);
  transition: transform .25s cubic-bezier(.4, 0, .2, 1);
  z-index: 999;
  display: flex;
  flex-direction: column;
  font-family: var(--df-font);
}
.tn-drawer.is-open {
  transform: translateX(0);
}
.tn-drawer-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px;
  border-bottom: 1px solid var(--df-border);
  font-size: 16px;
  font-weight: 700;
  color: var(--df-text);
}
.tn-drawer-close {
  background: transparent;
  border: 0;
  font-size: 28px;
  line-height: 1;
  color: var(--df-text-3);
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 6px;
}
.tn-drawer-close:hover {
  color: var(--df-text);
  background: var(--df-bg-2);
}
.tn-drawer-body {
  flex: 1;
  overflow-y: auto;
  padding: 8px 12px 24px;
}
.tn-drawer-item {
  margin: 2px 0;
}
.tn-drawer-item > a,
.tn-drawer-item details > summary {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  min-height: 40px;
  font-size: 15px;
  font-weight: 500;
  color: var(--df-text);
  border-radius: 8px;
  cursor: pointer;
  text-decoration: none;
  list-style: none;
  position: relative;
}
.tn-drawer-item details > summary::-webkit-details-marker { display: none; }
.tn-drawer-item details > summary::after {
  content: '⌄';
  margin-left: auto;
  font-size: 16px;
  color: var(--df-text-3);
  transition: transform .15s;
}
.tn-drawer-item details[open] > summary::after {
  transform: rotate(180deg);
}
.tn-drawer-item > a:hover,
.tn-drawer-item details > summary:hover {
  background: var(--df-bg-2);
}
.tn-drawer-sub {
  padding: 4px 12px 6px 28px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.tn-drawer-sub a {
  display: block;
  padding: 8px 12px;
  font-size: 14px;
  color: var(--df-text-2);
  text-decoration: none;
  border-radius: 6px;
}
.tn-drawer-sub a:hover {
  background: var(--df-bg-2);
  color: var(--df-text);
}
.tn-drawer-sub .tn-section {
  padding: 12px 12px 4px;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--df-text-3);
}
.tn-drawer-sub hr {
  display: none;       /* sections do the grouping */
}

/* Body lock when drawer open */
body.tn-drawer-open {
  overflow: hidden;
}

/* ============================================================
 * Responsive · ≤1024px hide top-level text · show hamburger
 * ============================================================ */
@media (max-width: 1024px) {
  /* Hide horizontal nav items · show hamburger */
  body.df-app .tn-row-nav .tn-items {
    display: none !important;
  }
  .tn-hamburger {
    display: flex !important;
  }
  /* Side icons (settings/leave) hidden too · they're in drawer */
  body.df-app .tn-actions .tn-item.tn-item--side {
    display: none;
  }
}

/* Desktop: hide drawer always (only used on mobile) */
@media (min-width: 1025px) {
  .tn-drawer, .tn-drawer-overlay { display: none !important; }
}

/* ============================================================
 * R11.6.1 · Hot-fix · 3 visual bugs from production screenshot
 *   1. Tab strip squeezed (no room for 8 tabs when search on same row)
 *   2. Mysterious black bar at bottom (df-bulkbar showing without selection)
 *   3. Empty-state desc text too small
 * ============================================================ */

/* Tab strip · let it take full width on narrow · search wraps below */
body.df-app .df-list-header {
  flex-wrap: wrap;
  align-items: flex-start;
}
body.df-app .df-list-header .df-tab-strip {
  flex: 1 1 100%;
  min-width: 0;
  order: 1;
}
body.df-app .df-list-header .df-list-header-right {
  flex: 1 1 100%;
  order: 2;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 8px;
}
@media (min-width: 1280px) {
  /* Wide screens: tabs + search side-by-side (original layout) */
  body.df-app .df-list-header .df-tab-strip       { flex: 1 1 auto; order: 0; }
  body.df-app .df-list-header .df-list-header-right { flex: 0 0 auto; order: 1; }
}

/* Bulkbar · defensive · only show when explicitly opted in */
.df-bulkbar:not([data-visible="1"]) {
  visibility: hidden !important;
  pointer-events: none;
}

/* R11.7 · Empty-state spec · 18px title · 14px desc · clean & readable */
.df-empty {
  font-family: var(--df-font);
  padding: 64px 24px !important;
}
.df-empty-icon  {
  font-size: 56px !important;
  line-height: 1;
}
.df-empty-title {
  font-size: 18px !important;
  font-weight: 600 !important;
  color: var(--df-text) !important;
  margin-top: 16px !important;
  margin-bottom: 8px !important;
}
.df-empty-desc  {
  font-size: 14px !important;
  color: var(--df-text-2) !important;
  line-height: 1.6 !important;
  max-width: 520px !important;
  margin: 0 auto 8px !important;
}

/* Insights banner (above list) */
.df-insights-banner {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 14px 18px;
  border-radius: var(--df-radius);
  margin-bottom: 16px;
  border: 1px solid var(--df-border);
  background: var(--df-surface);
  font-size: 13.5px;
}
.df-insights-banner--info    { background: var(--df-primary-bg); border-color: var(--df-primary); }
.df-insights-banner--warning { background: var(--df-warning-bg); border-color: var(--df-warning); }
.df-insights-banner--alert   { background: var(--df-danger-bg);  border-color: var(--df-danger); }

.df-insights-icon { font-size: 22px; flex-shrink: 0; line-height: 1; }
.df-insights-body { flex: 1; min-width: 0; }
.df-insights-headline { font-weight: 600; color: var(--df-text); margin-bottom: 6px; }
.df-insights-bullets  { margin: 0; padding-left: 18px; line-height: 1.7; color: var(--df-text-2); }
.df-insights-bullets li { margin: 0; }
.df-insights-actions { display: flex; gap: 6px; flex-shrink: 0; }

/* ───────── 5 · PRINT ──────────────────────────────────────── */
@media print {
  body.df-app { background: #fff; color: #000; }
  .df-stickybar, .df-toast-stack, .df-hide-print { display: none !important; }
  .df-card { box-shadow: none; border-color: #ccc; }
  .df-tabs { display: none; }
}

/* ═══════════════════════════════════════════════════════════════
 * R11.1.A · Voucher v2 components — Inbox · CmdK · Bulkbar
 * ═══════════════════════════════════════════════════════════════ */

/* ───── Inbox strip (horizontal scroll of AI proposals) ─────── */
.df-inbox-strip {
  display: flex; gap: 12px; overflow-x: auto; overflow-y: hidden;
  scroll-snap-type: x mandatory;
  padding: 8px 4px 16px; margin: 0 -4px;
  scrollbar-width: thin;
}
.df-inbox-strip::-webkit-scrollbar { height: 6px; }
.df-inbox-strip::-webkit-scrollbar-thumb { background: var(--df-border-2); border-radius: 999px; }
.df-inbox-strip[data-empty="1"] {
  display: flex; align-items: center; justify-content: center;
  min-height: 80px; color: var(--df-text-3); font-size: 13px;
}

/* AI proposal card */
.df-suggestion-card {
  flex: 0 0 320px;
  scroll-snap-align: start;
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius);
  padding: 12px 14px;
  position: relative;
  transition: transform var(--df-anim), box-shadow var(--df-anim);
  display: flex; flex-direction: column; gap: 6px;
}
.df-suggestion-card:hover {
  transform: translateY(-1px);
  box-shadow: var(--df-shadow-2);
}
.df-suggestion-card::before {
  content: ''; position: absolute; left: 0; top: 0; right: 0; height: 3px;
  background: var(--df-info); border-radius: var(--df-radius) var(--df-radius) 0 0;
}
.df-suggestion-card[data-conf="high"]::before { background: var(--df-success); }
.df-suggestion-card[data-conf="med"]::before  { background: var(--df-warning); }
.df-suggestion-card[data-conf="low"]::before  { background: var(--df-danger); }
.df-suggestion-card .df-sg-vendor {
  font-weight: 600; font-size: 14px; color: var(--df-text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.df-suggestion-card .df-sg-amount {
  font-family: var(--df-font-mono);
  font-size: 18px; font-weight: 600; color: var(--df-text);
}
.df-suggestion-card .df-sg-meta {
  display: flex; gap: 6px; flex-wrap: wrap; font-size: 11px;
  color: var(--df-text-2);
}
.df-suggestion-card .df-sg-actions {
  display: flex; gap: 6px; margin-top: 8px;
}
.df-suggestion-card .df-sg-actions .df-btn { flex: 1; padding: 6px 10px; font-size: 12px; }

/* Confidence badge — 3-tier color grade */
.df-confidence-badge {
  display: inline-flex; align-items: center; gap: 3px;
  padding: 2px 7px; font-size: 11px; font-weight: 700;
  border-radius: 999px; font-family: var(--df-font-mono);
}
.df-confidence-badge[data-conf="high"] { background: var(--df-success-bg); color: #166534; }
.df-confidence-badge[data-conf="med"]  { background: var(--df-warning-bg); color: #B45309; }
.df-confidence-badge[data-conf="low"]  { background: var(--df-danger-bg);  color: #991B1B; }
.df-confidence-badge::before { content: '🧠'; font-size: 10px; }

/* ───── Bulkbar (sticky bottom · slides in on selection) ─── */
.df-bulkbar {
  position: fixed; left: 50%; bottom: 24px;
  transform: translateX(-50%) translateY(120%);
  background: var(--df-text);
  color: #fff;
  padding: 10px 14px;
  border-radius: var(--df-radius-lg);
  box-shadow: var(--df-shadow-3);
  display: flex; align-items: center; gap: 14px;
  font-size: 13px;
  z-index: 60;
  transition: transform var(--df-anim-lg);
  min-width: 360px;
}
.df-bulkbar[data-visible="1"] { transform: translateX(-50%) translateY(0); }
.df-bulkbar .df-bb-count {
  font-weight: 600;
  padding: 4px 10px;
  background: rgba(255,255,255,.12);
  border-radius: 999px;
}
.df-bulkbar .df-bb-actions { display: flex; gap: 6px; margin-left: auto; }
.df-bulkbar .df-btn {
  padding: 6px 12px; font-size: 12px;
  background: transparent;
  color: #fff;
  border: 1px solid rgba(255,255,255,.25);
}
.df-bulkbar .df-btn:hover { background: rgba(255,255,255,.08); }
.df-bulkbar .df-btn--primary { background: var(--df-primary); border-color: var(--df-primary); }
.df-bulkbar .df-btn--danger  { background: var(--df-danger);  border-color: var(--df-danger); }
.df-bulkbar .df-bb-close {
  background: none; border: 0; color: rgba(255,255,255,.6);
  cursor: pointer; font-size: 18px; line-height: 1;
}

/* ───── Command Palette (Ctrl+K / ⌘K) ──────────────────────── */
.df-cmdk-backdrop {
  position: fixed; inset: 0; background: rgba(15,23,42,.42);
  backdrop-filter: blur(4px);
  z-index: 90; display: none;
  align-items: flex-start; justify-content: center;
  padding-top: 12vh;
}
.df-cmdk-backdrop[data-open="1"] { display: flex; }
.df-cmdk {
  width: 100%; max-width: 560px;
  background: var(--df-surface);
  border-radius: var(--df-radius-lg);
  box-shadow: var(--df-shadow-3);
  overflow: hidden;
  display: flex; flex-direction: column;
  max-height: 70vh;
}
.df-cmdk-search {
  display: flex; align-items: center; gap: 8px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--df-border);
}
.df-cmdk-search input {
  flex: 1; border: 0; outline: 0; font-size: 16px; background: transparent;
  font-family: var(--df-font); color: var(--df-text);
}
.df-cmdk-search input::placeholder { color: var(--df-text-3); }
.df-cmdk-search .df-cmdk-icon { color: var(--df-text-3); font-size: 18px; }
.df-cmdk-search .df-cmdk-esc {
  font-size: 10px; padding: 2px 6px; border: 1px solid var(--df-border-2);
  border-radius: 4px; color: var(--df-text-3); font-family: var(--df-font-mono);
}
.df-cmdk-list { overflow-y: auto; flex: 1; padding: 4px 0; }
.df-cmdk-group {
  padding: 8px 16px 4px; font-size: 11px; font-weight: 700;
  color: var(--df-text-3); text-transform: uppercase; letter-spacing: .04em;
}
.df-cmdk-item {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 16px; cursor: pointer;
  border-left: 2px solid transparent;
  font-size: 14px;
  transition: background var(--df-anim);
}
.df-cmdk-item:hover, .df-cmdk-item[data-active="1"] {
  background: var(--df-primary-bg);
  border-left-color: var(--df-primary);
}
.df-cmdk-item .df-cmdk-label { flex: 1; color: var(--df-text); }
.df-cmdk-item .df-cmdk-hint  { font-size: 11px; color: var(--df-text-3); }
.df-cmdk-item .df-cmdk-icon  { font-size: 16px; width: 20px; text-align: center; }
.df-cmdk-empty {
  padding: 24px 16px; text-align: center; color: var(--df-text-3); font-size: 13px;
}

/* Keyboard hint chip (shown in header next to title) */
.df-shortcut-hint {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 11px; color: var(--df-text-3); font-family: var(--df-font-mono);
  padding: 3px 6px; background: var(--df-bg-2); border-radius: 4px;
  border: 1px solid var(--df-border);
}

/* Row selected highlight */
.df-table tbody tr.is-selected { background: var(--df-primary-bg); }
.df-table tbody tr.is-selected td { border-color: var(--df-primary); }

/* AI badge on row (small "this voucher came from AI proposal") */
.df-ai-trace {
  display: inline-flex; align-items: center; gap: 3px;
  font-size: 10px; color: var(--df-info);
  padding: 1px 5px; background: var(--df-info-bg);
  border-radius: 999px;
}
.df-ai-trace::before { content: '🧠'; font-size: 9px; }

/* ═══════════════════════════════════════════════════════════════
 * R11.1.B · Voucher v2 FORM — AI panel · Dropzone · Autocomplete
 * ═══════════════════════════════════════════════════════════════ */

/* 2-column form grid · stacks on mobile */
.df-form-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 360px;
  gap: 20px;
  align-items: start;
}
@media (max-width: 1024px) {
  .df-form-grid { grid-template-columns: 1fr; }
}

/* Form column inner card padding */
.df-form-grid > .df-form-col { min-width: 0; }
/* R11.5e · sticky AI rail with INNER-scrolling panel
 * v1 (R11.5d): max-height + overflow on .df-ai-col — user reported still couldn't reach end
 * v2 (R11.5e): exact height + align-self start + push overflow to .df-ai-panel
 *   so the sticky apply-banner has a clear scroll context AND nothing clips the bottom
 */
.df-form-grid > .df-ai-col {
  min-width: 0;
  align-self: start;
  position: sticky; top: 84px;
  height: calc(100vh - 110px);
  /* leave overflow to the inner panel · the col is just the sticky frame */
}
.df-form-grid > .df-ai-col .df-ai-panel {
  height: 100%;
  display: flex; flex-direction: column;
  overflow-y: auto;
  overflow-x: hidden;
  scrollbar-gutter: stable;
}
.df-form-grid > .df-ai-col .df-ai-panel::-webkit-scrollbar { width: 8px; }
.df-form-grid > .df-ai-col .df-ai-panel::-webkit-scrollbar-thumb { background: #CBD5E1; border-radius: 4px; }
.df-form-grid > .df-ai-col .df-ai-panel::-webkit-scrollbar-thumb:hover { background: #94A3B8; }
/* Below 1024px the grid stacks · disable height cap so panel can grow naturally below form */
@media (max-width: 1024px) {
  .df-form-grid > .df-ai-col { position: static; height: auto; }
  .df-form-grid > .df-ai-col .df-ai-panel { height: auto; overflow: visible; max-height: 70vh; }
}

/* AI panel (right rail) */
.df-ai-panel {
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius);
  overflow: hidden;
  display: flex; flex-direction: column;
}
.df-ai-panel-head {
  padding: 12px 14px;
  background: linear-gradient(135deg, var(--df-primary-bg) 0%, var(--df-accent-bg) 100%);
  border-bottom: 1px solid var(--df-border);
  display: flex; align-items: center; gap: 8px;
}
.df-ai-panel-head h3 {
  margin: 0; font-size: 14px; font-weight: 700;
  color: var(--df-primary-dk);
}
.df-ai-block {
  padding: 12px 14px;
  border-bottom: 1px solid var(--df-border);
}
.df-ai-block:last-child { border-bottom: 0; }
.df-ai-block h4 {
  margin: 0 0 6px; font-size: 12px; font-weight: 700;
  color: var(--df-text-2); text-transform: uppercase; letter-spacing: .03em;
  display: flex; align-items: center; gap: 6px;
}
.df-ai-block-body { font-size: 13px; color: var(--df-text); line-height: 1.5; }
.df-ai-actions {
  display: flex; gap: 6px; margin-top: 8px;
}
.df-ai-actions .df-btn { padding: 4px 10px; font-size: 11px; }

/* AI thinking indicator (pulses) */
.df-ai-thinking {
  display: inline-flex; gap: 3px; align-items: center;
  font-size: 11px; color: var(--df-text-3);
}
.df-ai-thinking::after {
  content: '';
  width: 8px; height: 8px;
  border-radius: 999px;
  background: var(--df-primary);
  animation: df-pulse 1.2s ease-in-out infinite;
}
@keyframes df-pulse {
  0%, 100% { opacity: .3; transform: scale(.9); }
  50%      { opacity: 1;  transform: scale(1.15); }
}

/* Drag-drop OCR zone */
.df-dropzone {
  border: 2px dashed var(--df-border-2);
  border-radius: var(--df-radius);
  padding: 24px 16px;
  text-align: center;
  color: var(--df-text-2);
  background: var(--df-bg-2);
  cursor: pointer;
  transition: all var(--df-anim);
  font-size: 13px;
}
.df-dropzone:hover {
  border-color: var(--df-primary);
  background: var(--df-primary-bg);
  color: var(--df-primary-dk);
}
.df-dropzone[data-state="dragover"] {
  border-color: var(--df-primary);
  background: var(--df-primary-bg);
  color: var(--df-primary-dk);
  transform: scale(1.02);
}
.df-dropzone[data-state="processing"] {
  border-color: var(--df-warning);
  background: var(--df-warning-bg);
  color: #B45309;
  cursor: wait;
}
.df-dropzone[data-state="done"] {
  border-color: var(--df-success);
  background: var(--df-success-bg);
  color: #166534;
}
.df-dropzone .df-dz-icon { font-size: 32px; display: block; margin-bottom: 6px; }
.df-dropzone .df-dz-hint { font-size: 11px; color: var(--df-text-3); margin-top: 4px; }
.df-dropzone input[type="file"] { display: none; }

/* Autocomplete dropdown */
.df-autocomplete {
  position: relative;
}
.df-autocomplete-list {
  position: absolute; top: 100%; left: 0; right: 0;
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius-sm);
  box-shadow: var(--df-shadow-2);
  z-index: 30;
  max-height: 240px; overflow-y: auto;
  display: none;
}
.df-autocomplete-list[data-open="1"] { display: block; }
.df-autocomplete-item {
  padding: 8px 12px; cursor: pointer; font-size: 13px;
  border-bottom: 1px solid var(--df-border);
  display: flex; justify-content: space-between; gap: 10px;
}
.df-autocomplete-item:last-child { border-bottom: 0; }
.df-autocomplete-item:hover,
.df-autocomplete-item[data-active="1"] { background: var(--df-primary-bg); }
.df-autocomplete-item .df-ac-meta { color: var(--df-text-3); font-size: 11px; }

/* Inline confidence indicator (next to a single field) */
.df-field-confidence {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 10px; padding: 2px 6px;
  border-radius: 999px;
  margin-left: 6px;
  font-family: var(--df-font-mono); font-weight: 600;
}
.df-field-confidence[data-conf="high"] { background: var(--df-success-bg); color: #166534; }
.df-field-confidence[data-conf="med"]  { background: var(--df-warning-bg); color: #B45309; }
.df-field-confidence[data-conf="low"]  { background: var(--df-danger-bg);  color: #991B1B; }

/* Restore-draft banner */
.df-restore-banner {
  background: var(--df-info-bg);
  color: var(--df-info);
  padding: 10px 14px;
  border-radius: var(--df-radius-sm);
  border-left: 3px solid var(--df-info);
  display: flex; align-items: center; gap: 10px;
  font-size: 13px;
  margin-bottom: 16px;
}
.df-restore-banner .df-rb-actions { margin-left: auto; display: flex; gap: 6px; }

/* Live calc box (สุทธิจ่าย) */
.df-calc-box {
  background: var(--df-bg-2);
  border-radius: var(--df-radius-sm);
  padding: 10px 14px;
  display: flex; align-items: center; justify-content: space-between;
  font-size: 14px;
  margin-top: 8px;
  border: 1px solid var(--df-border);
}
.df-calc-box .df-cb-label { color: var(--df-text-2); }
.df-calc-box .df-cb-value {
  font-family: var(--df-font-mono); font-weight: 700;
  color: var(--df-primary);
  font-size: 18px;
}

/* Split-line button (Phase 2 toggle for multi-line) */
.df-split-toggle {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 11px;
  padding: 3px 8px;
  background: var(--df-accent-bg);
  color: var(--df-accent-dk);
  border-radius: 999px;
  cursor: pointer;
  border: 0;
}
.df-split-toggle:hover { background: var(--df-accent); color: #fff; }

/* Multi-line table (when split open) */
.df-lines-table {
  width: 100%; border-collapse: collapse; margin-top: 12px;
}
.df-lines-table th,
.df-lines-table td {
  padding: 6px 8px; border-bottom: 1px solid var(--df-border); font-size: 13px;
}
.df-lines-table th {
  text-align: left; color: var(--df-text-2); font-weight: 600; font-size: 11px;
  text-transform: uppercase; letter-spacing: .03em;
}
.df-lines-table input,
.df-lines-table select {
  width: 100%; padding: 4px 8px;
  border: 1px solid var(--df-border); border-radius: var(--df-radius-sm);
  font-family: var(--df-font); font-size: 13px;
  background: var(--df-surface);
}
.df-lines-table .df-line-remove {
  background: none; border: 0; color: var(--df-danger);
  cursor: pointer; font-size: 16px; line-height: 1;
}

/* ═══════════════════════════════════════════════════════════════
 * R11.1.A · Readability uplift (UX feedback 2026-05-16)
 *   ผู้ใช้รายงาน: "อ่านไม่ออก · สี/ตัวอักษรยังไม่ดีพอ"
 *   - "+ จ่ายเงิน" text on blue button = invisible
 *     (Tailwind CDN preflight injects after df.css and sets a {color: inherit})
 *   - subtitle/breadcrumb (text-3 #94A3B8) ต่ำกว่า WCAG AA contrast 4.5:1
 *   - tab/table headers อ่านยากบน white surface
 * ═══════════════════════════════════════════════════════════════ */

/* 1 · Bump text-secondary/tertiary darker for WCAG AA on white surface */
:root {
  --df-text-2: #334155;  /* slate-700 · was #475569 · AA on white ✓ */
  --df-text-3: #64748B;  /* slate-500 · was #94A3B8 (failed AA) */
}

/* 2 · Force button text colors — beat Tailwind CDN preflight + legacy anchor rules.
 *    Use high-specificity attribute selector + !important · only for primary actions. */
a.df-btn,
button.df-btn,
.df-btn[class*="df-btn--"] {
  text-decoration: none !important;
}
a.df-btn--primary, button.df-btn--primary,
.df-btn--primary, .df-btn--primary:link, .df-btn--primary:visited,
.df-btn--primary:hover, .df-btn--primary:focus, .df-btn--primary:active {
  color: #fff !important;
}
a.df-btn--accent, button.df-btn--accent,
.df-btn--accent, .df-btn--accent:link, .df-btn--accent:visited,
.df-btn--accent:hover, .df-btn--accent:focus {
  color: #fff !important;
}
a.df-btn--danger, button.df-btn--danger,
.df-btn--danger, .df-btn--danger:link, .df-btn--danger:visited {
  color: #fff !important;
}
a.df-btn--outline, button.df-btn--outline,
.df-btn--outline, .df-btn--outline:link, .df-btn--outline:visited {
  color: var(--df-text) !important;
}
a.df-btn--ghost, button.df-btn--ghost {
  color: var(--df-text-2) !important;
}

/* 3 · Bump base body legibility (rule 22 · accessibility · 14→15px floor) */
body.df-app, body.df-app .df-page,
body.df-app .df-card, body.df-app .df-table,
body.df-app .df-field, body.df-app .df-tabs {
  font-size: 15px;
  line-height: 1.55;
}
body.df-app .df-page-title { font-size: 24px; font-weight: 700; color: var(--df-text); }
body.df-app .df-page-crumb { font-size: 13px; color: var(--df-text-2); }
body.df-app .df-page-crumb a { color: var(--df-text-2); text-decoration: none; }
body.df-app .df-page-crumb a:hover { color: var(--df-primary); text-decoration: underline; }

/* 4 · Tabs · darker label · easier scan */
body.df-app .df-tab { color: var(--df-text-2); font-weight: 500; font-size: 14px; }
body.df-app .df-tab.is-active { color: var(--df-primary); font-weight: 700; }
body.df-app .df-tab-count {
  background: var(--df-bg-2); color: var(--df-text-2);
  padding: 1px 8px; border-radius: 999px; font-size: 12px; margin-left: 6px;
  font-weight: 600;
}
body.df-app .df-tab.is-active .df-tab-count {
  background: var(--df-primary); color: #fff;
}

/* 5 · Table header darker (was light gray on light gray) */
body.df-app .df-table th {
  color: var(--df-text-2); font-weight: 700; font-size: 12px;
  letter-spacing: .04em; text-transform: uppercase;
  background: var(--df-bg-2); border-bottom: 1px solid var(--df-border);
  padding: 10px 12px;
}
body.df-app .df-table td {
  padding: 12px; color: var(--df-text); border-bottom: 1px solid var(--df-border);
}

/* 6 · Form field labels readable + min 14px */
body.df-app .df-field { display: block; margin-bottom: 14px; }
body.df-app .df-field-label {
  display: block; font-size: 13px; font-weight: 600;
  color: var(--df-text); margin-bottom: 6px;
}
body.df-app .df-field input,
body.df-app .df-field select,
body.df-app .df-field textarea {
  width: 100%; padding: 10px 14px; font-size: 15px;
  border: 1px solid var(--df-border-2); border-radius: var(--df-radius-sm);
  background: var(--df-surface); color: var(--df-text);
  font-family: inherit; line-height: 1.4;
  transition: border-color var(--df-anim), box-shadow var(--df-anim);
}
body.df-app .df-field input:focus,
body.df-app .df-field select:focus,
body.df-app .df-field textarea:focus {
  outline: none; border-color: var(--df-primary);
  box-shadow: 0 0 0 3px var(--df-primary-bg);
}

/* 7 · Pill base · ensure contrast */
body.df-app .df-pill {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 10px; font-size: 12px; font-weight: 600;
  border-radius: 999px; line-height: 1.4;
}
body.df-app .df-pill--success { background: var(--df-success-bg); color: #166534; }
body.df-app .df-pill--warning { background: var(--df-warning-bg); color: #B45309; }
body.df-app .df-pill--danger  { background: var(--df-danger-bg);  color: #991B1B; }
body.df-app .df-pill--info    { background: var(--df-info-bg);    color: #075985; }
body.df-app .df-pill--primary { background: var(--df-primary-bg); color: var(--df-primary-dk); }
body.df-app .df-pill--accent  { background: var(--df-accent-bg);  color: #065F46; }
body.df-app .df-pill--ai      { background: var(--df-magenta-bg); color: #9D174D; }

/* 8 · Page background · slight lift so cards pop */
body.df-app { background: var(--df-bg); }
body.df-app .df-card { background: var(--df-surface); border: 1px solid var(--df-border); }

/* ═══════════════════════════════════════════════════════════════
 * R11.1.A-v3 · Advanced filter panel · saved views · sort · tab warn
 * ═══════════════════════════════════════════════════════════════ */

/* Saved view chips (above the card) */
.df-saved-views { padding: 0 2px; }
.df-view-chip {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 11px; font-size: 12px; font-weight: 600;
  background: var(--df-primary-bg); color: var(--df-primary-dk);
  border: 1px solid transparent; border-radius: 999px;
  text-decoration: none; transition: var(--df-anim);
}
.df-view-chip:hover {
  background: var(--df-primary); color: #fff !important;
  border-color: var(--df-primary);
}

/* Tab warn state (red number) — pending/overdue tabs */
.df-tab.is-warn .df-tab-count {
  background: var(--df-danger-bg); color: #991B1B;
}
.df-tab.is-warn.is-active .df-tab-count {
  background: var(--df-danger); color: #fff;
}

/* Sort dropdown — compact */
.df-sort-select {
  padding: 6px 28px 6px 10px; font-size: 13px;
  border: 1px solid var(--df-border); border-radius: var(--df-radius-sm);
  background: var(--df-surface); color: var(--df-text);
  font-family: inherit; cursor: pointer;
  min-width: 180px;
}
.df-sort-select:focus { outline: none; border-color: var(--df-primary); }

/* Quick search input */
.df-quick-search {
  padding: 6px 10px; font-size: 13px;
  border: 1px solid var(--df-border); border-radius: var(--df-radius-sm);
  background: var(--df-surface); color: var(--df-text);
  min-width: 220px; max-width: 320px; flex: 1;
}
.df-quick-search:focus {
  outline: none; border-color: var(--df-primary);
  box-shadow: 0 0 0 3px var(--df-primary-bg);
}

/* Filter button is-active */
.df-btn.is-active {
  background: var(--df-primary-bg) !important;
  color: var(--df-primary-dk) !important;
  border-color: var(--df-primary) !important;
}

/* Filter panel container (collapsible) */
.df-filter-panel {
  background: var(--df-bg-2);
  border-bottom: 1px solid var(--df-border);
  padding: 16px;
}
.df-filter-grid {
  display: grid; gap: 14px;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
.df-filter-col { display: flex; flex-direction: column; gap: 6px; }
.df-filter-col--wide { grid-column: 1 / -1; }
.df-filter-col label.df-field-label { font-size: 11px; font-weight: 700; color: var(--df-text-2);
  text-transform: uppercase; letter-spacing: .03em; margin: 0;
}
.df-filter-col input[type="date"],
.df-filter-col input[type="number"],
.df-filter-col select {
  padding: 7px 10px; font-size: 13px;
  border: 1px solid var(--df-border); border-radius: var(--df-radius-sm);
  background: var(--df-surface); color: var(--df-text); font-family: inherit;
}
.df-filter-col input:focus, .df-filter-col select:focus {
  outline: none; border-color: var(--df-primary);
  box-shadow: 0 0 0 3px var(--df-primary-bg);
}

/* Quick-date pills (วันนี้/7วัน/เดือน/ไตรมาส/ปี) */
.df-quick-dates {
  display: flex; gap: 4px; flex-wrap: wrap; margin-top: 4px;
}
.df-quick-dates button {
  padding: 3px 9px; font-size: 11px;
  background: var(--df-surface); border: 1px solid var(--df-border);
  border-radius: 999px; color: var(--df-text-2);
  cursor: pointer; transition: var(--df-anim);
}
.df-quick-dates button:hover {
  background: var(--df-primary-bg); color: var(--df-primary-dk);
  border-color: var(--df-primary);
}

/* Vendor multi-select chips */
.df-vendor-chips {
  display: flex; gap: 6px; flex-wrap: wrap;
  max-height: 120px; overflow-y: auto;
  padding: 4px;
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius-sm);
}
.df-chip {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 9px; font-size: 12px; cursor: pointer;
  background: var(--df-bg-2); color: var(--df-text);
  border: 1px solid transparent;
  border-radius: 999px;
  transition: var(--df-anim);
}
.df-chip:hover { background: var(--df-primary-bg); }
.df-chip input[type="checkbox"] { display: none; }
.df-chip:has(input:checked) {
  background: var(--df-primary); color: #fff;
  border-color: var(--df-primary);
}
.df-chip:has(input:checked) .df-text-3 { color: rgba(255,255,255,.7); }

/* Filter toggle (checkbox label) */
.df-toggle {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 0; font-size: 13px; cursor: pointer; color: var(--df-text);
}
.df-toggle input[type="checkbox"] { accent-color: var(--df-primary); }

/* Filter action row (reset + save view) */
.df-filter-actions {
  display: flex; gap: 8px; align-items: center;
  margin-top: 14px; padding-top: 12px;
  border-top: 1px solid var(--df-border);
}

/* Tab-count chip when overdue tab has >0 · pulse to grab attention */
@keyframes df-pulse-warn {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.08); }
}
.df-tab.is-warn:not(.is-active) .df-tab-count {
  animation: df-pulse-warn 2.2s ease-in-out infinite;
}

/* ═══════════════════════════════════════════════════════════════
 * R11.5 · Voucher Form 3-Zone Redesign
 *   Capture (hero) → Record (Quick + Advanced disclosure) → Review (AI rail)
 *   Live JE preview · section ✓ progress · mobile drawer · a11y rule 43
 * ═══════════════════════════════════════════════════════════════ */

/* iOS no-zoom · inputs must be ≥16px on small viewports (rule 43.5) */
@media (max-width: 768px) {
  .df-app input[type="text"],
  .df-app input[type="search"],
  .df-app input[type="email"],
  .df-app input[type="number"],
  .df-app input[type="date"],
  .df-app input[type="tel"],
  .df-app input[type="password"],
  .df-app select,
  .df-app textarea { font-size: 16px !important; }
}

/* Capture hero · prominent dropzone for Tier 1 quick-capture */
.pv-capture-hero {
  background: linear-gradient(135deg, #EEF1FF 0%, #FCE7F3 100%);
  border: 1px solid #C7D2FE;
  border-radius: var(--df-radius-lg);
  padding: 18px 20px;
  margin-bottom: var(--df-gutter);
}
.pv-capture-hero .pv-hero-grid {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 16px; align-items: center;
}
@media (max-width: 640px) {
  .pv-capture-hero .pv-hero-grid { grid-template-columns: 1fr; }
}
.pv-capture-hero h3 { margin: 0 0 4px; font-size: 16px; color: var(--df-primary-dk); }
.pv-capture-hero .pv-hero-sub { font-size: 13px; color: var(--df-text-2); margin-bottom: 10px; }

/* Section card · with check progress badge */
.pv-section {
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius);
  margin-bottom: 12px;
  overflow: hidden;
}
.pv-section-head {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--df-border);
  background: linear-gradient(180deg, #FAFBFC 0%, #fff 100%);
}
.pv-section-head h3 {
  margin: 0; font-size: 14px; font-weight: 700; flex: 1;
  display: flex; align-items: center; gap: 6px;
}
.pv-section-check {
  width: 22px; height: 22px; border-radius: 999px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 13px; font-weight: 800; flex: none;
  transition: var(--df-anim);
}
.pv-section-check[data-done="0"] {
  background: var(--df-bg-2); color: var(--df-text-3);
  border: 1.5px dashed var(--df-border-2);
}
.pv-section-check[data-done="1"] {
  background: var(--df-success); color: #fff;
}
.pv-section-body { padding: 14px 16px; }
.pv-section-body > .df-field:last-child { margin-bottom: 0; }

/* Disclosure (Advanced expander · Tier 2/3 fields hidden by default) */
.pv-disclosure {
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius);
  margin-bottom: 12px;
}
.pv-disclosure-toggle {
  width: 100%; display: flex; align-items: center; gap: 8px;
  padding: 12px 16px; background: none; border: 0; cursor: pointer;
  font-size: 14px; font-weight: 600; color: var(--df-text);
  font-family: inherit;
}
.pv-disclosure-toggle:hover { background: var(--df-bg-2); }
.pv-disclosure-toggle .pv-disclosure-arrow {
  display: inline-block; transition: transform var(--df-anim);
  font-size: 11px; color: var(--df-text-2);
}
.pv-disclosure[data-open="1"] .pv-disclosure-arrow { transform: rotate(90deg); }
.pv-disclosure-body { padding: 4px 16px 16px; border-top: 1px solid var(--df-border); }

/* Field hint (?) tooltip · ACCOUNTING-UX-REDESIGN §1.1#5 */
.pv-field-hint {
  display: inline-flex; align-items: center; justify-content: center;
  width: 16px; height: 16px; border-radius: 999px;
  font-size: 10px; font-weight: 700; color: var(--df-text-3);
  background: var(--df-bg-2);
  margin-left: 4px; cursor: help;
  position: relative;
}
.pv-field-hint:hover { background: var(--df-primary-bg); color: var(--df-primary-dk); }
.pv-field-hint::after {
  content: attr(data-tip);
  position: absolute;
  bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%);
  background: var(--df-text); color: #fff;
  padding: 6px 10px; border-radius: 6px;
  font-size: 11.5px; font-weight: 500;
  white-space: pre-wrap; max-width: 220px;
  line-height: 1.4;
  opacity: 0; pointer-events: none;
  transition: opacity var(--df-anim);
  z-index: 60;
}
.pv-field-hint:hover::after { opacity: 1; }

/* Live JE Preview (right rail) */
.pv-je-preview {
  background: linear-gradient(180deg, #FFFFFF 0%, #F5F3FF 100%);
  border: 1px solid #DDD6FE;
  border-radius: var(--df-radius);
  padding: 12px 14px;
  margin-bottom: 12px;
}
.pv-je-preview h4 {
  margin: 0 0 8px; font-size: 12px; font-weight: 700;
  color: #5B21B6; text-transform: uppercase; letter-spacing: .03em;
  display: flex; align-items: center; gap: 6px;
}
.pv-je-table {
  width: 100%; border-collapse: collapse; font-size: 12px;
  font-family: var(--df-font-mono);
}
.pv-je-table td {
  padding: 4px 6px; border-bottom: 1px dashed #E9D5FF;
  vertical-align: top;
}
.pv-je-table tr:last-child td { border-bottom: 0; }
.pv-je-cell-code { color: var(--df-text-2); width: 50px; }
.pv-je-cell-name { color: var(--df-text); }
.pv-je-cell-dr   { text-align: right; color: var(--df-success-dk, #047857); font-weight: 600; min-width: 70px; }
.pv-je-cell-cr   { text-align: right; color: #DC2626; font-weight: 600; min-width: 70px; }
.pv-je-foot {
  display: flex; justify-content: space-between; gap: 10px;
  margin-top: 6px; padding-top: 6px;
  border-top: 1px solid #DDD6FE;
  font-size: 11px;
}
.pv-je-balanced { color: var(--df-success); font-weight: 700; }
.pv-je-unbalanced { color: var(--df-danger); font-weight: 700; }
.pv-je-empty {
  text-align: center; color: var(--df-text-3);
  padding: 18px 8px; font-size: 12px;
}

/* AI agent stage row · inline list in rail (replaces modal) */
.pv-stage-list { display: flex; flex-direction: column; gap: 6px; }
.pv-stage {
  display: grid; grid-template-columns: 28px 1fr auto;
  gap: 8px; align-items: center;
  padding: 8px 10px;
  background: var(--df-surface);
  border: 1px solid var(--df-border);
  border-radius: var(--df-radius-sm);
  font-size: 12.5px;
}
.pv-stage[data-state="done"]    { background: #F0FDF4; border-color: #BBF7D0; }
.pv-stage[data-state="running"] { background: #F5F3FF; border-color: #DDD6FE; }
.pv-stage[data-state="pending"] { opacity: .5; }
.pv-stage-dot {
  width: 22px; height: 22px; border-radius: 999px;
  display: inline-flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 11px;
}
.pv-stage[data-state="done"] .pv-stage-dot    { background: var(--df-success); color: #fff; }
.pv-stage[data-state="running"] .pv-stage-dot { background: #7C3AED; color: #fff; animation: df-pulse 1.2s ease-in-out infinite; }
.pv-stage[data-state="pending"] .pv-stage-dot { background: var(--df-bg-2); color: var(--df-text-3); }
.pv-stage-title { font-weight: 600; }
.pv-stage-reason { font-size: 11.5px; color: var(--df-text-2); margin-top: 2px; line-height: 1.4; }
.pv-stage-badge {
  font-size: 10px; padding: 1px 6px; border-radius: 999px;
  font-weight: 700;
}
.pv-stage-badge--ai   { background: #EDE9FE; color: #5B21B6; }
.pv-stage-badge--rule { background: var(--df-bg-2); color: var(--df-text-2); }

/* Mobile AI drawer — bottom-sheet style @ ≤768px (rule 43) */
.pv-mobile-rail-fab {
  display: none;
  position: fixed; right: 14px; bottom: 80px; z-index: 60;
  width: 56px; height: 56px; border-radius: 999px;
  background: linear-gradient(135deg, var(--df-primary), #7C3AED);
  color: #fff; border: 0; cursor: pointer;
  font-size: 22px;
  box-shadow: var(--df-shadow-3);
}
.pv-mobile-rail-fab .pv-fab-badge {
  position: absolute; top: -4px; right: -4px;
  min-width: 18px; height: 18px; border-radius: 999px;
  background: var(--df-warning); color: #1F1B0A;
  font-size: 10px; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0 4px;
}
.pv-mobile-rail-overlay {
  position: fixed; inset: 0; background: rgba(15,23,42,.55);
  z-index: 80; opacity: 0; pointer-events: none;
  transition: opacity var(--df-anim);
}
.pv-mobile-rail-overlay[data-open="1"] {
  opacity: 1; pointer-events: auto;
}

@media (max-width: 1024px) {
  .pv-mobile-rail-fab { display: inline-flex; align-items: center; justify-content: center; }
  /* AI col turns into bottom-sheet panel · only when drawer open */
  .df-form-grid > .df-ai-col {
    position: fixed !important;
    top: auto !important; left: 0; right: 0; bottom: 0;
    max-height: 80vh; overflow-y: auto;
    background: var(--df-surface);
    border-top: 1px solid var(--df-border);
    border-top-left-radius: var(--df-radius-lg);
    border-top-right-radius: var(--df-radius-lg);
    box-shadow: 0 -16px 40px rgba(15,23,42,.18);
    transform: translateY(100%);
    transition: transform var(--df-anim-lg);
    z-index: 90; padding: 14px;
  }
  .df-form-grid > .df-ai-col[data-mobile-open="1"] {
    transform: translateY(0);
  }
  /* Slim sticky bar on small screens */
  .df-stickybar { padding: 10px 14px; flex-wrap: wrap; }
  .df-stickybar .df-shortcut-hint { display: none; }
}

/* Touch target compliance (rule 43.4) — sticky bar buttons ≥44px */
.df-stickybar .df-btn { min-height: 44px; min-width: 44px; }

/* Progress bar at top of form (3 sections) */
.pv-progress {
  height: 4px; background: var(--df-bg-2); border-radius: 999px; overflow: hidden;
  margin-bottom: 12px;
}
.pv-progress-fill {
  height: 100%; background: linear-gradient(90deg, var(--df-primary), var(--df-accent));
  transition: width .3s ease;
}

/* Compact meta-chip group (test mode + vat mode) — replaces yellow banner */
.pv-meta-chips {
  display: flex; flex-wrap: wrap; gap: 6px;
  padding: 8px 10px;
  background: var(--df-bg-2);
  border-radius: var(--df-radius-sm);
}
.pv-meta-chips .df-chip { font-size: 11.5px; padding: 3px 10px; }

/* R11.5b · Payee locked state — contact code chip + name + clear */
.pv-payee-locked {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 10px;
  background: linear-gradient(135deg, #ECFDF5 0%, #fff 100%);
  border: 1px solid #A7F3D0;
  border-radius: var(--df-radius-sm);
  min-height: 40px;
}
.pv-contact-code {
  font-family: var(--df-font-mono);
  font-size: 11.5px; font-weight: 700;
  background: var(--df-primary); color: #fff;
  padding: 2px 8px; border-radius: 4px;
  letter-spacing: .02em;
}
.pv-contact-code-sm {
  font-family: var(--df-font-mono);
  font-size: 10.5px; font-weight: 700;
  background: var(--df-bg-2); color: var(--df-text-2);
  padding: 1px 6px; border-radius: 3px;
  min-width: 56px; display: inline-block; text-align: center;
}
.pv-contact-name {
  flex: 1; font-weight: 600; color: var(--df-text);
  font-size: 14px;
}
.pv-payee-clear {
  background: var(--df-danger-bg); color: var(--df-danger);
  border: 0; border-radius: 999px;
  width: 24px; height: 24px; cursor: pointer;
  font-size: 14px; line-height: 1; padding: 0;
}
.pv-payee-clear:hover { background: var(--df-danger); color: #fff; }

/* Empty-search CTA inside payee dropdown */
.pv-payee-empty {
  padding: 12px 14px;
  background: var(--df-warning-bg);
  border-top: 1px dashed var(--df-warning);
}

/* R11.5b · AI Reasoning block (right rail · purple band) */
.pv-ai-reason-block {
  background: linear-gradient(180deg, #FFFFFF 0%, #F5F3FF 100%);
  border-left: 4px solid #7C3AED;
}
.pv-ai-reason-item {
  display: grid; grid-template-columns: 28px 1fr; gap: 8px;
  padding: 6px 0; border-bottom: 1px dashed #DDD6FE;
  font-size: 12.5px; line-height: 1.5;
}
.pv-ai-reason-item:last-child { border-bottom: 0; }
.pv-ai-reason-icon { font-size: 16px; text-align: center; }
.pv-ai-reason-agent { font-weight: 700; color: #5B21B6; font-size: 11px; text-transform: uppercase; letter-spacing: .04em; }
.pv-ai-reason-text  { color: var(--df-text); margin-top: 2px; }
