/* ==========================================================================
   NOVA Dashboard — Design tokens, reset, tipografi
   ========================================================================== */

/* ---------- Tema terang (default) ---------- */
:root {
  /* Permukaan */
  --bg-app: #f4f5f9;
  --bg-surface: #ffffff;
  --bg-surface-2: #fafbfd;
  --bg-sunken: #eef0f6;
  --bg-hover: #f0f2f8;
  --bg-active: #e7eaf5;
  --bg-inverse: #14161f;

  /* Garis */
  --border: #e3e6ef;
  --border-strong: #cdd2e2;
  --border-focus: var(--accent);

  /* Teks */
  --text: #171a24;
  --text-soft: #545a6e;
  --text-muted: #858ba3;
  --text-inverse: #ffffff;

  /* Aksen (dapat diubah pengguna) */
  --accent-h: 248;
  --accent-s: 72%;
  --accent-l: 58%;
  --accent: hsl(var(--accent-h) var(--accent-s) var(--accent-l));
  --accent-hover: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) - 7%));
  --accent-soft: hsl(var(--accent-h) var(--accent-s) 96%);
  --accent-soft-2: hsl(var(--accent-h) var(--accent-s) 92%);
  --accent-text: hsl(var(--accent-h) var(--accent-s) 42%);
  --accent-contrast: #ffffff;

  /* Semantik */
  --success: #14a05f;
  --success-soft: #e5f7ee;
  --warning: #d68407;
  --warning-soft: #fdf2e0;
  --danger: #dc3b48;
  --danger-soft: #fdecee;
  --info: #2d7ff0;
  --info-soft: #e8f1fe;

  /* Bayangan */
  --shadow-xs: 0 1px 2px rgba(19, 22, 38, .06);
  --shadow-sm: 0 2px 6px rgba(19, 22, 38, .07), 0 1px 2px rgba(19, 22, 38, .04);
  --shadow-md: 0 6px 20px rgba(19, 22, 38, .09), 0 2px 6px rgba(19, 22, 38, .05);
  --shadow-lg: 0 20px 48px rgba(19, 22, 38, .16), 0 6px 16px rgba(19, 22, 38, .08);
  --shadow-pop: 0 12px 34px rgba(19, 22, 38, .14), 0 2px 8px rgba(19, 22, 38, .07);

  /* Radius */
  --r-xs: 6px;
  --r-sm: 9px;
  --r-md: 12px;
  --r-lg: 16px;
  --r-xl: 22px;
  --r-pill: 999px;

  /* Layout */
  --sidebar-w: 264px;
  --sidebar-w-collapsed: 74px;
  --header-h: 62px;

  /* Gerak */
  --ease: cubic-bezier(.32, .72, .35, 1);
  --fast: 130ms var(--ease);
  --normal: 220ms var(--ease);

  --font: "Inter", "Segoe UI Variable Display", "Segoe UI", system-ui, -apple-system, sans-serif;
  --font-mono: "JetBrains Mono", "Cascadia Mono", ui-monospace, "SF Mono", Consolas, monospace;

  color-scheme: light;
}

/* ---------- Tema gelap ---------- */
[data-theme="dark"] {
  --bg-app: #0c0e15;
  --bg-surface: #14171f;
  --bg-surface-2: #191d27;
  --bg-sunken: #0f1219;
  --bg-hover: #1e222e;
  --bg-active: #262b39;
  --bg-inverse: #f2f3f7;

  --border: #252a37;
  --border-strong: #363d4f;

  --text: #eef0f6;
  --text-soft: #a4abc0;
  --text-muted: #6f7793;
  --text-inverse: #14171f;

  --accent: hsl(var(--accent-h) calc(var(--accent-s) - 6%) 64%);
  --accent-hover: hsl(var(--accent-h) calc(var(--accent-s) - 6%) 70%);
  --accent-soft: hsl(var(--accent-h) 32% 18%);
  --accent-soft-2: hsl(var(--accent-h) 32% 23%);
  --accent-text: hsl(var(--accent-h) 70% 74%);
  --accent-contrast: #0c0e15;

  --success: #34d07f;
  --success-soft: #102b1e;
  --warning: #f0a83a;
  --warning-soft: #2e2211;
  --danger: #f4707c;
  --danger-soft: #331519;
  --info: #62a4ff;
  --info-soft: #101f36;

  --shadow-xs: 0 1px 2px rgba(0, 0, 0, .4);
  --shadow-sm: 0 2px 6px rgba(0, 0, 0, .45), 0 1px 2px rgba(0, 0, 0, .3);
  --shadow-md: 0 8px 24px rgba(0, 0, 0, .5), 0 2px 6px rgba(0, 0, 0, .35);
  --shadow-lg: 0 24px 56px rgba(0, 0, 0, .62), 0 6px 16px rgba(0, 0, 0, .4);
  --shadow-pop: 0 14px 38px rgba(0, 0, 0, .58), 0 2px 8px rgba(0, 0, 0, .4);

  color-scheme: dark;
}

/* ---------- Reset ---------- */
*, *::before, *::after { box-sizing: border-box; }

html, body { height: 100%; }

body {
  margin: 0;
  font-family: var(--font);
  font-size: 14px;
  line-height: 1.55;
  color: var(--text);
  background: var(--bg-app);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow: hidden;
}

h1, h2, h3, h4, h5, h6 { margin: 0; font-weight: 650; line-height: 1.25; letter-spacing: -.015em; }
p { margin: 0; }
img, svg, video, canvas { display: block; max-width: 100%; }

button, input, select, textarea {
  font: inherit;
  color: inherit;
  margin: 0;
}
button { background: none; border: none; cursor: pointer; padding: 0; }
a { color: var(--accent-text); text-decoration: none; }
a:hover { text-decoration: underline; }

ul, ol { margin: 0; padding: 0; list-style: none; }

:focus { outline: none; }
:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: var(--r-xs);
}

/* ---------- Scrollbar ---------- */
* { scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; }
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  background: var(--border-strong);
  border-radius: var(--r-pill);
  border: 3px solid transparent;
  background-clip: content-box;
}
*::-webkit-scrollbar-thumb:hover { background: var(--text-muted); background-clip: content-box; }

/* ---------- Utilitas ---------- */
.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.hidden { display: none !important; }
.truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.clamp-2 {
  display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2;
  -webkit-box-orient: vertical; overflow: hidden;
}
.clamp-3 {
  display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3;
  -webkit-box-orient: vertical; overflow: hidden;
}
.row { display: flex; align-items: center; gap: 10px; }
.row-between { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.col { display: flex; flex-direction: column; }
.grow { flex: 1; min-width: 0; }
.wrap { flex-wrap: wrap; }
.muted { color: var(--text-muted); }
.soft { color: var(--text-soft); }
.mono { font-family: var(--font-mono); font-variant-ligatures: none; }
.center { display: grid; place-items: center; }

.title-xl { font-size: 26px; font-weight: 700; letter-spacing: -.03em; }
.title-lg { font-size: 19px; font-weight: 670; letter-spacing: -.022em; }
.title-md { font-size: 15px; font-weight: 640; letter-spacing: -.012em; }
.text-sm { font-size: 12.5px; }
.text-xs { font-size: 11.5px; }

.section-label {
  font-size: 11px;
  font-weight: 640;
  letter-spacing: .09em;
  text-transform: uppercase;
  color: var(--text-muted);
}

/* ---------- Animasi ---------- */
@keyframes fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes pop-in {
  from { opacity: 0; transform: translateY(8px) scale(.985); }
  to { opacity: 1; transform: none; }
}
@keyframes slide-up {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: none; }
}
@keyframes slide-right {
  from { opacity: 0; transform: translateX(-10px); }
  to { opacity: 1; transform: none; }
}
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes pulse-ring {
  0% { box-shadow: 0 0 0 0 hsl(var(--accent-h) var(--accent-s) 58% / .45); }
  70% { box-shadow: 0 0 0 10px hsl(var(--accent-h) var(--accent-s) 58% / 0); }
  100% { box-shadow: 0 0 0 0 hsl(var(--accent-h) var(--accent-s) 58% / 0); }
}
@keyframes shimmer {
  from { background-position: -420px 0; }
  to { background-position: 420px 0; }
}
@keyframes bell-swing {
  0%, 100% { transform: rotate(0); }
  15% { transform: rotate(13deg); }
  30% { transform: rotate(-11deg); }
  45% { transform: rotate(7deg); }
  60% { transform: rotate(-5deg); }
  75% { transform: rotate(2deg); }
}

.anim-pop { animation: pop-in var(--normal) both; }
.anim-up { animation: slide-up var(--normal) both; }
.anim-fade { animation: fade-in var(--normal) both; }

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