.worldGrid{border:0;border-radius:2px;background-color:var(--felt2);background-image:radial-gradient(ellipse at 20% 8%,#fff7df22,transparent 65%),linear-gradient(155deg,var(--felt1),var(--felt2));box-shadow:0 12px 30px #30221624}
.worldGrid:before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background-image:url('assets/table-props/cozy-felt-neutral-v1.webp');background-repeat:repeat;background-size:360px 360px;opacity:.14}
:is(.stage,.tableThemeScene)[data-table-material="wood"] .worldGrid:before{background-image:url('assets/table-props/cozy-oak-grain-v1.webp');background-size:960px 640px;opacity:.28}
:is(.stage,.tableThemeScene)[data-table-material="linen"] .worldGrid:before{background-image:repeating-linear-gradient(90deg,#fff9ee99 0 1px,transparent 1px 4px),repeating-linear-gradient(0deg,#67584644 0 1px,transparent 1px 4px),url('assets/table-props/cozy-felt-neutral-v1.webp');background-size:auto,auto,360px 360px;opacity:.18}
.tableDecor{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none;user-select:none;-webkit-user-select:none;border-radius:2px}
.tableProp{position:absolute;aspect-ratio:1;transform:translate(-50%,-50%) rotate(var(--decor-angle,0deg));pointer-events:none}
.tableProp img{display:block;width:100%;height:100%;object-fit:contain;pointer-events:none;user-select:none;-webkit-user-select:none;-webkit-user-drag:none}
.tableRail{--rim-shade:#9d6833;position:absolute;display:block;pointer-events:none;background-color:var(--rim-shade);background-image:linear-gradient(#fff1c52b,#5a32161c),url('assets/table-props/cozy-oak-grain-v1.webp');background-blend-mode:normal,multiply;background-size:auto,640px 420px;box-shadow:inset 0 2px 2px #fff2ca80,inset 0 -2px 3px #3a211884}
:is(.stage,.tableThemeScene)[data-table-frame="walnut"] .tableRail{--rim-shade:#6e482f}
:is(.stage,.tableThemeScene)[data-table-frame="beech"] .tableRail{--rim-shade:#c39a67}
.tableRail-top,.tableRail-bottom{left:0;right:0;height:16px}
.tableRail-top{top:0}.tableRail-bottom{bottom:0}
.tableRail-left,.tableRail-right{top:16px;bottom:16px;width:16px}
.tableRail-left{left:0}.tableRail-right{right:0}
:is(.stage,.tableThemeScene)[data-table-frame="driftwood"] .tableRail{--rim-shade:#d0c8b8}
/* Preview coordinates are the same 1600x1200 board, uniformly scaled without observers or animation. */
.tableThemeScene{position:relative;isolation:isolate;width:100%;aspect-ratio:4/3;overflow:hidden;border-radius:3px;box-shadow:0 5px 14px #30221625}
.tableThemeScene>.worldGrid{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.tableThemeScene .tableRail-top,.tableThemeScene .tableRail-bottom{height:1.33334%}
.tableThemeScene .tableRail-left,.tableThemeScene .tableRail-right{width:1%;top:1.33334%;bottom:1.33334%}
.tableThemeScene .worldGrid:before{background-size:22.5% 30%}
.tableThemeScene[data-table-material="wood"] .worldGrid:before{background-size:60% 53.333%}
.tableThemeScene[data-table-material="linen"] .worldGrid:before{background-size:auto,auto,22.5% 30%}
.tableThemeSample{position:absolute;left:28%;top:26%;width:44%;aspect-ratio:4/3;box-shadow:0 2px 4px #30221630;pointer-events:none}
.tableThemeSample>img{display:block;width:100%;height:100%;object-fit:cover}

/* Pack artwork stays in world space and follows the existing camera. */
:is(.stage,.tableThemeScene)[data-table-material="bookshop"] .worldGrid:before{background-image:url('assets/themes/rainy-bookshop/v1/felt.webp');background-size:512px 512px;opacity:.38;mix-blend-mode:soft-light}
:is(.stage,.tableThemeScene)[data-table-material="bookshop"] .worldGrid{background-image:radial-gradient(ellipse at 14% 10%,#fff1bb32,transparent 64%),linear-gradient(150deg,var(--felt1),var(--felt2))}
.tableThemeScene[data-table-material="bookshop"] .worldGrid:before{background-size:32% 42.667%}
.themeMixer{display:grid;gap:8px;margin:12px 0}.themeMixer label{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:14px}.themeMixer input{width:55%;min-width:90px;accent-color:#8c6743}.themeMixer p{font-size:12px;margin:0;line-height:1.4}
.themeSoundDemo{position:relative;padding:14px 8px;color:#3c4a3d}.themeSoundDemo>div:last-child{display:flex;gap:8px;flex-wrap:wrap}.themeSoundDemo p{font-size:13px;line-height:1.45}.themeSoundDemo button{min-height:44px}.themeSoundDemo .delightBurst{pointer-events:none}
:root[data-experience-theme]:not([data-experience-theme=""]) #delightEffects .effect-spark i,.themeSoundDemo .effect-spark i{background:var(--theme-primary,#e4bc73)}
:root[data-experience-theme]:not([data-experience-theme=""]) #delightEffects .effect-spark i:nth-child(2n),.themeSoundDemo .effect-spark i:nth-child(2n){background:var(--theme-secondary,#a4c4a7)}

.sfDetailName{font-size:18px;line-height:1.25;color:var(--sfInk,#493361)}
.themeSoundDemo .sfChip{min-height:44px;padding:9px 12px;font-size:12px}
.themeSoundDemo .themeMixer input{min-height:44px}.themeSoundDemo input:focus-visible{outline:3px solid #90603a;outline-offset:3px}
.paidCheckoutArt .tableThemeScene{max-height:180px;max-width:260px;margin:auto}

/* Theme polish: static world-space materials; no extra nodes or per-frame work. */
:is(.stage[data-table-theme="rainy-bookshop"],.tableThemeScene[data-theme="rainy-bookshop"]) .worldGrid{background-image:radial-gradient(ellipse at 8% 4%,#f5dc9e24,transparent 65%),linear-gradient(155deg,var(--felt1),var(--felt2));box-shadow:inset 0 0 30px #20142524,0 12px 30px #30221624}
:is(.stage[data-table-theme="rainy-bookshop"],.tableThemeScene[data-theme="rainy-bookshop"]) .tableRail{--rim-shade:#493a27;box-shadow:inset 0 1px 1px #d4b67d,inset 0 -2px 3px #21142188}
:is(.stage[data-table-theme="seaside-morning"],.tableThemeScene[data-theme="seaside-morning"]) .worldGrid{background-image:linear-gradient(125deg,#dffaf51c,transparent 65%),linear-gradient(155deg,var(--felt1),var(--felt2));box-shadow:inset 0 0 30px #20142524,0 12px 30px #30221624}
:is(.stage[data-table-theme="seaside-morning"],.tableThemeScene[data-theme="seaside-morning"]) .tableRail{--rim-shade:#b9b6a3;box-shadow:inset 0 1px 1px #f5e9cc,inset 0 -2px 3px #21142188}
:is(.stage[data-table-theme="autumn-cabin"],.tableThemeScene[data-theme="autumn-cabin"]) .worldGrid{background-image:radial-gradient(ellipse at 5% 80%,#e79b3220,transparent 70%),linear-gradient(155deg,var(--felt1),var(--felt2));box-shadow:inset 0 0 30px #20142524,0 12px 30px #30221624}
:is(.stage[data-table-theme="autumn-cabin"],.tableThemeScene[data-theme="autumn-cabin"]) .tableRail{--rim-shade:#734527;box-shadow:inset 0 1px 1px #efb96a,inset 0 -2px 3px #21142188}
:is(.stage[data-table-theme="moonlit-observatory"],.tableThemeScene[data-theme="moonlit-observatory"]) .worldGrid{background-image:radial-gradient(ellipse at 95% 6%,#b4ceff27,transparent 60%),linear-gradient(155deg,var(--felt1),var(--felt2));box-shadow:inset 0 0 30px #20142524,0 12px 30px #30221624}
:is(.stage[data-table-theme="moonlit-observatory"],.tableThemeScene[data-theme="moonlit-observatory"]) .tableRail{--rim-shade:#343249;box-shadow:inset 0 1px 1px #c0a476,inset 0 -2px 3px #21142188}
:is(.stage[data-table-theme="artist-sunday"],.tableThemeScene[data-theme="artist-sunday"]) .worldGrid{background-image:radial-gradient(ellipse at 10% 5%,#fff8df33,transparent 75%),linear-gradient(155deg,var(--felt1),var(--felt2));box-shadow:inset 0 0 30px #20142524,0 12px 30px #30221624}
:is(.stage[data-table-theme="artist-sunday"],.tableThemeScene[data-theme="artist-sunday"]) .tableRail{--rim-shade:#c89c79;box-shadow:inset 0 1px 1px #f6d3be,inset 0 -2px 3px #21142188}
:is(.stage[data-table-theme="velvet-arcade"],.tableThemeScene[data-theme="velvet-arcade"]) .worldGrid{background-image:linear-gradient(135deg,#bc6bdd1a,transparent 60%,#64c4d91a),linear-gradient(155deg,var(--felt1),var(--felt2));box-shadow:inset 0 0 30px #20142524,0 12px 30px #30221624}
:is(.stage[data-table-theme="velvet-arcade"],.tableThemeScene[data-theme="velvet-arcade"]) .tableRail{--rim-shade:#3e2848;box-shadow:inset 0 1px 1px #b484c3,inset 0 -2px 3px #21142188}

:is(.stage[data-table-theme="seaside-morning"],.tableThemeScene[data-theme="seaside-morning"]) .worldGrid:before{opacity:.19}
:is(.stage[data-table-theme="moonlit-observatory"],.tableThemeScene[data-theme="moonlit-observatory"],.stage[data-table-theme="velvet-arcade"],.tableThemeScene[data-theme="velvet-arcade"]) .worldGrid:before{opacity:.22}
:is(.stage[data-table-theme="artist-sunday"],.tableThemeScene[data-theme="artist-sunday"]) .worldGrid:before{opacity:.11}
