/* TapShareCard base: reset, typography, layout primitives, buttons, chips, toasts. Uses tokens.css only. */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;-webkit-tap-highlight-color:transparent;scroll-behavior:smooth}
body{margin:0;min-height:100vh;min-height:100dvh;background:var(--tsc-bg);color:var(--tsc-ink);
  font:400 16px/1.5 var(--tsc-font-text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  padding-left:var(--tsc-safe-l);padding-right:var(--tsc-safe-r)}
img,svg,video,canvas{max-width:100%;height:auto}
:where(img[width][height]){height:auto}/* QA r1: zero specificity so component logo sizes (.tsc-abar__brand img, .tsc-pbar__brand img, .tsc-auth__brand img) win */
h1,h2,h3,h4{margin:0 0 .5em;line-height:1.2;font-weight:700;letter-spacing:-.01em}
h1,h2{font-family:var(--tsc-font-display);font-weight:600;font-variation-settings:'opsz' 72}
h1{font-size:clamp(1.75rem,5vw,2.75rem)}h2{font-size:clamp(1.4rem,3.5vw,2rem)}h3{font-size:1.2rem}h4{font-size:1rem}
p{margin:0 0 1em}
a{color:var(--tsc-accent-text);text-underline-offset:3px}
a:hover{text-decoration-thickness:2px}
small,.tsc-small{font-size:.875rem}
.tsc-mute{color:var(--tsc-mute)}
.tsc-center{text-align:center}
hr{border:0;border-top:1px solid var(--tsc-line);margin:var(--tsc-space-5) 0}
:focus-visible{outline:2px solid var(--tsc-accent);outline-offset:2px;border-radius:4px}
.tsc-sr{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.tsc-skip{position:absolute;left:8px;top:-60px;z-index:1000;background:var(--tsc-accent);color:var(--tsc-accent-ink);padding:10px 14px;border-radius:var(--tsc-r-sm);font-weight:600}
.tsc-skip:focus{top:8px}
.tsc-wrap{width:100%;max-width:1120px;margin:0 auto;padding:0 var(--tsc-space-4)}
.tsc-wrap--narrow{max-width:640px}
.tsc-stack>*+*{margin-top:var(--tsc-space-4)}
.tsc-row{display:flex;flex-wrap:wrap;gap:var(--tsc-space-3);align-items:center}
.tsc-grid{display:grid;gap:var(--tsc-space-4);grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr))}
.tsc-panel{background:var(--tsc-card);border:1px solid var(--tsc-line);border-radius:var(--tsc-r);padding:var(--tsc-space-5);box-shadow:var(--tsc-shadow)}
.tsc-logo{display:inline-block;height:32px;width:auto}
.tsc-icon{display:inline-block;width:20px;height:20px;vertical-align:-4px;background:currentColor;
  -webkit-mask:var(--ico) center/contain no-repeat;mask:var(--ico) center/contain no-repeat}

/* Buttons: 44px minimum, teal fill uses dark ink (BRAND contrast rule) */
.tsc-btn,button.tsc-btn,a.tsc-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;box-sizing:border-box;
  min-height:var(--tsc-ctl-h);height:var(--tsc-ctl-h);padding:0 18px;margin:0;
  border:1px solid transparent;border-radius:var(--tsc-r-sm);
  background:var(--tsc-accent);color:var(--tsc-accent-ink);
  font:600 max(16px,1em)/1 var(--tsc-font-text);text-decoration:none;white-space:nowrap;cursor:pointer;
  -webkit-appearance:none;appearance:none;touch-action:manipulation;transition:transform .12s,filter .12s}
.tsc-btn:hover{filter:brightness(1.06)}
.tsc-btn:active{transform:translateY(1px)}
.tsc-btn[disabled],.tsc-btn.is-busy{opacity:.55;pointer-events:none}
.tsc-btn.tsc-btn--ghost{background:transparent;color:var(--tsc-ink);border-color:var(--tsc-field-line)}
.tsc-btn.tsc-btn--ghost:hover{background:var(--tsc-card)}
.tsc-btn.tsc-btn--gold{background:var(--tsc-accent2);color:#2B1D00}
.tsc-btn.tsc-btn--danger{background:var(--tsc-danger);color:#2B0000}
.tsc-btn.tsc-btn--block{width:100%}
.tsc-btn.tsc-btn--icon{width:var(--tsc-ctl-h);padding:0}
.tsc-btn.tsc-btn--sm{min-height:var(--tsc-ctl-h);height:var(--tsc-ctl-h);padding:0 14px;font-size:max(16px,.9em)}

.tsc-chip{display:inline-flex;align-items:center;gap:6px;min-height:28px;padding:2px 10px;border-radius:999px;
  background:var(--tsc-card);border:1px solid var(--tsc-line);font-size:.8125rem;font-weight:600;color:var(--tsc-mute)}
.tsc-chip--ok{color:var(--tsc-ok);border-color:currentColor}
.tsc-chip--warn{color:var(--tsc-accent2);border-color:currentColor}
.tsc-chip--bad{color:var(--tsc-danger);border-color:currentColor}
html[data-theme=light] .tsc-chip--ok{color:#0F7A4B}
html[data-theme=light] .tsc-chip--warn{color:#8A5A00}
html[data-theme=light] .tsc-chip--bad{color:#B42323}

.tsc-alert{padding:12px 14px;border-radius:var(--tsc-r-sm);border:1px solid var(--tsc-line);background:var(--tsc-card)}
.tsc-alert--ok{border-color:var(--tsc-ok)}.tsc-alert--bad{border-color:var(--tsc-danger)}.tsc-alert--warn{border-color:var(--tsc-accent2)}

/* Toasts (app.js TSC.toast) */
.tsc-toasts{position:fixed;left:0;right:0;bottom:calc(16px + var(--tsc-safe-b));z-index:900;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none;padding:0 16px}
.tsc-toast{pointer-events:auto;max-width:min(92vw,420px);padding:12px 16px;border-radius:var(--tsc-r-sm);background:var(--tsc-bg-2);color:var(--tsc-ink);
  border:1px solid var(--tsc-line);box-shadow:var(--tsc-shadow);font-weight:500;animation:tsc-toast-in .2s ease-out}
.tsc-toast--ok{border-color:var(--tsc-ok)}.tsc-toast--bad{border-color:var(--tsc-danger)}
@keyframes tsc-toast-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* Confirm dialog (app.js TSC.confirm) — div-based, no <dialog> (Safari <15.4) */
.tsc-modal{position:fixed;inset:0;z-index:950;display:flex;align-items:center;justify-content:center;padding:16px;background:#0B122099}
.tsc-modal__box{width:100%;max-width:420px;background:var(--tsc-bg-2);color:var(--tsc-ink);border:1px solid var(--tsc-line);border-radius:var(--tsc-r);padding:var(--tsc-space-5);box-shadow:var(--tsc-shadow)}
.tsc-modal__actions{display:flex;gap:var(--tsc-space-3);justify-content:flex-end;margin-top:var(--tsc-space-5);flex-wrap:wrap}

/* Brand ripple (loading + "saved" pulse, 600 ms) */
.tsc-ripple{position:relative;display:inline-block;width:28px;height:28px}
.tsc-ripple::before,.tsc-ripple::after{content:"";position:absolute;inset:0;border:2px solid var(--tsc-accent);border-radius:50%;animation:tsc-ripple 1.2s ease-out infinite}
.tsc-ripple::after{animation-delay:.4s}
@keyframes tsc-ripple{from{transform:scale(.2);opacity:1}to{transform:scale(1);opacity:0}}
.tsc-pulse{animation:tsc-pulse .6s ease-out 1}
@keyframes tsc-pulse{0%{box-shadow:0 0 0 0 #19D3C5AA}100%{box-shadow:0 0 0 18px #19D3C500}}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
  .tsc-ripple::before,.tsc-ripple::after{animation:none;transform:scale(.7);opacity:.8}
}
@media print{.tsc-toasts,.tsc-modal,.tsc-skip{display:none!important}}

/* Icon classes: <span class="tsc-icon tsc-i-phone" aria-hidden="true"></span> (mask, colour = currentColor; no inline style → CSP-safe) */
.tsc-i-alert{--ico:url('../img/icons/alert.svg')}
.tsc-i-arrow-left{--ico:url('../img/icons/arrow-left.svg')}
.tsc-i-bell{--ico:url('../img/icons/bell.svg')}
.tsc-i-bookmark{--ico:url('../img/icons/bookmark.svg')}
.tsc-i-calendar{--ico:url('../img/icons/calendar.svg')}
.tsc-i-card{--ico:url('../img/icons/card.svg')}
.tsc-i-chart{--ico:url('../img/icons/chart.svg')}
.tsc-i-chat{--ico:url('../img/icons/chat.svg')}
.tsc-i-check{--ico:url('../img/icons/check.svg')}
.tsc-i-chevron-down{--ico:url('../img/icons/chevron-down.svg')}
.tsc-i-chevron-right{--ico:url('../img/icons/chevron-right.svg')}
.tsc-i-clock{--ico:url('../img/icons/clock.svg')}
.tsc-i-copy{--ico:url('../img/icons/copy.svg')}
.tsc-i-download{--ico:url('../img/icons/download.svg')}
.tsc-i-edit{--ico:url('../img/icons/edit.svg')}
.tsc-i-eye{--ico:url('../img/icons/eye.svg')}
.tsc-i-globe{--ico:url('../img/icons/globe.svg')}
.tsc-i-home{--ico:url('../img/icons/home.svg')}
.tsc-i-image{--ico:url('../img/icons/image.svg')}
.tsc-i-info{--ico:url('../img/icons/info.svg')}
.tsc-i-link{--ico:url('../img/icons/link.svg')}
.tsc-i-lock{--ico:url('../img/icons/lock.svg')}
.tsc-i-logout{--ico:url('../img/icons/logout.svg')}
.tsc-i-mail{--ico:url('../img/icons/mail.svg')}
.tsc-i-menu{--ico:url('../img/icons/menu.svg')}
.tsc-i-moon{--ico:url('../img/icons/moon.svg')}
.tsc-i-nfc{--ico:url('../img/icons/nfc.svg')}
.tsc-i-palette{--ico:url('../img/icons/palette.svg')}
.tsc-i-phone{--ico:url('../img/icons/phone.svg')}
.tsc-i-pin{--ico:url('../img/icons/pin.svg')}
.tsc-i-plus{--ico:url('../img/icons/plus.svg')}
.tsc-i-qr{--ico:url('../img/icons/qr.svg')}
.tsc-i-receipt{--ico:url('../img/icons/receipt.svg')}
.tsc-i-search{--ico:url('../img/icons/search.svg')}
.tsc-i-settings{--ico:url('../img/icons/settings.svg')}
.tsc-i-share{--ico:url('../img/icons/share.svg')}
.tsc-i-sun{--ico:url('../img/icons/sun.svg')}
.tsc-i-trash{--ico:url('../img/icons/trash.svg')}
.tsc-i-truck{--ico:url('../img/icons/truck.svg')}
.tsc-i-user{--ico:url('../img/icons/user.svg')}
.tsc-i-users{--ico:url('../img/icons/users.svg')}
.tsc-i-x{--ico:url('../img/icons/x.svg')}
.tsc-pt-xl{padding-top:12vh}.tsc-mt-l{margin-top:32px}
/* logo swap by theme: <img class="tsc-logo tsc-logo--dark" src=logo.svg> + <img class="tsc-logo tsc-logo--light" src=logo-onlight.svg> */
.tsc-logo--light{display:none}html[data-theme=light] .tsc-logo--light{display:inline-block}html[data-theme=light] .tsc-logo--dark{display:none}
