/* Dinstaaa Card Manager — standalone stylesheet.
   Ported from the NEW_UI template (flattened Tomorro design system tokens +
   components). Fonts are self-hosted variable woff2 files (strict CSP: no
   CDNs, no inline styles); brand fonts Ozik/Aeonik are commercial, so
   Space Grotesk/Manrope substitute. */

/* ---------- fonts (self-hosted, variable) ---------- */
@font-face{
  font-family:'Manrope';
  font-style:normal;
  font-weight:400 700;
  font-display:swap;
  src:url('/assets/fonts/manrope-var.woff2') format('woff2');
}
@font-face{
  font-family:'Space Grotesk';
  font-style:normal;
  font-weight:500 700;
  font-display:swap;
  src:url('/assets/fonts/space-grotesk-var.woff2') format('woff2');
}

/* ---------- tokens ---------- */
:root{
--color-primary:#68EF3F;--color-primary-70:#5CD939;--color-primary-90:#49B32C;
--color-secondary:#273F2B;--color-tertiary:#DCDDE0;
--color-neutral:#121212;--color-surface:#1A221B;--color-surface-2:#2B382D;
--color-on-surface:#FFFFFF;--color-muted:#A7ADA4;--color-border:#DCDDE3;--color-error:#D94A4A;
--surface-page:var(--color-neutral);--surface-card:var(--color-surface);--surface-raised:var(--color-surface-2);
--text-body:var(--color-on-surface);--text-muted:var(--color-muted);--text-on-accent:var(--color-secondary);
--accent:var(--color-primary);--accent-hover:var(--color-primary-70);--accent-pressed:var(--color-primary-90);
--border-subtle:var(--color-surface-2);--border-edge:var(--color-border);

--font-display:'Space Grotesk','Ozik',sans-serif;
--font-body:'Manrope','Aeonik',sans-serif;
--type-headline-display:700 75px/90px var(--font-display);--track-headline-display:-0.05em;
--type-headline-lg:700 52px/67px var(--font-display);--track-headline-lg:-0.04em;
--type-headline-md:500 36px/41px var(--font-body);--track-headline-md:-0.03em;
--type-headline-sm:500 24px/29px var(--font-body);--track-headline-sm:-0.01em;
--type-body-lg:500 17px/25px var(--font-body);
--type-body-md:500 16px/24px var(--font-body);
--type-body-sm:400 14px/20px var(--font-body);
--type-label-lg:500 15px/20px var(--font-body);
--type-label-md:500 14px/18px var(--font-body);
--type-label-sm:500 12px/16px var(--font-body);--track-label-sm:0.02em;
--type-caption:400 12px/16px var(--font-body);

--space-xs:8px;--space-sm:18px;--space-md:38px;--space-lg:60px;--space-xl:90px;
--radius-none:0px;--radius-sm:4px;--radius-md:8px;--radius-lg:15px;--radius-xl:26px;--radius-full:9999px;
}

.t-headline-display{font:var(--type-headline-display);letter-spacing:var(--track-headline-display)}
.t-headline-lg{font:var(--type-headline-lg);letter-spacing:var(--track-headline-lg)}
.t-headline-md{font:var(--type-headline-md);letter-spacing:var(--track-headline-md)}
.t-headline-sm{font:var(--type-headline-sm);letter-spacing:var(--track-headline-sm)}
.t-body-lg{font:var(--type-body-lg)}
.t-body-md{font:var(--type-body-md)}
.t-body-sm{font:var(--type-body-sm)}
.t-label-lg{font:var(--type-label-lg)}
.t-label-md{font:var(--type-label-md)}
.t-label-sm{font:var(--type-label-sm);letter-spacing:var(--track-label-sm)}
.t-caption{font:var(--type-caption)}

/* ---------- base ---------- */
body{margin:0;background:var(--surface-page);color:var(--text-body);font-family:var(--font-body)}
a{color:var(--color-on-surface)}
a:hover{color:var(--color-primary)}
select option{background:#1A221B;color:#fff}
input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none}

/* ---------- components (ported from the design system) ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:var(--type-label-md);font-family:var(--font-body);height:46px;padding:11px 19px;border-radius:var(--radius-xl);border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:background-color .15s ease,color .15s ease,border-color .15s ease;background:var(--accent);color:var(--text-on-accent)}
.btn:hover{background:var(--accent-hover)}
.btn:active{background:var(--accent-pressed)}
.btn:disabled{opacity:.4;cursor:default}
.btn-secondary{background:transparent;color:var(--color-on-surface);border-color:var(--color-surface-2)}
.btn-secondary:hover{background:var(--color-surface-2)}
.btn-secondary:active{background:var(--color-surface-2)}
.btn-tertiary{background:transparent;color:var(--color-on-surface);height:auto;padding:0;border:none;border-radius:var(--radius-none)}
.btn-tertiary:hover,.btn-tertiary:active{background:transparent;color:var(--accent)}
.btn-danger{background:transparent;border-color:var(--color-error);color:var(--color-error)}
.btn-danger:hover{background:var(--color-surface-2)}

.ds-card{background:var(--surface-card);color:var(--color-on-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);padding:15px 22px}

.chip{display:inline-flex;align-items:center;gap:6px;font:var(--type-label-sm);font-family:var(--font-body);letter-spacing:var(--track-label-sm);border-radius:var(--radius-full);padding:6px 12px;white-space:nowrap;background:var(--surface-raised);color:var(--color-on-surface)}
.chip-accent{background:var(--accent);color:var(--text-on-accent)}

.input{background:var(--surface-card);color:var(--color-on-surface);font:var(--type-body-sm);font-family:var(--font-body);border:1px solid var(--border-subtle);border-radius:var(--radius-md);padding:12px 16px;outline:none;width:100%;box-sizing:border-box;transition:border-color .15s ease}
.input:focus{border-color:var(--accent)}

.select{background:var(--surface-card);color:var(--color-on-surface);font:var(--type-body-sm);font-family:var(--font-body);border:1px solid var(--border-subtle);border-radius:var(--radius-md);padding:12px 16px;outline:none}

/* ---------- app ---------- */
.page{min-height:100vh}
.label{font:var(--type-label-sm);letter-spacing:0.08em;text-transform:uppercase;color:var(--color-muted)}
.section-label{font:var(--type-label-sm);font-size:16px;letter-spacing:0.12em;text-transform:uppercase;color:var(--color-muted)}

.topbar{display:flex;align-items:center;gap:18px;padding:18px 38px;border-bottom:1px solid var(--border-subtle);flex-wrap:wrap}
.wordmark{font-family:var(--font-display);font-weight:700;letter-spacing:-0.03em;text-decoration:none}
.wordmark-suffix{color:var(--color-muted);font-weight:500}
.topbar-right{margin-left:auto;display:flex;gap:18px;align-items:center}

.page-center{width:100%;max-width:520px;margin:0 auto}

.wallet-add{display:inline-flex;align-items:center;color:inherit}
.wallet-add:hover{color:var(--color-on-surface)}

.menu-wrap{position:relative}
.menu-dropdown{position:absolute;right:0;top:calc(100% + 10px);background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-md);padding:6px;display:flex;flex-direction:column;min-width:180px;z-index:40}
.menu-dropdown[hidden]{display:none}
.menu-item{display:block;text-align:left;background:transparent;border:none;cursor:pointer;color:var(--color-on-surface);font:var(--type-body-sm);font-family:var(--font-body);padding:10px 14px;border-radius:var(--radius-sm);text-decoration:none}
.menu-item:hover{background:var(--color-surface-2);color:var(--color-on-surface)}
.menu-form{margin:0;display:block}
.menu-form .menu-item{width:100%}

.main{max-width:1100px;margin:0 auto;padding:60px 38px}
.stack-lg{display:flex;flex-direction:column}
.stack-md{display:flex;flex-direction:column;gap:18px}
.stack-sm{display:flex;flex-direction:column;gap:12px}
.stack-xs{display:flex;flex-direction:column;gap:8px}

.banner{font:var(--type-body-md);border:1px solid var(--accent);color:var(--accent);background:var(--surface-card);border-radius:var(--radius-lg);padding:14px 22px;margin-bottom:38px}
.banner-error{border-color:var(--color-error);color:var(--color-error)}

.login-wrap{min-height:100vh;display:flex;flex-direction:column;gap:26px;align-items:center;justify-content:center;background:var(--surface-page)}
.login-card{width:min(380px,calc(100vw - 36px));display:flex;flex-direction:column;gap:18px;padding:38px;box-sizing:border-box}
.login-card .banner{margin-bottom:0}
.error-text{font:var(--type-body-sm);color:var(--color-error)}
.error-text:empty{display:none}
.muted-text{font:var(--type-body-sm);color:var(--color-muted)}

.tbl{width:100%;border-collapse:collapse}
.tbl th{font:var(--type-label-sm);letter-spacing:0.08em;text-transform:uppercase;color:var(--color-muted);text-align:left;padding:10px 16px}
.tbl td{font:var(--type-body-sm);font-family:var(--font-body);padding:14px 16px;border-top:1px solid var(--border-subtle);color:var(--color-on-surface)}
.tbl-card{padding:0;overflow:hidden;overflow-x:auto}
.row-click{cursor:pointer}
.row-disabled{opacity:.45}
.num{font-variant-numeric:tabular-nums}
.accent-text{color:var(--accent)}
.row-open{color:inherit;text-decoration:none}
.row-open:hover{color:var(--accent)}
svg.net-logo{display:block}
.net-visa{font:var(--type-label-md);font-style:italic;font-weight:800;letter-spacing:0.08em;color:#fff}
.tx-pos{color:var(--accent)}
.tx-neg{color:var(--color-on-surface)}
.empty-note{font:var(--type-body-md);color:var(--color-muted);text-align:center}

.cards-head{display:flex;align-items:baseline;gap:10px}
.cards-head .btn{margin-left:auto;align-self:center}

.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.65);display:flex;align-items:center;justify-content:center;z-index:50;padding:18px;box-sizing:border-box}
.modal-overlay[hidden]{display:none}
.modal{width:400px;max-width:100%;max-height:92vh;overflow:auto;padding:18px;display:flex;flex-direction:column;gap:12px;box-sizing:border-box}
.modal-head{display:flex;align-items:center;justify-content:space-between}
.face.face-preview{position:relative;inset:auto;width:100%;aspect-ratio:440/270;flex-shrink:0;padding:18px}
.field-row{display:flex;gap:12px}
.field-amount{flex:0 0 20%;min-width:96px}
.field-grow{flex:1;min-width:0}
.feature-row{display:flex;gap:8px;flex-wrap:wrap}
.feature-row[hidden]{display:none}
.chip-off{color:var(--color-muted)}
.fees{display:grid;grid-template-columns:1fr 1fr;gap:8px 26px}
.fees[hidden]{display:none} /* display:grid would beat the UA [hidden] rule (same as .feature-row) */
.fee{display:flex;justify-content:space-between;font:var(--type-body-sm)}
.fee span:first-child{color:var(--color-muted)}
.mt-6{margin-top:6px}
.text-center{text-align:center}

.detail-top{display:flex;gap:38px;flex-wrap:wrap}
.card-face-wrap{perspective:1200px;width:440px;max-width:100%;height:auto;aspect-ratio:440/270;cursor:pointer;flex-shrink:0}
.card-flip{position:relative;width:100%;height:100%;transform-style:preserve-3d;transition:transform .5s ease}
.card-flip.flipped{transform:rotateY(180deg)}
.face{position:absolute;inset:0;border-radius:var(--radius-lg);padding:26px;box-sizing:border-box;backface-visibility:hidden;-webkit-backface-visibility:hidden;background:linear-gradient(135deg,#273F2B 0%,#3A6B33 55%,#68EF3F 160%);display:flex;flex-direction:column}
.face-back{transform:rotateY(180deg)}
/* per-BIN card palette (bins.cardColor) — classes only, the strict CSP forbids
   inline style attributes; .face's gradient stays the fallback for uncatalogued
   cards. Names must match bin_colors() in app/helpers.php. */
.face-color-green{background:linear-gradient(135deg,#273F2B 0%,#3A6B33 55%,#68EF3F 160%)}
.face-color-blue{background:linear-gradient(135deg,#16283E 0%,#2B5AA8 55%,#4FA8FF 160%)}
.face-color-purple{background:linear-gradient(135deg,#2A1E42 0%,#5B3AA8 55%,#A56BFF 160%)}
.face-color-gold{background:linear-gradient(135deg,#3E3216 0%,#A8842B 55%,#FFD24F 160%)}
.face-color-graphite{background:linear-gradient(135deg,#1A1D20 0%,#3A4046 55%,#8C97A0 160%)}
.face-color-red{background:linear-gradient(135deg,#3E1A18 0%,#A83A38 55%,#FF6B5F 160%)}
.face-row{display:flex;justify-content:space-between;align-items:flex-start}
.face-bottom{display:flex;justify-content:space-between;align-items:flex-end}
.face-chip-gold{width:44px;height:32px;border-radius:6px;background:linear-gradient(135deg,#E8D48A,#C9A94E)}
.face-network{font:var(--type-label-md);color:#fff;font-style:italic;letter-spacing:0.06em;font-weight:700}
.face-number-row{display:flex;align-items:center;gap:10px;margin-top:auto;margin-bottom:auto}
.face-number{font:var(--type-headline-sm);font-family:'Space Grotesk',monospace;font-variant-numeric:tabular-nums;color:#fff;letter-spacing:0.08em}
.face-status{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.face-created{font:var(--type-caption);color:rgba(255,255,255,.6)}
.icon-btn{background:transparent;border:none;cursor:pointer;color:#fff;padding:4px;display:inline-flex;align-items:center;border-radius:var(--radius-sm)}
.icon-btn[hidden]{display:none}
.icon-btn:hover{color:var(--accent)}
.icon-btn:disabled{opacity:.4;cursor:default}
.bal-cell{display:inline-flex;align-items:center;gap:8px}
.bal-refresh{color:var(--color-muted)}
.icon-btn.spin svg{animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.face-label{font:var(--type-label-sm);letter-spacing:0.08em;text-transform:uppercase;color:rgba(255,255,255,.6)}
.face-holder{font:var(--type-label-lg);color:#fff;letter-spacing:0.06em}
.mag-stripe{height:40px;background:rgba(0,0,0,.45);margin:-26px -26px 22px;border-radius:var(--radius-lg) var(--radius-lg) 0 0}
.pan-box{background:rgba(255,255,255,.25);border-radius:var(--radius-md);padding:10px 16px;display:flex;align-items:center;gap:10px}
.pan-number{font:var(--type-headline-sm);font-family:'Space Grotesk',monospace;font-variant-numeric:tabular-nums;color:#fff;letter-spacing:0.1em}
.back-meta{display:flex;gap:26px;margin-top:18px;font-family:'Space Grotesk',monospace;font-variant-numeric:tabular-nums}
.back-meta .val{font:var(--type-body-lg);color:#fff}

.detail-left{display:flex;flex-direction:column;gap:14px;width:440px;max-width:100%;flex-shrink:0}
.detail-right{flex:1;min-width:320px}
.detail-info{padding:22px;display:flex;flex-direction:column;gap:12px;box-sizing:border-box}
.fund-row{display:flex;gap:12px}
.fund-row .input{flex:1;min-width:0}
.bal-row{display:flex;justify-content:space-between;align-items:baseline}
.bal-amount{font:var(--type-headline-md);letter-spacing:var(--track-headline-md);color:var(--accent);font-family:var(--font-display)}
.info-divider{border-top:1px solid var(--border-subtle)}
.icon-actions{display:flex;gap:12px}
.icon-actions form{flex:1;display:flex;margin:0}
.icon-actions form .icon-action{flex:1}
.icon-action{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 8px;background:transparent;border:1px solid var(--color-surface-2);border-radius:var(--radius-md);color:var(--color-on-surface);font:var(--type-label-md);font-family:var(--font-body);cursor:pointer;transition:background-color .15s ease}
.icon-action:hover{background:var(--color-surface-2)}
.icon-action:disabled{opacity:.4;cursor:default}
.icon-action-danger{color:var(--color-error);border-color:var(--color-error)}
.self-start{align-self:flex-start}
/* .stack-lg has no gap, and the show page's #detail-banner sits empty between
   the back button and the card — space the button itself, not the stack. */
.back-link{margin-bottom:26px}
.is-busy{opacity:.45;pointer-events:none}

/* ---------- admin (built from the design-system primitives) ---------- */
.admin-head{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.admin-nav{display:flex;gap:8px;margin-left:auto}
.admin-nav a{font:var(--type-label-sm);font-family:var(--font-body);letter-spacing:var(--track-label-sm);border-radius:var(--radius-full);padding:8px 16px;background:var(--surface-raised);color:var(--color-on-surface);text-decoration:none}
.admin-nav a:hover{background:var(--color-surface-2);color:var(--color-on-surface)}
.admin-nav a.active{background:var(--accent);color:var(--text-on-accent)}
.admin-inline{display:inline-flex;gap:6px;align-items:center;margin:2px 4px 2px 0;vertical-align:middle}
.btn-sm{height:34px;padding:6px 14px;border-radius:var(--radius-lg)}
.input-sm{padding:7px 10px;width:110px}
.input-note{width:140px}
/* BIN catalogue: color swatches (midpoints of the face-color-* gradients) + checkbox rows */
.swatch{display:inline-block;width:16px;height:16px;border-radius:5px;vertical-align:-2px;margin-right:6px}
.swatch-green{background:#3A6B33}
.swatch-blue{background:#2B5AA8}
.swatch-purple{background:#5B3AA8}
.swatch-gold{background:#A8842B}
.swatch-graphite{background:#3A4046}
.swatch-red{background:#A83A38}
.check-row{display:inline-flex;gap:8px;align-items:center;font:var(--type-body-sm);color:var(--color-on-surface);cursor:pointer}
/* API debug console: action list on the left, selected form + result on the right */
.debug-split{display:flex;gap:38px;flex-wrap:wrap;align-items:flex-start}
.debug-actions{display:flex;flex-direction:column;gap:8px;width:240px;flex-shrink:0}
.debug-actions a{display:flex;align-items:center;justify-content:space-between;gap:10px;font:var(--type-label-md);font-family:var(--font-body);padding:10px 16px;border-radius:var(--radius-md);background:var(--surface-raised);color:var(--color-on-surface);text-decoration:none}
.debug-actions a:hover{background:var(--color-surface-2);color:var(--color-on-surface)}
.debug-actions a.active{background:var(--accent);color:var(--text-on-accent)}
.debug-tag{font:var(--type-label-sm);letter-spacing:var(--track-label-sm);color:var(--color-muted)}
.debug-tag-danger{color:#FF6B5F}
.debug-actions a.active .debug-tag{color:inherit}
.debug-pane{flex:1;min-width:320px;display:flex;flex-direction:column;gap:14px}
.debug-pane .ds-card{padding:18px;display:flex;flex-direction:column;gap:10px;box-sizing:border-box}
.debug-pre{font:var(--type-body-sm);font-family:'Space Grotesk',monospace;background:var(--surface-raised);border-radius:var(--radius-md);padding:12px 14px;margin:0;overflow:auto;max-height:420px;white-space:pre-wrap;word-break:break-word}
.chip-danger{background:#3E1A18;color:#FF6B5F}
textarea.input{height:auto;min-height:110px;resize:vertical;font-family:'Space Grotesk',monospace}

/* ---------- error pages ---------- */
.error-panel{text-align:center;display:flex;flex-direction:column;gap:12px;align-items:center;padding:38px}
.error-code{font:var(--type-headline-lg);letter-spacing:var(--track-headline-lg);color:var(--accent);font-family:var(--font-display)}

/* ---------- responsive ---------- */
@media (max-width:600px){
  .main{padding:26px 18px}
  .topbar{padding:14px 18px;gap:12px}
  .detail-left,.card-face-wrap{width:100%}
  .debug-actions{width:100%}
}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion: reduce){
  .card-flip,.btn,.input,.icon-action{transition:none}
}
