*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;scrollbar-width:none}html::-webkit-scrollbar,body::-webkit-scrollbar{display:none}body{font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,system-ui,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.5;color:var(--fg);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}img{max-width:100%;display:block}button{font-family:inherit;font-size:inherit;color:inherit;cursor:pointer}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}:root{--bg: #f5f5f7;--surface: #ffffff;--surface-2: #fbfbfd;--fg: #1d1d1f;--muted: #6e6e73;--muted-2: #86868b;--border: rgba(0, 0, 0, .08);--border-strong: rgba(0, 0, 0, .15);--accent: #0071e3;--error-bg: #fff1f0;--error-fg: #b42318;--error-chip: #d92d20;--warning-bg: #fff8eb;--warning-fg: #b54708;--warning-chip: #dc6803;--info-bg: #eff8ff;--info-fg: #175cd3;--info-chip: #2e90fa;--unsupported-bg: #f2f2f5;--unsupported-fg: #4a4a4f;--unsupported-chip: #6e6e73;--success-bg: #ecfdf3;--success-fg: #027a48;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 18px;--radius-pass: 18px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 10px rgba(0, 0, 0, .06), 0 1px 2px rgba(0, 0, 0, .04);--shadow-pass: 0 22px 40px -18px rgba(0, 0, 0, .35), 0 6px 14px -8px rgba(0, 0, 0, .2), 0 1px 0 rgba(255, 255, 255, .4) inset}.page{min-height:100vh;display:flex;flex-direction:column}.container{width:100%;max-width:1080px;margin:0 auto;padding:0 var(--space-6)}.hero{padding-top:var(--space-10);padding-bottom:var(--space-6)}.hero__brand{font-size:14px;font-weight:600;letter-spacing:.02em;color:var(--fg);display:inline-flex;align-items:center;gap:var(--space-2)}.hero__brand-dot{width:8px;height:8px;border-radius:50%;background:linear-gradient(135deg,#0071e3,#5e5ce6)}.hero__title{margin:var(--space-5) 0 var(--space-2);font-size:clamp(28px,4vw,40px);letter-spacing:-.02em;font-weight:600;line-height:1.1}.hero__tagline{margin:0;color:var(--muted);font-size:clamp(15px,1.5vw,17px);max-width:60ch}.uploader{margin:var(--space-6) auto var(--space-8)}.dropzone{position:relative;border:1.5px dashed var(--border-strong);border-radius:var(--radius-xl);background:var(--surface);padding:var(--space-10) var(--space-6);text-align:center;transition:border-color .12s ease,background-color .12s ease,transform .12s ease}.dropzone[data-dragover=true]{border-color:var(--accent);background:#f3f8ff}.dropzone[data-busy=true]{opacity:.7;pointer-events:none}.dropzone__title{font-size:18px;font-weight:600;margin:0 0 var(--space-2)}.dropzone__sub{margin:0 0 var(--space-5);color:var(--muted)}.dropzone__actions{display:inline-flex;flex-wrap:wrap;gap:var(--space-3);justify-content:center}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);border-radius:999px;padding:10px 18px;font-weight:500;font-size:14px;border:1px solid transparent;background:var(--surface);color:var(--fg);transition:background .12s ease,border-color .12s ease,transform .12s ease}.btn:active{transform:translateY(1px)}.btn--primary{background:var(--fg);color:#fff}.btn--primary:hover{background:#000}.btn--ghost{background:transparent;border-color:var(--border-strong)}.btn--ghost:hover{background:var(--surface)}.uploader__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.uploader__error{margin-top:var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--error-bg);color:var(--error-fg);font-size:14px}.results{display:grid;grid-template-columns:minmax(0,380px) minmax(0,1fr);gap:var(--space-8);padding-bottom:var(--space-12);align-items:start}@media(max-width:900px){.results{grid-template-columns:1fr}}.results__card{position:sticky;top:var(--space-6)}@media(max-width:900px){.results__card{position:static}}.results__right{display:flex;flex-direction:column;gap:var(--space-5);min-width:0}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.panel__header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border)}.panel__title{font-size:14px;font-weight:600;margin:0;display:flex;align-items:center;gap:var(--space-2)}.panel__body{padding:var(--space-4) var(--space-5)}.panel__body--flush{padding:0}details.panel>summary{list-style:none;cursor:pointer;padding:var(--space-4) var(--space-5);display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);font-size:14px;font-weight:600}details.panel>summary::-webkit-details-marker{display:none}details.panel>summary:after{content:"+";color:var(--muted);font-size:18px;line-height:1}details.panel[open]>summary:after{content:"−"}details.panel[open]>summary{border-bottom:1px solid var(--border)}.validation__counts{display:flex;gap:var(--space-2);flex-wrap:wrap}.count-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:var(--unsupported-bg);color:var(--unsupported-fg);font-size:12px;font-weight:600}.count-chip[data-sev=error]{background:var(--error-bg);color:var(--error-fg)}.count-chip[data-sev=warning]{background:var(--warning-bg);color:var(--warning-fg)}.count-chip[data-sev=info]{background:var(--info-bg);color:var(--info-fg)}.count-chip[data-sev=unsupported]{background:var(--unsupported-bg);color:var(--unsupported-fg)}.caveat{margin:0;padding:var(--space-3) var(--space-5);background:var(--warning-bg);color:var(--warning-fg);font-size:13px;border-bottom:1px solid var(--border);display:flex;align-items:flex-start;gap:var(--space-2)}.caveat strong{font-weight:600}.issue-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.issue{display:grid;grid-template-columns:86px 1fr;gap:var(--space-4);padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border);align-items:start}.issue:last-child{border-bottom:none}.issue[data-sev=error]{background:color-mix(in srgb,var(--error-bg) 55%,transparent)}.issue[data-sev=warning]{background:color-mix(in srgb,var(--warning-bg) 50%,transparent)}.issue[data-sev=info]{background:color-mix(in srgb,var(--info-bg) 45%,transparent)}.issue[data-sev=unsupported]{background:color-mix(in srgb,var(--unsupported-bg) 60%,transparent)}.sev-chip{display:inline-flex;align-items:center;padding:3px 8px;border-radius:999px;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#fff;background:var(--unsupported-chip);width:max-content}.sev-chip[data-sev=error]{background:var(--error-chip)}.sev-chip[data-sev=warning]{background:var(--warning-chip)}.sev-chip[data-sev=info]{background:var(--info-chip)}.sev-chip[data-sev=unsupported]{background:var(--unsupported-chip)}.issue__main{min-width:0}.issue__msg{margin:0;font-weight:500;color:var(--fg);line-height:1.4}.issue__meta{margin-top:4px;font-size:12px;color:var(--muted);display:flex;flex-wrap:wrap;gap:var(--space-3)}.issue__code{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-size:11px;background:#0000000a;padding:1px 6px;border-radius:4px}.issue__hint{margin-top:6px;font-size:12px;color:var(--muted);font-style:italic}.issue__path{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}.validation__empty{padding:var(--space-6) var(--space-5);text-align:center;color:var(--success-fg);background:var(--success-bg);font-weight:500;border-radius:0 0 var(--radius-lg) var(--radius-lg)}.files-list{list-style:none;margin:0;padding:0;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-size:12px}.files-list li{padding:6px var(--space-5);border-bottom:1px solid var(--border);display:flex;justify-content:space-between;gap:var(--space-3);color:var(--muted)}.files-list li:last-child{border-bottom:none}.files-list .file-name{color:var(--fg);word-break:break-all}.back-fields{list-style:none;margin:0;padding:0}.back-fields li{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border)}.back-fields li:last-child{border-bottom:none}.back-fields__label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 4px;font-weight:600}.back-fields__value{margin:0;white-space:pre-wrap;word-break:break-word;color:var(--fg);font-size:14px;line-height:1.5}.sample-banner{background:#fff8e6;border:1px solid #f3dfa0;color:#5b4400;border-radius:var(--radius-lg);padding:var(--space-4) var(--space-5);font-size:13px;line-height:1.55}.sample-banner code{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-size:12px;padding:1px 5px;border-radius:4px;background:#5b440014}.signature__status{font-size:12px;font-weight:600;letter-spacing:.02em;padding:4px 10px;border-radius:999px;white-space:nowrap}.signature__status--pending{background:var(--info-bg);color:var(--info-fg)}.signature__status--ok{background:var(--success-bg);color:var(--success-fg)}.signature__status--bad{background:var(--error-bg);color:var(--error-fg)}.signature__status--neutral{background:var(--unsupported-bg);color:var(--unsupported-fg)}.signature__meta{display:flex;flex-wrap:wrap;gap:var(--space-3) var(--space-5);padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border);font-size:12px;color:var(--fg)}.signature__meta:empty{display:none}.signature__meta-item{display:inline-flex;flex-direction:column;gap:2px}.signature__meta-label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}.signature__certs{list-style:none;margin:0;padding:0}.signature__cert{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border)}.signature__cert:last-child{border-bottom:none}.signature__cert-head{display:flex;align-items:center;gap:var(--space-2);margin-bottom:4px}.signature__cert-role{font-size:10px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--muted)}.signature__cert--wwdr .signature__cert-role{color:var(--info-fg)}.signature__cert--passtype .signature__cert-role{color:var(--success-fg)}.signature__cert-expired{font-size:10px;font-weight:700;letter-spacing:.04em;padding:2px 6px;border-radius:4px;background:var(--error-bg);color:var(--error-fg);text-transform:uppercase}.signature__cert-cn{font-weight:600;font-size:13px;margin-bottom:6px}.signature__cert-meta{display:grid;grid-template-columns:auto 1fr;gap:2px var(--space-3);margin:0;font-size:12px}.signature__cert-meta dt{color:var(--muted);font-weight:500}.signature__cert-meta dd{margin:0;color:var(--fg);word-break:break-word}.signature__cert-serial{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-size:11px;word-break:break-all}.signature__issues{list-style:none;margin:0;padding:0;border-top:1px solid var(--border)}.signature__issue{display:flex;gap:var(--space-3);padding:var(--space-3) var(--space-5);border-bottom:1px solid var(--border);font-size:13px;align-items:flex-start}.signature__issue:last-child{border-bottom:none}.signature__issue--error{background:color-mix(in srgb,var(--error-bg) 60%,transparent)}.signature__issue--warning{background:color-mix(in srgb,var(--warning-bg) 60%,transparent)}.signature__issue-body{min-width:0;flex:1}.signature__issue-message{color:var(--fg);line-height:1.4}.signature__issue-meta{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-top:4px;font-size:11px;color:var(--muted);align-items:baseline}.signature__issue-meta code{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}.signature__issue-hint{font-style:italic}.footer{margin-top:auto;padding:var(--space-6) 0 var(--space-8);border-top:1px solid var(--border);color:var(--muted);font-size:12px}.footer__inner{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--space-3)}.pass{--pass-bg: rgb(245, 245, 247);--pass-fg: rgb(20, 20, 22);--pass-label: rgb(99, 99, 102);position:relative;width:100%;max-width:360px;margin:0 auto;border-radius:var(--radius-pass);background:var(--pass-bg);color:var(--pass-fg);box-shadow:var(--shadow-pass);overflow:hidden;font-feature-settings:"ss01" on,"cv11" on;isolation:isolate}.pass-stage{position:relative;width:100%;max-width:360px;margin:0 auto;padding-top:14px}.pass-stage__chip{position:absolute;top:0;left:50%;transform:translate(-50%);z-index:5;display:inline-flex;align-items:center;gap:4px;padding:5px 11px;border-radius:999px;background:#ffffff9e;color:#141416c7;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;backdrop-filter:blur(18px) saturate(180%);-webkit-backdrop-filter:blur(18px) saturate(180%);border:1px solid rgba(255,255,255,.7);box-shadow:0 1px #fffc inset,0 6px 16px #00000029,0 1px 2px #00000014;pointer-events:none;white-space:nowrap}.pass__top{display:flex;align-items:center;gap:var(--space-3);padding:14px var(--space-5) 10px;min-height:56px}.pass__logo{display:flex;align-items:center;gap:var(--space-2);min-width:0;flex:1}.pass__logo-img{max-height:32px;max-width:160px;width:auto;height:auto;object-fit:contain}.pass__logo-text{font-size:14px;font-weight:600;letter-spacing:-.01em;color:var(--pass-fg);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.pass__logo-mark{width:32px;height:32px;border-radius:8px;background:color-mix(in srgb,var(--pass-fg) 12%,transparent);color:var(--pass-fg);display:inline-flex;align-items:center;justify-content:center;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-weight:700;font-size:16px;flex-shrink:0}.pass__logo-mark-svg{width:18px;height:18px}.pass__chrome{display:flex;align-items:center;justify-content:space-between;padding:4px var(--space-5) 12px;color:var(--pass-fg);margin-top:auto}.pass__brand-mark{width:28px;height:28px;border-radius:7px;background:color-mix(in srgb,var(--pass-fg) 12%,transparent);display:inline-flex;align-items:center;justify-content:center;overflow:hidden;color:var(--pass-fg)}.pass__brand-mark-img{width:100%;height:100%;object-fit:cover}.pass__brand-mark-svg{width:16px;height:16px}.pass__brand-mark-letter{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-weight:700;font-size:13px}.pass__nfc{width:22px;height:18px;color:var(--pass-fg);opacity:.72}.pass__header-fields{display:flex;gap:var(--space-3);align-items:flex-end;justify-content:flex-end;flex-shrink:0}.pass__header-field{display:flex;flex-direction:column;align-items:flex-end;min-width:0}.pass__header-field .field__label{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--pass-label);margin:0;font-weight:600}.pass__header-field .field__value{font-size:15px;font-weight:600;color:var(--pass-fg);margin:0;line-height:1.1}.pass__strip{width:100%;display:block;aspect-ratio:3 / 1;object-fit:cover;background:color-mix(in srgb,var(--pass-fg) 8%,transparent)}.pass__hero{width:100%;aspect-ratio:3 / 1;background:color-mix(in srgb,var(--pass-fg) 14%,transparent);display:flex;align-items:center;justify-content:center;color:var(--pass-fg)}.pass__hero-icon{width:56px;height:56px;opacity:.85}.pass[data-style=storeCard] .pass__hero-icon,.pass[data-style=coupon] .pass__hero-icon{width:72px;height:72px}.pass__thumbnail-row{display:flex;gap:var(--space-4);padding:var(--space-4) var(--space-5) 0;align-items:flex-start}.pass__thumbnail{width:80px;height:80px;border-radius:8px;object-fit:cover;flex-shrink:0}.pass__thumbnail-row .pass__primary{padding:0;flex:1;min-width:0}.pass__primary{padding:var(--space-4) var(--space-5) var(--space-2)}.pass__primary .field__label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--pass-label);margin:0 0 4px;font-weight:600}.pass__primary .field__value{font-size:28px;font-weight:500;color:var(--pass-fg);margin:0;line-height:1.1;letter-spacing:-.01em;word-break:break-word}.pass__boarding-primary{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--space-3);padding:var(--space-5)}.pass__boarding-primary .boarding-col{min-width:0}.pass__boarding-primary .boarding-col--right{text-align:right}.pass__boarding-primary .field__label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--pass-label);margin:0 0 4px;font-weight:600}.pass__boarding-primary .field__value{font-size:44px;font-weight:600;color:var(--pass-fg);margin:0;line-height:1;letter-spacing:-.02em}.pass__boarding-arrow{color:var(--pass-fg);line-height:1;padding-bottom:6px;opacity:.92}.pass__plane{width:48px;height:18px;display:block}.pass[data-style=boardingPass]{--bp-notch-r: 8px;--bp-notch-y: 36%;-webkit-mask:radial-gradient(circle var(--bp-notch-r) at 0 var(--bp-notch-y),transparent 99%,#000 100%),radial-gradient(circle var(--bp-notch-r) at 100% var(--bp-notch-y),transparent 99%,#000 100%);-webkit-mask-composite:source-in;mask:radial-gradient(circle var(--bp-notch-r) at 0 var(--bp-notch-y),transparent 99%,#000 100%),radial-gradient(circle var(--bp-notch-r) at 100% var(--bp-notch-y),transparent 99%,#000 100%);mask-composite:intersect}.pass__transit-type{display:inline-flex;align-items:center;gap:4px;font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--pass-label);padding:4px var(--space-5) 0;font-weight:600}.pass__row{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:var(--space-3);padding:var(--space-3) var(--space-5);align-items:flex-start}.pass__row+.pass__row{padding-top:var(--space-2)}.pass__row:last-of-type{padding-bottom:var(--space-5)}.field{min-width:0}.field[data-align=center]{text-align:center}.field[data-align=right]{text-align:right}.field__label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--pass-label);margin:0 0 2px;font-weight:600}.field__value{font-size:15px;font-weight:500;color:var(--pass-fg);margin:0;line-height:1.2;word-break:break-word}.pass__barcode{margin:var(--space-4) var(--space-5) var(--space-5);background:#fff;border-radius:var(--radius-md);padding:var(--space-4);display:flex;flex-direction:column;align-items:center;gap:var(--space-2);box-shadow:0 0 0 1px #0000000a}.pass__barcode canvas{max-width:100%;height:auto;display:block;image-rendering:pixelated}.pass__barcode canvas[data-format=PKBarcodeFormatPDF417],.pass__barcode canvas[data-format=PKBarcodeFormatCode128]{width:100%}.pass__barcode-alt{font-size:11px;color:#555;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;text-align:center;margin:0;word-break:break-all}.pass__barcode-error{font-size:11px;color:var(--error-fg);background:var(--error-bg);padding:6px 8px;border-radius:6px;margin:0;text-align:center}.pass[data-style=storeCard] .pass__primary .field__value,.pass[data-style=coupon] .pass__primary .field__value{font-size:32px;font-weight:600}.pass[data-style=eventTicket] .pass__primary{padding-top:var(--space-5)}.pass[data-style=generic] .pass__primary .field__value{font-size:22px}.pass[data-style=eventTicket]{--notch-w: 50px;--notch-h: 24px;-webkit-mask:radial-gradient(ellipse var(--notch-w) var(--notch-h) at 50% 0,transparent 99%,#000 100%);mask:radial-gradient(ellipse var(--notch-w) var(--notch-h) at 50% 0,transparent 99%,#000 100%)}.pass[data-style=eventTicket] .pass__top{padding-top:30px}.pass[data-style=coupon]{--perf-radius: 6px;--perf-step: 14px;-webkit-mask:radial-gradient(circle var(--perf-radius) at 50% 0,transparent 99%,#000 100%) 0 0 / var(--perf-step) var(--perf-radius) repeat-x,radial-gradient(circle var(--perf-radius) at 50% 100%,transparent 99%,#000 100%) 0 100% / var(--perf-step) var(--perf-radius) repeat-x,linear-gradient(#000,#000) 0 var(--perf-radius) / 100% calc(100% - var(--perf-radius) * 2) no-repeat;mask:radial-gradient(circle var(--perf-radius) at 50% 0,transparent 99%,#000 100%) 0 0 / var(--perf-step) var(--perf-radius) repeat-x,radial-gradient(circle var(--perf-radius) at 50% 100%,transparent 99%,#000 100%) 0 100% / var(--perf-step) var(--perf-radius) repeat-x,linear-gradient(#000,#000) 0 var(--perf-radius) / 100% calc(100% - var(--perf-radius) * 2) no-repeat}
