:root {
    --ultv-bg: #06110b;
    --ultv-panel: rgba(6, 20, 12, 0.92);
    --ultv-panel-2: rgba(12, 34, 20, 0.92);
    --ultv-gold: #e5bd57;
    --ultv-gold-2: #ffdf78;
    --ultv-green: #45d46f;
    --ultv-green-dark: #0f6e37;
    --ultv-line: rgba(229, 189, 87, 0.55);
    --ultv-text: #f8f2dc;
    --ultv-danger: #df563f;
    --ultv-shadow: 0 16px 40px rgba(0, 0, 0, 0.42);
}

.ultv-virtual-page {
    margin: 0;
    background:
        linear-gradient(rgba(2, 10, 5, 0.82), rgba(2, 10, 5, 0.9)),
        var(--ultv-floor-image, none) center top / cover fixed;
}

.ultv-shell,
.ultv-shell * { box-sizing: border-box; }

.ultv-shell {
    position: relative;
    width: 100%;
    min-height: 100vh;
    color: var(--ultv-text);
    background:
        radial-gradient(circle at 12% 10%, rgba(255, 214, 96, 0.16), transparent 24%),
        radial-gradient(circle at 88% 18%, rgba(62, 180, 95, 0.22), transparent 28%),
        linear-gradient(rgba(3, 12, 7, 0.72), rgba(2, 8, 5, 0.9));
    border: 1px solid rgba(229, 189, 87, 0.35);
    box-shadow: var(--ultv-shadow);
    font-family: Georgia, 'Times New Roman', serif;
    overflow: hidden;
    isolation: isolate;
}

.ultv-shell::before {
    content: '';
    position: absolute;
    inset: 0;
    background:
        linear-gradient(rgba(4, 11, 6, 0.82), rgba(4, 11, 6, 0.9)),
        var(--ultv-floor-image, none) center center / cover no-repeat;
    opacity: 0.52;
    z-index: -2;
}

.ultv-shell::after {
    content: '';
    position: absolute;
    inset: 0;
    background:
        radial-gradient(circle at 50% 0%, rgba(73, 255, 125, 0.16), transparent 34%),
        radial-gradient(circle at 8% 84%, rgba(247, 196, 81, 0.08), transparent 24%),
        linear-gradient(90deg, rgba(4, 10, 6, 0.35), rgba(4, 10, 6, 0.12), rgba(4, 10, 6, 0.35));
    z-index: -1;
}

.ultv-topbar {
    min-height: 118px;
    display: grid;
    grid-template-columns: 180px 150px minmax(430px, 1fr) 120px 150px 90px;
    gap: 10px;
    align-items: center;
    padding: 10px 18px;
    background: rgba(0, 8, 4, 0.88);
    backdrop-filter: blur(6px);
    border-bottom: 1px solid var(--ultv-line);
}

.ultv-brandmark { display: flex; align-items: center; gap: 10px; color: var(--ultv-gold-2); font-weight: 700; letter-spacing: 1px; }
.ultv-u {
    display: inline-grid;
    place-items: center;
    width: 48px;
    height: 48px;
    border: 2px solid var(--ultv-gold);
    border-radius: 50%;
    font-size: 30px;
    background: radial-gradient(circle at 35% 30%, rgba(255, 215, 94, 0.85), rgba(7, 34, 17, 0.85));
    box-shadow: 0 0 20px rgba(255, 224, 126, 0.18);
}

.ultv-wallet-box,
.ultv-top-stat {
    border: 1px solid var(--ultv-line);
    border-radius: 10px;
    padding: 10px 12px;
    background: rgba(8, 25, 15, 0.82);
    backdrop-filter: blur(4px);
}

.ultv-wallet-box small,
.ultv-top-stat small,
.ultv-status-row small,
.ultv-cash-card small {
    display: block;
    font: 700 11px/1.2 Arial, sans-serif;
    letter-spacing: 1px;
    color: #dfd8bc;
    margin-bottom: 5px;
}

.ultv-wallet-box strong,
.ultv-top-stat strong { color: #ddff91; font: 700 18px/1.2 Arial, sans-serif; }

.ultv-title-wrap { text-align: center; }
.ultv-room-title { color: var(--ultv-gold-2); font-weight: 800; letter-spacing: 4px; font-size: 18px; }
.ultv-title-wrap h1 {
    margin: 3px 0 0;
    font-size: clamp(34px, 4vw, 66px);
    line-height: .9;
    color: #f2d577;
    text-shadow: 0 2px 0 #5c4013, 0 0 22px rgba(81, 255, 121, .35);
    letter-spacing: 1px;
}
.ultv-title-wrap p { margin: 7px 0 0; font-size: 14px; color: #f2e4b3; }
.ultv-icon-button {
    border: 1px solid var(--ultv-line);
    background: rgba(11, 34, 20, 0.88);
    color: var(--ultv-gold-2);
    border-radius: 20px;
    padding: 12px;
    cursor: pointer;
    font-weight: 800;
}

.ultv-layout { display: grid; grid-template-columns: minmax(245px, 18%) minmax(680px, 1fr) minmax(245px, 18%); gap: 16px; min-height: 760px; padding: 16px; align-items: start; }

.ultv-side {
    background: rgba(2, 13, 7, 0.72);
    backdrop-filter: blur(8px);
    border: 1px solid var(--ultv-line);
    border-radius: 18px;
    padding: 16px 12px;
    box-shadow: 0 14px 28px rgba(0,0,0,.28);
}

.ultv-wins-panel { }
.ultv-side h2 { margin: 0 0 12px; color: var(--ultv-gold-2); font-size: 17px; letter-spacing: .6px; }
.ultv-feed-intro {
    margin-bottom: 10px;
    color: #dfd8bc;
    font: 12px/1.45 Arial, sans-serif;
    text-transform: uppercase;
    letter-spacing: .5px;
}

.ultv-feed-list {
    min-height: 300px;
    max-height: 590px;
    overflow: auto;
    padding: 6px;
    border: 1px solid rgba(229, 189, 87, 0.24);
    border-radius: 12px;
    background: linear-gradient(180deg, rgba(8, 20, 12, 0.84), rgba(4, 14, 8, 0.9));
    box-shadow: inset 0 0 18px rgba(0, 0, 0, 0.32);
}

.ultv-feed-row {
    padding: 10px 10px 11px;
    border: 1px solid rgba(229, 189, 87, 0.14);
    border-radius: 10px;
    background: rgba(12, 31, 18, 0.68);
    margin-bottom: 8px;
    font-family: Arial, sans-serif;
}

.ultv-feed-head {
    display: flex;
    flex-direction: column;
    gap: 3px;
    margin-bottom: 6px;
}

.ultv-feed-head b {
    color: var(--ultv-gold-2);
    font-size: 12px;
    letter-spacing: .7px;
}

.ultv-feed-head small {
    color: #9fc69b;
    font-size: 10px;
    letter-spacing: .7px;
    text-transform: uppercase;
}

.ultv-feed-body {
    color: #f2f0de;
    font-size: 13px;
    line-height: 1.4;
}

.ultv-feed-accent {
    color: #dbff9d;
    font-weight: 700;
}

.ultv-feed-empty {
    padding: 16px;
    color: #b9c8b8;
    font: 14px/1.45 Arial, sans-serif;
}

.ultv-chat-compose {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 8px;
    margin-top: 12px;
}

.ultv-chat-compose input {
    width: 100%;
    padding: 12px 13px;
    background: rgba(5, 19, 10, 0.94);
    color: #f4f0d8;
    border: 1px solid rgba(229, 189, 87, 0.28);
    border-radius: 8px;
    font: 14px Arial, sans-serif;
}

.ultv-chat-compose input::placeholder { color: #9eb29a; }

.ultv-local-win {
    margin-top: 14px;
    padding: 14px;
    border: 1px solid rgba(229, 189, 87, .35);
    border-radius: 10px;
    color: #f2dda1;
    background: linear-gradient(180deg, rgba(35, 27, 5, .72), rgba(22, 17, 4, .84));
    font: 14px/1.45 Arial, sans-serif;
}

.ultv-game {
    padding: 14px;
    background: linear-gradient(180deg, rgba(7, 26, 13, .58), rgba(0, 6, 3, .83));
    backdrop-filter: blur(6px);
    border: 1px solid var(--ultv-line);
    border-radius: 22px;
    box-shadow: 0 18px 34px rgba(0,0,0,.28);
}

.ultv-chambers { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; }
.ultv-chamber {
    position: relative;
    min-height: 155px;
    padding: 10px;
    border: 1px solid rgba(229, 189, 87, .4);
    border-radius: 8px;
    background: linear-gradient(180deg, rgba(36, 40, 23, .96), rgba(7, 18, 10, .96));
    opacity: .58;
    transition: .2s ease;
    box-shadow: inset 0 0 22px rgba(0, 0, 0, .65);
}
.ultv-chamber.is-active { opacity: 1; border-color: #8bf28f; box-shadow: inset 0 0 25px rgba(54, 165, 72, .22), 0 0 18px rgba(55, 255, 93, .18); transform: translateY(-2px); }
.ultv-chamber.is-cleared { opacity: .92; border-color: var(--ultv-gold); }
.ultv-chamber-top { text-align: center; font-weight: 800; color: var(--ultv-gold-2); font-size: 16px; }
.ultv-mini-doors { display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px; margin: 12px 0; }
.ultv-mini-doors span { height: 70px; border-radius: 22px 22px 4px 4px; border: 1px solid #715e31; background: radial-gradient(circle at 50% 35%, #87692d 0 8%, transparent 9%), linear-gradient(90deg, #201b11, #40331b, #17130d); box-shadow: inset 0 0 10px #000; }
.ultv-chamber strong { display: block; text-align: center; color: #dcff8a; font-size: 25px; }

.ultv-status-row { margin-top: 10px; display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.ultv-status-row > div { padding: 10px; border: 1px solid rgba(229, 189, 87, .28); border-radius: 7px; background: rgba(4, 17, 9, .82); text-align: center; backdrop-filter: blur(3px); }
.ultv-status-row strong { color: var(--ultv-gold-2); font: 800 18px Arial, sans-serif; }

.ultv-stage { display: grid; grid-template-columns: 180px minmax(460px, 1fr) 180px; gap: 12px; align-items: stretch; margin-top: 12px; }
.ultv-parrot-card,
.ultv-cash-card { padding: 14px; border: 1px solid rgba(229, 189, 87, .48); border-radius: 10px; background: rgba(5, 19, 10, .88); text-align: center; backdrop-filter: blur(3px); }
.ultv-parrot { margin: 0 auto 8px; width: 78px; height: 78px; display: grid; place-items: center; border-radius: 50%; color: #181000; font: 900 13px Arial, sans-serif; background: radial-gradient(circle at 35% 30%, #ffdd31, #d64929 35%, #236c3c 68%, #12301f 69%); border: 3px solid #d1a84d; }
.ultv-parrot-card h3,
.ultv-bonus-card h3,
.ultv-torch-card h3 { margin: 5px 0 8px; color: var(--ultv-gold-2); font-size: 18px; }
.ultv-parrot-card p,
.ultv-cash-card p,
.ultv-bonus-card p,
.ultv-torch-card p { font: 13px/1.4 Arial, sans-serif; color: #d8dbc7; }
.ultv-door-zone { min-width: 0; }
.ultv-prompt { text-align: center; padding: 10px; color: var(--ultv-gold-2); font-weight: 800; letter-spacing: 1px; border-top: 1px solid rgba(229, 189, 87, .35); border-bottom: 1px solid rgba(229, 189, 87, .35); background: rgba(8, 23, 12, .82); }
.ultv-doors { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; padding: 16px 6px; }
.ultv-door {
    min-height: 250px;
    position: relative;
    border: 2px solid #80662e;
    border-radius: 80px 80px 8px 8px;
    color: #f5dd89;
    background: radial-gradient(circle at 50% 42%, rgba(132, 105, 43, .6) 0 14%, transparent 15%), linear-gradient(90deg, #13120d, #3b3019 24%, #4a3b1c 50%, #271f12 76%, #11100c);
    box-shadow: inset 0 0 32px #000, 0 0 14px rgba(69, 212, 111, .08);
    cursor: pointer;
    transition: .15s ease;
}
.ultv-door:hover:not(:disabled) { transform: translateY(-4px); border-color: #79e985; box-shadow: inset 0 0 32px #000, 0 0 22px rgba(69, 212, 111, .35); }
.ultv-door:disabled { cursor: not-allowed; opacity: .58; }
.ultv-door.is-trap { border-color: var(--ultv-danger); filter: saturate(.6); }
.ultv-door.is-trap::after { content: 'TRAP REVEALED'; position: absolute; inset: auto 8px 52px; padding: 8px; background: rgba(83, 10, 6, .9); color: #ffb1a6; font: 800 12px Arial, sans-serif; border-radius: 5px; }
.ultv-door.is-picked { transform: scale(.98); }
.ultv-door-icon { display: grid; place-items: center; width: 74px; height: 74px; margin: 60px auto 22px; border: 2px solid #ba9442; border-radius: 50%; background: rgba(6, 14, 7, .78); color: #e6c15c; font: 800 11px Arial, sans-serif; }
.ultv-door b { display: block; font-size: 15px; letter-spacing: 1px; }
.ultv-cash-card { display: flex; flex-direction: column; justify-content: center; }
.ultv-cash-card strong { color: var(--ultv-gold-2); font-size: 28px; margin: 8px 0 14px; }

.ultv-gold-button,
.ultv-green-button { border: 1px solid #f0d06c; border-radius: 8px; padding: 12px 16px; font-weight: 900; letter-spacing: .4px; cursor: pointer; }
.ultv-gold-button { color: #241606; background: linear-gradient(#f7d66d, #bd7d11); box-shadow: 0 0 14px rgba(229, 189, 87, .2); }
.ultv-green-button { color: #eaffdf; background: linear-gradient(#1a9447, #0f5f31); border-color: #65d47e; }
.ultv-gold-button:disabled,
.ultv-green-button:disabled { opacity: .45; cursor: not-allowed; }

.ultv-start-panel { display: grid; grid-template-columns: 150px 230px 1fr; gap: 10px; align-items: center; margin-top: 4px; padding: 10px; border: 1px solid rgba(229, 189, 87, .35); border-radius: 8px; background: rgba(2, 12, 6, .82); backdrop-filter: blur(3px); }
.ultv-start-panel.ultv-hidden { grid-template-columns: 1fr; }
.ultv-start-panel.ultv-hidden .ultv-bet-control,
.ultv-start-panel.ultv-hidden .ultv-start-button { display: none; }
.ultv-bet-control label { display: block; font: 800 11px Arial, sans-serif; color: #dcd5bb; margin-bottom: 4px; }
.ultv-bet-control select { width: 100%; padding: 10px; background: #08180e; color: #e9d784; border: 1px solid #8f753a; border-radius: 6px; }
.ultv-message { min-height: 42px; display: flex; align-items: center; padding: 8px 12px; border-radius: 6px; color: #d6decf; font: 14px/1.35 Arial, sans-serif; }
.ultv-message.is-good { background: rgba(17, 100, 45, .28); color: #b8ffbf; }
.ultv-message.is-bad { background: rgba(130, 31, 21, .32); color: #ffb0a4; }
.ultv-message.is-gold { background: rgba(111, 81, 10, .28); color: #ffe39a; }

.ultv-bonus-row { display: grid; grid-template-columns: 1fr 1.35fr 1fr; gap: 10px; margin-top: 10px; }
.ultv-bonus-card,
.ultv-torch-card { min-height: 125px; padding: 12px; border: 1px solid rgba(229, 189, 87, .34); border-radius: 9px; background: rgba(4, 18, 9, .82); backdrop-filter: blur(3px); }
.ultv-jaguar-card { background: radial-gradient(circle at 5% 50%, rgba(238, 183, 58, .24), transparent 35%), rgba(4, 18, 9, .88); }
.ultv-river-card { background: radial-gradient(circle at 95% 50%, rgba(42, 130, 149, .28), transparent 38%), rgba(4, 18, 9, .88); }
#ultv-jaguar-status,
#ultv-river-status { color: #dffd87; font: 800 13px Arial, sans-serif; }
.ultv-torches { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; margin: 12px 0; }
.ultv-torches span { height: 28px; border-radius: 5px; border: 1px solid #61562e; background: #0f1710; position: relative; }
.ultv-torches span.is-lit { background: linear-gradient(180deg, #f8d44b, #d16615 60%, #267536); box-shadow: 0 0 16px rgba(255, 188, 55, .45); }
.ultv-torches span.is-lit::after { content: 'FIRE'; position: absolute; inset: 0; display: grid; place-items: center; font: 900 8px Arial, sans-serif; color: #fff7c5; }

.ultv-rules { margin-top: 10px; border-top: 1px solid rgba(229, 189, 87, .24); }
.ultv-rules summary { padding: 12px 4px; color: #dac370; cursor: pointer; font-weight: 700; }
.ultv-rules-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; padding: 0 4px 10px; }
.ultv-rules-grid p { margin: 0; padding: 10px; background: rgba(8, 25, 14, .72); border-radius: 6px; font: 13px/1.45 Arial, sans-serif; }

.ultv-footer {
    display: flex;
    justify-content: space-between;
    gap: 20px;
    margin: 0 16px 16px;
    padding: 12px 16px;
    border: 1px solid var(--ultv-line);
    border-radius: 14px;
    background: rgba(2, 8, 5, 0.92);
    color: #a9ad9c;
    font: 11px Arial, sans-serif;
    letter-spacing: .5px;
}

.ultv-shell.is-busy .ultv-game { cursor: progress; }

@media (max-width: 1250px) {
    .ultv-topbar { grid-template-columns: 150px 140px 1fr 110px 130px; }
    .ultv-icon-button { display: none; }
    .ultv-layout { grid-template-columns: 1fr; }
    .ultv-side { display: block; border-right: 0; border-left: 0; border-bottom: 1px solid var(--ultv-line); }
    .ultv-wins-panel { border-left: 0; }
    .ultv-feed-list { max-height: 250px; min-height: 220px; }
}

@media (max-width: 850px) {
    .ultv-topbar { grid-template-columns: 1fr 1fr; min-height: 0; }
    .ultv-brandmark { display: none; }
    .ultv-title-wrap { grid-column: 1 / -1; grid-row: 1; }
    .ultv-title-wrap h1 { font-size: 36px; }
    .ultv-room-title { font-size: 14px; }
    .ultv-chambers { grid-template-columns: repeat(5, 150px); overflow-x: auto; padding-bottom: 8px; }
    .ultv-stage { grid-template-columns: 1fr; }
    .ultv-parrot-card,
    .ultv-cash-card { min-height: 0; }
    .ultv-doors { gap: 7px; }
    .ultv-door { min-height: 205px; border-radius: 55px 55px 7px 7px; }
    .ultv-door-icon { margin-top: 45px; width: 58px; height: 58px; }
    .ultv-status-row { grid-template-columns: 1fr 1fr; }
    .ultv-start-panel { grid-template-columns: 1fr; }
    .ultv-bonus-row { grid-template-columns: 1fr; }
    .ultv-rules-grid { grid-template-columns: 1fr; }
    .ultv-chat-compose { grid-template-columns: 1fr; }
    .ultv-footer { flex-direction: column; }
}

/* ========================================================================
   LOST TEMPLE VAULT v3 - INTERACTIVE DOOR ENGINE
   Core mechanics live here so every future room skin can restyle the same
   opening doors, treasure reveals and trap animations without touching JS.
   ======================================================================== */
.ultv-door-zone { position: relative; overflow: visible; }
.ultv-doors { position: relative; overflow: visible; align-items: end; }

.ultv-door {
    --door-stone-1: #211d12;
    --door-stone-2: #4b3b1e;
    --door-gold: #ba9442;
    --door-glow: rgba(86, 255, 130, .25);
    min-height: 330px;
    padding: 0 0 38px;
    position: relative;
    overflow: visible;
    border: 0;
    border-radius: 86px 86px 12px 12px;
    background: transparent;
    box-shadow: none;
    isolation: isolate;
    perspective: 1200px;
    transform-style: preserve-3d;
}

.ultv-door:hover:not(:disabled) {
    transform: translateY(-5px);
    border-color: transparent;
    box-shadow: none;
}

.ultv-door:disabled { opacity: .72; }
.ultv-door.is-picked { transform: translateY(-3px) scale(.995); }

.ultv-door-scene {
    position: absolute;
    left: 11px;
    right: 11px;
    top: 18px;
    bottom: 48px;
    z-index: 1;
    border-radius: 74px 74px 8px 8px;
    background:
        radial-gradient(circle at 50% 42%, rgba(255, 205, 70, .12), transparent 34%),
        linear-gradient(180deg, #100f09, #050704 72%);
    border: 1px solid rgba(233, 188, 72, .34);
    box-shadow: inset 0 0 42px #000, 0 0 24px rgba(0,0,0,.42);
    opacity: .28;
    transition: opacity .32s ease, box-shadow .35s ease;
    pointer-events: none;
}

.ultv-door.is-open .ultv-door-scene {
    opacity: 1;
    box-shadow: inset 0 0 36px rgba(0,0,0,.72), 0 0 28px rgba(255, 203, 65, .18);
}

.ultv-door-frame {
    position: absolute;
    inset: 0 0 38px;
    z-index: 7;
    border-radius: 88px 88px 10px 10px;
    border: 5px solid #3a2e18;
    box-shadow:
        inset 0 0 0 2px #94712c,
        inset 0 0 0 7px rgba(12,10,7,.86),
        inset 0 0 28px #000,
        0 0 0 1px rgba(229, 189, 87, .34),
        0 13px 25px rgba(0,0,0,.4);
    background:
        radial-gradient(circle at 50% 1%, #846221 0 4px, transparent 5px),
        repeating-linear-gradient(90deg, rgba(221,174,64,.12) 0 2px, transparent 2px 14px),
        linear-gradient(180deg, #423417, #16140d 70%);
    pointer-events: none;
}

.ultv-door-frame::before,
.ultv-door-frame::after {
    content: '';
    position: absolute;
    top: 36px;
    bottom: 16px;
    width: 16px;
    border: 1px solid #8c6b28;
    background: linear-gradient(90deg, #17130c, #5d461e 48%, #18140d);
    box-shadow: inset 0 0 7px #000, 0 0 8px rgba(223,177,62,.12);
}
.ultv-door-frame::before { left: 4px; }
.ultv-door-frame::after { right: 4px; }

.ultv-door-leaf {
    position: absolute;
    inset: 11px;
    z-index: 9;
    border-radius: 70px 70px 6px 6px;
    border: 2px solid #8a6928;
    transform-origin: 5% 50%;
    transform: perspective(1050px) rotateY(0deg) translateZ(2px);
    transform-style: preserve-3d;
    transition: transform .78s cubic-bezier(.2,.72,.19,1), filter .32s ease, box-shadow .32s ease;
    backface-visibility: hidden;
    background:
        radial-gradient(circle at 50% 37%, rgba(225,177,60,.42) 0 4%, transparent 4.5%),
        radial-gradient(circle at 50% 42%, rgba(13,51,24,.36), transparent 29%),
        repeating-linear-gradient(90deg, rgba(231,192,82,.07) 0 2px, transparent 2px 22px),
        repeating-linear-gradient(0deg, rgba(0,0,0,.22) 0 3px, transparent 3px 24px),
        linear-gradient(90deg, #17130d, #49391d 22%, #2c2415 48%, #503d1c 73%, #14110c);
    box-shadow: inset 0 0 34px #000, inset 0 0 0 5px rgba(214,165,59,.1), 0 0 12px rgba(0,0,0,.45);
}

.ultv-door-leaf::before {
    content: '';
    position: absolute;
    inset: 16px;
    border-radius: 54px 54px 5px 5px;
    border: 2px solid rgba(192,143,44,.64);
    box-shadow: inset 0 0 0 4px rgba(0,0,0,.25), inset 0 0 24px rgba(0,0,0,.48);
}

.ultv-door-leaf::after {
    content: '';
    position: absolute;
    left: 50%;
    top: 49%;
    width: 84px;
    height: 84px;
    transform: translate(-50%, -50%) rotate(45deg);
    border: 2px solid rgba(213,166,58,.55);
    box-shadow: inset 0 0 16px #000;
    background: rgba(15,17,10,.4);
}

.ultv-door-mask {
    position: absolute;
    z-index: 4;
    left: 50%;
    top: 49%;
    width: 92px;
    height: 112px;
    transform: translate(-50%, -50%);
    border-radius: 42% 42% 48% 48%;
    border: 3px solid #9e762b;
    background:
        radial-gradient(circle at 33% 36%, #18361e 0 6px, transparent 7px),
        radial-gradient(circle at 67% 36%, #18361e 0 6px, transparent 7px),
        linear-gradient(90deg, #4c3414, #bd8b2f 47%, #5c3d16 52%, #b4822d 70%, #36260f);
    box-shadow: inset 0 0 18px #251806, 0 0 12px rgba(225,182,60,.15);
}

.ultv-door-mask::before {
    content: '';
    position: absolute;
    left: 50%;
    top: 51%;
    width: 16px;
    height: 28px;
    transform: translateX(-50%);
    border-radius: 40% 40% 60% 60%;
    background: #5d3d15;
    border: 1px solid #d5a541;
}

.ultv-door-mask::after {
    content: '';
    position: absolute;
    left: 50%;
    bottom: 15px;
    width: 50px;
    height: 15px;
    transform: translateX(-50%);
    border-bottom: 5px double #38250e;
    border-radius: 0 0 50% 50%;
}

.ultv-mask-eye {
    position: absolute;
    z-index: 3;
    top: 34px;
    width: 12px;
    height: 9px;
    border-radius: 50%;
    background: #70ff79;
    box-shadow: 0 0 8px #5cff72, 0 0 16px rgba(78,255,112,.45);
}
.ultv-mask-eye.left { left: 22px; }
.ultv-mask-eye.right { right: 22px; }

.ultv-door-rune {
    position: absolute;
    left: 50%;
    z-index: 5;
    width: 28px;
    height: 28px;
    transform: translateX(-50%) rotate(45deg);
    border: 2px solid #9b7429;
    background: #172819;
    box-shadow: 0 0 10px rgba(67,238,104,.2);
}
.ultv-rune-top { top: 25px; }
.ultv-rune-bottom { bottom: 28px; }
.ultv-door-knob {
    position: absolute;
    right: 22px;
    top: 52%;
    z-index: 6;
    width: 17px;
    height: 17px;
    border-radius: 50%;
    background: radial-gradient(circle at 36% 32%, #ffe58f, #9c6b16 52%, #2d1c08 74%);
    box-shadow: 0 0 8px rgba(255,211,85,.3);
}

.ultv-door-label {
    position: absolute;
    left: 8px;
    right: 8px;
    bottom: 2px;
    z-index: 18;
    display: block;
    min-height: 34px;
    padding: 7px 6px 5px;
    border: 1px solid rgba(215,167,60,.5);
    border-radius: 6px;
    background: linear-gradient(#211b0e, #090b07);
    color: #edca69;
    font: 900 14px/1.2 Georgia, serif;
    letter-spacing: 1.3px;
    text-align: center;
    text-shadow: 0 1px 2px #000;
}

.ultv-door.is-rumbling .ultv-door-leaf {
    animation: ultv-door-rumble .085s linear infinite alternate;
    filter: brightness(1.18);
}
.ultv-door.is-rumbling .ultv-mask-eye { animation: ultv-eye-pulse .18s ease-in-out infinite alternate; }

.ultv-door.is-opening .ultv-door-leaf,
.ultv-door.is-open .ultv-door-leaf {
    transform: perspective(1050px) rotateY(-108deg) translateX(-4%) translateZ(16px);
    filter: brightness(.82) saturate(.9);
    box-shadow: 18px 5px 26px rgba(0,0,0,.62);
}

.ultv-door.is-open .ultv-reveal-light {
    opacity: 1;
    transform: scale(1);
}

.ultv-reveal-light {
    position: absolute;
    inset: 5% 8% 4%;
    z-index: 1;
    border-radius: 60px 60px 8px 8px;
    opacity: 0;
    transform: scale(.8);
    transition: .42s ease .18s;
    background: radial-gradient(circle at 50% 55%, rgba(255,239,139,.95), rgba(255,162,23,.48) 34%, rgba(58,118,41,.18) 58%, transparent 76%);
    box-shadow: inset 0 0 60px rgba(255,188,42,.45), 0 0 32px rgba(255,190,44,.26);
}

.ultv-treasure-scene,
.ultv-trap-scene {
    position: absolute;
    inset: 0;
    z-index: 5;
    opacity: 0;
    transform: translateY(18px) scale(.92);
    transition: opacity .34s ease .38s, transform .48s cubic-bezier(.2,.7,.2,1) .34s;
    pointer-events: none;
}
.ultv-door.is-treasure .ultv-treasure-scene,
.ultv-door.is-relic .ultv-treasure-scene,
.ultv-door.is-trap-hit .ultv-trap-scene {
    opacity: 1;
    transform: translateY(0) scale(1);
}

.ultv-gem {
    position: absolute;
    width: 38px;
    height: 48px;
    clip-path: polygon(50% 0, 92% 28%, 78% 84%, 50% 100%, 22% 84%, 8% 28%);
    border: 2px solid rgba(255,255,255,.55);
    filter: drop-shadow(0 5px 5px rgba(0,0,0,.55));
    animation: ultv-gem-float 1.5s ease-in-out infinite alternate;
}
.ultv-gem::after {
    content: '';
    position: absolute;
    inset: 7px 11px 18px 7px;
    background: rgba(255,255,255,.35);
    clip-path: polygon(0 0, 100% 25%, 45% 100%);
}
.ultv-gem-emerald { left: 17%; bottom: 18%; background: linear-gradient(135deg,#9bffae,#00a73a 47%,#005b22); box-shadow: 0 0 24px rgba(55,255,110,.7); }
.ultv-gem-ruby { left: 39%; bottom: 28%; background: linear-gradient(135deg,#ff9b9b,#d00025 47%,#640010); box-shadow: 0 0 24px rgba(255,43,75,.68); animation-delay:.18s; }
.ultv-gem-sapphire { right: 17%; bottom: 18%; background: linear-gradient(135deg,#a6deff,#0767df 47%,#052d78); box-shadow: 0 0 24px rgba(50,145,255,.7); animation-delay:.28s; }
.ultv-gem-amber { right: 36%; bottom: 9%; width: 30px; height: 38px; background: linear-gradient(135deg,#fff19b,#f4a600 48%,#8d4300); box-shadow: 0 0 20px rgba(255,192,48,.65); animation-delay:.35s; }

.ultv-coin {
    position: absolute;
    bottom: 7%;
    width: 42px;
    height: 14px;
    border-radius: 50%;
    border: 2px solid #6e460b;
    background: linear-gradient(#ffe989, #ca8412 50%, #ffcb35);
    box-shadow: 0 3px 0 #8b560b, 0 6px 0 #503208, 0 0 10px rgba(255,195,48,.35);
}
.ultv-coin-one { left: 25%; transform: rotate(-8deg); }
.ultv-coin-two { left: 47%; bottom: 11%; transform: rotate(7deg); }
.ultv-coin-three { right: 18%; transform: rotate(-4deg); }

.ultv-relic-figure {
    position: absolute;
    left: 50%;
    top: 42%;
    width: 72px;
    height: 92px;
    transform: translate(-50%, -50%) scale(.84);
    border-radius: 44% 44% 35% 35%;
    border: 3px solid #efca63;
    background:
        radial-gradient(circle at 32% 36%, #72ff81 0 5px, #17371d 6px 8px, transparent 9px),
        radial-gradient(circle at 68% 36%, #72ff81 0 5px, #17371d 6px 8px, transparent 9px),
        linear-gradient(90deg,#56380e,#e2ae3c 48%,#765019 52%,#f0c257);
    box-shadow: inset 0 0 18px #54330a, 0 0 26px rgba(255,205,77,.45);
    opacity: .25;
    transition: .35s ease .45s;
}
.ultv-door.is-relic .ultv-relic-figure,
.ultv-door.is-jaguar .ultv-relic-figure { opacity: 1; transform: translate(-50%, -50%) scale(1.14); }
.ultv-relic-figure::before {
    content:'';
    position:absolute;
    left:50%;
    top:50%;
    width:18px;
    height:30px;
    transform:translate(-50%,-35%);
    border-radius: 45% 45% 55% 55%;
    background:#7d5014;
    border:1px solid #f4cc63;
}
.ultv-relic-figure span {
    position:absolute;
    left:50%; bottom:10px;
    width:44px; height:12px;
    transform:translateX(-50%);
    border-bottom:4px double #65400e;
}

.ultv-door.variant-emeralds .ultv-gem-emerald { transform: scale(1.4); z-index: 8; }
.ultv-door.variant-rubies .ultv-gem-ruby { transform: scale(1.4); z-index: 8; }
.ultv-door.variant-sapphires .ultv-gem-sapphire { transform: scale(1.4); z-index: 8; }
.ultv-door.variant-golden-jaguar-vault .ultv-relic-figure { opacity: 1; transform: translate(-50%,-50%) scale(1.32); box-shadow: 0 0 42px #ffd65c, inset 0 0 22px #6d420b; }
.ultv-door.variant-golden-jaguar-vault .ultv-reveal-light { background: radial-gradient(circle at 50% 50%, #fff6bd, #ffbf27 35%, rgba(74,221,107,.35) 62%, transparent 80%); }

.ultv-trap-scene { overflow: visible; }
.ultv-projectiles { position: absolute; inset: 0; z-index: 30; overflow: visible; }
.ultv-projectile {
    --shot-y: 50%;
    --shot-rot: 0deg;
    --shot-delay: 0ms;
    position: absolute;
    left: var(--shot-left, 48%);
    top: var(--shot-y);
    z-index: 40;
    width: 112px;
    height: 5px;
    border-radius: 999px;
    background: linear-gradient(90deg,#3b2510,#9e6223 70%,#e6d4a4 71% 82%,#5b4936 83%);
    box-shadow: 0 2px 3px rgba(0,0,0,.6);
    opacity: 0;
    transform-origin: left center;
    transform: translateX(-35px) rotate(var(--shot-rot));
    animation: ultv-projectile-shot var(--shot-duration, .72s) cubic-bezier(.12,.72,.25,1) var(--shot-delay) forwards;
}
.ultv-projectile::after {
    content:'';
    position:absolute;
    right:-16px;
    top:50%;
    width:0;
    height:0;
    transform:translateY(-50%);
    border-left:18px solid #bfc3bd;
    border-top:7px solid transparent;
    border-bottom:7px solid transparent;
    filter: drop-shadow(1px 1px 1px #000);
}
.ultv-projectile::before {
    content:'';
    position:absolute;
    left:-13px;
    top:50%;
    width:18px;
    height:16px;
    transform:translateY(-50%);
    background: repeating-linear-gradient(90deg,#d9362b 0 3px,#d8c05a 3px 6px);
    clip-path: polygon(100% 50%,0 0,22% 50%,0 100%);
}
.ultv-projectile-spears { width: 165px; height: 8px; background: linear-gradient(90deg,#23160a,#7f4c1b 75%,#a9a69e 76%); }
.ultv-projectile-spears::after { border-left-width:25px; border-top-width:10px; border-bottom-width:10px; right:-22px; }
.ultv-projectile-darts { width: 68px; height: 3px; }
.ultv-projectile-darts::after { border-left-width:10px; border-top-width:4px; border-bottom-width:4px; right:-8px; }

.ultv-snake {
    position: absolute;
    z-index: 35;
    left: 50%;
    bottom: -18%;
    width: 145px;
    height: 190px;
    transform: translateX(-50%) translateY(120px) scale(.7) rotate(-8deg);
    opacity: 0;
    transition: .55s cubic-bezier(.15,.84,.21,1) .35s;
}
.ultv-door.trap-snake .ultv-snake { opacity: 1; transform: translateX(-50%) translateY(0) scale(1) rotate(-2deg); }
.ultv-snake-body {
    position:absolute;
    left:18px; bottom:2px;
    width:110px; height:150px;
    border:22px solid #1c6d32;
    border-top-color:transparent;
    border-left-color:#398e3e;
    border-radius:55% 45% 52% 48%;
    box-shadow: inset 0 0 12px #0a3519, 0 5px 12px rgba(0,0,0,.55);
}
.ultv-snake-head {
    position:absolute;
    left:50%; top:4px;
    width:78px; height:62px;
    transform:translateX(-50%);
    border-radius:48% 48% 38% 38%;
    background: radial-gradient(circle at 30% 35%,#ecff5c 0 4px,#17280b 5px 7px,transparent 8px), radial-gradient(circle at 70% 35%,#ecff5c 0 4px,#17280b 5px 7px,transparent 8px), linear-gradient(135deg,#5aa542,#174e29);
    border:3px solid #8fbb42;
    box-shadow:0 0 18px rgba(92,255,97,.25), inset 0 -10px 16px #0c2d17;
}
.ultv-snake-head::after {
    content:'';
    position:absolute;
    left:50%; bottom:-15px;
    width:44px; height:24px;
    transform:translateX(-50%);
    border-radius:0 0 50% 50%;
    background:#28070a;
    border:2px solid #798c3c;
}
.ultv-snake-fang {
    position:absolute;
    z-index:37;
    top:55px;
    width:6px; height:24px;
    background:#fff9d4;
    clip-path:polygon(0 0,100% 0,50% 100%);
}
.ultv-fang-one { left:55px; transform:rotate(6deg); }
.ultv-fang-two { right:55px; transform:rotate(-6deg); }
.ultv-snake-eye { display:none; }

.ultv-shield-burst {
    position:absolute;
    z-index:50;
    left:50%; top:48%;
    width:145px; height:145px;
    transform:translate(-50%,-50%) scale(.25) rotate(-14deg);
    opacity:0;
    display:grid;
    place-items:center;
    border-radius:50%;
    border:5px double #ffd75f;
    color:#fff3a5;
    background:radial-gradient(circle,#24542c 0 32%,#101c0e 33% 55%,rgba(255,208,74,.25) 56% 70%,transparent 71%);
    box-shadow:0 0 34px #ffd24e, inset 0 0 22px #3d9f4f;
    font:900 13px/1.1 Georgia,serif;
    text-align:center;
    transition:.38s cubic-bezier(.2,.8,.2,1) .55s;
}
.ultv-door.is-shielded .ultv-shield-burst { opacity:1; transform:translate(-50%,-50%) scale(1) rotate(0); animation:ultv-shield-pulse .55s ease-in-out 2 alternate .7s; }

.ultv-reveal-title {
    position:absolute;
    z-index:60;
    left:7%; right:7%;
    bottom:10px;
    padding:8px 5px;
    border-radius:8px;
    color:#fff2b0;
    background:rgba(3,12,7,.84);
    border:1px solid rgba(231,190,73,.45);
    text-align:center;
    font:900 12px/1.1 Georgia,serif;
    letter-spacing:.8px;
    text-shadow:0 1px 2px #000;
    opacity:0;
    transform:translateY(8px);
    transition:.3s ease .7s;
}
.ultv-door.is-open .ultv-reveal-title { opacity:1; transform:translateY(0); }
.ultv-door.is-trap-hit .ultv-reveal-title { color:#ffd2c8; border-color:rgba(255,99,74,.56); background:rgba(72,12,6,.9); }
.ultv-door.is-relic .ultv-reveal-title,
.ultv-door.is-treasure .ultv-reveal-title { color:#fff1a5; background:rgba(69,43,4,.86); }

.ultv-door.is-scouted-trap .ultv-door-leaf {
    box-shadow: inset 0 0 34px #000, inset 0 0 0 5px rgba(214,165,59,.1), 0 0 0 3px rgba(255,87,67,.5), 0 0 26px rgba(255,76,52,.35);
    filter:saturate(.75);
}
.ultv-door.is-scouted-trap .ultv-door-leaf::before {
    content:'PARROT SCOUT: TRAP';
    z-index:20;
    display:grid;
    place-items:end center;
    padding-bottom:18px;
    color:#ffc2a9;
    background:linear-gradient(transparent 58%,rgba(91,14,7,.82));
    font:900 10px Arial,sans-serif;
    letter-spacing:.6px;
}
.ultv-door.is-scouted-trap .ultv-mask-eye { background:#ff5b42; box-shadow:0 0 10px #ff4f3a,0 0 20px rgba(255,64,50,.55); }

@keyframes ultv-door-rumble {
    from { transform: perspective(1050px) rotateY(0) translateX(-2px) rotate(-.35deg); }
    to { transform: perspective(1050px) rotateY(0) translateX(2px) rotate(.35deg); }
}
@keyframes ultv-eye-pulse { from{filter:brightness(.8)} to{filter:brightness(1.8)} }
@keyframes ultv-gem-float { from{translate:0 0; filter:drop-shadow(0 5px 5px rgba(0,0,0,.55)) brightness(.9)} to{translate:0 -7px; filter:drop-shadow(0 8px 7px rgba(0,0,0,.55)) brightness(1.3)} }
@keyframes ultv-projectile-shot {
    0% { opacity:0; transform:translateX(-55px) rotate(var(--shot-rot)) scaleX(.7); }
    12% { opacity:1; }
    100% { opacity:1; transform:translateX(var(--shot-end,340px)) rotate(var(--shot-rot)) scaleX(1); }
}
@keyframes ultv-shield-pulse { from{box-shadow:0 0 24px #ffd24e,inset 0 0 16px #3d9f4f} to{box-shadow:0 0 58px #fff08a,inset 0 0 30px #64dd73} }

@media (max-width: 850px) {
    .ultv-door { min-height: 270px; }
    .ultv-door-mask { width:70px; height:88px; }
    .ultv-door-frame { border-radius:64px 64px 9px 9px; }
    .ultv-door-leaf { border-radius:54px 54px 6px 6px; }
    .ultv-projectile { width:80px; }
    @keyframes ultv-projectile-shot { 0%{opacity:0;transform:translateX(-40px) rotate(var(--shot-rot))} 12%{opacity:1} 100%{opacity:1;transform:translateX(190px) rotate(var(--shot-rot))} }
}

@media (prefers-reduced-motion: reduce) {
    .ultv-door-leaf,
    .ultv-treasure-scene,
    .ultv-trap-scene,
    .ultv-reveal-light,
    .ultv-shield-burst,
    .ultv-reveal-title { transition-duration: .01ms !important; animation-duration: .01ms !important; }
    .ultv-projectile { animation-duration: .01ms !important; }
}

/* Reveal layers must rise above the moving door leaf while a result plays. */
.ultv-door.is-open .ultv-door-scene { z-index: 14; }
.ultv-door.is-rumbling:disabled,
.ultv-door.is-opening:disabled,
.ultv-door.is-open:disabled { opacity: 1; }

/* v4 multiroom special-vault alias: preserves the existing Golden Jaguar FX while
   allowing every room to rename the chamber-five vault. */
.ultv-door.variant-special-vault .ultv-relic-figure {
    opacity: 1;
    transform: translate(-50%,-50%) scale(1.32);
    box-shadow: 0 0 42px var(--ultv-gold-2), inset 0 0 22px rgba(90,60,8,.8);
}
.ultv-door.variant-special-vault .ultv-reveal-light {
    background: radial-gradient(circle at 50% 50%, #fff8cf, var(--ultv-gold-2) 35%, color-mix(in srgb,var(--ultv-green) 35%,transparent) 62%, transparent 80%);
}

/* ============================================================
   V5 PREMIUM ROOM DOOR / PHOTO REVEAL SYSTEM
   Core mechanics remain shared; these classes change the physical
   door mechanism and presentation selected by each room config.
   ============================================================ */

.ultv-door-leaf-secondary { display:none; }

/* Photo-based reveals: non-Amazon rooms no longer use the CSS gems,
   coins, idol or drawn snake. The room's own mapped imagery becomes
   the reveal scene, with coded trap projectiles layered above it. */
.ultv-reveal-style-photo-real .ultv-reveal-art {
    position:absolute;
    inset:0;
    z-index:4;
    border-radius:72px 72px 8px 8px;
    background-size:cover;
    background-position:center;
    opacity:0;
    transform:scale(1.045);
    filter:saturate(1.08) contrast(1.04);
    transition:opacity .42s ease .28s, transform .7s cubic-bezier(.18,.72,.2,1) .2s, filter .45s ease;
    box-shadow:inset 0 0 50px rgba(0,0,0,.42);
}
.ultv-reveal-style-photo-real .ultv-door.is-open .ultv-reveal-art {
    opacity:1;
    transform:scale(1);
}
.ultv-reveal-style-photo-real .ultv-treasure-scene,
.ultv-reveal-style-photo-real .ultv-relic-figure,
.ultv-reveal-style-photo-real .ultv-gem,
.ultv-reveal-style-photo-real .ultv-coin,
.ultv-reveal-style-photo-real .ultv-snake { display:none !important; }
.ultv-reveal-style-photo-real .ultv-trap-scene { display:block; }
.ultv-reveal-style-photo-real .ultv-door.is-treasure .ultv-reveal-light,
.ultv-reveal-style-photo-real .ultv-door.is-jaguar .ultv-reveal-light {
    background:radial-gradient(circle at 50% 55%,rgba(255,245,190,.72),rgba(225,165,47,.22) 42%,transparent 72%);
    box-shadow:inset 0 0 62px rgba(255,199,83,.26),0 0 34px rgba(255,204,84,.16);
}
.ultv-reveal-style-photo-real .ultv-door.is-relic .ultv-reveal-light {
    background:radial-gradient(circle at 50% 50%,rgba(242,224,170,.42),rgba(73,127,110,.14) 48%,transparent 75%);
}
.ultv-reveal-style-photo-real .ultv-door.is-trap-hit .ultv-reveal-light {
    background:radial-gradient(circle at 50% 50%,rgba(255,85,50,.16),rgba(50,0,0,.10) 46%,transparent 74%);
}
/* Use the realistic Amazon snake crop anywhere a room's trap contract calls for a snake. */
.ultv-reveal-style-photo-real .ultv-door.is-trap-hit.trap-snake .ultv-reveal-art {
    background-image:linear-gradient(rgba(0,0,0,.04),rgba(0,0,0,.16)),url('../skins/amazon-jungle/images/reveal-snake.jpg') !important;
    background-size:cover !important;
    background-position:center !important;
    filter:saturate(1.03) contrast(1.08) !important;
}

/* Strip the Amazon mask language from all premium mechanisms except the
   original jungle/sun-stone families. Room artwork becomes the door face. */
.ultv-shell:not(.ultv-door-style-jungle-stone):not(.ultv-door-style-sun-stone) .ultv-door-mask,
.ultv-shell:not(.ultv-door-style-jungle-stone):not(.ultv-door-style-sun-stone) .ultv-door-rune { display:none; }

/* Shared premium frame finish. */
.ultv-shell[class*="ultv-door-style-"] .ultv-door-frame {
    overflow:visible;
    transition:border-radius .35s ease,box-shadow .35s ease,filter .35s ease;
}
.ultv-shell[class*="ultv-door-style-"] .ultv-door-leaf {
    background-size:auto 235%;
    background-repeat:no-repeat;
}

/* HEAVY / LUXURY VAULTS */
.ultv-door-style-luxury-vault .ultv-door-frame,
.ultv-door-style-universal-vault .ultv-door-frame,
.ultv-door-style-coastal-vault .ultv-door-frame {
    inset:38px 10px 72px;
    border-radius:50%;
    border:7px solid color-mix(in srgb,var(--ultv-gold) 72%,#292929);
    background:radial-gradient(circle,#343536 0 52%,#0d0f10 53% 67%,#5d5e60 68% 72%,#151719 73%);
    box-shadow:inset 0 0 0 5px #0b0c0d,inset 0 0 28px #000,0 12px 25px rgba(0,0,0,.48),0 0 18px color-mix(in srgb,var(--ultv-gold) 20%,transparent);
}
.ultv-door-style-luxury-vault .ultv-door-leaf,
.ultv-door-style-universal-vault .ultv-door-leaf,
.ultv-door-style-coastal-vault .ultv-door-leaf {
    inset:12px;
    border-radius:50%;
    border:5px solid color-mix(in srgb,var(--ultv-gold) 64%,#555);
    transform-origin:50% 50%;
    box-shadow:inset 0 0 0 9px rgba(0,0,0,.46),inset 0 0 34px #000,0 0 14px rgba(0,0,0,.6);
}
.ultv-door-style-luxury-vault .ultv-door-leaf::after,
.ultv-door-style-universal-vault .ultv-door-leaf::after,
.ultv-door-style-coastal-vault .ultv-door-leaf::after {
    width:42%;height:42%;border-radius:50%;transform:translate(-50%,-50%);border:7px double color-mix(in srgb,var(--ultv-gold) 76%,#888);background:radial-gradient(circle,rgba(0,0,0,.08),rgba(0,0,0,.7));
}
.ultv-door-style-luxury-vault .ultv-door.is-opening .ultv-door-leaf,
.ultv-door-style-luxury-vault .ultv-door.is-open .ultv-door-leaf,
.ultv-door-style-universal-vault .ultv-door.is-opening .ultv-door-leaf,
.ultv-door-style-universal-vault .ultv-door.is-open .ultv-door-leaf,
.ultv-door-style-coastal-vault .ultv-door.is-opening .ultv-door-leaf,
.ultv-door-style-coastal-vault .ultv-door.is-open .ultv-door-leaf {
    transform:perspective(1100px) rotateZ(-22deg) rotateY(-108deg) translateX(-16%) scale(.93);
}
.ultv-door-style-universal-vault .ultv-door-frame {border-color:#d7b34e;box-shadow:inset 0 0 0 5px #06162b,inset 0 0 32px #001126,0 12px 25px rgba(0,0,0,.5),0 0 22px rgba(61,145,255,.28)}
.ultv-door-style-coastal-vault .ultv-door-frame {border-color:#d7c06e;background:radial-gradient(circle,#5a6670 0 52%,#183846 53% 67%,#a5b4bc 68% 72%,#132b36 73%)}

/* RECTANGULAR STEEL / STREET / MODERN / WAR / CASINO VAULTS */
.ultv-door-style-steel-vault .ultv-door-frame,
.ultv-door-style-street-vault .ultv-door-frame,
.ultv-door-style-modern-vault .ultv-door-frame,
.ultv-door-style-war-gate .ultv-door-frame,
.ultv-door-style-casino-vault .ultv-door-frame {
    border-radius:20px 20px 8px 8px;
    border:6px solid #5f6061;
    background:repeating-linear-gradient(90deg,#191b1d 0 12px,#34373a 12px 24px);
    box-shadow:inset 0 0 0 3px #090a0b,inset 0 0 34px #000,0 13px 24px rgba(0,0,0,.48);
}
.ultv-door-style-steel-vault .ultv-door-leaf,
.ultv-door-style-street-vault .ultv-door-leaf,
.ultv-door-style-modern-vault .ultv-door-leaf,
.ultv-door-style-war-gate .ultv-door-leaf,
.ultv-door-style-casino-vault .ultv-door-leaf {border-radius:12px 12px 4px 4px;border:4px solid color-mix(in srgb,var(--ultv-gold) 52%,#666);}
.ultv-door-style-war-gate .ultv-door-frame {border-color:#514435;background:repeating-linear-gradient(90deg,#17130f 0 14px,#3c3228 14px 28px)}
.ultv-door-style-casino-vault .ultv-door-frame {border-color:var(--ultv-gold);background:linear-gradient(135deg,#17171a,#3a2d16 46%,#111218 47% 54%,#5e441c 55%,#17171a)}
.ultv-door-style-modern-vault .ultv-door-frame {border-color:#9eabb1;background:linear-gradient(135deg,#1a2227,#55646c 46%,#101619 47% 54%,#71818a 55%,#1a2227)}

/* DOUBLE LEAF PALACE / ROYAL / DRAGON / TIKI / MAHARAJA / AFRICAN GATES */
.ultv-door-style-royal-gate .ultv-door-leaf-secondary,
.ultv-door-style-palace-door .ultv-door-leaf-secondary,
.ultv-door-style-maharaja-door .ultv-door-leaf-secondary,
.ultv-door-style-dragon-lacquer .ultv-door-leaf-secondary,
.ultv-door-style-tiki-gate .ultv-door-leaf-secondary,
.ultv-door-style-royal-afro-gate .ultv-door-leaf-secondary,
.ultv-door-style-sci-fi-airlock .ultv-door-leaf-secondary {display:block;}
.ultv-door-style-royal-gate .ultv-door-leaf,
.ultv-door-style-palace-door .ultv-door-leaf,
.ultv-door-style-maharaja-door .ultv-door-leaf,
.ultv-door-style-dragon-lacquer .ultv-door-leaf,
.ultv-door-style-tiki-gate .ultv-door-leaf,
.ultv-door-style-royal-afro-gate .ultv-door-leaf,
.ultv-door-style-sci-fi-airlock .ultv-door-leaf {
    top:11px;bottom:11px;width:calc(50% - 12px);inset-inline:auto;border-radius:52px 0 0 5px;background-size:auto 230%;
}
.ultv-door-style-royal-gate .ultv-door-leaf-primary,
.ultv-door-style-palace-door .ultv-door-leaf-primary,
.ultv-door-style-maharaja-door .ultv-door-leaf-primary,
.ultv-door-style-dragon-lacquer .ultv-door-leaf-primary,
.ultv-door-style-tiki-gate .ultv-door-leaf-primary,
.ultv-door-style-royal-afro-gate .ultv-door-leaf-primary,
.ultv-door-style-sci-fi-airlock .ultv-door-leaf-primary {left:11px;right:auto;transform-origin:0 50%;background-position:28% var(--ultv-door-crop-y);}
.ultv-door-style-royal-gate .ultv-door-leaf-secondary,
.ultv-door-style-palace-door .ultv-door-leaf-secondary,
.ultv-door-style-maharaja-door .ultv-door-leaf-secondary,
.ultv-door-style-dragon-lacquer .ultv-door-leaf-secondary,
.ultv-door-style-tiki-gate .ultv-door-leaf-secondary,
.ultv-door-style-royal-afro-gate .ultv-door-leaf-secondary,
.ultv-door-style-sci-fi-airlock .ultv-door-leaf-secondary {right:11px;left:auto;border-radius:0 52px 5px 0;transform-origin:100% 50%;background-position:72% var(--ultv-door-crop-y);}
.ultv-door-style-royal-gate .ultv-door.is-opening .ultv-door-leaf-primary,
.ultv-door-style-royal-gate .ultv-door.is-open .ultv-door-leaf-primary,
.ultv-door-style-palace-door .ultv-door.is-opening .ultv-door-leaf-primary,
.ultv-door-style-palace-door .ultv-door.is-open .ultv-door-leaf-primary,
.ultv-door-style-maharaja-door .ultv-door.is-opening .ultv-door-leaf-primary,
.ultv-door-style-maharaja-door .ultv-door.is-open .ultv-door-leaf-primary,
.ultv-door-style-dragon-lacquer .ultv-door.is-opening .ultv-door-leaf-primary,
.ultv-door-style-dragon-lacquer .ultv-door.is-open .ultv-door-leaf-primary,
.ultv-door-style-tiki-gate .ultv-door.is-opening .ultv-door-leaf-primary,
.ultv-door-style-tiki-gate .ultv-door.is-open .ultv-door-leaf-primary,
.ultv-door-style-royal-afro-gate .ultv-door.is-opening .ultv-door-leaf-primary,
.ultv-door-style-royal-afro-gate .ultv-door.is-open .ultv-door-leaf-primary {transform:perspective(950px) rotateY(-112deg) translateZ(8px);}
.ultv-door-style-royal-gate .ultv-door.is-opening .ultv-door-leaf-secondary,
.ultv-door-style-royal-gate .ultv-door.is-open .ultv-door-leaf-secondary,
.ultv-door-style-palace-door .ultv-door.is-opening .ultv-door-leaf-secondary,
.ultv-door-style-palace-door .ultv-door.is-open .ultv-door-leaf-secondary,
.ultv-door-style-maharaja-door .ultv-door.is-opening .ultv-door-leaf-secondary,
.ultv-door-style-maharaja-door .ultv-door.is-open .ultv-door-leaf-secondary,
.ultv-door-style-dragon-lacquer .ultv-door.is-opening .ultv-door-leaf-secondary,
.ultv-door-style-dragon-lacquer .ultv-door.is-open .ultv-door-leaf-secondary,
.ultv-door-style-tiki-gate .ultv-door.is-opening .ultv-door-leaf-secondary,
.ultv-door-style-tiki-gate .ultv-door.is-open .ultv-door-leaf-secondary,
.ultv-door-style-royal-afro-gate .ultv-door.is-opening .ultv-door-leaf-secondary,
.ultv-door-style-royal-afro-gate .ultv-door.is-open .ultv-door-leaf-secondary {transform:perspective(950px) rotateY(112deg) translateZ(8px);}
.ultv-door-style-royal-gate .ultv-door-frame {border-radius:80px 80px 8px 8px;border-color:#aa7b2c;background:linear-gradient(#574018,#17110c 72%)}
.ultv-door-style-palace-door .ultv-door-frame {border-radius:96px 96px 18px 18px;border-color:#d1a74e;background:linear-gradient(#6a4420,#16100d 72%)}
.ultv-door-style-maharaja-door .ultv-door-frame {border-radius:80px 80px 10px 10px;border-color:#d7a744;background:linear-gradient(135deg,#6e1420,#d89a38 48%,#5c1019 52%,#c68d32)}
.ultv-door-style-dragon-lacquer .ultv-door-frame {border-radius:70px 70px 8px 8px;border-color:#d2a83c;background:linear-gradient(#651510,#150807 76%)}
.ultv-door-style-tiki-gate .ultv-door-frame {border-radius:50px 50px 8px 8px;border-color:#8f6730;background:linear-gradient(#5b3b20,#1c160e 76%)}
.ultv-door-style-royal-afro-gate .ultv-door-frame {border-radius:62px 62px 8px 8px;border-color:#d0a04e;background:linear-gradient(135deg,#1b110a,#6b3b18 45%,#0b0a08 55%,#80511e)}

/* SCI-FI AIRLOCK: split panels slide horizontally rather than swing. */
.ultv-door-style-sci-fi-airlock .ultv-door-frame {border-radius:12px;border-color:#8caeb8;background:linear-gradient(90deg,#0b181d,#24424b,#0b181d);box-shadow:inset 0 0 0 3px #071015,inset 0 0 28px #000,0 0 22px rgba(61,221,255,.2)}
.ultv-door-style-sci-fi-airlock .ultv-door-leaf {border-radius:4px;border-color:#82d5e4;transition:transform .72s cubic-bezier(.12,.78,.2,1),filter .3s ease;}
.ultv-door-style-sci-fi-airlock .ultv-door.is-opening .ultv-door-leaf-primary,
.ultv-door-style-sci-fi-airlock .ultv-door.is-open .ultv-door-leaf-primary {transform:translateX(-112%);}
.ultv-door-style-sci-fi-airlock .ultv-door.is-opening .ultv-door-leaf-secondary,
.ultv-door-style-sci-fi-airlock .ultv-door.is-open .ultv-door-leaf-secondary {transform:translateX(112%);}

/* ICE GATE */
.ultv-door-style-ice-gate .ultv-door-frame {border-radius:68px 68px 9px 9px;border-color:#a7e7f4;background:linear-gradient(135deg,rgba(207,247,255,.68),rgba(61,143,177,.28) 48%,rgba(230,250,255,.75));box-shadow:inset 0 0 28px rgba(217,250,255,.42),0 0 24px rgba(104,213,255,.24)}
.ultv-door-style-ice-gate .ultv-door-leaf {border-color:#d6f8ff;clip-path:polygon(8% 0,91% 0,100% 11%,96% 24%,100% 39%,96% 55%,100% 70%,95% 86%,86% 100%,11% 100%,0 88%,4% 71%,0 54%,4% 38%,0 20%);background-blend-mode:screen;filter:saturate(.7) brightness(1.05)}
.ultv-door-style-ice-gate .ultv-door.is-opening .ultv-door-leaf,
.ultv-door-style-ice-gate .ultv-door.is-open .ultv-door-leaf {transform:translateY(-115%) scale(.92) rotate(-2deg);opacity:.48;}

/* PHARAOH / SUN-STONE SLAB */
.ultv-door-style-pharaoh-gate .ultv-door-frame {border-radius:10px 10px 4px 4px;border-color:#c49c53;background:repeating-linear-gradient(0deg,#665236 0 28px,#4a3b29 28px 31px);}
.ultv-door-style-pharaoh-gate .ultv-door-leaf {border-radius:4px;border-color:#d5b268;transform-origin:50% 0;}
.ultv-door-style-pharaoh-gate .ultv-door-leaf::after {border-radius:50%;width:76px;height:76px;transform:translate(-50%,-50%);background:radial-gradient(circle,#d4aa53 0 28%,#60451e 29% 36%,transparent 37%);}
.ultv-door-style-pharaoh-gate .ultv-door.is-opening .ultv-door-leaf,
.ultv-door-style-pharaoh-gate .ultv-door.is-open .ultv-door-leaf {transform:translateY(-108%);}
.ultv-door-style-sun-stone .ultv-door-frame {border-radius:22px;border-color:#b98b48;background:linear-gradient(#665036,#23170d 76%)}

/* MINE / OUTBACK / ALPINE TIMBER */
.ultv-door-style-mine-vault .ultv-door-frame,
.ultv-door-style-outback-ironwood .ultv-door-frame,
.ultv-door-style-alpine-iron .ultv-door-frame {border-radius:18px 18px 7px 7px;border-color:#67523a;background:repeating-linear-gradient(90deg,#34251a 0 27px,#18120e 27px 31px);box-shadow:inset 0 0 0 4px #0f0c09,inset 0 0 25px #000,0 12px 22px rgba(0,0,0,.46)}
.ultv-door-style-mine-vault .ultv-door-leaf,
.ultv-door-style-outback-ironwood .ultv-door-leaf,
.ultv-door-style-alpine-iron .ultv-door-leaf {border-radius:9px;border-color:#83633d;box-shadow:inset 0 0 0 5px rgba(20,10,4,.45),inset 0 0 28px #000}
.ultv-door-style-alpine-iron .ultv-door-frame {border-color:#8b9498;background:repeating-linear-gradient(90deg,#2d2d2e 0 18px,#5c5e60 18px 21px,#291f18 21px 40px)}

/* SHIP / REEF HATCH */
.ultv-door-style-ship-hatch .ultv-door-frame,
.ultv-door-style-reef-gate .ultv-door-frame {inset:45px 10px 74px;border-radius:50%;border:7px solid #80683e;background:radial-gradient(circle,#283f43 0 55%,#0f1f22 56% 70%,#80683e 71% 74%,#101b1d 75%)}
.ultv-door-style-ship-hatch .ultv-door-leaf,
.ultv-door-style-reef-gate .ultv-door-leaf {inset:11px;border-radius:50%;border-color:#b79c65;transform-origin:50% 50%;}
.ultv-door-style-ship-hatch .ultv-door.is-opening .ultv-door-leaf,
.ultv-door-style-ship-hatch .ultv-door.is-open .ultv-door-leaf,
.ultv-door-style-reef-gate .ultv-door.is-opening .ultv-door-leaf,
.ultv-door-style-reef-gate .ultv-door.is-open .ultv-door-leaf {transform:rotateZ(34deg) translateX(-105%);}

/* CELESTIAL / GEO / CHAOS specialty */
.ultv-door-style-celestial-gate .ultv-door-frame {inset:30px 6px 65px;border-radius:50%;border-color:#b9a7e5;background:radial-gradient(circle,#14102c 0 52%,#4a3a7b 53% 58%,#0d1026 59% 70%,#927ed0 71% 74%,#0b0d1a 75%);box-shadow:0 0 28px rgba(153,115,255,.28),inset 0 0 30px #000}
.ultv-door-style-celestial-gate .ultv-door-leaf {inset:12px;border-radius:50%;transform-origin:50% 50%;border-color:#bdaaff}
.ultv-door-style-celestial-gate .ultv-door.is-opening .ultv-door-leaf,.ultv-door-style-celestial-gate .ultv-door.is-open .ultv-door-leaf {transform:scale(.08) rotateZ(160deg);opacity:0}
.ultv-door-style-geo-stone .ultv-door-frame {clip-path:polygon(18% 0,82% 0,100% 18%,100% 82%,82% 100%,18% 100%,0 82%,0 18%);border-radius:0;border-color:#7c8d78;background:linear-gradient(135deg,#243022,#556a50 48%,#1a2319 52%,#68785d)}
.ultv-door-style-geo-stone .ultv-door-leaf {clip-path:polygon(15% 0,85% 0,100% 15%,100% 85%,85% 100%,15% 100%,0 85%,0 15%);border-radius:0}
.ultv-door-style-chaos-gate .ultv-door-frame {transform:skewY(-2deg);border-radius:12px 70px 12px 52px;border-color:#b14747;background:linear-gradient(135deg,#24070e,#6f1d23 44%,#10131f 45% 58%,#69286d 59%,#190711)}
.ultv-door-style-chaos-gate .ultv-door-leaf {border-radius:7px 55px 7px 40px;transform-origin:8% 48%}

/* New coded trap projectile families. */
.ultv-projectile-harpoons {width:188px;height:8px;background:linear-gradient(90deg,#26170d,#78502b 67%,#b9c1c1 68%);}
.ultv-projectile-harpoons::after {border-left-width:28px;border-top-width:11px;border-bottom-width:11px;right:-25px;}
.ultv-projectile-lasers {width:150px;height:3px;background:#ff3950;box-shadow:0 0 6px #ff3150,0 0 16px rgba(255,40,80,.8);animation-name:ultv-laser-shot;}
.ultv-projectile-lasers::before,.ultv-projectile-lasers::after {display:none;}
.ultv-projectile-electric {width:118px;height:4px;background:linear-gradient(90deg,#b7f7ff,#4bd9ff,#fff);box-shadow:0 0 7px #74e8ff,0 0 17px rgba(61,217,255,.7);clip-path:polygon(0 38%,25% 0,36% 57%,58% 17%,70% 63%,100% 28%,100% 72%,73% 100%,60% 54%,39% 94%,27% 42%,0 64%);animation-name:ultv-electric-shot;}
.ultv-projectile-electric::before,.ultv-projectile-electric::after {display:none;}
.ultv-projectile-ice {width:30px;height:72px;left:50%;background:linear-gradient(135deg,#ecfdff,#8fdcf2 46%,#327da0);clip-path:polygon(50% 0,100% 74%,62% 100%,35% 75%,0 100%,20% 55%);animation-name:ultv-ice-fall;box-shadow:0 0 10px rgba(170,235,255,.5);}
.ultv-projectile-ice::before,.ultv-projectile-ice::after {display:none;}
.ultv-projectile-rocks {width:34px;height:30px;left:50%;border-radius:48% 42% 55% 38%;background:linear-gradient(135deg,#8b7860,#3b3128 60%,#17130f);animation-name:ultv-rock-fall;box-shadow:0 4px 7px rgba(0,0,0,.55);}
.ultv-projectile-rocks::before,.ultv-projectile-rocks::after {display:none;}
.ultv-projectile-spikes {left:14%;top:auto!important;bottom:-34px;width:22px;height:118px;background:linear-gradient(90deg,#303233,#c4c4bf 48%,#363838);clip-path:polygon(50% 0,100% 100%,0 100%);animation-name:ultv-spike-rise;}
.ultv-projectile-spikes::before,.ultv-projectile-spikes::after {display:none;}
.ultv-projectile-fire {width:74px;height:105px;left:46%;background:radial-gradient(ellipse at 50% 88%,#fff2a6 0 12%,#ff9a22 13% 38%,#e83715 39% 62%,rgba(116,9,4,.08) 68%);clip-path:polygon(50% 0,66% 25%,82% 10%,76% 45%,100% 38%,82% 76%,60% 100%,39% 79%,15% 100%,24% 60%,0 50%,26% 35%,20% 14%,43% 29%);animation-name:ultv-fire-burst;filter:drop-shadow(0 0 10px rgba(255,105,24,.65));}
.ultv-projectile-fire::before,.ultv-projectile-fire::after {display:none;}

@keyframes ultv-laser-shot {0%{opacity:0;transform:translateX(-20px) rotate(var(--shot-rot)) scaleX(.15)}12%{opacity:1}32%{opacity:1;transform:translateX(45px) rotate(var(--shot-rot)) scaleX(.9)}72%{opacity:1;transform:translateX(190px) rotate(var(--shot-rot)) scaleX(1.35)}100%{opacity:0;transform:translateX(var(--shot-end,285px)) rotate(var(--shot-rot)) scaleX(.4)}}
@keyframes ultv-electric-shot {0%{opacity:0;transform:translateX(-20px) rotate(var(--shot-rot)) scaleX(.3)}15%{opacity:1}35%{transform:translateX(25px) rotate(calc(var(--shot-rot) + 7deg)) scaleX(.8)}65%{transform:translateX(95px) rotate(calc(var(--shot-rot) - 6deg)) scaleX(1.2)}100%{opacity:0;transform:translateX(160px) rotate(var(--shot-rot)) scaleX(.5)}}
@keyframes ultv-ice-fall {0%{opacity:0;transform:translate(calc((var(--shot-y) - 50%) * 1.2),-120px) rotate(var(--shot-rot))}18%{opacity:1}100%{opacity:0;transform:translate(calc((var(--shot-y) - 50%) * 1.2),180px) rotate(calc(var(--shot-rot) + 55deg))}}
@keyframes ultv-rock-fall {0%{opacity:0;transform:translate(calc((var(--shot-y) - 50%) * 1.5),-120px) rotate(0)}15%{opacity:1}100%{opacity:0;transform:translate(calc((var(--shot-y) - 50%) * 1.5),190px) rotate(240deg)}}
@keyframes ultv-spike-rise {0%{opacity:0;transform:translate(calc((var(--shot-y) - 50%) * 2.2),95px)}18%{opacity:1}65%{opacity:1;transform:translate(calc((var(--shot-y) - 50%) * 2.2),-64px)}100%{opacity:0;transform:translate(calc((var(--shot-y) - 50%) * 2.2),-42px)}}
@keyframes ultv-fire-burst {0%{opacity:0;transform:translateX(-30px) scale(.35) rotate(var(--shot-rot))}18%{opacity:1}62%{opacity:1;transform:translateX(70px) scale(1.15) rotate(var(--shot-rot))}100%{opacity:0;transform:translateX(120px) scale(.7) rotate(var(--shot-rot))}}


/* v5.1 trap motion tuning */
.ultv-projectile-darts{--shot-duration:1.05s;}
.ultv-projectile-harpoons{--shot-duration:1.18s;height:9px;filter:drop-shadow(0 0 5px rgba(210,245,255,.45));}
.ultv-projectile-lasers{--shot-duration:1.55s;}
.ultv-room-africacloseouts .ultv-projectile-rocks{width:54px;height:54px;border-radius:50%;animation-name:ultv-africa-boulder-roll;box-shadow:inset -10px -12px 16px rgba(0,0,0,.38),0 8px 12px rgba(0,0,0,.55);}
@keyframes ultv-africa-boulder-roll{0%{opacity:0;transform:translate(-160px,-105px) rotate(0deg) scale(.45)}12%{opacity:1}58%{opacity:1;transform:translate(-20px,40px) rotate(320deg) scale(.9)}100%{opacity:0;transform:translate(165px,185px) rotate(760deg) scale(1.22)}}
