/* ===== AlpenUnit — Design System ===== */
/* Modern CSS (2026): custom properties, nesting, :has(), color-mix() */

@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap');

/* --- Custom Properties --- */
:root {
  /* Colors — Post-apocalyptic industrial palette */
  --clr-bg:           #0d0d0d;
  --clr-bg-elevated:  #141414;
  --clr-bg-panel:     #111;
  --clr-bg-card:      #0d0d0d;
  --clr-bg-input:     #0a0a0a;
  --clr-surface:      #181818;
  --clr-surface-alt:  #1a1a1a;

  --clr-border:       #2a2a2a;
  --clr-border-light: #333;
  --clr-border-focus: #ff9900;

  --clr-text:         #e5e5e5;
  --clr-text-muted:   #777;
  --clr-text-dim:     #555;

  --clr-accent:       #ff9900;
  --clr-accent-dim:   color-mix(in srgb, var(--clr-accent) 15%, transparent);
  --clr-accent-glow:  color-mix(in srgb, var(--clr-accent) 40%, transparent);

  --clr-success:      #22c55e;
  --clr-danger:       #ff3333;
  --clr-info:         #3b82f6;

  /* Typography */
  --font-mono:  'JetBrains Mono', ui-monospace, 'Cascadia Code', 'Fira Code', monospace;
  --font-sans:  system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;

  --text-xs:    0.6875rem;  /* 11px */
  --text-sm:    0.8125rem;  /* 13px */
  --text-base:  0.875rem;   /* 14px */
  --text-md:    0.9375rem;  /* 15px */
  --text-lg:    1.0625rem;  /* 17px */
  --text-xl:    1.375rem;   /* 22px */
  --text-2xl:   1.625rem;   /* 26px */

  --leading-tight:  1.25;
  --leading-normal: 1.5;
  --leading-relaxed: 1.625;

  --tracking-tight: -0.025em;
  --tracking-wide:  0.15em;

  /* Spacing */
  --space-1:  0.25rem;
  --space-2:  0.5rem;
  --space-3:  0.75rem;
  --space-4:  1rem;
  --space-5:  1.25rem;
  --space-6:  1.5rem;
  --space-8:  2rem;

  /* Borders & Radius */
  --radius-sm: 2px;
  --radius-md: 3px;
  --radius-lg: 6px;

  /* Transitions */
  --transition-fast:   150ms ease;
  --transition-base:   200ms ease;
  --transition-slow:   300ms ease;
  --transition-spring: 300ms cubic-bezier(0.34, 1.56, 0.64, 1);

  /* Shadows */
  --shadow-glow-accent: 0 0 20px color-mix(in srgb, var(--clr-accent) 30%, transparent);
  --shadow-glow-success: 0 0 12px color-mix(in srgb, var(--clr-success) 40%, transparent);

  /* Layout */
  --sidebar-width: 200px;
  --header-height: 88px;
}

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

html {
  font-size: 16px;
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scrollbar-width: thin;
  scrollbar-color: var(--clr-border) var(--clr-bg);
}

body {
  font-family: var(--font-mono);
  font-size: var(--text-base);
  line-height: var(--leading-normal);
  color: var(--clr-text);
  background-color: var(--clr-bg);
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Custom scrollbar (WebKit) */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: var(--clr-bg); }
::-webkit-scrollbar-thumb { background: var(--clr-border); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--clr-border-light); }

/* --- Typography --- */
h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-mono);
  font-weight: 600;
  line-height: var(--leading-tight);
  color: var(--clr-text);
}

a {
  color: var(--clr-accent);
  text-decoration: none;
  transition: color var(--transition-fast);

  &:hover { color: color-mix(in srgb, var(--clr-accent) 80%, white); }
}

img {
  max-width: 100%;
  height: auto;
  display: block;
}

button {
  font-family: var(--font-mono);
  font-weight: 500;
  cursor: pointer;
  border: none;
  background: none;
  color: inherit;
}

input, select, textarea {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--clr-text);
  background: var(--clr-bg-input);
  border: 1px solid var(--clr-border);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  outline: none;
  transition: border-color var(--transition-fast);

  &:focus {
    border-color: var(--clr-border-focus);
    box-shadow: 0 0 0 1px var(--clr-accent-dim);
  }

  &::placeholder { color: var(--clr-text-dim); }
}

textarea { resize: vertical; min-height: 60px; }

select { cursor: pointer; }

/* --- Utility Classes --- */
.text-muted    { color: var(--clr-text-muted); }
.text-accent   { color: var(--clr-accent); }
.text-success   { color: var(--clr-success); }
.text-danger    { color: var(--clr-danger); }
.text-glow      { text-shadow: 0 0 10px var(--clr-accent-glow), 0 0 30px color-mix(in srgb, var(--clr-accent) 15%, transparent); }
.text-terminal-glow { text-shadow: 0 0 8px color-mix(in srgb, var(--clr-success) 40%, transparent); }
.truncate       { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.line-clamp-2  { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.sr-only        { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; }

/* --- Panel / Card --- */
.panel-steel {
  background: var(--clr-bg-panel);
  border: 1px solid var(--clr-border);
  border-radius: var(--radius-md);
  padding: var(--space-4);
}

/* --- Buttons --- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-5);
  font-family: var(--font-mono);
  font-size: var(--text-base);
  font-weight: 600;
  letter-spacing: 0.02em;
  border-radius: var(--radius-sm);
  transition: all var(--transition-fast);
  white-space: nowrap;
  user-select: none;

  &:active { transform: scale(0.97); }
}

.btn-primary {
  background: var(--clr-accent);
  color: #000;
  border: 1px solid var(--clr-accent);

  &:hover { background: color-mix(in srgb, var(--clr-accent) 85%, white); }
}

.btn-secondary {
  background: transparent;
  color: var(--clr-accent);
  border: 1px solid var(--clr-border);

  &:hover { border-color: var(--clr-accent); background: var(--clr-accent-dim); }
}

.btn-ghost {
  background: transparent;
  color: var(--clr-text-muted);
  padding: var(--space-1) var(--space-2);

  &:hover { color: var(--clr-text); background: var(--clr-surface); }
}

.btn-danger {
  background: transparent;
  color: var(--clr-danger);
  border: 1px solid color-mix(in srgb, var(--clr-danger) 40%, transparent);

  &:hover { background: color-mix(in srgb, var(--clr-danger) 15%, transparent); border-color: var(--clr-danger); }
}

.btn-sm { padding: var(--space-1) var(--space-3); font-size: var(--text-sm); font-weight: 500; }
.btn-lg { padding: var(--space-3) var(--space-6); font-size: var(--text-md); }

/* --- Input Terminal --- */
.input-terminal {
  background: var(--clr-bg-input);
  border: 1px solid var(--clr-border);
  border-radius: var(--radius-sm);
  padding: var(--space-2) var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--clr-text);
  width: 100%;
  outline: none;
  transition: border-color var(--transition-fast);

  &:focus { border-color: var(--clr-accent); }
}

/* --- Badge --- */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  font-size: var(--text-xs);
  font-weight: 500;
  border-radius: var(--radius-sm);
  white-space: nowrap;
}

.badge-accent {
  background: var(--clr-accent-dim);
  color: var(--clr-accent);
  border: 1px solid color-mix(in srgb, var(--clr-accent) 20%, transparent);
}

.badge-success {
  background: color-mix(in srgb, var(--clr-success) 15%, transparent);
  color: var(--clr-success);
  border: 1px solid color-mix(in srgb, var(--clr-success) 20%, transparent);
}

.badge-muted {
  background: var(--clr-surface);
  color: var(--clr-text-muted);
  border: 1px solid var(--clr-border);
}

/* --- Table --- */
.data-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
  overflow-x: auto;

  & th, & td {
    padding: var(--space-2) var(--space-3);
    border: 1px solid var(--clr-border);
    text-align: left;
  }

  & th {
    background: var(--clr-surface);
    font-weight: 700;
    font-size: var(--text-xs);
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--clr-accent);
  }

  & td { background: var(--clr-bg-input); font-weight: 500; }

  & tr:hover td { background: var(--clr-surface-alt); }
}

/* --- Spinner --- */
.spinner {
  width: 24px;
  height: 24px;
  border: 2px solid var(--clr-border);
  border-top-color: var(--clr-accent);
  border-radius: 50%;
  animation: spin 0.6s linear infinite;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

/* --- Animations --- */
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes slideDown {
  from { opacity: 0; transform: translateY(-8px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}

@keyframes blink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

@keyframes glowPulse {
  0%, 100% { box-shadow: 0 0 4px var(--clr-accent-dim); }
  50% { box-shadow: 0 0 12px var(--clr-accent-glow); }
}

.animate-fade-in-up { animation: fadeInUp 0.4s ease both; }
.animate-fade-in    { animation: fadeIn 0.3s ease both; }
.animate-slide-down { animation: slideDown 0.3s ease both; }

/* Staggered children */
.stagger-list > * {
  animation: fadeInUp 0.3s ease both;
}

@supports (animation-timeline: view()) {
  /* Scroll-driven animation fallback for modern browsers */
  .scroll-reveal {
    animation: fadeInUp linear both;
    animation-timeline: view();
    animation-range: entry 0% entry 20%;
  }
}

/* --- Toast --- */
#toast-container {
  position: fixed;
  bottom: var(--space-6);
  right: var(--space-6);
  z-index: 9999;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  pointer-events: none;
}

.toast {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  background: var(--clr-bg-elevated);
  border: 1px solid var(--clr-border);
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
  min-width: 280px;
  max-width: 420px;
  pointer-events: auto;
  animation: slideInToast 0.3s ease;
  box-shadow: 0 8px 24px rgba(0,0,0,0.4);
}

.toast.toast-exit {
  animation: slideOutToast 0.2s ease forwards;
}

.toast-destructive { border-color: color-mix(in srgb, var(--clr-danger) 40%, transparent); }

.toast-title { font-size: var(--text-sm); font-weight: 600; color: var(--clr-text); }
.toast-desc  { font-size: var(--text-xs); color: var(--clr-text-muted); margin-top: 2px; }
.toast-close {
  margin-left: auto;
  color: var(--clr-text-dim);
  padding: 2px;
  border-radius: var(--radius-sm);
  &:hover { color: var(--clr-text); background: var(--clr-surface); }
}

@keyframes slideInToast {
  from { opacity: 0; transform: translateX(100%); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes slideOutToast {
  from { opacity: 1; transform: translateX(0); }
  to   { opacity: 0; transform: translateX(100%); }
}

/* --- Game Item Image --- */
.game-item-img {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;

  & img {
    width: 48px;
    height: 48px;
    object-fit: contain;
    border-radius: var(--radius-md);
    image-rendering: pixelated;
  }

  & img[alt]::after {
    /* fallback for broken images shown via JS */
  }
}

.game-item-img-fallback {
  width: 48px;
  height: 48px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #1a1a1a;
  border: 1px solid #333;
  border-radius: var(--radius-md);
  font-size: 20px;
  font-weight: 600;
  color: var(--clr-accent);
}

.game-item-name {
  font-size: var(--text-xs);
  color: var(--clr-text-muted);
  text-align: center;
  max-width: 56px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
