/* Parts swipe deck. Phone first; one card stack, big thumb targets. */
.swipe-page{max-width:520px;margin:0 auto}
.swipe-heading{margin-bottom:14px}
.swipe-tabs{display:flex;gap:8px;margin:0 0 14px}
.swipe-tabs button{flex:1;min-height:44px;border:1px solid var(--line);background:#fff;border-radius:10px;font-size:14px;font-weight:650;color:#4f6158;touch-action:manipulation}
.swipe-tabs button b{margin-left:6px;color:#1a4e42}
.swipe-tabs button.active{background:#e7f3ea;border-color:#1a4e42;color:#1a4e42}
.swipe-stack{position:relative;height:min(64vh,540px);min-height:400px;margin:0 auto;touch-action:pan-y}
.swipe-card{position:absolute;inset:0;display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 10px 30px #1a3a3216;overflow:hidden;transform-origin:50% 90%;will-change:transform;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.swipe-card.top{touch-action:pan-y;cursor:grab;z-index:3}
.swipe-card.top.dragging{cursor:grabbing;box-shadow:0 18px 40px #1a3a3226}
.swipe-card.depth-1{transform:translateY(10px) scale(.96);z-index:2;opacity:.9}
.swipe-card.depth-2{transform:translateY(20px) scale(.92);z-index:1;opacity:.75}
.swipe-card.returning{animation:swipe-return .28s ease-out}
.swipe-card.top.promoted{animation:swipe-promote .2s ease-out}
@keyframes swipe-promote{from{transform:translateY(10px) scale(.96)}to{transform:none}}
@keyframes swipe-return{from{transform:translate3d(0,-30px,0) scale(.94);opacity:.4}to{transform:none;opacity:1}}
.swipe-card:focus-visible{outline:3px solid #1a4e42;outline-offset:3px}
.swipe-media{position:relative;flex:1 1 0;min-height:0;overflow:hidden;background:#f3f6f1;border-bottom:1px solid var(--line)}
.swipe-media.large{flex:none;height:min(46vh,360px);border:1px solid var(--line);border-radius:14px;margin:12px 0}
.swipe-media canvas{position:absolute;inset:0;width:100%!important;height:100%!important;touch-action:none}
/* Preview fills the media box without pushing the card text out. */
.swipe-media>.swipe-thumb{position:absolute;top:12px;left:12px;width:calc(100% - 24px);height:calc(100% - 24px)}
.swipe-thumb{object-fit:contain;pointer-events:none;display:block}
.swipe-thumb-empty,.swipe-thumb-pending{display:flex!important;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:#87958c;font-size:14px}
.swipe-thumb-empty span{font-size:40px;color:#b9c7bd}
.swipe-stamp{position:absolute;top:20px;padding:6px 12px;border:3px solid;border-radius:8px;font-weight:800;font-size:22px;letter-spacing:2px;opacity:0;pointer-events:none;background:#ffffffd0}
.swipe-stamp.keep{left:18px;color:#2f7a4a;border-color:#2f7a4a;transform:rotate(-12deg)}
.swipe-stamp.pass{right:18px;color:#a8612d;border-color:#a8612d;transform:rotate(12deg)}
.swipe-copy{padding:14px 16px 16px;flex:none}
.swipe-copy h2{font-size:20px;line-height:1.25;margin:4px 0 2px;overflow-wrap:anywhere}
.swipe-source{font-size:11px;letter-spacing:.6px;text-transform:uppercase;color:#7c8a80;font-weight:650}
.swipe-product{margin:0;font-size:14px;color:#5c6d64}
.swipe-status{margin:6px 0 0;font-size:14px;color:#3e5148}
.swipe-waiting{margin:4px 0 0;font-size:14px;font-weight:650;color:#a8612d}
.swipe-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.swipe-chip{font-size:12px;padding:4px 8px;border-radius:999px;background:#eef2ec;color:#4f6158;white-space:nowrap}
.swipe-chip.ok{background:#e3f1e6;color:#2f6e45}
.swipe-chip.warn{background:#fbeee2;color:#9a5a26;white-space:normal}
.swipe-chip.muted{background:#f2f2ee;color:#8a948d}
.swipe-controls{display:flex;justify-content:center;align-items:center;gap:22px;margin:18px 0 6px}
.swipe-round{width:68px;height:68px;border-radius:50%;border:2px solid var(--line);background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;font-size:26px;line-height:1;touch-action:manipulation;box-shadow:0 4px 12px #1a3a3212}
.swipe-round small{font-size:11px;font-weight:650;color:#5c6d64}
.swipe-round.pass{color:#a8612d;border-color:#ecd3bf}
.swipe-round.keep{color:#2f7a4a;border-color:#c5e2cd}
.swipe-round.undo{width:54px;height:54px;font-size:20px;color:#4f6158}
.swipe-round:disabled{opacity:.4;cursor:default}
.swipe-round:active:not(:disabled){transform:scale(.94)}
.swipe-hint,.swipe-last,.swipe-note{text-align:center;font-size:13px;color:#6d7d74;margin:6px 0}
.swipe-last{min-height:18px;font-weight:600;color:#3e5148}
.swipe-note{font-size:12px;margin-top:16px}
.swipe-empty,.swipe-loading{background:#fff;border:1px solid var(--line);border-radius:14px;padding:28px 18px;text-align:center}
.swipe-empty strong{font-size:18px}
.swipe-empty-actions{display:flex;flex-direction:column;gap:10px;margin-top:14px}
.swipe-empty-actions .button,.swipe-detail-actions .button{min-height:48px;font-size:15px}
.swipe-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.swipe-row{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px}
.swipe-row-main{flex:1;display:flex;align-items:center;gap:12px;border:0;background:none;text-align:left;padding:0;min-height:64px;color:inherit;min-width:0}
.swipe-row-main strong{display:block;font-size:15px;overflow-wrap:anywhere}
.swipe-row-main small{display:block;font-size:13px;color:#6d7d74}
.swipe-row-thumb{width:64px;height:64px;flex:none;object-fit:contain;background:#f3f6f1;border-radius:8px;font-size:10px}
.swipe-row .button{min-height:44px;font-size:13px}
.swipe-detail{padding-bottom:20px}
.swipe-detail h1{font-size:24px;margin:2px 0 4px;overflow-wrap:anywhere}
.swipe-detail h3{font-size:16px;margin:0 0 8px}
.swipe-detail section{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px;margin-top:12px;font-size:14px}
.swipe-detail section p{margin:4px 0;font-size:14px}
.swipe-back{border:0;background:none;color:#1a4e42;font-size:16px;font-weight:650;padding:10px 0;min-height:44px;margin-bottom:6px;touch-action:manipulation}
.swipe-flats,.swipe-steps,.swipe-notes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.swipe-flat{display:grid;grid-template-columns:110px 1fr;gap:12px;align-items:center}
.swipe-flat-preview{height:90px;background:#f3f6f1;border-radius:8px;display:grid;place-items:center;overflow:hidden}
.swipe-flat-preview img,.swipe-flat-img{max-width:100%;max-height:100%;object-fit:contain}
.swipe-flat strong,.swipe-steps strong{display:block;font-size:14px;overflow-wrap:anywhere}
.swipe-flat small,.swipe-steps small{display:block;font-size:12px;color:#6d7d74;overflow-wrap:anywhere}
.swipe-flat b{font-size:16px;color:#1a4e42}
.swipe-table{width:100%;border-collapse:collapse;font-size:13px;margin-top:6px}
.swipe-table th,.swipe-table td{text-align:left;padding:6px 4px;border-bottom:1px solid #eef1ec}
.swipe-table th{font-size:11px;color:#7c8a80;text-transform:uppercase;letter-spacing:.4px}
.swipe-coming{background:#f7f4e8;border-radius:8px;padding:10px;color:#7a6a35}
.swipe-muted{color:#7c8a80;font-size:12px}
.swipe-warn{color:#9a5a26}
.swipe-detail-actions{display:flex;gap:10px;margin-top:16px}
.swipe-detail-actions .button{flex:1}
@media(max-width:640px){
 .swipe-page{margin:-12px -4px 0}
 .swipe-heading{margin-bottom:10px}
 .swipe-heading h1{font-size:22px;margin:0}
 .swipe-heading .eyebrow{margin-bottom:4px}
 .swipe-heading .subtitle{display:none}
 .swipe-tabs{margin-bottom:10px}
 .swipe-tabs button{min-height:40px;font-size:13px}
 /* Card plus buttons fit between the app header and the bottom nav on a 390 x 844 phone. */
 .swipe-stack{height:clamp(300px,calc(100dvh - 500px),520px);min-height:300px}
 .swipe-copy{padding:10px 14px 12px}
 .swipe-copy h2{font-size:18px}
 .swipe-status{margin-top:4px;font-size:13px}
 .swipe-chips{margin-top:6px}
 .swipe-controls{margin:12px 0 2px;gap:20px}
 .swipe-round{width:62px;height:62px}
 .swipe-round.undo{width:50px;height:50px}
 .swipe-detail h1{font-size:22px}
}
@media(prefers-reduced-motion:reduce){.swipe-card,.swipe-card.returning{transition:none!important;animation:none!important}}
/* 3D grid + viewer */
.kpv-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:12px 0}
.kpv-cell{position:relative;display:flex;flex-direction:column;align-items:stretch;text-align:left;gap:4px;padding:8px;border:1px solid #d7e0de;border-radius:12px;background:#fff;font:inherit;color:inherit}
.kpv-cell .kpv-thumb,.kpv-cell img{width:100%;aspect-ratio:1/1;object-fit:contain;background:#f1f5f4;border-radius:8px}
.kpv-cell strong{font-size:13px;line-height:1.2;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.kpv-cell small{font-size:11px;color:#5b6b68}
.kpv-badge{position:absolute;top:12px;right:12px;background:#142c29;color:#fff;font-size:11px;font-weight:700;padding:2px 7px;border-radius:999px}
.swipe-media.large[data-swipe-3d="1"]{min-height:320px}
.kpv-explode{display:flex;align-items:center;gap:10px;font-weight:600}
.kpv-explode input{flex:1}
.kpv-steps{padding-left:0;list-style:none;display:flex;flex-direction:column;gap:4px}
.kpv-step{width:100%;text-align:left;padding:8px 10px;border:1px solid #d7e0de;border-radius:8px;background:#fff;font:inherit}
.kpv-step.on{background:#ffe0b2;border-color:#ffa726}
/* Tinder-style deck (phone first) */
body:has(#swipe-root .swipe-stack) .simulation-banner,body:has(#swipe-root .swipe-stack) .mobile-header{display:none}
#swipe-root:has(.swipe-stack) .swipe-tabs{margin-bottom:8px}
.swipe-stack{height:calc(100dvh - 250px);min-height:440px;max-height:680px;max-width:440px}
.swipe-card{border:none;border-radius:20px;box-shadow:0 12px 32px #0b1f1a33;background:#111}
.swipe-card .swipe-media{position:absolute;inset:0;border:none;background:#e9eee9}
.swipe-card .swipe-media>.swipe-thumb{top:0;left:0;width:100%;height:72%;object-fit:contain;background:#f3f6f1}
.swipe-card .swipe-copy{position:absolute;left:0;right:0;bottom:0;padding:70px 18px 18px;color:#fff;background:linear-gradient(to top,#000000e6 0%,#000000b0 55%,#0000 100%);pointer-events:none}
.swipe-card .swipe-copy h2{font-size:28px;font-weight:800;color:#fff;margin:2px 0 4px;text-shadow:0 1px 3px #0008}
.swipe-card .swipe-copy .swipe-source,.swipe-card .swipe-copy .swipe-product,.swipe-card .swipe-copy .swipe-status,.swipe-card .swipe-copy .swipe-waiting{color:#ffffffd9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:2px 0}
.swipe-card .swipe-chip{background:#ffffff26;color:#fff;border-color:#ffffff40}
.swipe-card .swipe-chip.ok{background:#2fbf71cc;border-color:#2fbf71}
.swipe-card.depth-1{transform:translateY(12px) scale(.95);opacity:1}
.swipe-card.depth-2{transform:translateY(24px) scale(.90);opacity:1}
.swipe-stamp{top:34px;font-size:40px;padding:2px 12px;border-width:5px;border-radius:10px;background:transparent;letter-spacing:3px;z-index:5}
.swipe-stamp.keep{left:22px;color:#2fd17b;border-color:#2fd17b;transform:rotate(-18deg)}
.swipe-stamp.pass{right:22px;color:#ff4458;border-color:#ff4458;transform:rotate(18deg)}
.swipe-controls.tinder{gap:16px;margin:14px 0 4px}
.swipe-controls.tinder .swipe-round{border:none;background:#fff;box-shadow:0 6px 18px #0b1f1a26}
.swipe-controls.tinder .swipe-round small{display:none}
.swipe-controls.tinder .swipe-round.undo{width:48px;height:48px;color:#f5b748;font-size:22px}
.swipe-controls.tinder .swipe-round.pass{width:68px;height:68px;color:#ff4458;font-size:32px}
.swipe-controls.tinder .swipe-round.keep{width:68px;height:68px;color:#2fd17b;font-size:32px}
.swipe-controls.tinder .swipe-round.info{width:48px;height:48px;color:#3b8eea;font-size:22px;font-weight:800;font-family:Georgia,serif}
.swipe-empty.tinder-empty{min-height:50vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;border-radius:20px;box-shadow:0 12px 32px #0b1f1a22;background:#fff;padding:24px}
.swipe-empty.tinder-empty strong{font-size:24px}
@media (prefers-reduced-motion: reduce){.swipe-card,.swipe-card.top,.swipe-card.returning,.swipe-card.top.promoted{animation:none!important;transition:none!important}}
.swipe-card .kpv-wrap{border-radius:0!important}
body:has(#swipe-root .swipe-stack) .demo-banner,body:has(#swipe-root .swipe-stack) .connection-status{display:none!important}
.swipe-stack{height:calc(100dvh - 300px);min-height:380px;max-height:620px}
/* Part finder (swipe to browse, search, filter, pin). Overrides the like/dislike deck. */
body:has(#swipe-root .finder) .simulation-banner,body:has(#swipe-root .finder) .mobile-header,body:has(#swipe-root .finder) .demo-banner,body:has(#swipe-root .finder) .connection-status{display:none!important}
.finder-search{margin:0 0 8px}
.finder-search input{width:100%;box-sizing:border-box;min-height:44px;border:1px solid var(--line);border-radius:22px;padding:0 16px 0 40px;font-size:16px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%235c6d64' stroke-width='2.4' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-4-4'/%3E%3C/svg%3E") no-repeat 14px 50%;box-shadow:0 2px 8px #0b1f1a12}
.finder-search input:focus{outline:2px solid #1a4e42;outline-offset:1px}
.finder-chips{display:flex;gap:6px;overflow-x:auto;padding:0 0 8px;margin:0 -2px 4px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.finder-chips::-webkit-scrollbar{display:none}
.finder-chip{flex:0 0 auto;min-height:34px;padding:0 12px;border:1px solid var(--line);border-radius:17px;background:#fff;font-size:13px;font-weight:650;color:#3e5148;white-space:nowrap;touch-action:manipulation}
.finder-chip.on{background:#1a4e42;border-color:#1a4e42;color:#fff}
.finder-chip.clear{background:#fff3f0;border-color:#f1c4b8;color:#a8402d}
.finder-stack.swipe-stack{height:calc(100dvh - 472px);min-height:280px;max-height:560px}
.finder-pos{position:absolute;top:12px;right:12px;z-index:4;padding:3px 10px;border-radius:12px;background:#000000a0;color:#fff;font-size:12px;font-weight:700;pointer-events:none}
.finder-pinned{position:absolute;top:10px;left:12px;z-index:4;font-size:22px;pointer-events:none;filter:drop-shadow(0 1px 2px #0008)}
.swipe-stamp{display:none!important}
.swipe-controls.finder-controls{gap:14px;margin:30px 0 2px}
.finder-controls .swipe-round{border:none;background:#fff;box-shadow:0 6px 18px #0b1f1a26;width:56px;height:56px}
.finder-controls .swipe-round small{font-size:10px}
.finder-controls .swipe-round.prev,.finder-controls .swipe-round.next{font-size:30px;color:#1a4e42}
.finder-controls .swipe-round.pin{width:64px;height:64px;font-size:24px}
.finder-controls .swipe-round.pin.on{background:#fff4d6;box-shadow:0 0 0 2px #f5b748,0 6px 18px #0b1f1a26}
.finder-controls .swipe-round.info{color:#3b8eea;font-size:22px;font-weight:800;font-family:Georgia,serif}
.finder-count{margin:4px 0}
.finder-empty{min-height:40vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;border-radius:20px;box-shadow:0 12px 32px #0b1f1a22;background:#fff;padding:24px;gap:8px}
.finder-empty strong{font-size:22px}
.swipe-stock{margin:4px 0 0;font-size:14px;font-weight:600;color:#1a4e42}
