/* Névjegygyűjtő – app layer. Loads after tokens.css + components.css (the design system).
   Only layout and app-specific pieces live here; colours always come from the tokens. */

/* ── base ─────────────────────────────────────────── */
*{box-sizing:border-box}
html{color-scheme:light}
body{min-height:100dvh;-webkit-tap-highlight-color:transparent}
button,input,select,textarea{font-family:inherit;color:inherit}
button{cursor:pointer}
img{max-width:100%}
[hidden]{display:none!important}
.wrap{max-width:1040px;margin:0 auto;padding-left:max(var(--space-4), env(safe-area-inset-left, 0px));padding-right:max(var(--space-4), env(safe-area-inset-right, 0px))}
.stack{display:flex;flex-direction:column;gap:var(--space-4)}
.stack.tight{gap:var(--space-2)}
.row{display:flex;gap:var(--space-3);align-items:center;flex-wrap:wrap}
.spacer{flex:1}
.small{font-size:var(--text-sm)}
.hint{font-size:var(--text-sm);color:var(--muted)}
.eyebrow{font:600 var(--text-xs)/1.2 var(--f-body);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
svg.i{width:20px;height:20px;flex:none;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
svg.i.sm{width:16px;height:16px}
.pagehead{display:flex;align-items:flex-end;gap:var(--space-3);flex-wrap:wrap}
.pagehead .t{flex:1;min-width:200px;display:flex;flex-direction:column;gap:2px}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--space-4)}
.panel.pad-lg{padding:var(--space-5)}
.sechead{display:flex;align-items:center;gap:var(--space-3)}
.sechead h3{flex:1}
.section-label{display:flex;align-items:center;gap:var(--space-2);font:600 var(--text-xs)/1.2 var(--f-body);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.section-label::after{content:"";flex:1;height:1px;background:var(--line)}
a.btn{color:var(--ink)} a.btn.primary{color:var(--accent-ink)}
.btn svg.i{width:18px;height:18px}

/* ── header + navigation ──────────────────────────── */
header.top{padding-left:0;padding-right:0;display:block}
.toprow{display:flex;align-items:center;gap:var(--space-2);min-height:44px}
.brand{display:flex;align-items:center;gap:var(--space-3);min-width:0;flex:1}
.brand .kocka{width:30px;height:auto;flex:none}
.brand .txt{display:flex;flex-direction:column;min-width:0}
.brand h1{font-size:var(--text-lg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:var(--text-xs)}
.mebtn{display:flex;align-items:center;gap:var(--space-2);border:0;background:transparent;padding:0;min-height:var(--hit)}
.mebtn .av{width:36px;height:36px;font-size:var(--text-sm)}
.mebtn .nm{font-weight:600;font-size:var(--text-sm);max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.role{font:700 10.5px/1 var(--f-body);padding:4px 8px;border-radius:var(--r-pill);background:var(--accent-soft);color:var(--accent-strong);text-transform:uppercase;letter-spacing:.06em;flex:none}
.role.admin{background:var(--signal-soft);color:var(--signal)}
@media (max-width:640px){.mebtn .nm,.mebtn .role{display:none}}
/* nav uses <button>s; mirrors components.css nav.nav a */
nav.nav button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:var(--hit);border:0;background:transparent;color:var(--muted);font:600 11px/1.1 var(--f-body);padding:0}
nav.nav button .ic{width:52px;height:28px;border-radius:var(--r-pill);transition:background var(--dur) var(--ease)}
nav.nav button[aria-current]{color:var(--accent-strong)}
nav.nav button[aria-current] .ic{background:var(--accent-soft)}
nav.nav .badge{display:none}
main{padding-block:var(--space-5) calc(var(--navh) + var(--space-8) + env(safe-area-inset-bottom, 0px))}
@container app (min-width:900px){
  header.top{position:static;backdrop-filter:none;-webkit-backdrop-filter:none}
  nav.nav{justify-content:center}
  nav.nav button{flex-direction:row;gap:var(--space-2);min-height:40px;padding:0 var(--space-4);border-radius:var(--r-pill);font-size:var(--text-sm)}
  nav.nav button:hover{background:var(--sunken);color:var(--ink)}
  nav.nav button .ic{width:18px;height:18px;background:none!important}
  nav.nav button[aria-current]{background:var(--tab-on);color:var(--tab-on-ink)}
  nav.nav .badge{display:inline;font:500 11px/1 var(--f-mono);opacity:.75}
  main{padding-bottom:var(--space-8)}
}
body.drafting nav.nav{display:none}
body.drafting main{padding-bottom:var(--space-6)}

/* ── scan home ────────────────────────────────────── */
button.hero{width:100%;border:0;font:inherit;text-align:left;cursor:pointer}
.herohead{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3)}
.herohead b{font:700 var(--text-xl)/1.1 var(--f-display);color:var(--hero-ink)}
.hero .frame{width:100%;padding:var(--space-4);text-align:center}
.hero .frame svg.i{width:28px;height:28px;margin-bottom:var(--space-2);color:var(--hero-ink)}
.quick4{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-2)}
.quick4>*{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-1);min-height:76px;padding:var(--space-2);border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);color:var(--ink);font:600 var(--text-sm)/1.2 var(--f-body);text-align:center;cursor:pointer;transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}
.quick4>*:hover{border-color:var(--accent);background:var(--raised)}
.quick4 svg.i{color:var(--accent-strong)}
.todaytile{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:var(--space-2) var(--space-4)}
.todaytile .v{font:700 var(--text-3xl)/1 var(--f-display);font-variant-numeric:tabular-nums}
.todaytile .meta{display:grid;gap:var(--space-2)}
.todaytile .meta .row{justify-content:space-between}
.meter.done>*{background:var(--accent-strong)}

/* ── camera (full screen) ─────────────────────────── */
.cam{position:fixed;inset:0;z-index:80;display:flex;flex-direction:column;background:var(--scan-bg);color:var(--hero-ink);padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px)}
.cam .camtop{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3)}
.cam .camtop .segm{flex:1;max-width:320px;margin:0 auto;background:rgba(255,255,255,.08)}
.cam .camtop .segm>*{color:var(--hero-muted)}
.cam .camtop .segm>[aria-pressed=true]{background:var(--hero-ink);color:var(--scan-bg)}
.cam .camtop .iconbtn{color:var(--hero-ink)}
.cam .scanbox{flex:1;aspect-ratio:auto;border-radius:0}
.cam video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.cam .camhint{padding:var(--space-3) var(--space-5) 0;text-align:center;font:600 var(--text-sm)/1.3 var(--f-body);color:var(--hero-muted)}
.cam .cambar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:var(--space-4) var(--space-5) var(--space-5)}
.cam .shutter{width:76px;height:76px;border-radius:50%;border:4px solid var(--hero-ink);background:var(--hero-accent);box-shadow:0 0 0 3px var(--scan-bg) inset;cursor:pointer}
.cam .shutter:active{transform:scale(.94)}
.cam .lastshot{width:56px;aspect-ratio:85/55;border-radius:var(--r-sm);border:2px solid var(--hero-ink);background:rgba(255,255,255,.1) center/cover no-repeat;justify-self:start}
.cam .pages{justify-self:end;text-align:center;font:600 var(--text-xs)/1.2 var(--f-mono);color:var(--hero-muted)}

/* ── scan form ────────────────────────────────────── */
.draft-head{display:flex;align-items:center;gap:var(--space-2)}
.draft-head h2{flex:1}
.shot .x{position:absolute;top:4px;right:4px;width:26px;height:26px;border-radius:50%;border:0;background:rgba(0,0,0,.6);color:#fff;display:grid;place-items:center}
.shot .x svg{width:14px;height:14px}
.scanning .shot:not(.add)::after{content:"";position:absolute;left:0;right:0;height:30%;top:-30%;background:linear-gradient(180deg,transparent,color-mix(in oklab,var(--accent) 55%,transparent),transparent);animation:nj-scanshot 1.4s ease-in-out infinite}
@keyframes nj-scanshot{to{top:100%}}
.status .msg{flex:1;min-width:0}
.status .msg b{display:block}
.status .msg span{font-weight:400}
.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3) var(--space-4)}
.fgrid .wide{grid-column:1/-1}
@media (max-width:560px){.fgrid{grid-template-columns:1fr}}
.field>label{font:600 var(--text-sm)/1.3 var(--f-body);color:var(--muted)}
.field input.filled.filled.filled{border-color:var(--accent);background:color-mix(in oklab,var(--accent-soft) 45%,var(--raised))}
.qs{display:flex;flex-direction:column;gap:var(--space-4)}
.qlabel{font:600 var(--text-sm)/1.3 var(--f-body);color:var(--muted)}
.chips{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.req{color:var(--err)}
.qerr{color:var(--err);font-size:var(--text-sm);font-weight:600}
.consent{display:flex;flex-direction:column;gap:var(--space-2)}
label.switch>input{order:2}
label.switch>span{flex:1;min-width:0}
label.switch>span b{font-weight:600}
.actionbar{position:fixed;left:0;right:0;justify-content:flex-end}
.actionbar .btn{max-width:320px}
@media (max-width:460px){.actionbar .btn.ghost{display:none}}

/* ── lists ────────────────────────────────────────── */
.toolbar{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:center}
.searchbox{position:relative;flex:1;min-width:200px}
.searchbox svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--faint)}
.searchbox input.inp.inp.inp{padding-left:44px}
.toolbar select{flex:0 1 220px;min-width:150px;width:auto}
.evsel{flex:0 1 260px;min-width:170px;width:auto}
.daygroup{display:flex;flex-direction:column}
.item{width:100%;border:0;text-align:left;font:inherit}
.item .itm{flex:1;min-width:0}
.item .itm b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item .itm small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item .meta{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-1);flex:none;max-width:45%}
.item .meta .tags{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}
.item .meta time{margin:0}
.item.static{cursor:default}
.item.static:hover{background:var(--surface)}
.empty .ic{width:52px;height:52px;border-radius:var(--r-lg);background:var(--sunken);color:var(--muted)}
.empty .ic svg.i{width:24px;height:24px}

/* ── admin views ──────────────────────────────────── */
.tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-3)}
@media (max-width:760px){.tiles{grid-template-columns:repeat(2,1fr)}}
.tile .v small{font-size:var(--text-base);color:var(--muted)}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--space-3)}
td.num{text-align:right}
td.nowrap{white-space:nowrap}
tbody tr.click{cursor:pointer}
.who{display:flex;align-items:center;gap:var(--space-2);white-space:nowrap}
.who .av{width:26px;height:26px;font-size:10px}
.bar>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.col{position:relative}
.col .num{position:absolute;top:-17px;left:50%;transform:translateX(-50%);font-size:10px;color:var(--muted)}
.collabels{display:flex;gap:3px;margin-top:6px}
.collabels span{flex:1 1 0;text-align:center;font:500 10px/1 var(--f-mono);color:var(--faint);min-width:0;overflow:hidden;white-space:nowrap}
.people{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:var(--space-3)}
.people .person{flex-direction:column;align-items:stretch;gap:var(--space-3)}
.person.off{opacity:.72}
.person .top{display:flex;gap:var(--space-3);align-items:center}
.person .nm{font-weight:700;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.person .sub{font-size:var(--text-sm);color:var(--muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stats3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-2);background:var(--raised);border-radius:var(--r-md);padding:var(--space-3)}
.stats3 div{display:flex;flex-direction:column}
.stats3 b{font:700 var(--text-xl)/1.1 var(--f-display);font-variant-numeric:tabular-nums}
.stats3 b.t{font:600 var(--text-sm)/1.9 var(--f-body)}
.stats3 span{font:600 10.5px/1.2 var(--f-body);color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.person .acts{display:flex;gap:var(--space-2)}
.person .acts .btn{flex:1}
.duprows{display:grid;gap:var(--space-2)}
.duprow input{width:20px;height:20px}
.dupmain{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere}
.qedit{border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--space-4);display:grid;gap:var(--space-3);background:var(--raised)}
.qedit .num{font:500 var(--text-xs)/1 var(--f-mono);color:var(--faint)}
.checks{display:flex;gap:var(--space-4);flex-wrap:wrap}
.checks label{display:flex;gap:var(--space-2);align-items:center;font-size:var(--text-sm)}
.newevent{display:flex;gap:var(--space-3);align-items:flex-end;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:var(--space-4)}
.copyrow{display:flex;gap:var(--space-2)}
.copyrow input.inp.inp.inp{flex:1;min-width:0;font-family:var(--f-mono);font-size:var(--text-sm)}
.modes{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-3)}
@media (max-width:760px){.modes{grid-template-columns:1fr}}
.modecard{position:relative}
.modecard>span{display:grid;gap:var(--space-1)}
.rules{display:grid;gap:var(--space-2);font-size:var(--text-sm)}
.rules>div{display:grid;grid-template-columns:20px 1fr;gap:var(--space-2);align-items:start}
.rules svg{color:var(--accent-strong);margin-top:2px}
.enrbox>header{display:flex;flex-wrap:wrap}
.enrrow .v{color:var(--signal);font-style:italic;font-weight:600;overflow-wrap:anywhere}
.enrrow .v+small{display:block}
.enrrow .act{display:flex;align-items:center;gap:var(--space-1)}
.enrrow.dismissed .v{text-decoration:line-through;opacity:.55}
@media (max-width:520px){.enrrow{grid-template-columns:1fr}.enrrow .act{justify-content:flex-start}}

/* ── sheet / modal ────────────────────────────────── */
.modal{position:fixed;inset:0;z-index:50;background:var(--overlay);animation:nj-rise var(--dur) var(--ease)}
.contacthead{display:flex;gap:var(--space-3);align-items:center}
.contacthead .av{width:56px;height:56px;font-size:var(--text-lg)}
.contacthead h3{font-size:var(--text-xl)}
.quick{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.quick .q{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line)}
.quick .q:last-child{border-bottom:0}
.quick .q svg{color:var(--muted)}
.quick .q .v{flex:1;min-width:0;overflow-wrap:anywhere}
.quick .q .l{display:block;font-size:var(--text-xs);color:var(--muted);font-weight:600}
.quick .q a{color:var(--ink);text-decoration:none}
.kv{display:grid;grid-template-columns:minmax(110px,34%) 1fr;gap:var(--space-2) var(--space-4);font-size:var(--text-sm);margin:0}
.kv dt{color:var(--muted)}
.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}
.photos{display:flex;gap:var(--space-2);overflow-x:auto}
.photos img{height:150px;border-radius:var(--r-sm);border:1px solid var(--line)}
.banner>svg.i{flex:none;margin-top:1px}
.banner .msg{flex:1;min-width:0}
.banner .msg b{display:block}
.banner.info>svg.i{color:var(--signal)}
.banner.err>svg.i{color:var(--err)}
.dup{grid-template-columns:auto 1fr auto;align-items:center}
.dup .msg b{display:block}
@media (max-width:520px){.dup{grid-template-columns:auto 1fr}.dup .btn{grid-column:1/-1}}
.qrcard img{width:min(260px,70vw);height:auto;image-rendering:pixelated}
.qrcard .small{opacity:.75}
body.drafting .toast{bottom:calc(84px + env(safe-area-inset-bottom, 0px))}
.offline{position:fixed;top:0;left:0;right:0;z-index:70}

/* ── auth screens (login, setup, password) ────────── */
.authwrap{min-height:100dvh;display:flex;flex-direction:column}
.authhero{position:relative;flex:0 0 auto;min-height:38dvh;display:flex;flex-direction:column;justify-content:flex-end;gap:var(--space-2);padding:calc(env(safe-area-inset-top,0px) + var(--space-8)) max(var(--space-6), env(safe-area-inset-left,0px)) calc(var(--space-8) + var(--space-5));color:var(--hero-ink);
  background:linear-gradient(180deg,color-mix(in oklab,var(--hero) 78%,transparent),color-mix(in oklab,var(--hero) 92%,transparent)),url(img/hatter.jpg) center/cover no-repeat,var(--hero)}
.authhero .kocka{width:44px;height:auto}
.authhero h1{font-size:var(--text-3xl);color:var(--hero-ink)}
.authhero small{color:var(--hero-muted)}
.authcard{position:relative;flex:1;margin-top:calc(-1 * var(--space-6));background:var(--surface);border-radius:var(--r-lg) var(--r-lg) 0 0;padding:var(--space-6) max(var(--space-6), env(safe-area-inset-left,0px)) calc(var(--space-6) + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:var(--space-4);box-shadow:var(--shadow-lg)}
.authcard form{display:flex;flex-direction:column;gap:var(--space-4)}
.authcard.plain{margin-top:0;border-radius:0;box-shadow:none;background:var(--bg)}
@container app (min-width:900px){
  .authwrap{align-items:center;justify-content:center;background:linear-gradient(180deg,color-mix(in oklab,var(--hero) 82%,transparent),color-mix(in oklab,var(--hero) 94%,transparent)),url(img/hatter.jpg) center/cover no-repeat,var(--hero)}
  .authhero{background:none;min-height:0;padding:0 0 var(--space-5);width:420px}
  .authcard{flex:0 0 auto;width:420px;margin:0;border-radius:var(--r-lg)}
  .authcard.plain{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-lg)}
}
.formerr{background:var(--err-soft);color:var(--err);border-radius:var(--r-md);padding:var(--space-3) var(--space-4);font-size:var(--text-sm);font-weight:600}
.logo{width:36px;height:36px;border-radius:10px;flex:none;display:block}

/* names, e-mails and codes must not be auto-hyphenated (components.css turns hyphens on globally) */
.tablebox,.item,.kv,.who,.quick,.person,.dupmain,input,textarea{hyphens:manual}
.tablebox td:nth-child(2),.tablebox td:nth-child(3){min-width:120px}
.col{max-width:56px}
.cols,.collabels{justify-content:center}
.collabels span{max-width:56px}
.privlink{display:inline-flex;align-items:center;gap:var(--space-2);color:var(--accent);font-weight:600;text-decoration:underline;text-underline-offset:3px}

/* language switch on the sign-in screens and the guest page */
.authhero .langsw{position:absolute;top:calc(env(safe-area-inset-top,0px) + var(--space-4));right:max(var(--space-4), env(safe-area-inset-right,0px));width:auto;min-width:44px;height:36px;padding:0 var(--space-3);border-radius:999px;border:1px solid color-mix(in srgb, var(--hero-ink) 35%, transparent);background:transparent;color:var(--hero-ink);font:600 var(--text-sm)/1 var(--f-body);letter-spacing:.06em;cursor:pointer}
.authhero .langsw:hover{background:color-mix(in srgb, var(--hero-ink) 12%, transparent)}
@container app (min-width:900px){ .authhero .langsw{position:fixed} }

/* event picker in the header (enabled when more than one event is open to this person) */
.evpick{display:flex;align-items:center;gap:var(--space-1);min-width:0;max-width:100%;padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}
.evpick:disabled{cursor:default}
.evpick:disabled .chev{display:none}
.evpick .chev{font-size:var(--text-xs);color:var(--muted);flex:none}
.evpick:not(:disabled):hover h1{text-decoration:underline;text-underline-offset:3px}
/* events in settings, staffing checklists */
.evrow{flex-wrap:wrap}
.evrow .evacts{display:flex;flex-wrap:wrap;gap:var(--space-2);width:100%;justify-content:flex-end}
.evchecks{display:flex;flex-direction:column;gap:var(--space-2)}
.evchecks label{display:flex;align-items:center;gap:var(--space-2)}

/* version line at the bottom of the admin page and the profile */
.verline{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);padding:var(--space-3) var(--space-1);font-size:var(--text-xs);color:var(--muted);border-top:1px solid var(--line, rgba(127,127,127,.2))}
.verline b{color:var(--ink, inherit)}
.verline.stale{color:var(--warn, #b26a00)}
.verline .btn{margin-left:auto}
.sechead .evedit{width:auto;max-width:60%;min-width:180px}

/* events on the settings page: full names, one meta line, tags, one row of actions */
.evlist{display:grid;gap:var(--space-3)}
.evcard{hyphens:manual;display:grid;gap:var(--space-3);padding:var(--space-4);border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
.evcard.closed{opacity:.88}
.evmain{all:unset;display:grid;gap:var(--space-1);cursor:pointer;min-width:0}
.evmain:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:var(--r-sm)}
.evname{font:700 var(--text-lg)/1.25 var(--f-display);overflow-wrap:anywhere}
.evmeta{font-size:var(--text-sm);color:var(--muted)}
.evtags{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.evacts{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.evacts .btn{flex:0 0 auto}
.wraptitle{overflow-wrap:anywhere}
.danger-zone{border-color:color-mix(in srgb, var(--err) 45%, var(--line))}
.danger-zone h3{color:var(--err)}
.authhero .herosub{color:var(--hero-muted);font-size:var(--text-sm)}
.qrcard .small{display:block}
