/* Crop the decorative floor reflection, not the 360px logical game canvas.
 * All hit/movement coordinates and child transforms remain in their old files.
 * Dialogs are siblings outside this clipped viewport. */
.snap-cabinet-body {
    position:relative;width:360px;max-width:calc(100vw - 18px);flex-shrink:0;margin:0 auto;
    isolation:isolate;border-radius:10px;
}
/* Narrow physical side/base, contact shadow and bevel: no floor reflection,
 * perspective tilt, animated full-screen filter or input-catching surface. */
.snap-cabinet-body::before {
    content:'';position:absolute;inset:3px -4px -5px 3px;z-index:-1;
    border-radius:11px;pointer-events:none;
    background:linear-gradient(100deg,#1e586d,#101827 28%,#263449 85%,#541c5d 96%,#180e27);
    box-shadow:1px 3px 0 #03050c,3px 7px 9px #000c,-2px 0 5px #57d8ff18;
}
.snap-cabinet-body::after {
    content:'';position:absolute;inset:0;z-index:10;border-radius:10px;
    pointer-events:none;
    box-shadow:inset 1px 0 0 #b9efff66,inset -1px 0 0 #f294df66,
               inset 0 1px 0 #f0faff44,inset 0 -2px 1px #02050bcc;
}
#snapMachineViewport {
    position:relative;width:100%;height:393px;flex-shrink:0;
    overflow:hidden;margin:0 auto;border-radius:9px;
}
#snapMachineViewport > .game {
    position:absolute;left:0;top:0;width:360px;
    margin:0 !important;transform-origin:top left !important;transform:none !important;
}

/* Paint contrast only: quiet the bright cabinet and rail; separate pale ropes
 * from the metallic cutter with a small static dark edge. No extra animation. */
#snapMachineViewport .machine-bg {filter:brightness(.88) saturate(.86);}
#snapMachineViewport .snap-rail-track {
    filter:none;border-color:#70c1dc;
    background:linear-gradient(180deg,#ecfaff 0,#9fc7da 7%,#4d778e 19%,#243b51 36%,#162737 49%,#537e98 55%,#b7d9e7 73%,#effcff 79%,#7299b1 88%,#253e54 100%);
    box-shadow:inset 0 1px #fff9,inset 0 -1px #071321,0 0 0 1px #071322,0 2px 3px #020711cc,0 0 3px #5dd8ff55;
}
#snapMachineViewport .snap-rail-channel {
    background:linear-gradient(180deg,#080f1b,#172b3d);
    border-bottom-color:#acddec99;
    box-shadow:0 -6px 0 -2.5px #b5ecffb3,0 8px 0 -2.5px #85c6e3a6;
}
/* Tight cyan rim follows the sprite alpha, not its rectangular image box.
 * Static, small-radius paint only: no filter animation or controller changes. */
#snapMachineViewport .carriage {
    filter:brightness(1.14) contrast(1.1) drop-shadow(0 1px .7px #040817) drop-shadow(0 0 1px #70e5ff);
}
#snapMachineViewport .cutter-base,
#snapMachineViewport .blade {
    filter:brightness(1.22) contrast(1.16) drop-shadow(0 1px .7px #030614) drop-shadow(0 0 .8px #c0f4ff);
}
#snapMachineViewport .rope {filter:contrast(1.18) drop-shadow(0 0 .7px #080a13);}

.snap-mobile-cabinet {--snap-safe-bottom:env(safe-area-inset-bottom,0px);}
.snap-mobile-cabinet body:not(.admin-route-mode) {
    display:flow-root !important;width:100%;padding:0 !important;
    min-height:100svh;overflow-x:hidden;overflow-y:auto;
    background-image:radial-gradient(ellipse at 5% 75%,#17355333,transparent 54%),radial-gradient(ellipse at 95% 35%,#3d174b33,transparent 55%);
}
.snap-mobile-cabinet .user-bar {left:3px;right:3px;top:max(3px,env(safe-area-inset-top));}
.snap-mobile-cabinet .snap-cabinet-body {
    width:var(--snap-view-width);margin:var(--snap-view-top) auto 0;
}
.snap-mobile-cabinet #snapMachineViewport {
    width:100%;height:var(--snap-view-height);
    margin:0;
}
.snap-mobile-cabinet #snapMachineViewport > .game {
    transform:scale(var(--snap-cabinet-x),var(--snap-cabinet-y)) !important;
}
/* A rotated phone uses a centered, scrollable cabinet instead of squeezing it. */
@media(orientation:landscape) and (max-height:500px) {
    .snap-mobile body:not(.admin-route-mode) {display:flow-root !important;overflow-y:auto;}
    .snap-mobile .snap-cabinet-body {margin:64px auto 12px;}
}

/* The cabinet may fill a tall screen; only this new inner prize face undoes
 * its unequal Y scale. Existing outer swing/fall and rope transforms stay put. */
.game .snap-prize-face {
    position:relative;display:block;width:37px;height:60px;
    transform:scaleY(1);transform-origin:50% 0;pointer-events:none;
}
.snap-mobile-cabinet .game .snap-prize-face {transform:scaleY(var(--snap-prize-y,1));}
