/* ============================================================
   QR Scanner — stylesheet
   Identity: a precision optical instrument. The recurring motif
   is the QR finder-pattern corner bracket (the viewfinder reticle).
   Written with logical properties so the Arabic (RTL) build works.
   ============================================================ */

/* ---- Self-hosted display + body faces (Latin). Non-Latin scripts
   fall back to high-quality system fonts, keeping the page light. ---- */
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:500;font-display:swap;
  src:url("/assets/fonts/space-grotesk-latin-500-normal.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:700;font-display:swap;
  src:url("/assets/fonts/space-grotesk-latin-700-normal.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;}
@font-face{font-family:"Inter";font-style:normal;font-weight:400;font-display:swap;
  src:url("/assets/fonts/inter-latin-400-normal.woff2") format("woff2");unicode-range:U+0000-00FF,U+2000-206F,U+20AC,U+2122;}
@font-face{font-family:"Inter";font-style:normal;font-weight:500;font-display:swap;
  src:url("/assets/fonts/inter-latin-500-normal.woff2") format("woff2");unicode-range:U+0000-00FF,U+2000-206F,U+20AC,U+2122;}
@font-face{font-family:"Inter";font-style:normal;font-weight:600;font-display:swap;
  src:url("/assets/fonts/inter-latin-600-normal.woff2") format("woff2");unicode-range:U+0000-00FF,U+2000-206F,U+20AC,U+2122;}

:root{
  --bg:#eef1f5; --surface:#ffffff; --surface-2:#f6f7fa; --surface-3:#eceff4;
  --ink:#14161c; --ink-2:#474d5b; --ink-3:#7b8291;
  --line:#e0e4ec; --line-2:#cfd5e0;
  --accent:#4636e6; --accent-2:#5a4bff; --accent-soft:#ebe9fd; --accent-ink:#ffffff;
  --signal:#f0a020; --ok:#128468; --ok-soft:#e2f3ee; --danger:#d33f45; --danger-soft:#fbe8e8;
  --font-display:"Space Grotesk","Segoe UI",-apple-system,BlinkMacSystemFont,"Noto Sans","Noto Sans Arabic","Noto Sans Devanagari","PingFang SC","Microsoft YaHei",sans-serif;
  --font-body:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans","Noto Sans Arabic","Noto Sans Devanagari","PingFang SC","Hiragino Sans","Microsoft YaHei",Roboto,Helvetica,Arial,sans-serif;
  --shadow-1:0 1px 2px rgba(20,22,28,.05),0 2px 8px rgba(20,22,28,.04);
  --shadow-2:0 8px 30px rgba(20,22,28,.10);
  --r-sm:8px; --r-md:12px; --r-lg:18px;
  --wrap:1120px;
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-body);
  font-size:16px;line-height:1.6;letter-spacing:-0.006em;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
h1,h2,h3{font-family:var(--font-display);font-weight:700;line-height:1.12;letter-spacing:-0.02em;margin:0}
p{margin:0}
a{color:var(--accent);text-underline-offset:2px}
img,svg{display:block;max-width:100%}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:4px}
button{font-family:inherit}

.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:20px}
.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}

/* ---------- Top bar ---------- */
.topbar{position:sticky;top:0;z-index:40;background:rgba(238,241,245,.82);
  backdrop-filter:saturate(1.4) blur(10px);border-block-end:1px solid var(--line)}
.topbar__in{display:flex;align-items:center;justify-content:space-between;gap:16px;height:62px}
.brand{display:flex;align-items:center;gap:11px;color:var(--ink);text-decoration:none;font-family:var(--font-display);font-weight:700;font-size:1.06rem;letter-spacing:-0.02em}
.brand__mark{inline-size:34px;block-size:34px;flex:none}
.brand small{display:block;font-family:var(--font-body);font-weight:500;font-size:.66rem;color:var(--ink-3);letter-spacing:.02em;margin-block-start:1px}

/* language switcher */
.lang{position:relative}
.lang>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:8px;
  background:var(--surface);border:1px solid var(--line-2);border-radius:999px;
  padding:8px 13px;font-size:.9rem;font-weight:500;color:var(--ink);box-shadow:var(--shadow-1)}
.lang>summary::-webkit-details-marker{display:none}
.lang>summary svg{inline-size:16px;block-size:16px;color:var(--ink-3)}
.lang[open]>summary{border-color:var(--accent)}
.lang__menu{position:absolute;inset-inline-end:0;margin-block-start:8px;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-2);
  padding:6px;min-inline-size:190px;z-index:50}
.lang__menu a{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:9px 12px;border-radius:8px;color:var(--ink);text-decoration:none;font-weight:500;font-size:.92rem}
.lang__menu a:hover{background:var(--surface-3)}
.lang__menu a[aria-current="true"]{color:var(--accent)}
.lang__menu a span{color:var(--ink-3);font-size:.8rem}

/* ---------- Hero / scanner ---------- */
.hero{padding-block:34px 20px}
.hero__grid{display:grid;grid-template-columns:1fr;gap:26px}
.hero__lede{max-inline-size:640px}
.eyebrow{display:inline-flex;align-items:center;gap:8px;color:var(--accent);
  font-weight:600;font-size:.86rem;margin-block-end:14px}
.eyebrow b{inline-size:7px;block-size:7px;border-radius:2px;background:var(--accent);display:inline-block}
.hero h1{font-size:clamp(1.9rem,5.2vw,3rem);margin-block-end:14px}
.hero__lede p{color:var(--ink-2);font-size:1.06rem;max-inline-size:56ch}

/* scanner console */
.console{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-2);overflow:hidden}
.modes{display:flex;gap:4px;padding:8px;background:var(--surface-2);border-block-end:1px solid var(--line)}
.mode{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;
  border:0;background:transparent;color:var(--ink-2);font-weight:600;font-size:.92rem;
  padding:11px 8px;border-radius:10px;transition:background .15s,color .15s}
.mode svg{inline-size:18px;block-size:18px}
.mode:hover{color:var(--ink)}
.mode[aria-selected="true"]{background:var(--surface);color:var(--accent);box-shadow:var(--shadow-1)}

.stage{padding:18px}

/* viewfinder */
.viewfinder{position:relative;aspect-ratio:1/1;max-block-size:60vh;margin-inline:auto;
  background:#0d0f14;border-radius:var(--r-md);overflow:hidden;display:grid;place-items:center}
.viewfinder video,.viewfinder canvas.preview{position:absolute;inset:0;inline-size:100%;block-size:100%;object-fit:cover}
.viewfinder__idle{position:absolute;inset:0;display:grid;place-items:center;text-align:center;
  color:#c7cbd6;padding:24px;gap:10px}
.viewfinder__idle svg{inline-size:46px;block-size:46px;color:#7a8194;margin-inline:auto;margin-block-end:6px}
.viewfinder__idle span{display:block;font-size:.92rem;color:#9aa0b0;max-inline-size:30ch;margin-inline:auto}
/* reticle brackets */
.reticle{position:absolute;inset:12%;pointer-events:none;z-index:3}
.reticle i{position:absolute;inline-size:34px;block-size:34px;border:3px solid rgba(255,255,255,.92)}
.reticle i:nth-child(1){inset-block-start:0;inset-inline-start:0;border-inline-end:0;border-block-end:0;border-start-start-radius:10px}
.reticle i:nth-child(2){inset-block-start:0;inset-inline-end:0;border-inline-start:0;border-block-end:0;border-start-end-radius:10px}
.reticle i:nth-child(3){inset-block-end:0;inset-inline-start:0;border-inline-end:0;border-block-start:0;border-end-start-radius:10px}
.reticle i:nth-child(4){inset-block-end:0;inset-inline-end:0;border-inline-start:0;border-block-start:0;border-end-end-radius:10px}
.scanline{position:absolute;inset-inline:14%;block-size:2px;inset-block-start:14%;z-index:4;
  background:linear-gradient(90deg,transparent,var(--signal),transparent);
  box-shadow:0 0 14px 2px rgba(240,160,32,.55);opacity:0;border-radius:2px}
.viewfinder.is-live .scanline{opacity:1;animation:sweep 2.4s cubic-bezier(.5,0,.5,1) infinite}
.viewfinder.is-live .reticle i{border-color:var(--signal);animation:pulse 2.4s ease-in-out infinite}
@keyframes sweep{0%{inset-block-start:14%}50%{inset-block-start:83%}100%{inset-block-start:14%}}
@keyframes pulse{0%,100%{opacity:.6}50%{opacity:1}}

/* dropzone (upload/bulk) */
.dropzone{position:relative;aspect-ratio:16/10;max-block-size:52vh;border:2px dashed var(--line-2);
  border-radius:var(--r-md);background:var(--surface-2);display:grid;place-items:center;text-align:center;
  padding:24px;cursor:pointer;transition:border-color .15s,background .15s}
.dropzone:hover,.dropzone.is-drag{border-color:var(--accent);background:var(--accent-soft)}
.dropzone svg{inline-size:40px;block-size:40px;color:var(--accent);margin-inline:auto;margin-block-end:12px}
.dropzone b{display:block;font-size:1.02rem;margin-block-end:4px}
.dropzone span{color:var(--ink-3);font-size:.9rem}

.stage__actions{display:flex;gap:10px;margin-block-start:14px;flex-wrap:wrap}
.status{display:flex;align-items:center;gap:9px;margin-block-start:12px;min-block-size:22px;
  font-size:.92rem;color:var(--ink-2)}
.status .dot{inline-size:9px;block-size:9px;border-radius:50%;background:var(--ink-3);flex:none}
.status.is-live .dot{background:var(--signal);animation:blink 1s steps(2) infinite}
.status.is-ok .dot{background:var(--ok)} .status.is-err .dot{background:var(--danger)}
@keyframes blink{50%{opacity:.25}}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;
  border:1px solid transparent;border-radius:10px;padding:11px 16px;font-weight:600;font-size:.94rem;
  text-decoration:none;transition:transform .06s,background .15s,border-color .15s;white-space:nowrap}
.btn:active{transform:translateY(1px)}
.btn svg{inline-size:17px;block-size:17px}
.btn--primary{background:var(--accent);color:var(--accent-ink)}
.btn--primary:hover{background:var(--accent-2)}
.btn--ghost{background:var(--surface);color:var(--ink);border-color:var(--line-2)}
.btn--ghost:hover{border-color:var(--ink-3);background:var(--surface-2)}
.btn--soft{background:var(--accent-soft);color:var(--accent)}
.btn--soft:hover{background:#e0ddfb}
.btn--danger{background:var(--danger-soft);color:var(--danger)}
.btn--danger:hover{background:#f6dada}
.btn--sm{padding:8px 12px;font-size:.86rem;border-radius:8px}
.btn--block{inline-size:100%}
.btn[hidden]{display:none}

/* ---------- Result panel ---------- */
.result{margin-block-start:16px;border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--surface);overflow:hidden;animation:rise .25s ease}
@keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.result__head{display:flex;align-items:center;gap:12px;padding:14px 16px;border-block-end:1px solid var(--line);background:var(--surface-2)}
.type-badge{display:inline-flex;align-items:center;gap:9px;font-weight:600;font-size:.9rem;
  padding:6px 12px;border-radius:999px;background:var(--accent-soft);color:var(--accent)}
.type-badge svg{inline-size:16px;block-size:16px}
.result__head time{margin-inline-start:auto;color:var(--ink-3);font-size:.82rem}
.fields{padding:6px 16px}
.field{display:grid;grid-template-columns:minmax(90px,26%) 1fr;gap:10px 16px;
  padding:11px 0;border-block-end:1px solid var(--line)}
.field:last-child{border-block-end:0}
.field dt{color:var(--ink-3);font-size:.82rem;font-weight:600;padding-block-start:1px}
.field dd{margin:0;color:var(--ink);word-break:break-word;overflow-wrap:anywhere}
.field dd.mono{font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;font-size:.9rem;
  background:var(--surface-3);padding:8px 10px;border-radius:8px}
.pw{display:inline-flex;align-items:center;gap:10px}
.pw button{border:0;background:transparent;color:var(--accent);cursor:pointer;font-weight:600;font-size:.82rem}
.result__actions{display:flex;flex-wrap:wrap;gap:9px;padding:14px 16px;border-block-start:1px solid var(--line);background:var(--surface-2)}

/* ---------- Bulk results ---------- */
.bulk-list{margin-block-start:14px;display:grid;gap:8px}
.bulk-row{display:flex;align-items:center;gap:12px;padding:11px 13px;border:1px solid var(--line);
  border-radius:10px;background:var(--surface)}
.bulk-row .tick{inline-size:22px;block-size:22px;flex:none;border-radius:6px;display:grid;place-items:center;color:#fff}
.bulk-row .tick.ok{background:var(--ok)} .bulk-row .tick.no{background:var(--ink-3)}
.bulk-row .meta{min-inline-size:0}
.bulk-row .meta b{display:block;font-size:.9rem;font-weight:600}
.bulk-row .meta small{color:var(--ink-3);font-size:.8rem;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-inline-size:52vw}
.bulk-row .btn{margin-inline-start:auto}

/* ---------- History ---------- */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1)}
.panel__head{display:flex;align-items:center;gap:12px;padding:16px 18px;border-block-end:1px solid var(--line)}
.panel__head h2{font-size:1.12rem}
.count{background:var(--surface-3);color:var(--ink-2);font-weight:600;font-size:.78rem;padding:3px 9px;border-radius:999px}
.panel__head .spacer{margin-inline-start:auto}
.menu{position:relative}
.menu>summary{list-style:none}
.menu>summary::-webkit-details-marker{display:none}
.menu__pop{position:absolute;inset-inline-end:0;margin-block-start:6px;background:var(--surface);
  border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-2);padding:6px;min-inline-size:170px;z-index:20}
.menu__pop button{display:flex;inline-size:100%;align-items:center;gap:10px;background:transparent;border:0;
  cursor:pointer;padding:9px 11px;border-radius:8px;font-weight:500;font-size:.9rem;color:var(--ink);text-align:start}
.menu__pop button:hover{background:var(--surface-3)}
.menu__pop svg{inline-size:16px;block-size:16px;color:var(--ink-3)}

.history{padding:8px 10px;max-block-size:520px;overflow:auto}
.hist-item{display:flex;align-items:center;gap:13px;padding:11px 8px;border-radius:10px}
.hist-item+.hist-item{border-block-start:1px solid var(--line)}
.hist-item:hover{background:var(--surface-2)}
.hist-item .ico{inline-size:38px;block-size:38px;flex:none;border-radius:9px;display:grid;place-items:center;
  background:var(--accent-soft);color:var(--accent)}
.hist-item .ico svg{inline-size:19px;block-size:19px}
.hist-item .body{min-inline-size:0;flex:1}
.hist-item .body .t{font-weight:600;font-size:.9rem;display:flex;gap:8px;align-items:baseline}
.hist-item .body .t em{font-style:normal;color:var(--ink-3);font-weight:500;font-size:.76rem}
.hist-item .body .v{color:var(--ink-2);font-size:.86rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hist-item .row-actions{display:flex;gap:4px}
.icon-btn{inline-size:34px;block-size:34px;display:grid;place-items:center;border:1px solid var(--line-2);
  background:var(--surface);border-radius:8px;cursor:pointer;color:var(--ink-2)}
.icon-btn:hover{border-color:var(--ink-3);color:var(--ink)}
.icon-btn svg{inline-size:16px;block-size:16px}
.empty{text-align:center;padding:40px 20px;color:var(--ink-3)}
.empty svg{inline-size:40px;block-size:40px;margin-inline:auto;margin-block-end:12px;color:var(--line-2)}
.empty b{display:block;color:var(--ink-2);font-weight:600;margin-block-end:3px}

/* ---------- Two-column on wide screens ---------- */
@media(min-width:940px){
  .hero__grid{grid-template-columns:minmax(0,1fr) minmax(380px,440px);align-items:start;gap:34px}
  .hero__lede{padding-block-start:22px}
}
@media(max-width:939px){ .history{max-block-size:none} }

/* ---------- SEO content ---------- */
.content{padding-block:22px 8px}
.section{padding-block:30px;border-block-start:1px solid var(--line)}
.section__mark{display:inline-flex;align-items:center;gap:9px;color:var(--accent);font-weight:600;font-size:.86rem;margin-block-end:12px}
.section__mark svg{inline-size:16px;block-size:16px}
.section h2{font-size:clamp(1.4rem,3.4vw,1.9rem);margin-block-end:12px;max-inline-size:24ch}
.section>.wrap>p{color:var(--ink-2);max-inline-size:70ch}
.prose p{color:var(--ink-2);margin-block-end:14px;max-inline-size:72ch}
.prose p:last-child{margin-block-end:0}

.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px;margin-block-start:22px}
.tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:18px}
.tile .ti{inline-size:40px;block-size:40px;border-radius:10px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;margin-block-end:13px}
.tile .ti svg{inline-size:21px;block-size:21px}
.tile h3{font-size:1.02rem;margin-block-end:6px}
.tile p{color:var(--ink-2);font-size:.92rem}

.types{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;margin-block-start:22px}
.type-chip{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);
  border-radius:10px;padding:12px 13px}
.type-chip svg{inline-size:19px;block-size:19px;color:var(--accent);flex:none}
.type-chip b{font-size:.9rem;font-weight:600;display:block}
.type-chip small{color:var(--ink-3);font-size:.76rem}

/* steps — numbered because this genuinely is an ordered sequence */
.steps{counter-reset:step;display:grid;gap:14px;margin-block-start:22px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.step{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:20px 18px 18px}
.step::before{counter-increment:step;content:counter(step,decimal-leading-zero);font-family:var(--font-display);
  font-weight:700;font-size:1.05rem;color:var(--accent);display:block;margin-block-end:8px}
.step h3{font-size:1rem;margin-block-end:5px}
.step p{color:var(--ink-2);font-size:.9rem}

.faq{margin-block-start:20px;display:grid;gap:10px}
.faq details{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.faq summary{cursor:pointer;padding:16px 18px;font-weight:600;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px}
.faq summary::-webkit-details-marker{display:none}
.faq summary .chev{inline-size:18px;block-size:18px;color:var(--ink-3);transition:transform .2s;flex:none}
.faq details[open] summary .chev{transform:rotate(180deg)}
.faq .a{padding:0 18px 16px;color:var(--ink-2);max-inline-size:72ch}

.privacy{display:flex;gap:16px;align-items:flex-start;background:var(--ok-soft);border:1px solid #cfe9e0;
  border-radius:var(--r-md);padding:18px 20px;margin-block-start:8px}
.privacy svg{inline-size:26px;block-size:26px;color:var(--ok);flex:none;margin-block-start:2px}
.privacy b{display:block;margin-block-end:4px}
.privacy p{color:var(--ink-2);font-size:.94rem;max-inline-size:70ch}

/* ---------- Footer ---------- */
.footer{border-block-start:1px solid var(--line);margin-block-start:30px;padding-block:26px 34px;color:var(--ink-3)}
.footer__in{display:flex;flex-wrap:wrap;gap:16px;align-items:center;justify-content:space-between}
.footer a{color:var(--ink-2);text-decoration:none;font-weight:500}
.footer a:hover{color:var(--accent)}
.footer__langs{display:flex;flex-wrap:wrap;gap:14px;font-size:.9rem}
.footer small{font-size:.84rem}

/* ---------- Toast ---------- */
.toast-wrap{position:fixed;inset-block-end:20px;inset-inline:0;display:grid;justify-items:center;z-index:80;pointer-events:none;padding-inline:16px}
.toast{background:var(--ink);color:#fff;padding:11px 18px;border-radius:999px;font-weight:500;font-size:.9rem;
  box-shadow:var(--shadow-2);opacity:0;transform:translateY(10px);transition:opacity .2s,transform .2s;max-inline-size:90vw}
.toast.show{opacity:1;transform:none}

/* ---------- Modal (bulk progress / confirm) ---------- */
dialog{border:0;border-radius:var(--r-lg);padding:0;box-shadow:var(--shadow-2);max-inline-size:min(420px,92vw);color:var(--ink)}
dialog::backdrop{background:rgba(20,22,28,.42)}
.modal{padding:22px}
.modal h3{font-size:1.15rem;margin-block-end:8px}
.modal p{color:var(--ink-2);margin-block-end:18px}
.modal__actions{display:flex;gap:10px;justify-content:flex-end}
.bar{block-size:8px;background:var(--surface-3);border-radius:999px;overflow:hidden;margin-block:14px 6px}
.bar>i{display:block;block-size:100%;inline-size:0;background:var(--accent);transition:inline-size .2s}

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