/* cinema seat map (booking page + admin seat manager) */
.sm-stage{display:grid;place-items:center;overflow:auto;min-height:0}
.sm{--seat:44px;display:grid;justify-items:stretch;gap:calc(var(--seat)*.55);width:max-content;max-width:none}
.sm-screen{position:relative;height:calc(var(--seat)*.85);margin:0 calc(var(--seat)*.7)}
.sm-screen::before{content:"";position:absolute;inset:0;border-radius:50% 50% 0 0/100% 100% 0 0;border-top:calc(var(--seat)*.09) solid #f2f2f2;background:linear-gradient(180deg,#ffffff38,transparent 88%);box-shadow:0 calc(var(--seat)*-.18) calc(var(--seat)*.9) #ffffff55}
.sm-screen::after{content:"";position:absolute;left:3%;right:3%;top:100%;height:calc(var(--seat)*4.2);background:linear-gradient(#ffffff26,transparent);clip-path:polygon(0 0,100% 0,90% 100%,10% 100%);pointer-events:none}
.sm-screen span{position:absolute;left:0;right:0;bottom:12%;text-align:center;font:400 calc(var(--seat)*.3)/1 var(--bb);letter-spacing:.6em;color:#bdbdbd}
.sm-rows{display:grid;gap:calc(var(--seat)*.28);position:relative;z-index:1}
.sm-row{display:grid;grid-template-columns:calc(var(--seat)*.7) repeat(var(--cols),var(--seat)) calc(var(--seat)*.7);gap:calc(var(--seat)*.2);align-items:center}
.sm-row b{font:400 calc(var(--seat)*.42)/1 var(--bb);color:#7d7d7d;text-align:center}
.gap{display:block;width:var(--seat);height:var(--seat)}

.seat{--c:#e0262a;--c2:#a51a1d;--c3:#e8585b;position:relative;display:block;width:var(--seat);height:var(--seat);padding:0;border:0;background:none;color:#fff;cursor:pointer;font:400 calc(var(--seat)*.3)/1 var(--bb);letter-spacing:.02em;transition:transform .12s,filter .12s}
.seat::before{content:"";position:absolute;inset:3% 13% 31% 13%;border-radius:34% 34% 16% 16%;background:linear-gradient(180deg,var(--c3),var(--c));box-shadow:inset 0 calc(var(--seat)*.05) 0 #ffffff40}
.seat::after{content:"";position:absolute;left:1%;right:1%;bottom:5%;height:36%;border-radius:24% 24% 38% 38%/46% 46% 54% 54%;background:var(--c2);box-shadow:inset 0 calc(var(--seat)*.04) 0 #ffffff26}
.seat>span{position:absolute;left:0;right:0;top:36%;translate:0 -50%;z-index:2;pointer-events:none}
.seat:hover:not(:disabled){transform:translateY(-3px);filter:brightness(1.18)}
.seat:focus-visible{outline:2px solid var(--y);outline-offset:2px;border-radius:8px}
.seat.spare{--c:#3b82f6;--c2:#2159b8;--c3:#6ea3f8}
.seat[aria-pressed=true]{--c:#f4c01a;--c2:#c28f00;--c3:#ffd451;color:#111;transform:translateY(-3px);filter:drop-shadow(0 0 calc(var(--seat)*.2) #f4c01a88)}
.seat.taken{--c:#5b5b5b;--c2:#3e3e3e;--c3:#707070;color:#9b9b9b;cursor:not-allowed}
.seat.hold{--c:#3b3b3b;--c2:#292929;--c3:#4b4b4b;color:#b9b9b9;cursor:not-allowed}
.seat.hold::after{box-shadow:inset 0 0 0 2px #f4c01aaa}
/* admin states */
.seat.lock{--c:#5b5b5b;--c2:#3e3e3e;--c3:#707070;color:#c9c9c9}
.seat.booked{--c:#22a85c;--c2:#157a41;--c3:#47c27b}
.seat.pend::after{box-shadow:inset 0 0 0 2px #f4c01a}
.seat.sel{filter:drop-shadow(0 0 calc(var(--seat)*.22) #fff);transform:translateY(-3px)}
.seat.mvfrom{--c:#f4c01a;--c2:#c28f00;--c3:#ffd451;color:#111;animation:pulse 1s infinite}
.seat.ph{opacity:.9}
.seat.ph::before{background:transparent;border:2px dashed #4a4a4a;box-shadow:none}
.seat.ph::after{display:none}
.seat.ph>span{color:#666;font-size:calc(var(--seat)*.5)}
.seat.ph:hover{filter:none}.seat.ph:hover::before{border-color:#3b82f6}.seat.ph:hover>span{color:#3b82f6}
.sm.moving .seat:not(.booked):not(.lock):not(.ph){filter:drop-shadow(0 0 4px #f4c01a99)}
@keyframes pulse{50%{opacity:.5}}

.legend{list-style:none;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:8px 22px;margin:0;color:#cfcfcf;font-size:.9em}
.legend li{display:flex;align-items:center;gap:8px}
.legend i{width:20px;height:20px;position:relative;display:inline-block}
.legend i::before{content:"";position:absolute;inset:0 15% 30% 15%;border-radius:34% 34% 16% 16%;background:var(--c)}
.legend i::after{content:"";position:absolute;left:0;right:0;bottom:0;height:38%;border-radius:30%;background:var(--c2)}
.legend .free{--c:#e0262a;--c2:#a51a1d}.legend .sel{--c:#f4c01a;--c2:#c28f00}.legend .spare{--c:#3b82f6;--c2:#2159b8}
.legend .taken{--c:#5b5b5b;--c2:#3e3e3e}.legend .hold{--c:#3b3b3b;--c2:#292929}.legend .hold::after{box-shadow:inset 0 0 0 2px #f4c01aaa}
.legend .booked{--c:#22a85c;--c2:#157a41}.legend .lock{--c:#5b5b5b;--c2:#3e3e3e}.legend .move{--c:#f4c01a;--c2:#c28f00}
