/*
 * Timbro design system.
 * Black and white, one colour: ink blue. Blue only ever means
 * "a stamp" or "the thing to press". Everything else is black on white.
 */
@font-face{font-family:"Archivo";font-style:normal;font-weight:400 800;font-stretch:62% 125%;font-display:swap;
  src:url(../fonts/archivo-latin.woff2) format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Archivo";font-style:normal;font-weight:400 800;font-stretch:62% 125%;font-display:swap;
  src:url(../fonts/archivo-latin-ext.woff2) format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1E00-1E9F,U+20A0-20AB,U+20AD-20C0,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Spline Sans Mono";font-style:normal;font-weight:500;font-display:swap;
  src:url(../fonts/spline-mono-latin.woff2) format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+20AC,U+2122,U+2212,U+FEFF,U+FFFD}
@font-face{font-family:"Spline Sans Mono";font-style:normal;font-weight:500;font-display:swap;
  src:url(../fonts/spline-mono-latin-ext.woff2) format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1E00-1E9F,U+20A0-20AB,U+20AD-20C0}

/* Card fonts: a classic serif and Japanese subsets (ザ・コーヒー, 珈琲茶抹好) */
@font-face{font-family:"EB Garamond";font-style:normal;font-weight:400 600;font-display:swap;src:url(../fonts/eb-garamond.woff2) format("woff2")}
@font-face{font-family:"EB Garamond";font-style:italic;font-weight:400 600;font-display:swap;src:url(../fonts/eb-garamond-italic.woff2) format("woff2")}
@font-face{font-family:"Noto Sans JP";font-weight:300 500;font-display:swap;src:url(../fonts/noto-sans-jp-sub.woff2) format("woff2")}
@font-face{font-family:"Noto Serif JP";font-weight:700;font-display:swap;src:url(../fonts/noto-serif-jp-sub.woff2) format("woff2")}

:root{
  --paper:#FFFFFF;
  --ink:#0B0B0C;
  --ink-2:#3B3B3F;
  --muted:#6B6B70;
  --line:#E3E3E1;
  --wash:#F4F4F2;
  --pop:#2B32FF;        /* stamp ink */
  --pop-hover:#1B21D6;
  --pop-wash:#ECEDFF;
  --radius:14px;
  --font:"Archivo",system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:"Spline Sans Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--ink);font:400 17px/1.55 var(--font);-webkit-font-smoothing:antialiased}
img,svg,canvas{display:block;max-width:100%}
a{color:inherit}
h1,h2,h3{margin:0;line-height:1.05;letter-spacing:-.02em}
p{margin:0}
:focus-visible{outline:3px solid var(--pop);outline-offset:2px;border-radius:6px}
::selection{background:var(--pop);color:#fff}
.wrap{max-width:1160px;margin:0 auto;padding:0 24px}
.display{font-stretch:125%;font-weight:800;letter-spacing:-.035em}
.label{font:500 12px/1.2 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.muted{color:var(--muted)}
.pop{color:var(--pop)}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:600 16px/1 var(--font);padding:14px 22px;border-radius:999px;border:1.5px solid var(--ink);background:var(--ink);color:#fff;text-decoration:none;cursor:pointer;white-space:nowrap;transition:background .15s,border-color .15s,transform .1s}
.btn:hover{background:#2A2A2E;border-color:#2A2A2E}
.btn:active{transform:translateY(1px)}
.btn.pop{background:var(--pop);border-color:var(--pop)}
.btn.pop:hover{background:var(--pop-hover);border-color:var(--pop-hover)}
.btn.line{background:transparent;color:var(--ink)}
.btn.line:hover{background:var(--wash)}
.btn.white{background:#fff;color:var(--ink);border-color:#fff}
.btn.small{padding:10px 16px;font-size:14px}
.btn.block{width:100%}
.btn[disabled]{opacity:.4;cursor:not-allowed}
.link{color:var(--pop);font-weight:600;text-decoration:underline;text-underline-offset:3px;background:none;border:0;padding:0;font:inherit;cursor:pointer}

/* ---------- brand ---------- */
.brand{display:inline-flex;align-items:center;gap:9px;text-decoration:none;font-weight:800;font-stretch:125%;font-size:21px;letter-spacing:-.03em}
.brand-mark{width:24px;height:24px;border-radius:50%;background:var(--pop);position:relative;flex:0 0 24px}
.brand-mark::after{content:"";position:absolute;inset:4px;border-radius:50%;border:1.5px solid rgba(255,255,255,.75)}

/* ---------- language switch ---------- */
.lang{display:inline-flex;border:1.5px solid var(--ink);border-radius:999px;padding:2px}
.lang button{font:600 13px/1 var(--font);padding:7px 10px;border:0;border-radius:999px;background:transparent;color:var(--ink);cursor:pointer}
.lang button[aria-pressed="true"]{background:var(--ink);color:#fff}

/* ---------- forms ---------- */
.field{display:grid;gap:6px;margin-bottom:18px}
.field > span{font-size:15px;font-weight:600}
.field small{color:var(--muted);font-size:14px}
input[type=text],input[type=email],input[type=tel],input[type=number],input[type=password],input[type=url],input[type=search],select,textarea{font:inherit;font-size:16px;width:100%;min-height:48px;padding:11px 14px;border:1.5px solid var(--line);border-radius:12px;background:#fff;color:var(--ink)}
textarea{min-height:120px;resize:vertical;line-height:1.5}
input:hover,select:hover,textarea:hover{border-color:#C9C9C6}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--ink)}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips input{position:absolute;opacity:0;pointer-events:none}
.chips label{display:inline-flex;align-items:center;gap:8px;padding:9px 14px;border:1.5px solid var(--line);border-radius:999px;cursor:pointer;font-size:15px;font-weight:500;background:#fff}
.chips label svg{width:18px;height:18px}
.chips label:hover{border-color:var(--ink)}
.chips input:checked + label{background:var(--ink);border-color:var(--ink);color:#fff}
.chips input:focus-visible + label{outline:3px solid var(--pop);outline-offset:2px}
.swatches{display:flex;gap:10px;flex-wrap:wrap}
.swatches input{position:absolute;opacity:0;pointer-events:none}
.swatches label{width:36px;height:36px;border-radius:50%;cursor:pointer;box-shadow:inset 0 0 0 1.5px rgba(0,0,0,.18)}
.swatches input:checked + label{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--ink)}
.swatches input:focus-visible + label{outline:3px solid var(--pop);outline-offset:5px}

/* ---------- app chrome ---------- */
.appbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 24px;border-bottom:1.5px solid var(--ink);background:#fff;position:sticky;top:0;z-index:20}
.appbar .right{display:flex;gap:8px;align-items:center}
.tabs{display:flex;gap:4px;border-bottom:1.5px solid var(--line);overflow-x:auto;scrollbar-width:none}
.tabs button{font:600 15px/1 var(--font);padding:14px 14px 13px;border:0;border-bottom:3px solid transparent;margin-bottom:-1.5px;background:transparent;color:var(--muted);cursor:pointer;white-space:nowrap}
.tabs button:hover{color:var(--ink)}
.tabs [aria-selected="true"]{color:var(--ink);border-bottom-color:var(--pop)}
.panel{background:#fff;border:1.5px solid var(--line);border-radius:var(--radius);padding:24px}
.help{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:12px;background:var(--wash);font-size:15px;color:var(--ink-2)}
.help b{color:var(--ink)}
.help::before{content:"i";flex:0 0 22px;height:22px;border-radius:50%;background:var(--ink);color:#fff;font:700 13px/22px var(--font);text-align:center;font-style:italic}

.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);background:var(--ink);color:#fff;padding:13px 20px;border-radius:999px;font-weight:600;font-size:15px;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;z-index:50;max-width:calc(100% - 32px);text-align:center}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ---------- the pass (customer's loyalty card) ----------
   Drawn to match the real Apple Wallet "store card" and Google Wallet
   "loyalty" layouts, so what the café sees here is what lands in the
   customer's Wallet. */
.pass{--c:#fff;--t:#0B0B0C;--s:#2B32FF;width:100%;max-width:340px;background:var(--c);color:var(--t);font-family:-apple-system,"SF Pro Text",var(--font);overflow:hidden;position:relative}
.wp-dot{aspect-ratio:1;border-radius:50%;background:color-mix(in srgb,var(--t) 22%,transparent);display:grid;place-items:center;color:var(--c);container-type:inline-size}
.wp-dot svg{width:50%;height:50%}
.wp-dot b{font-size:56cqw;line-height:1;font-weight:700;font-family:"Noto Serif JP","EB Garamond",serif}
/* empty boxes */
.wp-dot.e-outline{background:transparent;box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--t) 28%,transparent)}
.wp-dot.e-dashed{background:transparent;border:1.5px dashed color-mix(in srgb,var(--t) 40%,transparent)}
/* shapes */
.wp-dot.s-square{border-radius:18%}
.wp-dot.s-hanko{border-radius:12%}
.wp-dot.on{background:var(--s);color:#fff;border:0;box-shadow:none}
/* the designer's own stamp artwork */
.wp-dot.s-art.on{background:none}
.wp-dot.s-art img{width:100%;height:100%;object-fit:contain;transform:rotate(var(--r))}
.wp-strip{background-size:cover;background-position:center}
.wp-dot.s-ring.on{background:transparent;color:var(--s);box-shadow:inset 0 0 0 2.5px var(--s)}
/* hanko: a red seal, a frame inside a frame, pressed at a slight angle */
.wp-dot.s-hanko.on{background:transparent;color:var(--s);box-shadow:inset 0 0 0 2.5px var(--s),inset 0 0 0 4.5px var(--sb),inset 0 0 0 5.5px var(--s);transform:rotate(var(--r));opacity:.92}
.wp-dot.s-hanko.on.pop{animation:seal .38s cubic-bezier(.2,1.5,.5,1)}
@keyframes seal{0%{transform:scale(1.8) rotate(var(--r));opacity:0}60%{opacity:.92}100%{transform:scale(1) rotate(var(--r))}}
/* card fonts */
.f-wide .wp-name{font-family:var(--font);font-stretch:125%;font-weight:400;text-transform:uppercase;letter-spacing:.2em;font-size:14px}
.f-serif .wp-name,.f-serif .wp-title{font-family:"EB Garamond",Georgia,serif;font-style:italic;font-weight:500;font-size:24px;letter-spacing:0}
.f-mono .wp-name{font-family:var(--mono);text-transform:uppercase;letter-spacing:.08em;font-size:16px}
.f-wide .wp-title{font-family:var(--font);font-stretch:118%;font-weight:400;letter-spacing:.04em}
.wp-word{display:grid;gap:3px;min-width:0}
.wp-word .wp-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wp-word small{font:300 10px/1 "Noto Sans JP",var(--font);letter-spacing:.3em;opacity:.7}
.google .wp-name{font-size:14px}
.google.f-serif .wp-name{font-size:16px}
.wp-gmark{font:700 17px/1 "Noto Serif JP",serif;color:var(--s)}
.wp-dot.pop{animation:stamp .38s cubic-bezier(.2,1.5,.5,1)}
@keyframes stamp{0%{transform:scale(1.9);opacity:0}60%{opacity:1}100%{transform:scale(1)}}
.wp-strip{display:grid;grid-template-columns:repeat(var(--cols,5),1fr);gap:12px 14px;padding:18px 26px;background:var(--sb)}
.wp-label{display:block;font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;opacity:.6}
.wp-val{display:block;font-size:16px;font-weight:500;line-height:1.2}
.wp-code{display:grid;justify-items:center;gap:6px;color:#000}
.wp-code .qr{background:#fff;padding:7px;border-radius:6px;width:112px}
.wp-code .qr svg{width:100%;height:auto}
.wp-code small{font-size:12px;color:var(--t);opacity:.75;letter-spacing:.08em}
.wp-ready{margin:4px 18px 0;padding:9px 12px;border-radius:8px;background:var(--s);color:#fff;font-weight:600;font-size:13px;text-align:center}

/* Apple Wallet store card */
.pass.apple{border-radius:18px;display:flex;flex-direction:column;box-shadow:0 1px 3px rgba(0,0,0,.18),0 10px 30px -14px rgba(0,0,0,.4)}
.apple .wp-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding:14px 16px 0;min-height:52px}
.apple .wp-logo{display:flex;align-items:center;gap:8px;min-width:0;font-size:20px;font-weight:500;letter-spacing:-.01em;line-height:1.1}
.apple .wp-logo img{max-height:44px;max-width:200px;object-fit:contain;object-position:left center}
.apple .wp-logo svg{width:24px;height:24px;flex:0 0 24px}
.apple .wp-logo span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.apple .wp-hf{text-align:right;flex:0 0 auto}
.apple .wp-hf .wp-val{font-size:19px}
.apple .wp-strip{padding:18px 26px;margin:10px 0 8px}
.apple .wp-fields{display:flex;justify-content:space-between;gap:12px;padding:6px 16px 0}
.apple .wp-fields > div:last-child{text-align:right}
.apple .wp-code{margin-top:auto;padding:22px 0 10px}
.pass.apple.compact{padding-bottom:16px}
.apple .wp-tap{font-size:11px;opacity:.55;text-align:center;padding-bottom:10px}

/* Google Wallet loyalty card */
.pass.google{border-radius:24px;box-shadow:0 1px 3px rgba(0,0,0,.25),0 10px 30px -14px rgba(0,0,0,.45);font-family:"Google Sans","Roboto",var(--font)}
.google .wp-head{display:flex;align-items:center;gap:10px;padding:16px 18px 0;font-size:14px;font-weight:500}
.google .wp-glogo{width:34px;height:34px;flex:0 0 34px;border-radius:50%;background:#fff;color:#000;display:grid;place-items:center;overflow:hidden;box-shadow:0 0 0 1px rgba(0,0,0,.08)}
.google .wp-glogo svg{width:19px;height:19px}
.google .wp-glogo img{width:100%;height:100%;object-fit:contain}
.google .wp-title{padding:14px 18px 0;font-size:24px;font-weight:400;line-height:1.15}
.google .wp-fields{display:flex;gap:28px;padding:14px 18px 0}
.google .wp-label{text-transform:none;letter-spacing:0;font-size:12px;font-weight:400;opacity:.75}
.google .wp-code{margin:16px 18px 0;background:#fff;border-radius:16px;padding:14px}
.google .wp-code .qr{padding:0;width:120px}
.google .wp-code small{color:#3c4043}
.google .wp-strip{margin-top:16px;padding:18px 28px;background:var(--sb);border-top:1px solid color-mix(in srgb,var(--t) 10%,transparent)}
.google .wp-ready{margin:12px 18px 0}

/* wallet app backgrounds behind the pass */
.phone-screen:has(.pass.apple){background:#F2F2F7}  /* Apple Wallet, light mode */
.phone-screen:has(.pass.google){background:#f1f3f4}

/* iPhone / Android switch */
.platform{display:inline-flex;border:1.5px solid currentColor;border-radius:999px;padding:2px}
.platform button{font:600 13px/1 var(--font);padding:7px 12px;border:0;border-radius:999px;background:transparent;color:inherit;cursor:pointer}
.platform button[aria-pressed="true"]{background:var(--ink);color:#fff}

/* phone frame used to present the pass */
.phone{width:300px;max-width:100%;border-radius:44px;background:var(--ink);padding:12px;box-shadow:0 30px 60px -30px rgba(0,0,0,.5)}
.phone-screen{border-radius:34px;background:var(--wash);transition:background .2s;padding:44px 14px 22px;min-height:520px;display:grid;align-content:start;justify-items:center;gap:14px;position:relative}
.phone-screen::before{content:"";position:absolute;top:12px;left:50%;width:84px;height:22px;border-radius:12px;background:var(--ink);transform:translateX(-50%)}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none!important;animation:none!important}
  html{scroll-behavior:auto}
}

/* ---------- design editor (dashboard + studio) ---------- */
.de-field{margin-bottom:22px}
.de-field > .chips svg{width:18px;height:18px}
.chips .sw{width:16px;height:16px;border-radius:50%;box-shadow:inset 0 0 0 1.5px rgba(0,0,0,.2)}
.de-up{display:flex;align-items:center;gap:12px;margin-top:6px}
.de-up label{cursor:pointer}
.de-thumb img{height:40px;max-width:140px;object-fit:contain;border-radius:6px;box-shadow:0 0 0 1.5px var(--line);background:repeating-conic-gradient(#eee 0 25%,#fff 0 50%) 0 0/10px 10px}
.de-icons label{padding:9px}
.de-marktext{margin-top:10px;max-width:90px;font:700 22px/1 "Noto Serif JP","EB Garamond",serif!important;text-align:center}
