/* ADSCode Networking — system wizualny. Ciepła biel, grafit, jeden akcent (nadpisywany per wydarzenie przez theme.css). */
:root {
  --bg: #f6f5f2;
  --surface: #ffffff;
  --ink: #16191d;
  --muted: #5a6068;
  --line: #e7e4de;
  --line-strong: #cfc9bf;
  --accent: #2b6a5c;
  --accent-dark: #1f5144;
  --accent-ink: #ffffff;
  --accent-soft: #e8f0ed;
  --danger: #a3322a;
  --danger-soft: #f8e9e7;
  --warn-soft: #fbf1dc;
  --warn-ink: #6b4a08;
  --ok-soft: #e6f1ea;
  --radius: 12px;
  --safe-b: env(safe-area-inset-bottom, 0px);
  --safe-t: env(safe-area-inset-top, 0px);
  --font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
body { margin: 0; background: var(--bg); color: var(--ink); font: 16px/1.5 var(--font); min-height: 100vh; min-height: 100dvh; overflow-x: hidden; }
h1, h2, h3 { line-height: 1.25; margin: 0 0 .5rem; font-weight: 650; letter-spacing: -.01em; }
h1 { font-size: 1.5rem; } h2 { font-size: 1.15rem; } h3 { font-size: 1rem; }
p { margin: 0 0 .75rem; }
a { color: var(--accent); text-underline-offset: 2px; }
a:hover { color: var(--accent-dark); }
img, svg { max-width: 100%; }
.icon { width: 22px; height: 22px; flex: none; vertical-align: -5px; }
.icon-sm { width: 18px; height: 18px; vertical-align: -4px; }
.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; }
:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; border-radius: 4px; }
.skip { position: absolute; left: -999px; top: 0; background: var(--ink); color: #fff; padding: 10px 14px; z-index: 100; }
.skip:focus { left: 8px; top: 8px; }

/* Układ */
.topbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: calc(10px + var(--safe-t)) 16px 10px; border-bottom: 1px solid var(--line); background: var(--surface); }
.brand { font-weight: 700; font-size: .95rem; letter-spacing: -.01em; color: var(--ink); text-decoration: none; }
.brand span { color: var(--accent); }
.topbar .who { font-size: .85rem; color: var(--muted); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.page { width: 100%; max-width: 600px; margin: 0 auto; padding: 18px 16px 32px; }
.with-nav .page { padding-bottom: calc(88px + var(--safe-b)); }
.page-wide { max-width: 1100px; }
.foot { text-align: center; font-size: .8rem; color: var(--muted); padding: 8px 16px 20px; }
.with-nav .foot { padding-bottom: calc(76px + var(--safe-b)); }
.stack > * + * { margin-top: 1rem; }
.stack-sm > * + * { margin-top: .5rem; }
.row { display: flex; gap: 10px; align-items: center; }
.row-between { display: flex; gap: 10px; align-items: center; justify-content: space-between; }
.wrap { flex-wrap: wrap; }
.muted { color: var(--muted); }
.small { font-size: .875rem; }
.tiny { font-size: .8rem; }
.right { text-align: right; }
.center { text-align: center; }
.nowrap { white-space: nowrap; }
.break { overflow-wrap: anywhere; }

/* Przyciski */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; padding: 10px 18px; border-radius: var(--radius); border: 1px solid var(--accent); background: var(--accent); color: var(--accent-ink); font: 600 1rem var(--font); text-decoration: none; cursor: pointer; text-align: center; }
.btn:hover { background: var(--accent-dark); border-color: var(--accent-dark); color: var(--accent-ink); }
.btn.secondary { background: var(--surface); color: var(--ink); border-color: var(--line-strong); }
.btn.secondary:hover { background: #f1eee8; color: var(--ink); }
.btn.danger { background: var(--danger); border-color: var(--danger); color: #fff; }
.btn.ghost { background: transparent; border-color: transparent; color: var(--accent); padding-inline: 8px; }
.btn.block { display: flex; width: 100%; }
.btn.small { min-height: 40px; padding: 6px 12px; font-size: .9rem; }
.btn[disabled], .btn.is-busy { opacity: .6; cursor: progress; }

/* Formularze */
label { display: block; font-weight: 600; font-size: .92rem; margin-bottom: 4px; }
.field { margin-bottom: 14px; }
.hint { font-size: .85rem; color: var(--muted); margin-top: 4px; }
input[type=text], input[type=email], input[type=tel], input[type=url], input[type=password], input[type=search], input[type=number], input[type=datetime-local], input[type=file], select, textarea {
  width: 100%; min-height: 46px; padding: 10px 12px; border: 1px solid var(--line-strong); border-radius: var(--radius); background: var(--surface); color: var(--ink); font: 16px/1.4 var(--font);
}
textarea { min-height: 96px; resize: vertical; }
input:focus, select:focus, textarea:focus { border-color: var(--accent); }
input.code { font-size: 1.6rem; letter-spacing: .4em; text-align: center; font-variant-numeric: tabular-nums; }
.check { display: flex; gap: 10px; align-items: flex-start; font-weight: 400; margin-bottom: 8px; }
.check input { width: 22px; height: 22px; margin-top: 1px; flex: none; accent-color: var(--accent); }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chip { position: relative; }
.chip input { position: absolute; opacity: 0; width: 100%; height: 100%; inset: 0; margin: 0; cursor: pointer; }
.chip span { display: inline-flex; align-items: center; min-height: 40px; padding: 6px 12px; border: 1px solid var(--line-strong); border-radius: 999px; background: var(--surface); font-weight: 500; font-size: .92rem; }
.chip input:checked + span { background: var(--accent-soft); border-color: var(--accent); color: var(--accent-dark); font-weight: 650; }
.chip input:focus-visible + span { outline: 3px solid var(--accent); outline-offset: 2px; }
.counter { font-size: .85rem; color: var(--muted); }

/* Komunikaty */
.flash { padding: 12px 14px; border-radius: var(--radius); border: 1px solid var(--line); background: var(--surface); margin-bottom: 14px; font-size: .95rem; }
.flash.error { background: var(--danger-soft); border-color: #e2b8b3; color: #6f1f19; }
.flash.ok { background: var(--ok-soft); border-color: #b9d6c4; color: #1d4d33; }
.flash.info { background: var(--warn-soft); border-color: #e6d3a1; color: var(--warn-ink); }
.netbar { display: none; position: sticky; top: 0; z-index: 50; background: var(--warn-ink); color: #fff; text-align: center; padding: 8px 12px; font-size: .9rem; }
.netbar.show { display: block; }

/* Etykiety stanu */
.tag { display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: .78rem; font-weight: 600; border: 1px solid var(--line-strong); color: var(--muted); background: var(--surface); white-space: nowrap; }
.tag.ok { background: var(--ok-soft); color: #1d4d33; border-color: #b9d6c4; }
.tag.warn { background: var(--warn-soft); color: var(--warn-ink); border-color: #e6d3a1; }
.tag.bad { background: var(--danger-soft); color: #6f1f19; border-color: #e2b8b3; }
.tag.accent { background: var(--accent-soft); color: var(--accent-dark); border-color: #bcd3cb; }

/* Listy i sekcje (różne formy zamiast identycznych kart) */
.section { border-top: 1px solid var(--line); padding-top: 14px; margin-top: 22px; }
.section:first-child { border-top: 0; padding-top: 0; margin-top: 0; }
.rows { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--line); }
.rows > li { border-bottom: 1px solid var(--line); }
.rows a.item, .rows .item { display: flex; gap: 12px; align-items: center; padding: 12px 2px; text-decoration: none; color: inherit; min-height: 56px; }
.rows a.item:hover { background: rgba(0,0,0,.025); }
.rows .grow { flex: 1; min-width: 0; }
.rows .title { font-weight: 600; display: block; }
.rows .sub { color: var(--muted); font-size: .88rem; display: block; overflow: hidden; text-overflow: ellipsis; }
.avatar { width: 44px; height: 44px; border-radius: 50%; background: var(--accent-soft); color: var(--accent-dark); display: inline-flex; align-items: center; justify-content: center; font-weight: 700; flex: none; overflow: hidden; border: 1px solid var(--line); }
.avatar img { width: 100%; height: 100%; object-fit: cover; }
.avatar.lg { width: 72px; height: 72px; font-size: 1.5rem; }
.panel { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px; }
.panel.soft { background: var(--accent-soft); border-color: #bcd3cb; }
.kv { display: grid; grid-template-columns: auto 1fr; gap: 6px 14px; margin: 0; }
.kv dt { color: var(--muted); font-size: .9rem; } .kv dd { margin: 0; overflow-wrap: anywhere; }
.reason { font-size: .9rem; color: var(--accent-dark); margin: 4px 0 0; }
.empty { text-align: center; color: var(--muted); padding: 28px 12px; }
.empty .icon { width: 34px; height: 34px; color: var(--line-strong); margin-bottom: 6px; }
.visibility { font-size: .82rem; color: var(--muted); display: flex; gap: 6px; align-items: center; margin-top: 4px; }

/* Dolna nawigacja */
.nav-bottom { position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; background: var(--surface); border-top: 1px solid var(--line); display: grid; grid-template-columns: repeat(5, 1fr); padding-bottom: var(--safe-b); }
.nav-bottom a { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; min-height: 58px; padding: 6px 2px; color: var(--muted); text-decoration: none; font-size: .72rem; font-weight: 600; position: relative; }
.nav-bottom a[aria-current=page] { color: var(--accent); }
.nav-bottom a[aria-current=page]::before { content: ""; position: absolute; top: 0; left: 24%; right: 24%; height: 3px; background: var(--accent); border-radius: 0 0 3px 3px; }
.nav-bottom .badge { position: absolute; top: 5px; left: calc(50% + 6px); min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: var(--danger); color: #fff; font-size: .7rem; display: flex; align-items: center; justify-content: center; }

/* Bilet */
.ticket { background: var(--surface); border: 1px solid var(--line-strong); border-radius: var(--radius); overflow: hidden; }
.ticket-head { padding: 14px 16px; border-bottom: 1px dashed var(--line-strong); }
.ticket-qr { padding: 20px; display: flex; justify-content: center; background: #fff; }
.ticket-qr svg { width: min(78vw, 280px); height: auto; display: block; }
.ticket-foot { padding: 12px 16px; border-top: 1px dashed var(--line-strong); font-size: .9rem; }
.ticket.checked .ticket-head { background: var(--ok-soft); }

/* Czat */
.chat-page { display: flex; flex-direction: column; height: 100vh; height: 100dvh; height: var(--vvh, 100dvh); max-width: 600px; margin: 0 auto; background: var(--bg); }
.chat-head { padding: calc(8px + var(--safe-t)) 12px 8px; border-bottom: 1px solid var(--line); background: var(--surface); display: flex; gap: 8px; align-items: center; }
.chat-log { flex: 1; overflow-y: auto; padding: 14px 12px; display: flex; flex-direction: column; gap: 8px; overscroll-behavior: contain; }
.msg { max-width: 82%; padding: 9px 12px; border-radius: 12px; background: var(--surface); border: 1px solid var(--line); overflow-wrap: anywhere; white-space: pre-wrap; align-self: flex-start; }
.msg.mine { align-self: flex-end; background: var(--accent-soft); border-color: #bcd3cb; }
.msg time { display: block; font-size: .72rem; color: var(--muted); margin-top: 2px; }
.msg.pending { opacity: .6; }
.msg.failed { border-color: var(--danger); }
.composer { display: flex; gap: 8px; align-items: flex-end; padding: 8px 10px calc(8px + var(--safe-b)); border-top: 1px solid var(--line); background: var(--surface); }
.composer textarea { min-height: 46px; max-height: 120px; flex: 1; }
.composer .btn { flex: none; min-width: 48px; padding-inline: 12px; }

/* Obsługa wejścia */
.scanner { position: relative; background: #111; border-radius: var(--radius); overflow: hidden; aspect-ratio: 4/3; }
.scanner video { width: 100%; height: 100%; object-fit: cover; display: block; }
.scanner .frame { position: absolute; inset: 18% 18%; border: 3px solid rgba(255,255,255,.85); border-radius: 8px; pointer-events: none; }
.result { border-radius: var(--radius); padding: 14px; border: 1px solid var(--line-strong); background: var(--surface); }
.result.ok { border-color: #8fbfa3; background: var(--ok-soft); }
.result.warn { border-color: #e0c77f; background: var(--warn-soft); }
.result.bad { border-color: #d9a29c; background: var(--danger-soft); }
.result .big { font-size: 1.25rem; font-weight: 700; }

/* Panel administratora */
.admin { display: grid; grid-template-columns: 230px minmax(0, 1fr); min-height: 100vh; }
.admin-side { background: var(--surface); border-right: 1px solid var(--line); padding: 16px 12px; position: sticky; top: 0; height: 100vh; overflow-y: auto; }
.admin-side .brand { display: block; padding: 4px 8px 14px; }
.admin-side nav a { display: flex; gap: 10px; align-items: center; padding: 9px 10px; border-radius: 6px; color: var(--ink); text-decoration: none; font-size: .95rem; min-height: 40px; }
.admin-side nav a:hover { background: #f1eee8; }
.admin-side nav a[aria-current=page] { background: var(--accent-soft); color: var(--accent-dark); font-weight: 650; }
.admin-side .grp { font-size: .72rem; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); padding: 14px 10px 4px; }
.admin-main { padding: 22px 26px 40px; min-width: 0; }
.stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 0; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); }
.stats > div { padding: 14px 16px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); margin: 0 -1px -1px 0; }
.stats .n { font-size: 1.7rem; font-weight: 700; font-variant-numeric: tabular-nums; display: block; line-height: 1.2; }
.stats .l { font-size: .85rem; color: var(--muted); }
.table-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); }
table { border-collapse: collapse; width: 100%; font-size: .92rem; }
th, td { text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--line); vertical-align: top; }
th { font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); background: #fbfaf7; white-space: nowrap; }
tr:last-child td { border-bottom: 0; }
.filters { display: flex; flex-wrap: wrap; gap: 10px; align-items: end; margin-bottom: 14px; }
.filters .field { margin: 0; }
.tabs { display: flex; gap: 4px; overflow-x: auto; border-bottom: 1px solid var(--line); margin-bottom: 16px; }
.tabs a { padding: 10px 14px; text-decoration: none; color: var(--muted); white-space: nowrap; border-bottom: 3px solid transparent; font-weight: 600; min-height: 44px; display: flex; align-items: center; }
.tabs a[aria-current=page] { color: var(--accent); border-bottom-color: var(--accent); }
details.inline { margin: 0; } details.inline > summary { cursor: pointer; color: var(--accent); font-weight: 600; min-height: 32px; list-style: none; }
details.inline > summary::-webkit-details-marker { display: none; }
.swatches { display: flex; gap: 10px; flex-wrap: wrap; }
.swatch { display: flex; align-items: center; gap: 8px; font-weight: 500; }
.swatch i { width: 22px; height: 22px; border-radius: 50%; display: inline-block; border: 1px solid rgba(0,0,0,.2); }
.demo-banner { background: var(--warn-soft); color: var(--warn-ink); text-align: center; padding: 6px 12px; font-size: .85rem; border-bottom: 1px solid #e6d3a1; }
.legal-banner { background: var(--warn-soft); border: 1px solid #e6d3a1; color: var(--warn-ink); padding: 12px 14px; border-radius: var(--radius); margin-bottom: 16px; }

/* Wejście na wydarzenie */
.hero { padding: 6px 0 14px; }
.hero .logo { max-height: 56px; max-width: 220px; margin-bottom: 12px; display: block; }
.hero h1 { font-size: 1.65rem; }
.meta { display: flex; flex-direction: column; gap: 4px; color: var(--muted); font-size: .95rem; margin: 6px 0 14px; }
.meta .icon { margin-right: 6px; }

@media (max-width: 860px) {
  .admin { display: block; }
  .admin-side { position: static; height: auto; border-right: 0; border-bottom: 1px solid var(--line); padding: 8px 8px 0; }
  .admin-side nav { display: flex; overflow-x: auto; gap: 2px; padding-bottom: 8px; }
  .admin-side nav a { white-space: nowrap; }
  .admin-side .grp { display: none; }
  .admin-main { padding: 16px 14px 32px; }
}
@media (min-width: 700px) { .nav-bottom { max-width: 600px; left: 50%; right: auto; width: 100%; transform: translateX(-50%); border-left: 1px solid var(--line); border-right: 1px solid var(--line); } }
@media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important; scroll-behavior: auto !important; } }
@media (prefers-contrast: more) { :root { --line: #a39d92; --muted: #3f4349; } }
@media print { .nav-bottom, .topbar, .foot, .no-print { display: none !important; } body { background: #fff; } }

/* Panel i obsługa */
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 560px) { .grid2 { grid-template-columns: 1fr; } }
.tbl { min-width: 640px; }
.stats .stat { padding: 14px 16px; }
.stats .stat .n { font-size: 1.7rem; font-weight: 700; font-variant-numeric: tabular-nums; display: block; line-height: 1.2; }
.stats .stat .l { font-size: .85rem; color: var(--muted); }
.inline-form { display: inline; margin: 0; }
.admin-page .row input:not([type=checkbox]):not([type=radio]) { min-height: 38px; }

/* Klasy pomocnicze (zastępują atrybuty style — CSP zabrania inline) */
.u-align-items-flex-start { align-items:flex-start; }
.u-align-items-flex-start-flex-wrap-wrap { align-items:flex-start;flex-wrap:wrap; }
.u-border-0-padding-0-margin-0 { border:0;padding:0;margin:0; }
.u-display-block { display:block; }
.u-flex-1-min-width-12rem { flex:1;min-width:12rem; }
.u-flex-wrap-wrap { flex-wrap:wrap; }
.u-font-size-1-1rem { font-size:1.1rem; }
.u-font-size-2rem-letter-spacing-15em-font-family-ui-monospace-monospace { font-size:2rem;letter-spacing:.15em;font-family:ui-monospace,monospace; }
.u-font-weight-650-margin-bottom-6px { font-weight:650;margin-bottom:6px; }
.u-justify-self-start { justify-self:start; }
.u-list-style-none-margin-0-font-family-ui-monospace-monospace-font-size-1-1rem-line-height-2 { list-style:none;margin:0;font-family:ui-monospace,monospace;font-size:1.1rem;line-height:2; }
.u-margin-0 { margin:0; }
.u-margin-0-12px-8px { margin:0 12px 8px; }
.u-margin-2px-0-0 { margin:2px 0 0; }
.u-margin-4px-0-0 { margin:4px 0 0; }
.u-margin-4px-0-0-white-space-pre-line { margin:4px 0 0;white-space:pre-line; }
.u-margin-6px-0-0 { margin:6px 0 0; }
.u-margin-6px-0-0-padding-left-18px { margin:6px 0 0;padding-left:18px; }
.u-margin-8px-0-0 { margin:8px 0 0; }
.u-margin-8px-12px-0 { margin:8px 12px 0; }
.u-margin-bottom-8px { margin-bottom:8px; }
.u-margin-top-10px { margin-top:10px; }
.u-margin-top-14px-gap-8px { margin-top:14px;gap:8px; }
.u-margin-top-6px { margin-top:6px; }
.u-margin-top-8px { margin-top:8px; }
.u-max-width-220px-margin-0-auto { max-width:220px;margin:0 auto; }
.u-min-height-0-padding-0-4px { min-height:0;padding:0 4px; }
.u-min-width-12rem { min-width:12rem; }
.u-min-width-3-2rem { min-width:3.2rem; }
.u-padding-18px { padding:18px; }
.u-padding-top-24px { padding-top:24px; }
.u-text-align-center { text-align:center; }
.u-text-decoration-none-color-inherit-min-width-0 { text-decoration:none;color:inherit;min-width:0; }
.u-white-space-normal { white-space:normal; }
.u-white-space-pre-line { white-space:pre-line; }
.u-white-space-pre-wrap-margin-0-font-family-inherit { white-space:pre-wrap;margin:0;font-family:inherit; }
.u-width-100-border-radius-8px-background-222-aspect-ratio-1-1-object-fit-cover { width:100%;border-radius:8px;background:#222;aspect-ratio:1/1;object-fit:cover; }
.u-width-7rem { width:7rem; }
.swatch { display: inline-block; width: 14px; height: 14px; border-radius: 3px; vertical-align: -2px; }
.sw-green { background: #2B6A5C; }
.sw-blue { background: #2C5A8A; }
.sw-terracotta { background: #A4492F; }
.sw-plum { background: #7A3B5E; }
.sw-slate { background: #3F5560; }

.brand { white-space: nowrap; }
.admin-page .tabs { padding: 0 16px; max-width: 1100px; margin-left: auto; margin-right: auto; }
.admin-page .topbar { gap: 12px; }

/* =====================================================================
   WARSTWA PREMIUM — głębia, szkło, miękkie cienie, płynny ruch.
   Akcent pochodzi z theme.css wydarzenia (zmienne --accent*), więc
   wszystkie gradienty i poświaty dopasowują się do marki organizatora.
   ===================================================================== */
:root {
  --r-sm: 10px; --r-md: 14px; --r-lg: 20px; --r-xl: 28px;
  --accent-hi: color-mix(in srgb, var(--accent) 82%, #fff);
  --accent-grad: linear-gradient(135deg, var(--accent-hi) 0%, var(--accent) 45%, var(--accent-dark) 100%);
  --accent-line: color-mix(in srgb, var(--accent) 26%, #fff);
  --glass: color-mix(in srgb, var(--surface) 78%, transparent);
  --sh-1: 0 1px 2px rgba(20,24,30,.05), 0 1px 1px rgba(20,24,30,.03);
  --sh-2: 0 2px 4px rgba(20,24,30,.04), 0 8px 24px -6px rgba(20,24,30,.10);
  --sh-3: 0 4px 8px rgba(20,24,30,.05), 0 24px 48px -12px rgba(20,24,30,.20);
  --glow: 0 8px 24px -8px color-mix(in srgb, var(--accent) 55%, transparent);
  --ease: cubic-bezier(.22, 1, .36, 1);
  --ease-spring: cubic-bezier(.34, 1.56, .64, 1);
  --t-fast: .16s; --t-med: .32s; --t-slow: .6s;
}
body {
  background:
    radial-gradient(1100px 520px at 50% -180px, color-mix(in srgb, var(--accent) 9%, transparent), transparent 70%),
    var(--bg);
  background-attachment: fixed;
  font-feature-settings: "cv11", "ss01", "tnum" 0;
  -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}
h1 { font-size: 1.75rem; letter-spacing: -.025em; font-weight: 700; }
h2 { font-size: 1.1rem; letter-spacing: -.015em; font-weight: 680; }
::selection { background: color-mix(in srgb, var(--accent) 22%, #fff); }
:focus-visible { outline: 0; box-shadow: 0 0 0 3px var(--bg), 0 0 0 5px var(--accent); border-radius: var(--r-sm); }
a { transition: color var(--t-fast) var(--ease); }

/* Pasek górny i dolna nawigacja: efekt szkła */
.topbar { position: sticky; top: 0; z-index: 45; background: var(--glass); backdrop-filter: saturate(180%) blur(18px); -webkit-backdrop-filter: saturate(180%) blur(18px); border-bottom: 1px solid color-mix(in srgb, var(--line) 70%, transparent); }
.brand { font-weight: 750; letter-spacing: -.02em; display: inline-flex; align-items: center; gap: 8px; }
.brand::before { content: ""; width: 22px; height: 22px; border-radius: 7px; background: var(--accent-grad); box-shadow: var(--glow), inset 0 1px 0 rgba(255,255,255,.35); flex: none; }
.brand span { color: var(--accent); }
.topbar .who { background: color-mix(in srgb, var(--accent) 8%, transparent); padding: 4px 10px; border-radius: 999px; max-width: 55%; font-weight: 550; }
.nav-bottom { background: var(--glass); backdrop-filter: saturate(180%) blur(20px); -webkit-backdrop-filter: saturate(180%) blur(20px); border-top: 1px solid color-mix(in srgb, var(--line) 70%, transparent); box-shadow: 0 -8px 30px -12px rgba(20,24,30,.12); }
.nav-bottom a { transition: color var(--t-med) var(--ease), transform var(--t-fast) var(--ease); }
.nav-bottom a:active { transform: scale(.92); }
.nav-bottom a .icon { transition: transform var(--t-med) var(--ease-spring); }
.nav-bottom a[aria-current=page] .icon { transform: translateY(-1px) scale(1.12); }
.nav-bottom a[aria-current=page]::before { height: 3px; left: 30%; right: 30%; background: var(--accent-grad); box-shadow: var(--glow); animation: nav-pop var(--t-med) var(--ease-spring) both; }
.nav-bottom .badge { background: linear-gradient(180deg, #d9534a, #b33a31); box-shadow: 0 2px 6px rgba(179,58,49,.45); animation: badge-pop .5s var(--ease-spring) both; }

/* Przyciski */
.btn { border-radius: var(--r-md); min-height: 48px; padding: 11px 20px; font-weight: 650; letter-spacing: -.005em; position: relative; overflow: hidden; isolation: isolate;
  background: var(--accent-grad); border: 0; box-shadow: var(--glow), inset 0 1px 0 rgba(255,255,255,.25), inset 0 -1px 0 rgba(0,0,0,.12);
  transition: transform var(--t-fast) var(--ease), box-shadow var(--t-med) var(--ease), filter var(--t-med) var(--ease), background-color var(--t-med) var(--ease); }
.btn::after { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(115deg, transparent 30%, rgba(255,255,255,.28) 50%, transparent 70%); transform: translateX(-120%); transition: transform .7s var(--ease); }
.btn:hover { background: var(--accent-grad); filter: brightness(1.06) saturate(1.05); transform: translateY(-1px); box-shadow: 0 12px 28px -10px color-mix(in srgb, var(--accent) 70%, transparent), inset 0 1px 0 rgba(255,255,255,.3); }
.btn:hover::after { transform: translateX(120%); }
.btn:active { transform: translateY(0) scale(.975); filter: brightness(.97); box-shadow: var(--sh-1); }
.btn.secondary { background: var(--surface); color: var(--ink); border: 1px solid var(--line-strong); box-shadow: var(--sh-1); }
.btn.secondary::after { display: none; }
.btn.secondary:hover { background: var(--surface); filter: none; border-color: var(--accent); color: var(--accent-dark); box-shadow: var(--sh-2); }
.btn.danger { background: linear-gradient(135deg, #c4473e, #962a22); box-shadow: 0 8px 20px -8px rgba(163,50,42,.6), inset 0 1px 0 rgba(255,255,255,.2); }
.btn.ghost { background: transparent; box-shadow: none; color: var(--accent); }
.btn.ghost::after { display: none; }
.btn.ghost:hover { background: color-mix(in srgb, var(--accent) 8%, transparent); filter: none; box-shadow: none; transform: none; }
.btn.small { min-height: 40px; border-radius: var(--r-sm); }
.btn[disabled], .btn.is-busy { opacity: .75; }
.btn.is-busy { pointer-events: none; color: transparent; }
.btn.is-busy::before { content: ""; position: absolute; width: 20px; height: 20px; left: calc(50% - 10px); top: calc(50% - 10px); border-radius: 50%; border: 2.5px solid rgba(255,255,255,.4); border-top-color: #fff; animation: spin .7s linear infinite; }
.btn.secondary.is-busy::before { border-color: var(--line-strong); border-top-color: var(--accent); }

/* Formularze */
input[type=text], input[type=email], input[type=tel], input[type=url], input[type=password], input[type=search], input[type=number], input[type=datetime-local], input[type=file], select, textarea {
  border-radius: var(--r-md); border: 1px solid var(--line-strong); min-height: 50px; padding: 12px 14px; background: var(--surface); box-shadow: var(--sh-1) inset 0 0 0 transparent;
  transition: border-color var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease), background-color var(--t-med) var(--ease); }
input:hover, select:hover, textarea:hover { border-color: color-mix(in srgb, var(--accent) 45%, var(--line-strong)); }
input:focus, select:focus, textarea:focus { outline: 0; border-color: var(--accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 16%, transparent); }
label { font-weight: 620; letter-spacing: -.005em; }
input.code { font-size: 1.8rem; font-weight: 650; background: color-mix(in srgb, var(--accent) 4%, var(--surface)); }
.chip span { border-radius: 999px; min-height: 42px; padding: 7px 15px; transition: transform var(--t-fast) var(--ease), background-color var(--t-med) var(--ease), border-color var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease), color var(--t-med) var(--ease); box-shadow: var(--sh-1); }
.chip:hover span { border-color: var(--accent); transform: translateY(-1px); }
.chip input:active + span { transform: scale(.94); }
.chip input:checked + span { background: var(--accent-grad); color: #fff; border-color: transparent; box-shadow: var(--glow); animation: chip-pop .38s var(--ease-spring); }
.chip input:disabled + span { opacity: .45; }
.check input { accent-color: var(--accent); transition: transform var(--t-fast) var(--ease-spring); }
.check input:active { transform: scale(.85); }

/* Komunikaty */
.flash { border-radius: var(--r-md); box-shadow: var(--sh-2); border-width: 1px; padding: 13px 16px; animation: slide-down .5s var(--ease) both; }
.netbar { animation: slide-down .4s var(--ease) both; }
.demo-banner { background: repeating-linear-gradient(135deg, var(--warn-soft) 0 14px, color-mix(in srgb, var(--warn-soft) 70%, #fff) 14px 28px); font-weight: 600; letter-spacing: .01em; }

/* Etykiety */
.tag { border-radius: 999px; padding: 3px 11px; font-weight: 650; font-size: .76rem; letter-spacing: .005em; }
.tag.ok { background: color-mix(in srgb, #2f8f5b 12%, #fff); border-color: color-mix(in srgb, #2f8f5b 28%, #fff); color: #1b6a3f; }
.tag.accent { background: color-mix(in srgb, var(--accent) 10%, #fff); border-color: var(--accent-line); color: var(--accent-dark); }

/* Powierzchnie */
.panel { border-radius: var(--r-lg); border: 1px solid color-mix(in srgb, var(--line) 80%, transparent); box-shadow: var(--sh-2); padding: 18px; background: var(--surface); transition: box-shadow var(--t-med) var(--ease), transform var(--t-med) var(--ease); }
.panel.soft { background: linear-gradient(160deg, color-mix(in srgb, var(--accent) 11%, #fff) 0%, color-mix(in srgb, var(--accent) 4%, #fff) 100%); border-color: var(--accent-line); }
.section { border-top: 0; padding-top: 0; margin-top: 28px; }
.section h2 { display: flex; align-items: center; gap: 8px; }
.rows { border-top: 0; background: var(--surface); border-radius: var(--r-lg); box-shadow: var(--sh-2); border: 1px solid color-mix(in srgb, var(--line) 80%, transparent); overflow: hidden; }
.rows > li { border-bottom: 1px solid color-mix(in srgb, var(--line) 70%, transparent); }
.rows > li:last-child { border-bottom: 0; }
.rows a.item, .rows .item { padding: 13px 16px; min-height: 64px; transition: background-color var(--t-med) var(--ease), padding var(--t-med) var(--ease); position: relative; }
.rows a.item:hover { background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 6%, transparent), transparent); padding-left: 20px; }
.rows a.item:active { background: color-mix(in srgb, var(--accent) 9%, transparent); }
.rows a.item .icon:last-child { color: var(--line-strong); transition: transform var(--t-med) var(--ease), color var(--t-med) var(--ease); }
.rows a.item:hover .icon:last-child { color: var(--accent); transform: translateX(3px); }
.rows .title { letter-spacing: -.01em; font-weight: 650; }
.reason { font-weight: 550; display: inline-flex; align-items: center; gap: 6px; }
.reason::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent); flex: none; }
.avatar { background: linear-gradient(145deg, color-mix(in srgb, var(--accent) 16%, #fff), color-mix(in srgb, var(--accent) 6%, #fff)); border: 2px solid var(--surface); box-shadow: 0 0 0 1.5px var(--accent-line), var(--sh-1); font-weight: 720; letter-spacing: -.02em; transition: transform var(--t-med) var(--ease-spring), box-shadow var(--t-med) var(--ease); }
.rows a.item:hover .avatar { transform: scale(1.06); box-shadow: 0 0 0 2px var(--accent), var(--glow); }
.avatar.lg { width: 84px; height: 84px; font-size: 1.7rem; box-shadow: 0 0 0 2px var(--accent-line), var(--sh-2); }
.empty { border: 1.5px dashed var(--line-strong); border-radius: var(--r-lg); background: color-mix(in srgb, var(--surface) 60%, transparent); }
.kv dt { font-weight: 550; }

/* Start: hero */
.hero-card { position: relative; overflow: hidden; border-radius: var(--r-xl); padding: 22px 20px 20px; color: #fff; background: var(--accent-grad); box-shadow: var(--sh-3), inset 0 1px 0 rgba(255,255,255,.25); isolation: isolate; }
.hero-card::before { content: ""; position: absolute; z-index: -1; width: 260px; height: 260px; right: -70px; top: -90px; border-radius: 50%; background: radial-gradient(circle, rgba(255,255,255,.34), transparent 65%); animation: drift 9s ease-in-out infinite alternate; }
.hero-card::after { content: ""; position: absolute; z-index: -1; width: 200px; height: 200px; left: -60px; bottom: -110px; border-radius: 50%; background: radial-gradient(circle, rgba(0,0,0,.28), transparent 65%); animation: drift 12s ease-in-out infinite alternate-reverse; }
.hero-card h1 { color: #fff; font-size: 1.6rem; margin-bottom: 6px; text-shadow: 0 1px 12px rgba(0,0,0,.18); }
.hero-card p { color: rgba(255,255,255,.88); margin: 0; }

/* Bilet */
.ticket { border: 0; border-radius: var(--r-xl); background: var(--surface); box-shadow: var(--sh-3); position: relative; overflow: visible; animation: ticket-in .8s var(--ease) both; }
.ticket-head { border-radius: var(--r-xl) var(--r-xl) 0 0; background: var(--accent-grad); color: #fff; border-bottom: 0; padding: 18px 20px; }
.ticket-head .muted { color: rgba(255,255,255,.82); }
.ticket.checked .ticket-head { background: linear-gradient(135deg, #3aa56e, #1f7a4a); }
.ticket-qr { position: relative; padding: 26px; background: var(--surface); }
.ticket-qr svg { border-radius: var(--r-md); animation: qr-in .9s var(--ease) .15s both; filter: drop-shadow(0 6px 14px rgba(20,24,30,.1)); }
.ticket-foot { border-top: 0; position: relative; border-radius: 0 0 var(--r-xl) var(--r-xl); background: color-mix(in srgb, var(--accent) 4%, var(--surface)); padding: 16px 20px; color: var(--muted); }
.ticket-foot::before, .ticket-qr::after { content: ""; position: absolute; width: 22px; height: 22px; border-radius: 50%; background: var(--bg); top: -11px; }
.ticket-foot::before { left: -11px; box-shadow: inset -3px 0 4px -3px rgba(20,24,30,.12); }
.ticket-foot::after { content: ""; position: absolute; width: 22px; height: 22px; border-radius: 50%; background: var(--bg); top: -11px; right: -11px; box-shadow: inset 3px 0 4px -3px rgba(20,24,30,.12); }
.ticket-qr::after { display: none; }
.ticket-foot { background-image: linear-gradient(90deg, var(--line-strong) 50%, transparent 0); background-size: 12px 1.5px; background-repeat: repeat-x; background-position: 0 0; background-color: color-mix(in srgb, var(--accent) 4%, var(--surface)); }

/* Czat */
.chat-page { background: transparent; }
.chat-head { background: var(--glass); backdrop-filter: saturate(180%) blur(18px); -webkit-backdrop-filter: saturate(180%) blur(18px); }
.msg { border: 0; border-radius: 18px 18px 18px 6px; box-shadow: var(--sh-1); padding: 10px 14px; animation: msg-in .42s var(--ease-spring) both; transform-origin: left bottom; line-height: 1.45; }
.msg.mine { border-radius: 18px 18px 6px 18px; background: var(--accent-grad); color: #fff; box-shadow: var(--glow); transform-origin: right bottom; }
.msg.mine time { color: rgba(255,255,255,.78); }
.composer { background: var(--glass); backdrop-filter: saturate(180%) blur(18px); -webkit-backdrop-filter: saturate(180%) blur(18px); }
.composer textarea { border-radius: 24px; padding: 12px 16px; }
.composer .btn { border-radius: 50%; width: 48px; height: 48px; min-width: 48px; padding: 0; }

/* Obsługa wejścia */
.scanner { border-radius: var(--r-xl); box-shadow: var(--sh-3); }
.scanner .frame { border: 0; border-radius: var(--r-md); background:
  linear-gradient(#fff,#fff) top left/28px 3px no-repeat, linear-gradient(#fff,#fff) top left/3px 28px no-repeat,
  linear-gradient(#fff,#fff) top right/28px 3px no-repeat, linear-gradient(#fff,#fff) top right/3px 28px no-repeat,
  linear-gradient(#fff,#fff) bottom left/28px 3px no-repeat, linear-gradient(#fff,#fff) bottom left/3px 28px no-repeat,
  linear-gradient(#fff,#fff) bottom right/28px 3px no-repeat, linear-gradient(#fff,#fff) bottom right/3px 28px no-repeat; }
.scanner .frame::after { content: ""; position: absolute; left: 6%; right: 6%; height: 2px; top: 0; background: linear-gradient(90deg, transparent, #7ff0c0, transparent); box-shadow: 0 0 16px 2px rgba(127,240,192,.7); animation: scan 2.4s ease-in-out infinite alternate; }
.result { border-radius: var(--r-lg); box-shadow: var(--sh-2); animation: result-in .55s var(--ease-spring) both; }
.result.ok { border-color: color-mix(in srgb, #2f8f5b 35%, #fff); background: linear-gradient(160deg, color-mix(in srgb, #2f8f5b 14%, #fff), color-mix(in srgb, #2f8f5b 5%, #fff)); animation: result-in .55s var(--ease-spring) both, ok-ring 1.4s var(--ease) .2s 1; }
.result .big { letter-spacing: -.02em; }

/* Panel administratora */
.admin-page .topbar { padding-inline: 24px; }
.tabs { gap: 2px; border-bottom: 1px solid color-mix(in srgb, var(--line) 80%, transparent); position: relative; }
.tabs a { border-bottom: 0; border-radius: var(--r-sm) var(--r-sm) 0 0; position: relative; transition: color var(--t-med) var(--ease), background-color var(--t-med) var(--ease); }
.tabs a:hover { color: var(--ink); background: color-mix(in srgb, var(--accent) 6%, transparent); }
.tabs a::after { content: ""; position: absolute; left: 12px; right: 12px; bottom: 0; height: 3px; border-radius: 3px 3px 0 0; background: var(--accent-grad); transform: scaleX(0); transition: transform var(--t-med) var(--ease); }
.tabs a[aria-current=page] { border-bottom: 0; }
.tabs a[aria-current=page]::after { transform: scaleX(1); }
.stats { border: 0; background: transparent; gap: 14px; }
.stats > div, .stats .stat { background: var(--surface); border: 1px solid color-mix(in srgb, var(--line) 80%, transparent); border-radius: var(--r-lg); box-shadow: var(--sh-2); margin: 0; padding: 18px 20px; position: relative; overflow: hidden; transition: transform var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease); }
.stats > div::before, .stats .stat::before { content: ""; position: absolute; left: 0; top: 0; right: 0; height: 3px; background: var(--accent-grad); opacity: .85; transform-origin: left; animation: bar-in .9s var(--ease) .1s both; }
.stats > div:hover, .stats .stat:hover { transform: translateY(-3px); box-shadow: var(--sh-3); }
.stats .n { font-size: 2.1rem; font-weight: 750; letter-spacing: -.035em; background: var(--accent-grad); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: var(--accent); }
.stats .l { font-weight: 550; margin-top: 2px; display: block; }
.table-wrap { border-radius: var(--r-lg); box-shadow: var(--sh-2); border: 1px solid color-mix(in srgb, var(--line) 80%, transparent); }
th { background: color-mix(in srgb, var(--accent) 4%, #fbfaf7); font-weight: 680; padding: 12px 14px; }
td { padding: 12px 14px; }
tbody tr { transition: background-color var(--t-fast) var(--ease); }
tbody tr:hover { background: color-mix(in srgb, var(--accent) 5%, transparent); }
.admin-side { background: var(--glass); backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); }
.admin-side nav a { border-radius: var(--r-sm); transition: background-color var(--t-med) var(--ease), color var(--t-med) var(--ease), transform var(--t-fast) var(--ease); }
.admin-side nav a:hover { transform: translateX(2px); }
.admin-side nav a[aria-current=page] { background: color-mix(in srgb, var(--accent) 11%, transparent); box-shadow: inset 3px 0 0 var(--accent); }
details.inline > summary { transition: color var(--t-fast) var(--ease); }
details.inline[open] > *:not(summary) { animation: rise var(--t-med) var(--ease) both; }
.legal-banner { border-radius: var(--r-md); }

/* Logo wydarzenia / dopasowanie ikon */
.icon { transition: transform var(--t-med) var(--ease); }

/* ---- Animacje wejścia ---- */
.page > .stack > *, .page > form > *, .page > h1, .page > .panel { animation: rise .7s var(--ease) both; }
.page > .stack > *:nth-child(1) { animation-delay: .02s; } .page > .stack > *:nth-child(2) { animation-delay: .08s; }
.page > .stack > *:nth-child(3) { animation-delay: .14s; } .page > .stack > *:nth-child(4) { animation-delay: .2s; }
.page > .stack > *:nth-child(5) { animation-delay: .26s; } .page > .stack > *:nth-child(6) { animation-delay: .32s; }
.page > .stack > *:nth-child(n+7) { animation-delay: .38s; }
.rows > li { animation: rise-sm .55s var(--ease) both; }
.rows > li:nth-child(1) { animation-delay: .12s; } .rows > li:nth-child(2) { animation-delay: .17s; } .rows > li:nth-child(3) { animation-delay: .22s; }
.rows > li:nth-child(4) { animation-delay: .27s; } .rows > li:nth-child(5) { animation-delay: .32s; } .rows > li:nth-child(6) { animation-delay: .37s; }
.rows > li:nth-child(7) { animation-delay: .42s; } .rows > li:nth-child(8) { animation-delay: .47s; } .rows > li:nth-child(n+9) { animation-delay: .5s; }
.stats > div, .stats .stat { animation: rise .7s var(--ease) both; }
.stats > :nth-child(2) { animation-delay: .06s; } .stats > :nth-child(3) { animation-delay: .12s; } .stats > :nth-child(4) { animation-delay: .18s; }
.stats > :nth-child(5) { animation-delay: .24s; } .stats > :nth-child(n+6) { animation-delay: .3s; }
.admin-main > *, .table-wrap, .page-wide > * { animation: rise .6s var(--ease) both; }
.msg:nth-last-child(n+8) { animation: none; }

@keyframes rise { from { opacity: 0; transform: translateY(18px) scale(.985); } to { opacity: 1; transform: none; } }
@keyframes rise-sm { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes slide-down { from { opacity: 0; transform: translateY(-14px); } to { opacity: 1; transform: none; } }
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes chip-pop { 0% { transform: scale(.88); } 60% { transform: scale(1.07); } 100% { transform: scale(1); } }
@keyframes nav-pop { from { transform: scaleX(0); opacity: 0; } to { transform: scaleX(1); opacity: 1; } }
@keyframes badge-pop { 0% { transform: scale(0); } 70% { transform: scale(1.25); } 100% { transform: scale(1); } }
@keyframes msg-in { from { opacity: 0; transform: translateY(12px) scale(.9); } to { opacity: 1; transform: none; } }
@keyframes ticket-in { from { opacity: 0; transform: translateY(26px) rotateX(8deg) scale(.96); } to { opacity: 1; transform: none; } }
@keyframes qr-in { from { opacity: 0; transform: scale(.82); filter: blur(8px); } to { opacity: 1; transform: none; } }
@keyframes drift { from { transform: translate(0, 0) scale(1); } to { transform: translate(-26px, 18px) scale(1.15); } }
@keyframes scan { from { top: 4%; } to { top: 94%; } }
@keyframes result-in { 0% { opacity: 0; transform: scale(.92) translateY(10px); } 100% { opacity: 1; transform: none; } }
@keyframes ok-ring { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, #2f8f5b 45%, transparent), var(--sh-2); } 100% { box-shadow: 0 0 0 26px transparent, var(--sh-2); } }
@keyframes bar-in { from { transform: scaleX(0); } to { transform: scaleX(1); } }

/* Płynne przejścia między stronami (Chromium; reszta przeglądarek bez efektu) */
@view-transition { navigation: auto; }
.topbar { view-transition-name: topbar; }
.nav-bottom { view-transition-name: navbottom; }
::view-transition-old(root) { animation: vt-out .18s var(--ease) both; }
::view-transition-new(root) { animation: vt-in .38s var(--ease) both; }
@keyframes vt-out { to { opacity: 0; transform: translateY(-4px); } }
@keyframes vt-in { from { opacity: 0; transform: translateY(10px); } }

@media (prefers-reduced-motion: reduce) {
  * , *::before, *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
  ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
}
@media (hover: none) { .btn:hover { transform: none; } .rows a.item:hover { padding-left: 16px; } .stats > div:hover, .stats .stat:hover { transform: none; } }
@supports not (color: color-mix(in srgb, red 50%, white)) {
  :root { --accent-hi: var(--accent); --accent-line: #bcd3cb; --glass: var(--surface); }
}
