@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(fonts/inter.woff2) format('woff2')} /* self-hosted: no Google request */
/* FlipyOrder — the catalogue buyers see. Ported from the approved prototype. --accent is set per catalogue. */
:root{
  --bg:#ECEAE6; --ink:#1D1D1F; --muted:#6B6B70; --line:#DCD9D3; --panel:#FFFFFF;
  --accent:#6941C6; --on-accent:#fff;
  --accent-soft:color-mix(in srgb, var(--accent) 12%, var(--panel));
  --accent-tint:color-mix(in srgb, var(--accent) 7%, transparent);
  --wa:#1FAF55; --paper:#FBF8F2; --shadow:0 18px 40px rgba(0,0,0,.18),0 2px 6px rgba(0,0,0,.08);
  --r:14px; --pbar:0px;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){ --bg:#17181A; --ink:#F2F2F2; --muted:#A0A0A6; --line:#2C2D30; --panel:#202124; }
}
:root[data-theme="dark"]{ --bg:#17181A; --ink:#F2F2F2; --muted:#A0A0A6; --line:#2C2D30; --panel:#202124; }
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--ink);font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-font-smoothing:antialiased;overflow:hidden}
button{font:inherit;color:inherit;cursor:pointer}
a{color:inherit;text-decoration:none}
svg{flex:none}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* owner-only preview bar for a draft */
body.has-pbar{--pbar:36px}
.pbar{height:36px;display:flex;align-items:center;justify-content:center;gap:8px;background:#1D1D1F;color:#fff;font-size:13px;font-weight:500}

/* ---------- top bar ---------- */
.top{height:64px;display:flex;align-items:center;gap:14px;padding:0 20px;background:var(--panel);border-bottom:1px solid var(--line)}
.logo{width:38px;height:38px;border-radius:10px;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;font-weight:700;letter-spacing:-.02em;font-size:15px;flex:none;overflow:hidden}
.logo img{width:100%;height:100%;object-fit:cover;background:#fff}
.titles{min-width:0}
.titles b{display:block;font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.titles span{font-size:12.5px;color:var(--muted)}
.top .grow{flex:1}
.pill{height:38px;padding:0 14px;border-radius:999px;border:1px solid var(--line);background:transparent;display:inline-flex;align-items:center;gap:8px;font-size:13.5px;font-weight:500;flex:none}

/* ---------- stage ---------- */
.stage{position:absolute;top:calc(64px + var(--pbar));bottom:96px;left:0;right:0;display:flex;align-items:center;justify-content:center;padding:24px 70px}
.book{position:relative;display:flex;border-radius:4px;perspective:2400px}
.book.anim{transition:transform .7s ease}
.page{position:relative;background:var(--paper);overflow:hidden;flex:none;box-shadow:var(--shadow)}
.page img{display:block;width:100%;height:100%;object-fit:fill;user-select:none;-webkit-user-drag:none;pointer-events:none}
.page.left{border-radius:4px 0 0 4px}
.page.right{border-radius:0 4px 4px 0}
.page.solo{border-radius:4px}
.page.left::after,.page.right::after{content:"";position:absolute;top:0;bottom:0;width:28px;pointer-events:none}
.page.left::after{right:0;background:linear-gradient(90deg,transparent,rgba(0,0,0,.10))}
.page.right::after{left:0;background:linear-gradient(270deg,transparent,rgba(0,0,0,.12))}
.page.solo::after{display:none}
.page.blank{visibility:hidden}
.turn .page{box-shadow:none}
.turn{position:absolute;top:0;height:100%;transform-style:preserve-3d;transition:transform .7s cubic-bezier(.3,.7,.2,1);z-index:5}
.turn.fwd{transform-origin:left center}
.turn.back{transform-origin:right center}
.turn .face{position:absolute;inset:0;backface-visibility:hidden}
.turn .face.b{transform:rotateY(180deg)}
.turn .page{width:100%!important;height:100%!important}
.nav{position:absolute;top:50%;transform:translateY(-50%);width:46px;height:46px;border-radius:50%;border:1px solid var(--line);background:var(--panel);display:grid;place-items:center;box-shadow:0 4px 14px rgba(0,0,0,.08)}
.nav.prev{left:16px}.nav.next{right:16px}
.nav:disabled{opacity:.35;cursor:default}

/* ---------- hotspots ---------- */
.hs{position:absolute;border-radius:6px;border:1.5px dashed transparent;transition:border-color .15s, background .15s;background:transparent;padding:0}
.hs:hover,.hs.on{border-color:var(--accent);background:var(--accent-tint)}
.hs .pin{position:absolute;top:6px;right:6px;width:26px;height:26px;border-radius:50%;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;box-shadow:0 2px 8px rgba(0,0,0,.25);font:600 16px/1 Inter,sans-serif}
.hs .pin::after{content:"";position:absolute;inset:-5px;border-radius:50%;border:2px solid var(--accent);opacity:0;animation:ping 2.4s ease-out infinite}
.hs.added .pin{background:var(--wa);color:#fff}
.hs.added .pin::after{display:none}
@keyframes ping{0%{transform:scale(.7);opacity:.6}70%{transform:scale(1.5);opacity:0}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){.hs .pin::after{animation:none}.turn,.book{transition:none}}

/* ---------- product card ---------- */
.card{position:absolute;z-index:30;width:290px;background:var(--panel);color:var(--ink);border-radius:var(--r);box-shadow:0 20px 50px rgba(0,0,0,.25);padding:16px;border:1px solid var(--line)}
.card .x{position:absolute;top:10px;right:10px;width:30px;height:30px;border-radius:50%;border:0;background:transparent;display:grid;place-items:center}
.card .cname{font-size:16px;font-weight:600;padding-right:30px}
.card .ccode{font-size:12.5px;color:var(--muted);margin-top:2px}
.card .cprice{font-size:18px;font-weight:700;margin-top:10px}
.card .cnote{font-size:12.5px;color:var(--muted);margin-top:2px}
.qtyrow{display:flex;gap:10px;margin-top:14px}
.qty{display:flex;align-items:center;border:1px solid var(--line);border-radius:10px;height:44px;flex:none}
.qty button{width:40px;height:100%;border:0;background:transparent;font-size:18px}
.qty input{width:44px;border:0;background:transparent;text-align:center;font:600 15px Inter,sans-serif;color:var(--ink);-moz-appearance:textfield}
.add{flex:1;min-width:0;height:44px;padding:0 10px;border:0;border-radius:10px;background:var(--accent);color:var(--on-accent);font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ---------- bottom bar ---------- */
.bottom{position:absolute;left:0;right:0;bottom:0;height:96px;background:var(--panel);border-top:1px solid var(--line);display:flex;align-items:center;gap:16px;padding:0 20px}
.thumbs{flex:1;display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding:4px 0;align-items:center}
.thumb{flex:none;height:62px;border-radius:3px;border:2px solid transparent;background:#E9E3D8;padding:0;overflow:hidden}
.thumb img{display:block;width:100%;height:100%;object-fit:contain}
.thumb.on{border-color:var(--accent)}
.pgno{font-size:13px;color:var(--muted);white-space:nowrap}
.mnav{display:none;width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:transparent;place-items:center}
.mnav:disabled{opacity:.35}
.made{font-size:12px;color:var(--muted);white-space:nowrap;display:flex;align-items:center;gap:6px}
.made img{width:16px;height:16px;border-radius:4px}
.made b{color:var(--ink);font-weight:600;margin-left:-2px}

/* floating order button */
.fab{position:absolute;right:24px;bottom:120px;z-index:20;height:54px;padding:0 20px 0 16px;border-radius:999px;border:0;background:var(--ink);color:var(--bg);display:flex;align-items:center;gap:10px;font-weight:600;font-size:15px;box-shadow:0 10px 30px rgba(0,0,0,.25)}
.fab .n{min-width:26px;height:26px;padding:0 7px;border-radius:999px;background:var(--wa);color:#fff;display:grid;place-items:center;font-size:13px}
.fab.bump{animation:bump .4s}
@keyframes bump{40%{transform:scale(1.08)}}

/* ---------- order list drawer ---------- */
.scrim{position:fixed;inset:0;background:rgba(0,0,0,.35);opacity:0;pointer-events:none;transition:opacity .2s;z-index:40}
.drawer{position:fixed;z-index:50;top:0;right:0;bottom:0;width:400px;max-width:100%;background:var(--panel);transform:translateX(100%);transition:transform .28s cubic-bezier(.3,.7,.2,1);display:flex;flex-direction:column;box-shadow:-10px 0 40px rgba(0,0,0,.15);visibility:hidden}
body.open .scrim{opacity:1;pointer-events:auto}
body.open .drawer{transform:none;visibility:visible}
.dh{padding:20px 20px 14px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--line)}
.dh b{font-size:18px;flex:1}
.dh .x{width:36px;height:36px;border-radius:50%;border:1px solid var(--line);background:transparent;display:grid;place-items:center}
.items{flex:1;overflow-y:auto;padding:6px 20px}
.row{display:flex;gap:12px;align-items:center;padding:14px 0;border-bottom:1px solid var(--line)}
.row .th{width:52px;height:52px;border-radius:8px;background-color:#EFE9DF;background-repeat:no-repeat;flex:none}
.row .meta{flex:1;min-width:0}
.row .meta b{display:block;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .meta span{font-size:12px;color:var(--muted)}
.row .qty{height:36px}
.row .qty button{width:32px;font-size:16px}
.row .qty input{width:36px;font-size:14px}
.row .rm{border:0;background:transparent;color:var(--muted);width:30px;height:30px;display:grid;place-items:center;flex:none}
.empty{color:var(--muted);text-align:center;padding:50px 10px;font-size:14px}
.df{padding:16px 20px 20px;border-top:1px solid var(--line)}
.note{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font:14px Inter,sans-serif;background:transparent;color:var(--ink);resize:none;height:44px;margin-bottom:12px}
.preview{background:var(--accent-soft);border-radius:10px;padding:10px 12px;font-size:12.5px;line-height:1.5;color:var(--ink);white-space:pre-wrap;max-height:110px;overflow:auto;overflow-wrap:anywhere}
.preview small{display:block;font-size:11px;color:var(--muted);margin-bottom:4px;text-transform:uppercase;letter-spacing:.08em}
.send{margin-top:12px;height:52px;width:100%;border-radius:12px;background:var(--wa);color:#fff;font-weight:600;font-size:16px;display:flex;align-items:center;justify-content:center;gap:10px}
.send.off{opacity:.45;pointer-events:none}
.hint{font-size:12px;color:var(--muted);text-align:center;margin-top:8px}
.toast{position:fixed;left:50%;bottom:110px;transform:translate(-50%,20px);background:#1D1D1F;color:#fff;padding:10px 16px;border-radius:10px;font-size:14px;opacity:0;pointer-events:none;transition:.2s;z-index:60}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ---------- mobile ---------- */
@media (max-width:1024px){
  .top{height:58px;padding:0 14px;gap:10px}
  .logo{width:34px;height:34px;font-size:13px}
  .titles b{font-size:14px}
  .pill.hide-m{display:none}
  .pill{width:38px;padding:0;justify-content:center}
  .pill .lbl{display:none}
  .stage{top:calc(58px + var(--pbar));bottom:64px;padding:14px 16px 80px}
  .nav{display:none}
  .bottom{height:64px;padding:0 16px;gap:10px}
  .thumbs{display:none}
  .mnav{display:grid}
  .bottom .grow{flex:1}
  .made{font-size:11px}
  .fab{left:16px;right:16px;bottom:78px;justify-content:center;height:52px;max-width:480px;margin:0 auto}
  .card{position:fixed;left:12px!important;right:12px;top:auto!important;bottom:12px;width:auto;max-width:480px;margin:0 auto;border-radius:18px;padding:18px}
  .drawer{top:auto;left:0;width:100%;height:86%;border-radius:20px 20px 0 0;transform:translateY(100%)}
  .drawer::before{content:"";width:40px;height:5px;border-radius:3px;background:var(--line);position:absolute;top:8px;left:50%;transform:translateX(-50%)}
  .hs .pin{width:24px;height:24px;font-size:15px;top:4px;right:4px}
  .toast{bottom:140px}
}

/* Start a new list (the list is kept after Order) */
.clear{display:block;margin:10px auto 0;border:0;background:transparent;color:var(--muted);font:500 13px/1 Inter,system-ui,sans-serif;text-decoration:underline;cursor:pointer;padding:6px}
/* No JavaScript: plain pages + a working WhatsApp link */
.nojs{position:fixed;inset:0;z-index:100;overflow:auto;background:var(--bg);padding:16px;display:flex;flex-direction:column;align-items:center;gap:16px}
.nojs .send{max-width:420px;width:100%}
.nojs img{max-width:min(100%,900px);height:auto;box-shadow:0 2px 10px rgba(0,0,0,.12)}

/* Zoom: buttons in the bottom bar; when zoomed the stage scrolls (drag with the mouse, swipe with a finger) */
.zoom{display:flex;align-items:center;gap:2px;border:1px solid var(--line);border-radius:999px;padding:2px}
.zoom button{width:34px;height:34px;border:0;border-radius:50%;background:transparent;color:var(--ink);display:grid;place-items:center;cursor:pointer}
.zoom button:hover{background:var(--line)}
.zoom button:disabled{opacity:.35;cursor:default;background:transparent}
.zoom span{min-width:44px;text-align:center;font-size:12.5px;font-weight:600;color:var(--muted)}
.stage.zoomed{display:block;overflow:auto;cursor:grab;-webkit-overflow-scrolling:touch}
.stage.zoomed .book{width:max-content;margin:0 auto}
.stage.zoomed .nav{display:none}
.stage.panning{cursor:grabbing;user-select:none}
.stage .page img{-webkit-user-drag:none}
@media (max-width:1024px){ .zoom span{display:none} .zoom button{width:32px;height:32px} }

/* Fallback if viewer.js never runs: first page from the server + a WhatsApp link after 4 s. */
.book .ssr{max-height:calc(100vh - 170px);max-height:calc(100dvh - 170px);max-width:100%;height:auto;width:auto;box-shadow:0 2px 10px rgba(0,0,0,.12)}
.jsfail{position:fixed;left:16px;right:16px;bottom:96px;z-index:90;max-width:420px;margin:0 auto;height:52px;border-radius:12px;background:var(--wa);color:#fff;font-weight:600;font-size:16px;display:flex;align-items:center;justify-content:center;gap:10px;text-decoration:none;opacity:0;pointer-events:none;animation:jsf 0s 4s forwards}
@keyframes jsf{to{opacity:1;pointer-events:auto}}
body.ready .jsfail{display:none}
body:not(.ready) .fab{animation:jsh 0s 4s forwards} /* the dead "Order list" button goes away too */
@keyframes jsh{to{opacity:0;pointer-events:none}}
.drawer .privacy{display:block;text-align:center;margin-top:10px;font-size:12px;color:#8A8794}
