/* Loyalty Wallet — shared Evening Glass / light tokens, no private imagery on tiles. */
.loy-page,.loy-dialog { color:var(--ui-text); font:400 16px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif; min-width:0; }
.loy-page { display:grid; gap:24px; }
.loy-page>*,.loy-toolbar>*,.loy-detail-info { min-width:0; }
.loy-page :where(h1,h2,h3,p),.loy-dialog :where(h2,h3,p) { margin:0; }
.loy-page h1 { font-size:36px; line-height:1.15; font-weight:650; letter-spacing:-.025em; overflow-wrap:anywhere; }
.loy-page h2,.loy-dialog h2 { font-size:22px; font-weight:650; letter-spacing:-.02em; }
.loy-page h3,.loy-dialog h3 { font-size:17px; font-weight:600; }
.loy-page-head { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:24px; }
.loy-page-head>div { display:grid; gap:12px; max-width:680px; }
.loy-eyebrow { color:var(--ui-tint-text); font-size:12px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; }
.loy-muted,.loy-page .loy-muted,.loy-dialog .loy-muted { color:var(--ui-muted); font-size:14px; line-height:1.5; }
.loy-page :where(button,input,select,textarea),.loy-dialog :where(button,input,select,textarea) { font:inherit; color:inherit; }
.loy-page button,.loy-dialog button { display:inline-flex; align-items:center; justify-content:center; gap:8px; min-height:44px; padding:10px 16px; border:1px solid var(--ui-line); border-radius:14px; background:var(--ui-fill); font-weight:550; cursor:pointer; overflow-wrap:anywhere; }
.loy-page button svg,.loy-dialog button svg { flex-shrink:0; }
.loy-page button:disabled,.loy-dialog button:disabled { opacity:.55; cursor:not-allowed; }
.loy-page .loy-primary,.loy-dialog .loy-primary { color:#fff; background:linear-gradient(#8752d4,#7440bf); border-color:#9969d5; box-shadow:inset 0 1px 0 #ffffff20,0 6px 18px #0002; min-height:48px; }
.loy-page .loy-danger,.loy-dialog .loy-danger { color:var(--ui-danger); background:var(--ui-fill); }
.loy-page :where(button,input,select,textarea,a,summary):focus-visible,.loy-dialog :where(button,input,select,textarea,a,summary):focus-visible { outline:3px solid var(--ui-tint-text); outline-offset:3px; }
.loy-page input,.loy-page select,.loy-dialog input:not([type=checkbox]):not([type=file]),.loy-dialog select,.loy-dialog textarea { min-height:48px; width:100%; min-width:0; box-sizing:border-box; border:1px solid var(--ui-input-line); border-radius:14px; padding:12px 14px; background:var(--ui-solid); color:var(--ui-text); font-size:16px; }
.loy-page input::placeholder,.loy-dialog input::placeholder { color:var(--ui-caption); }
.loy-page label,.loy-dialog label { display:grid; gap:8px; font-size:14px; }
.loy-dialog textarea { resize:vertical; min-height:110px; }
.loy-toolbar,.loy-surface,.loy-empty { padding:20px; background:var(--ui-glass); border:1px solid var(--ui-line); border-radius:24px; }
.loy-toolbar { display:grid; gap:16px; }
.loy-filter-row,.loy-actions { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.loy-search { flex:1 1 240px; }.loy-sort { flex:0 1 210px; }
.loy-tabs { display:inline-flex; flex-wrap:wrap; gap:4px; padding:4px; border:1px solid var(--ui-line); background:var(--ui-raised); border-radius:18px; }
.loy-tabs button { border:0; background:transparent; }
.loy-page button[aria-pressed=true],.loy-dialog button[aria-pressed=true] { color:var(--ui-tint-text); background:var(--ui-tint); border-color:var(--ui-tint-text); }
.loy-categories { display:flex; gap:8px; overflow-x:auto; padding:4px; margin:-4px; scrollbar-width:thin; }
.loy-categories button { white-space:nowrap; flex-shrink:0; padding:8px 14px; font-size:14px; border-radius:24px; }
.loy-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr)); gap:20px; align-items:start; }
.loy-card { min-width:0; border:1px solid var(--ui-line); border-radius:24px; background:var(--ui-glass); box-shadow:0 12px 32px #0002; }
.loy-page .loy-card-open { display:block; width:100%; padding:10px; border:0; border-radius:24px; text-align:left; background:none; box-shadow:none; }
.loy-cover { position:relative; isolation:isolate; aspect-ratio:1.586; width:100%; box-sizing:border-box; display:flex; flex-direction:column; align-items:flex-start; justify-content:center; gap:8px; padding:20px; overflow:hidden; border-radius:18px; background:linear-gradient(125deg,#0009,#000b),var(--card-color,#7656bd); color:#fff; box-shadow:inset 0 1px 0 #ffffff20; }
.loy-cover::after { content:""; position:absolute; z-index:-1; width:70%; aspect-ratio:1; border-radius:50%; right:-22%; top:-20%; border:1px solid #ffffff24; box-shadow:0 0 0 28px #ffffff05,0 0 0 56px #ffffff04; pointer-events:none; }
.loy-cover-emblem { position:absolute; right:16px; top:16px; opacity:.65; }
.loy-cover-brand { font-size:clamp(20px,2vw,28px); font-weight:650; letter-spacing:-.025em; max-width:88%; overflow-wrap:anywhere; line-height:1.15; }
.loy-cover-label { font-size:12px; opacity:.85; max-width:90%; }.loy-cover-number { margin-top:auto; padding-top:8px; font-size:14px; font-variant-numeric:tabular-nums; letter-spacing:.08em; }
.loy-cover>img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:-1; }.loy-cover:has(>img) .loy-cover-number { background:#000c; border-radius:8px; padding:4px 8px; }
.loy-card-description { display:grid; gap:4px; padding:14px 10px 4px; }.loy-card-description strong { font-size:17px; line-height:1.35; font-weight:600; overflow-wrap:anywhere; }.loy-card-description>span { color:var(--ui-muted); font-size:13px; font-weight:400; }
.loy-card-footer { display:flex; gap:4px; align-items:center; padding:4px 16px 12px; }.loy-access { flex:1; display:flex; gap:6px; align-items:center; color:var(--ui-muted); font-size:12px; }
.loy-page .loy-icon-button,.loy-dialog .loy-icon-button { min-width:44px; width:44px; min-height:44px; padding:10px; flex-shrink:0; }
.loy-card-footer .loy-icon-button { border-color:transparent; background:transparent; }
.loy-list { grid-template-columns:minmax(0,1fr); }.loy-list .loy-card { display:flex; align-items:center; }.loy-list .loy-card-open { display:grid; grid-template-columns:132px minmax(0,1fr); gap:16px; align-items:center; }.loy-list .loy-cover { padding:12px; }.loy-list .loy-cover-brand { font-size:15px; }.loy-list .loy-cover-label,.loy-list .loy-cover-emblem { display:none; }.loy-list .loy-cover-number { font-size:11px; }.loy-list .loy-card-footer { flex-shrink:0; padding:12px; }.loy-list .loy-access { max-width:90px; }
.loy-empty { display:grid; justify-items:center; gap:16px; text-align:center; padding:48px 20px; }
.loy-error,.loy-warning,.loy-notice { padding:14px 16px; border:1px solid var(--ui-line); border-radius:14px; overflow-wrap:anywhere; }.loy-error { color:var(--ui-danger); background:var(--ui-fill); }.loy-warning { color:var(--ui-warning); background:var(--ui-fill); }.loy-notice { color:var(--ui-success); background:var(--ui-fill); }
.loy-error button { margin-left:12px; }
.loy-detail { display:grid; gap:24px; }.loy-detail-head { display:flex; flex-wrap:wrap; align-items:center; gap:16px; }.loy-detail-head .loy-back { flex-basis:100%; justify-content:flex-start; border:0; background:transparent; padding-left:0; }.loy-detail-head h1 { flex:1; min-width:0; }
.loy-detail-columns { display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,1fr); gap:24px; align-items:start; }.loy-detail-card { min-width:0; display:grid; gap:20px; }.loy-cover-large { border-radius:24px; padding:28px; }.loy-cover-large .loy-cover-brand { font-size:32px; }.loy-cover-large .loy-cover-number { font-size:18px; }
.loy-detail-info { display:grid; gap:24px; background:var(--ui-solid); }.loy-detail-info dl { margin:0; display:grid; gap:16px; }.loy-detail-info dl>div { display:flex; gap:16px; justify-content:space-between; border-bottom:1px solid var(--ui-line); padding-bottom:12px; }.loy-detail-info dt { color:var(--ui-muted); font-size:14px; }.loy-detail-info dd { margin:0; text-align:right; max-width:65%; overflow-wrap:anywhere; }.loy-notes { white-space:pre-wrap; overflow-wrap:anywhere; }.loy-link { color:var(--ui-tint-text); text-decoration:underline; min-height:44px; display:inline-flex; align-items:center; }
.loy-detail-footer { display:flex; justify-content:center; }.loy-detail-footer button { min-width:260px; }
.loy-menu-wrap { position:relative; z-index:var(--z-popover); }.loy-menu { position:absolute; right:0; top:calc(100% + 8px); width:240px; padding:8px; border:1px solid var(--ui-line); border-radius:18px; background:var(--ui-solid); box-shadow:var(--ui-shadow-float); display:grid; gap:4px; }.loy-menu button { justify-content:flex-start; background:none; border:0; }.loy-page .loy-menu-dismiss { position:fixed; inset:0; z-index:calc(var(--z-popover) - 1); background:transparent; border:0; border-radius:0; cursor:default; }
.loy-code { overflow-x:auto; overflow-y:hidden; background:#fff; color:#000; padding:0; margin:0; border:0; border-radius:0; filter:none; backdrop-filter:none; box-shadow:none; }.loy-code img { display:block; max-width:none; width:100%; height:auto; object-fit:contain; margin:auto; image-rendering:auto; filter:none; }.loy-qr img { width:min(100%,280px); min-width:0; }.loy-code p { padding:16px; color:#111; }.loy-code-tip { margin-top:10px; }.loy-copy { display:grid; justify-items:center; gap:12px; padding:16px 0; }.loy-number { font-variant-numeric:tabular-nums; font-size:22px; font-weight:600; letter-spacing:.035em; overflow-wrap:anywhere; user-select:text; white-space:pre-wrap; max-width:100%; }
.loy-photo { width:100%; max-height:500px; object-fit:contain; border-radius:12px; margin:12px 0; filter:none; }.loy-surface>p { margin-top:12px; }
.loy-dialog { width:min(760px,calc(100% - 40px)); padding:0; margin:auto; border:1px solid var(--ui-line); border-radius:28px; background:var(--ui-solid); box-shadow:var(--ui-shadow-float); max-height:calc(100vh - 48px); max-height:calc(100dvh - 48px); overflow:auto; overscroll-behavior:contain; box-sizing:border-box; }
.loy-dialog::backdrop { background:#0008; backdrop-filter:blur(4px); }.loy-dialog-head { position:sticky; top:0; z-index:1; display:flex; align-items:center; justify-content:space-between; gap:16px; padding:16px 24px; background:var(--ui-solid); border-bottom:1px solid var(--ui-line); }.loy-dialog-head h2 { overflow-wrap:anywhere; }.loy-dialog-body { padding:24px; }.loy-dialog-body>form,.loy-dialog-body>form>fieldset { display:grid; gap:20px; }.loy-form { display:grid; gap:20px; min-width:0; padding:0; border:0; margin:0; }.loy-fields { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; }
.loy-editor-columns { display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,1fr); gap:24px; }.loy-preview { min-width:0; display:grid; gap:12px; align-content:start; }.loy-preview small { color:var(--ui-caption); font-size:12px; }.loy-preview .loy-cover-brand { font-size:23px; }
.loy-dialog .loy-check { display:flex; flex-direction:row; align-items:flex-start; gap:12px; min-height:44px; }.loy-check input { flex-shrink:0; width:22px; height:22px; margin:4px 0; accent-color:var(--ui-accent); }.loy-check span { flex:1; }.loy-dialog details,.loy-detail details { border:1px solid var(--ui-line); background:var(--ui-fill); border-radius:16px; padding:4px 16px; min-width:0; }.loy-dialog summary,.loy-detail summary { cursor:pointer; min-height:44px; padding:12px 0; box-sizing:border-box; font-size:15px; font-weight:600; }.loy-dialog details[open] { padding-bottom:16px; }.loy-dialog details>.loy-form { margin-top:12px; }.loy-dialog .loy-code-options { display:grid; gap:12px; }
.loy-colors { display:flex; flex-wrap:wrap; gap:8px; }.loy-dialog .loy-colors button { width:44px; height:44px; padding:0; border:2px solid transparent; color:#fff; }.loy-dialog .loy-colors button[aria-pressed=true] { border-color:var(--ui-text); outline:2px solid var(--ui-tint-text); outline-offset:2px; }.loy-upload { min-width:0; }.loy-upload input[type=file] { width:100%; min-width:0; font-size:13px; }.loy-upload input::file-selector-button { font:inherit; color:var(--ui-text); background:var(--ui-fill); border:1px solid var(--ui-line); border-radius:12px; min-height:44px; padding:8px 12px; }
.loy-dialog footer.loy-actions { justify-content:space-between; position:sticky; bottom:-24px; margin:0 -24px -24px; padding:16px 24px; background:var(--ui-solid); border-top:1px solid var(--ui-line); }.loy-add-methods { display:grid; gap:16px; }.loy-add-methods button { display:grid; grid-template-columns:36px minmax(0,1fr); gap:4px 16px; justify-content:start; text-align:left; padding:24px; }.loy-add-methods button svg { grid-row:span 2; align-self:center; color:var(--ui-tint-text); }.loy-add-methods strong { font-size:18px; }.loy-add-methods span { font-size:14px; color:var(--ui-muted); font-weight:400; }.loy-conflict { display:grid; gap:12px; padding:16px; border:1px solid var(--ui-warning); border-radius:16px; }
.loy-scan { display:grid; gap:16px; }.loy-video { width:100%; max-height:46dvh; object-fit:cover; border-radius:20px; background:#111; }.loy-hidden { display:none; }.loy-scan-preview { display:block; width:100%; max-height:none; height:auto; touch-action:none; user-select:none; cursor:crosshair; border-radius:12px; margin:12px 0; }.loy-scan-results { display:grid; gap:12px; }.loy-scan-results button { display:grid; grid-template-columns:1fr auto; text-align:left; justify-content:start; }.loy-scan-results small { grid-column:1/-1; font-size:14px; font-weight:400; }
.loy-dialog.loy-cashier { --ui-text:#171717; --ui-muted:#525252; --ui-caption:#525252; --ui-solid:#fff; --ui-fill:#f3f3f3; --ui-line:#ddd; --ui-tint:#ece5f8; --ui-tint-text:#6941a6; color:#171717; background:#fff; width:100%; height:100vh; height:100dvh; max-width:none; max-height:none; margin:0; border:0; border-radius:0; box-shadow:none; }
.loy-dialog.loy-cashier::backdrop { background:#fff; backdrop-filter:none; }.loy-cashier .loy-dialog-head { padding-top:max(16px,env(safe-area-inset-top,0px)); }.loy-cashier-content { display:grid; gap:20px; align-content:center; margin:auto; padding:24px max(16px,env(safe-area-inset-right,0px)) max(24px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px)); max-width:1100px; min-height:60vh; }.loy-cashier-content>* { min-width:0; }.loy-cashier-content>.loy-tabs { justify-self:center; }.loy-cashier .loy-qr img { width:min(100%,400px); }.loy-cashier .loy-photo { max-height:65dvh; }.loy-cashier .loy-muted { color:#525252; }.loy-cashier .loy-number { font-size:28px; }
.loy-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; }
.loy-rule-example { white-space:pre-wrap; overflow-wrap:anywhere; font-size:12px; }
@media(hover:hover) { .loy-page button:not(:disabled):hover,.loy-dialog button:not(:disabled):hover { border-color:var(--ui-tint-text); }.loy-card { transition:border-color 160ms ease; }.loy-card:hover { border-color:var(--ui-tint-text); } }
@media(max-width:1023px) { .loy-detail-columns { grid-template-columns:minmax(0,1fr); }.loy-detail-card { max-width:600px; width:100%; justify-self:center; } }
@media(max-width:767px) {
  .loy-page { gap:20px; }.loy-page h1 { font-size:28px; }.loy-page-head { align-items:flex-start; flex-wrap:wrap; gap:16px; }.loy-page-head>.loy-primary { width:100%; min-height:52px; }.loy-page-head>div { gap:8px; }.loy-toolbar { padding:12px; gap:12px; }.loy-filter-row { gap:8px; }.loy-filter-row>.loy-tabs:first-child { width:100%; }.loy-filter-row>.loy-tabs:first-child button { flex:1; }.loy-sort { flex:1; }.loy-search { flex-basis:100%; }.loy-categories button { font-size:13px; }
  .loy-grid { grid-template-columns:minmax(0,1fr); gap:16px; }.loy-cover { padding:24px; }.loy-cover-brand { font-size:28px; }.loy-card-description strong { font-size:18px; }.loy-list .loy-card { display:block; }.loy-list .loy-card-open { grid-template-columns:100px minmax(0,1fr); gap:8px; }.loy-list .loy-card-description { padding:4px; }.loy-list .loy-card-footer { padding:0 12px 8px; }.loy-list .loy-access { max-width:none; }
  .loy-detail { gap:20px; }.loy-detail-head { gap:12px; }.loy-detail-head h1 { flex-basis:65%; }.loy-detail-columns { gap:16px; }.loy-surface { padding:16px; }.loy-cover-large .loy-cover-brand { font-size:30px; }.loy-detail-info dd { max-width:60%; }.loy-number { font-size:20px; }
  html[data-loyalty-detail] .eg-dock { display:none; }.loy-detail-footer { position:fixed; bottom:0; left:0; right:0; z-index:var(--z-dock); background:var(--ui-raised); border-top:1px solid var(--ui-line); padding:12px max(16px,env(safe-area-inset-right,0px)) calc(12px + env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px)); backdrop-filter:var(--ui-raised-blur); }.loy-detail-footer button { width:100%; min-width:0; min-height:52px; }.loy-detail { padding-bottom:calc(84px + env(safe-area-inset-bottom,0px)); }
  .loy-dialog { width:100%; max-width:100%; margin:auto auto 0; max-height:calc(100dvh - env(safe-area-inset-top,0px) - 8px); border-radius:28px 28px 0 0; }.loy-dialog-head { padding:12px 16px; }.loy-dialog-body { padding:20px 16px max(20px,env(safe-area-inset-bottom,0px)); }.loy-editor-columns,.loy-fields { grid-template-columns:minmax(0,1fr); gap:20px; }.loy-preview { max-width:420px; width:100%; justify-self:center; }.loy-dialog footer.loy-actions { bottom:-20px; margin:0 -16px -20px; padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px)); }.loy-dialog footer.loy-actions .loy-primary { min-height:52px; flex:1; }.loy-add-methods button { padding:20px 16px; }.loy-add-methods strong { font-size:17px; }
  .loy-dialog.loy-cashier { width:100%; max-height:100dvh; border-radius:0; }.loy-cashier-content { padding-inline:max(12px,env(safe-area-inset-left,0px)); min-height:65dvh; }.loy-cashier .loy-number { font-size:24px; }
}
@media(prefers-reduced-motion:reduce) { .loy-page *, .loy-dialog * { transition:none; animation:none; scroll-behavior:auto; } }
@media(forced-colors:active) { .loy-cover { border:1px solid CanvasText; }.loy-code,.loy-code img { forced-color-adjust:none; }.loy-page button,.loy-dialog button { border:1px solid ButtonText; } }
.loy-camera-frame,.loy-crop-frame { position:relative; min-width:0; }
.loy-camera-frame>span { position:absolute; inset:18%; border:2px solid white; border-radius:16px; box-shadow:0 0 0 1px #0008; pointer-events:none; }
.loy-crop-frame .loy-scan-preview { margin:0; }
.loy-crop-selection { position:absolute; box-sizing:border-box; border:2px solid #fff; outline:1px solid #111; background:#8752d433; pointer-events:none; }
