/* css/style.css — Table Order KDS
   Dark, high-contrast, large touch targets. This runs on a screen
   mounted in a kitchen, often glanced at from a few feet away with
   greasy/gloved hands doing the tapping — different constraints than
   a phone or desktop dashboard entirely. */

:root {
  --bg: #0F1115;
  --card-bg: #1A1D24;
  --card-border: #2B2F3A;
  --text: #F1F5F9;
  --text-muted: #8B93A7;
  --ok: #22C55E;
  --warning: #F59E0B;
  --overdue: #EF4444;
  --primary: #2C5AA0;
  --radius: 12px;
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }

body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: var(--bg); color: var(--text); }

.muted { color: var(--text-muted); }
.error-text { color: var(--overdue); }

/* ---------------- Login ---------------- */

#view-login { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: var(--bg); padding: 1.5rem; }
.login-card { background: var(--card-bg); border: 1px solid var(--card-border); padding: 2rem; border-radius: var(--radius); width: 100%; max-width: 360px; }
.login-card h1 { margin: 0 0 0.25rem; font-size: 1.4rem; color: var(--text); }
#login-form label { display: block; font-size: 0.85rem; font-weight: 600; margin: 1rem 0 0.35rem; color: var(--text-muted); }
#login-form input { width: 100%; padding: 0.65rem 0.75rem; border: 1px solid var(--card-border); border-radius: var(--radius); font-size: 1rem; background: #12141A; color: var(--text); }
#login-form input:focus { outline: none; border-color: var(--primary); }

button.big { width: 100%; padding: 0.8rem; font-size: 1rem; border-radius: var(--radius); font-weight: 700; cursor: pointer; border: none; margin-top: 1.25rem; }
button.primary { background: var(--primary); color: white; }
button.primary:disabled { opacity: 0.55; }

.link-btn-header { background: none; border: none; color: var(--text-muted); font-size: 0.85rem; cursor: pointer; text-decoration: underline; }

/* ---------------- Board header ---------------- */

.board-header {
  display: flex; align-items: center; gap: 1.25rem; padding: 0.9rem 1.5rem;
  background: var(--card-bg); border-bottom: 1px solid var(--card-border); position: sticky; top: 0; z-index: 10;
}
.board-title { font-size: 1.2rem; font-weight: 800; }
.board-clock { font-variant-numeric: tabular-nums; font-size: 1.1rem; color: var(--text-muted); }
.board-whoami { margin-left: auto; font-size: 0.9rem; color: var(--text-muted); }

/* ---------------- Ticket board ---------------- */

.ticket-board {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  padding: 1.25rem;
  align-content: flex-start;
}

.board-empty-msg { width: 100%; text-align: center; font-size: 1.3rem; padding: 3rem 0; }

.ticket-card {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius);
  width: 300px;
  overflow: hidden;
  transition: opacity 0.5s ease;
}
.ticket-card.ticket-complete { opacity: 0.5; }

.ticket-header {
  display: flex; align-items: center; gap: 0.6rem; padding: 0.75rem 1rem;
  border-left: 6px solid var(--text-muted); font-weight: 800;
}
.ticket-header.urgency-ok { border-left-color: var(--ok); }
.ticket-header.urgency-warning { border-left-color: var(--warning); background: rgba(245,158,11,0.08); }
.ticket-header.urgency-overdue { border-left-color: var(--overdue); background: rgba(239,68,68,0.1); animation: pulse-overdue 1.6s infinite; }

@keyframes pulse-overdue {
  0%, 100% { background: rgba(239,68,68,0.1); }
  50% { background: rgba(239,68,68,0.22); }
}

.ticket-table { font-size: 1.1rem; }
.ticket-source { font-size: 0.75rem; color: var(--text-muted); font-weight: 500; }
.ticket-timer { margin-left: auto; font-variant-numeric: tabular-nums; font-size: 0.95rem; }

.ticket-items { padding: 0.5rem 0.9rem 0.9rem; }

.ticket-item { padding: 0.6rem 0; border-bottom: 1px solid var(--card-border); }
.ticket-item:last-child { border-bottom: none; }
.ticket-item.item-status-ready { opacity: 0.55; }

.ticket-item-main { display: flex; gap: 0.5rem; align-items: baseline; }
.ticket-item-qty { font-weight: 800; color: var(--text-muted); }
.ticket-item-name { font-weight: 700; font-size: 1.02rem; }

.ticket-item-modifiers { font-size: 0.82rem; color: var(--text-muted); margin: 0.15rem 0 0 1.4rem; }

.ticket-item-notes {
  font-size: 0.85rem; font-weight: 700; color: #FDE047; margin: 0.3rem 0 0 1.4rem;
  background: rgba(253,224,71,0.1); padding: 0.3rem 0.5rem; border-radius: 6px; display: inline-block;
}

.ticket-item-footer { display: flex; align-items: center; justify-content: space-between; margin-top: 0.5rem; }

.ticket-item-time { font-size: 0.78rem; font-variant-numeric: tabular-nums; font-weight: 700; }
.ticket-item-time.urgency-ok { color: var(--ok); }
.ticket-item-time.urgency-warning { color: var(--warning); }
.ticket-item-time.urgency-overdue { color: var(--overdue); }

.ticket-item-done { font-size: 0.85rem; color: var(--ok); font-weight: 700; }

.bump-btn {
  background: var(--primary); color: white; border: none; border-radius: 8px;
  padding: 0.55rem 1.1rem; font-size: 0.9rem; font-weight: 800; cursor: pointer; min-width: 84px;
}
.item-status-preparing .bump-btn { background: var(--warning); color: #1F2937; }

.ticket-ready-banner {
  background: rgba(34,197,94,0.15); color: var(--ok); text-align: center; font-weight: 800;
  padding: 0.5rem; font-size: 0.85rem;
}