/* Inventory: btn, input, chip/pill, badge(--role|--origin|--status|--cat|--core|--lic), card, panel, stat, table, tabs, progress, spinner, tooltip, toast, modal, tree, empty, skeleton */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:36px;padding:0 var(--sp-4);background:var(--bg-raised);border:1px solid var(--line-2);border-radius:var(--r-1);color:var(--text-1);font:500 var(--fs-13)/1 var(--font-sans);cursor:pointer;transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast),transform var(--dur-instant)}
.btn:hover{background:var(--bg-overlay);border-color:var(--line-strong);text-decoration:none}
.btn:active{transform:translateY(1px)}
/* The app's JS emits .btn-primary / .btn-danger / .btn-sm ...; the kit names are .btn--primary ...; both work. */
.btn--primary,.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--text-on-accent)}.btn--primary:hover,.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:var(--text-on-accent);box-shadow:var(--glow-accent)}.btn--primary:active,.btn-primary:active{background:var(--accent-press)}
.btn--ghost,.btn-ghost{background:transparent;border-color:transparent;color:var(--text-2)}.btn--ghost:hover,.btn-ghost:hover{background:var(--bg-raised);border-color:transparent;color:var(--text-1)}
.btn--danger,.btn-danger{background:var(--signal-danger-bg);border-color:var(--signal-danger);color:var(--signal-danger)}.btn--danger:hover,.btn-danger:hover{background:var(--signal-danger);border-color:var(--signal-danger);color:var(--text-on-accent)}
.btn--sm,.btn-sm{min-height:28px;padding:0 var(--sp-3);font-size:var(--fs-12)}.btn--lg,.btn-lg{min-height:44px;padding:0 var(--sp-5);font-size:var(--fs-14)}.btn--block,.btn-block{display:flex;width:100%}
.btn-launch,.btn-success{background:var(--signal-ok-bg);border-color:var(--signal-ok);color:var(--signal-ok)}.btn-launch:hover,.btn-success:hover{background:var(--signal-ok);border-color:var(--signal-ok);color:var(--text-on-accent)}
.btn-amber{background:var(--signal-warn-bg);border-color:var(--signal-warn);color:var(--signal-warn)}.btn-amber:hover{background:var(--signal-warn);border-color:var(--signal-warn);color:var(--text-on-accent)}
a.btn{text-decoration:none}
.btn[disabled],.btn:disabled,.btn.is-disabled{background:transparent;border-color:var(--line-1);border-style:dashed;color:var(--text-disabled);cursor:not-allowed;box-shadow:none;transform:none}
.btn.is-loading{pointer-events:none;color:transparent;position:relative}.btn.is-loading::after{content:"";position:absolute;width:14px;height:14px;border:2px solid var(--text-2);border-top-color:transparent;border-radius:50%;animation:spin .8s linear infinite}
@media (pointer:coarse),(max-width:900px){.btn,.input,.input-field,.tab,.pill{min-height:var(--touch-min)}}
.input,.input-field{width:100%;min-height:36px;padding:0 var(--sp-3);background:var(--bg-void);border:1px solid var(--line-2);border-radius:var(--r-1);color:var(--text-1);transition:border-color var(--dur-fast)}
.input::placeholder,.input-field::placeholder{color:var(--text-3)}.input:hover,.input-field:hover{border-color:var(--line-strong)}.input:focus-visible,.input-field:focus-visible{border-color:var(--dream)}
.input[disabled],.input-field[disabled]{border-style:dashed;color:var(--text-disabled);background:transparent}
.input.is-error,.input-field.is-error{border-color:var(--signal-danger)}.field-error,.form-error{color:var(--signal-danger);font-size:var(--fs-12)}.form-error:empty{display:none}
textarea.input,textarea.input-field{padding:var(--sp-3);min-height:96px;resize:vertical;line-height:var(--lh-body)}
select.input-field{cursor:pointer}.input-sm{width:90px}
.form-stack{display:flex;flex-direction:column;gap:var(--sp-4)}.form-actions{display:flex;gap:var(--sp-3);flex-wrap:wrap;margin-top:var(--sp-1)}
.field label{display:block;margin-bottom:var(--sp-1);font:500 var(--fs-11)/1 var(--font-mono);letter-spacing:var(--ls-label);text-transform:uppercase;color:var(--text-3)}
input[type="checkbox"],input[type="radio"]{accent-color:var(--accent)}
.pill,.chip{display:inline-flex;align-items:center;gap:6px;min-height:28px;padding:0 var(--sp-3);border:1px solid var(--line-2);border-radius:var(--r-pill);background:transparent;color:var(--text-2);font:500 var(--fs-12)/1 var(--font-sans);cursor:pointer}
.pill:hover{border-color:var(--line-strong);color:var(--text-1)}.pill[aria-pressed="true"]{background:var(--accent-bg);border-color:var(--accent);color:var(--accent)}
.badge{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 7px;border:1px solid var(--line-2);border-radius:var(--r-1);background:rgba(11,10,7,.82);color:var(--text-2);font:500 var(--fs-11)/1 var(--font-mono);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}
.badge--role-admin{color:var(--accent);border-color:var(--accent-dim)}.badge--role-publisher{color:var(--dream);border-color:var(--dream)}.badge--origin-official{color:var(--text-on-accent);background:var(--accent);border-color:var(--accent)}
.badge--cat{color:var(--c,var(--cat-normal));border-color:var(--c,var(--cat-normal))}
.badge--st{color:var(--c);border-color:var(--c)}.badge--st-draft{border-style:dashed}.badge--st-local{border-style:dotted}
.badge--lic-ok{color:var(--signal-ok);border-color:var(--signal-ok)}.badge--lic-no{color:var(--signal-warn);border-color:var(--signal-warn);border-style:dashed}
.count{min-width:18px;height:18px;padding:0 5px;display:inline-grid;place-items:center;background:var(--accent);color:var(--text-on-accent);font:500 var(--fs-11)/1 var(--font-mono)}
.dot{width:7px;height:7px;background:var(--signal-warn);border-radius:50%;animation:pulse-dot 2.4s ease-in-out infinite}
.tabs{display:flex;gap:var(--sp-1)}.tab{position:relative;display:inline-flex;align-items:center;gap:var(--sp-2);min-height:var(--topbar-h);padding:0 var(--sp-4);background:none;border:0;color:var(--text-2);font:500 var(--fs-13)/1 var(--font-mono);letter-spacing:.1em;text-transform:uppercase;cursor:pointer}
.tab:hover{color:var(--text-1);background:var(--bg-raised);text-decoration:none}.tab[aria-selected="true"]{color:var(--accent)}.tab[aria-selected="true"]::after{content:"";position:absolute;left:var(--sp-4);right:var(--sp-4);bottom:-1px;height:2px;background:var(--accent);box-shadow:var(--glow-accent)}
.card{position:relative;display:flex;flex-direction:column;background:var(--bg-surface);border:1px solid var(--line-1);border-radius:var(--r-1);overflow:hidden;transition:border-color var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out)}
.card:hover{border-color:var(--line-strong);transform:translateY(-2px)}.card:focus-within{border-color:var(--dream)}
.card-thumb{position:relative;aspect-ratio:16/10;background:repeating-linear-gradient(135deg,var(--bg-raised) 0 8px,var(--bg-surface) 8px 16px);display:grid;place-items:center;color:var(--text-3);font:500 var(--fs-12)/1 var(--font-mono);overflow:hidden}
.card-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:sepia(.35) saturate(.8) contrast(1.05)}
.card-thumb__badges{position:absolute;inset:var(--sp-2) var(--sp-2) auto;display:flex;flex-wrap:wrap;gap:var(--sp-1)}
.card-body{display:grid;gap:var(--sp-2);padding:var(--sp-4);flex:1}
.card-title{font:500 var(--fs-16)/var(--lh-snug) var(--font-sans);overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card-desc{color:var(--text-2);font-size:var(--fs-13);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card-meta{color:var(--text-3);font:var(--fs-12)/1 var(--font-mono)}.card-foot{padding:0 var(--sp-4) var(--sp-4)}
.panel{background:var(--bg-surface);border:1px solid var(--line-1);border-radius:var(--r-1);padding:var(--sp-5)}
.panel__title{margin-bottom:var(--sp-4)}
.stat{display:grid;gap:var(--sp-2);padding:var(--sp-4) var(--sp-5);background:var(--bg-surface);border:1px solid var(--line-1)}.stat__v{font:400 var(--fs-40)/1 var(--font-mono)}.stat.is-hot{border-color:var(--accent);box-shadow:var(--glow-accent)}
.table{width:100%;border-collapse:collapse;font-size:var(--fs-13)}.table th{text-align:left;padding:var(--sp-3);font:500 var(--fs-11)/1 var(--font-mono);letter-spacing:var(--ls-label);text-transform:uppercase;color:var(--text-3);border-bottom:1px solid var(--line-2)}
.table td{padding:var(--sp-3);border-bottom:1px solid var(--line-1);vertical-align:middle}.table tr:hover td{background:var(--bg-raised)}
.progress{height:4px;background:var(--bg-raised);overflow:hidden}.progress__bar{height:100%;background:var(--accent);transition:width var(--dur-base) var(--ease-out)}
.spinner{width:20px;height:20px;border:2px solid var(--line-2);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}
.skeleton{background:var(--bg-raised);animation:skel 1.8s ease-in-out infinite}
.tooltip{position:absolute;padding:6px 10px;background:var(--bg-overlay);border:1px solid var(--line-strong);font-size:var(--fs-12);box-shadow:var(--shadow-2);z-index:var(--z-sticky)}
.toast{display:flex;gap:var(--sp-3);align-items:flex-start;min-width:280px;padding:var(--sp-3) var(--sp-4);background:var(--bg-overlay);border:1px solid var(--line-2);border-left:3px solid var(--c);box-shadow:var(--shadow-2);animation:toast-in var(--dur-base) var(--ease-out)}
@keyframes toast-in{from{opacity:0;transform:translateY(8px)}}
.modal{width:min(460px,92vw);background:var(--bg-surface);border:1px solid var(--line-2);box-shadow:var(--shadow-3);padding:var(--sp-5)}
.tree-item{display:flex;align-items:center;gap:var(--sp-2);min-height:34px;padding:0 var(--sp-3);color:var(--text-2);border-left:2px solid transparent;cursor:pointer}.tree-item:hover{background:var(--bg-raised);color:var(--text-1)}
.tree-item[aria-current="page"]{color:var(--accent);background:var(--accent-bg);border-left-color:var(--accent)}
.empty{display:grid;justify-items:center;gap:var(--sp-3);padding:var(--sp-7) var(--sp-5);color:var(--text-2);border:1px dashed var(--line-2);text-align:center}
.empty__art{width:min(220px,60%);height:auto;opacity:.75}
.empty--error{border-color:var(--signal-danger);color:var(--text-1)}
.card-meta{display:flex;gap:var(--sp-3);align-items:center;margin-top:var(--sp-1)}.card-desc{min-height:2.7em}
.card-thumb__badges--bottom{inset:auto var(--sp-2) var(--sp-2)}
.card.is-pending .card-thumb img{filter:grayscale(.6) brightness(.7)}
.card-actions .btn{width:100%}
.skel-card .card-thumb{aspect-ratio:16/10}.skel-line{height:12px;margin-bottom:var(--sp-2)}.w40{width:40%}.w60{width:60%}.w90{width:90%}
.price-badge{color:var(--accent);border-color:var(--accent-dim)}
/* modal chrome */
.modal__art{margin:calc(var(--sp-5)*-1) calc(var(--sp-5)*-1) var(--sp-4);height:96px;overflow:hidden;border-bottom:1px solid var(--line-1);background:var(--bg-raised)}
.modal__art img{width:100%;height:100%;object-fit:cover;opacity:.7}
.modal-header{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-4)}
.modal-title{font:500 var(--fs-20)/var(--lh-snug) var(--font-sans);overflow-wrap:anywhere}
.modal-wide{width:min(640px,94vw)}
.audit-body{display:grid;gap:var(--sp-2);max-height:60vh;overflow:auto}.audit-wait{display:flex;align-items:center;gap:var(--sp-3);color:var(--text-2)}
.auth-tabs{display:flex;gap:var(--sp-1);margin-bottom:var(--sp-4);border-bottom:1px solid var(--line-1)}
.auth-tab{background:none;border:0;border-bottom:2px solid transparent;padding:var(--sp-2) var(--sp-3);color:var(--text-2);font:500 var(--fs-13)/1 var(--font-sans);cursor:pointer}
.auth-tab:hover{color:var(--text-1)}.auth-tab.active,.auth-tab[aria-selected="true"]{color:var(--accent);border-bottom-color:var(--accent)}
.auth-demo{margin-bottom:var(--sp-4);padding:var(--sp-3);border:1px dashed var(--line-2)}.auth-demo-title{margin-bottom:var(--sp-2);color:var(--text-3);font:500 var(--fs-11)/1 var(--font-mono);letter-spacing:var(--ls-label);text-transform:uppercase}
.auth-demo-row{display:flex;flex-wrap:wrap;gap:var(--sp-2)}
/* check rows (audit modal + publish result) */
.check-row{display:flex;gap:var(--sp-3);align-items:flex-start;padding:var(--sp-2) var(--sp-3);border:1px solid var(--line-1);border-left:3px solid var(--c,var(--line-2));background:var(--bg-raised)}
.check-ok{--c:var(--signal-ok)}.check-warn{--c:var(--signal-warn)}.check-fail{--c:var(--signal-danger)}
.check-mark{color:var(--c);display:inline-flex;margin-top:1px}.check-name{font-weight:500}.check-details{color:var(--text-2);font-size:var(--fs-13);overflow-wrap:anywhere}
/* topbar user chip */
.user-chip{display:inline-flex;align-items:center;gap:var(--sp-2);color:var(--text-2);font-size:var(--fs-13)}
.auth-slot{display:flex;align-items:center;gap:var(--sp-2)}
.toast-icon{display:inline-flex;color:var(--c);margin-top:1px}
