/* Authored diorama finishes. Geometry, floor contact and identity colours stay
   in the original renderer; these details never participate in hit testing. */

:where(.bx:is(.t-wood, .t-oak, .t-mahogany, .t-ebony)) > .bx-top {
  background-image:
    linear-gradient(to top, transparent 0 1px, hsl(42 50% 85% / .28) 1px 2px, transparent 2px),
    repeating-linear-gradient(4deg, transparent 0 5px, hsl(24 42% 8% / .12) 5px 6px, transparent 6px 9px),
    linear-gradient(145deg, var(--tone-lit), var(--tone-top));
}

:where(.bx:is(.t-wood, .t-oak, .t-mahogany, .t-ebony)) > .bx-front {
  background-image:
    linear-gradient(to bottom, hsl(42 55% 82% / .24), transparent 2px),
    repeating-linear-gradient(92deg, transparent 0 8px, hsl(22 32% 7% / .1) 8px 9px),
    linear-gradient(var(--tone-side), var(--tone-foot));
}

:where(.bx:is(.t-brass, .t-gilt, .t-copper)) > .bx-top {
  background-image:
    linear-gradient(115deg, transparent 8%, hsl(45 80% 94% / .5) 28%, transparent 40% 70%, hsl(25 50% 10% / .22) 86%),
    linear-gradient(155deg, var(--tone-lit), var(--tone-top));
}

.detail-book > .bx-front {
  background-image:
    linear-gradient(to bottom, transparent 13%, hsl(43 59% 75% / .8) 14% 18%, transparent 19% 74%, hsl(43 59% 75% / .7) 75% 79%, transparent 80%),
    linear-gradient(90deg, hsl(20 24% 7% / .4), transparent 24% 75%, hsl(40 40% 92% / .18)),
    linear-gradient(var(--tone-side), var(--tone-top));
}

.detail-book > .bx-top,
.detail-pages > .bx-front {
  background-image:
    repeating-linear-gradient(to right, hsl(35 25% 49% / .32) 0 1px, transparent 1px 3px),
    linear-gradient(145deg, hsl(43 32% 83%), hsl(37 23% 64%));
}

.detail-cushion > .bx-top,
.detail-tuft > .bx-front {
  background-image:
    radial-gradient(ellipse at 28% 30%, hsl(44 36% 91% / .17), transparent 65%),
    linear-gradient(145deg, var(--tone-lit), var(--tone-top));
  box-shadow: inset 0 0 0 1px hsl(22 30% 5% / .7),
    inset 0 0 0 2px hsl(42 35% 87% / .18), inset 0 -3px 4px hsl(20 30% 7% / .25);
}

.detail-tuft > .bx-front {
  background-image:
    radial-gradient(circle at 25% 38%, hsl(22 30% 6% / .7) 0 1px, transparent 1.5px),
    radial-gradient(circle at 50% 38%, hsl(22 30% 6% / .7) 0 1px, transparent 1.5px),
    radial-gradient(circle at 75% 38%, hsl(22 30% 6% / .7) 0 1px, transparent 1.5px),
    linear-gradient(var(--tone-lit), var(--tone-side));
}

.detail-panel > .bx-front::after,
.detail-cabinet > .bx-front::after {
  content: '';
  position: absolute;
  inset: 12% 12%;
  border: 1px solid hsl(42 40% 76% / .3);
  border-radius: 1px;
  box-shadow: inset 1px 1px 2px hsl(18 30% 5% / .55), 1px 1px 1px hsl(20 20% 4% / .4);
}

.detail-cabinet > .bx-front::before {
  content: '';
  position: absolute;
  left: 70%;
  top: 40%;
  width: 9%;
  height: 23%;
  border-radius: 2px;
  background: linear-gradient(90deg, hsl(39 45% 31%), hsl(43 66% 76%), hsl(38 38% 28%));
  box-shadow: 1px 1px 1px hsl(22 25% 5% / .6);
}

.detail-tile > .bx-front {
  background-image:
    repeating-linear-gradient(90deg, transparent 0 11px, hsl(198 12% 35% / .35) 11px 12px),
    linear-gradient(transparent 45%, hsl(198 12% 35% / .35) 46% 51%, transparent 52%),
    linear-gradient(var(--tone-lit), var(--tone-side));
}

.detail-sink > .bx-top {
  background-image: radial-gradient(ellipse at 50% 48%,
    hsl(202 15% 17%) 0 30%, hsl(198 14% 30%) 42%, hsl(195 15% 66%) 58%,
    hsl(195 16% 85%) 64%, hsl(207 14% 38%) 73%, hsl(200 16% 71%) 79%);
}

.detail-oven > .bx-front {
  background-image: radial-gradient(ellipse, hsl(26 35% 28%) 0 18%, hsl(220 12% 10%) 38% 60%, hsl(204 9% 37%) 63% 79%, hsl(205 13% 15%) 84%);
  box-shadow: inset 0 0 0 1px hsl(197 10% 72% / .7);
}

.detail-burner > .bx-top {
  background-image: repeating-radial-gradient(ellipse, hsl(220 12% 7%) 0 2px, hsl(30 49% 38%) 2px 3px, hsl(220 12% 16%) 3px 4px);
  box-shadow: inset 0 0 0 1px hsl(28 54% 52% / .65);
}

.detail-plate > .bx-front {
  background-image: radial-gradient(ellipse, hsl(43 34% 91%) 0 41%, hsl(215 32% 47%) 44% 49%, hsl(41 25% 80%) 53% 65%, hsl(214 26% 43%) 68% 72%, hsl(42 31% 88%) 76%);
}

.detail-drawers > .bx-front {
  background-image:
    linear-gradient(90deg, transparent 36%, hsl(43 61% 66%) 37% 63%, transparent 64%),
    repeating-linear-gradient(to bottom, transparent 0 30%, hsl(20 25% 6% / .7) 31% 34%),
    linear-gradient(var(--tone-side), var(--tone-foot));
  background-size: 100% 2px, 100% 100%, 100% 100%;
  background-position: center 28%, center, center;
  background-repeat: no-repeat;
}

.detail-paper > .bx-top {
  background-image:
    repeating-linear-gradient(to bottom, transparent 0 18%, hsl(210 17% 30% / .4) 19% 23%, transparent 24% 32%),
    linear-gradient(140deg, var(--tone-lit), var(--tone-top));
  background-size: 65% 70%, 100% 100%;
  background-position: center;
  background-repeat: no-repeat;
}

.detail-record > .bx-top {
  background-image: repeating-radial-gradient(ellipse, hsl(215 10% 7%) 0 2px, hsl(215 10% 33%) 2.5px 3px);
}

.detail-horn > .bx-top {
  background-image: radial-gradient(ellipse at 50% 48%,
    hsl(32 45% 8%) 0 23%, hsl(35 58% 24%) 29%, hsl(40 67% 47%) 46%,
    hsl(47 73% 80%) 59%, hsl(40 58% 43%) 67%, hsl(45 68% 69%) 75%);
}

.detail-lampshade > .bx-top {
  background-image: linear-gradient(135deg, hsl(145 27% 61%), hsl(150 35% 29%) 60%, hsl(160 33% 17%));
}

.detail-lampshade > .bx-front {
  background-image: linear-gradient(hsl(150 34% 28%), hsl(149 29% 17%) 65%, hsl(44 68% 74%) 90%);
}

.detail-porcelain > .bx-top {
  background-image: radial-gradient(ellipse, hsl(42 36% 88%) 0 45%, hsl(37 32% 63%) 48% 53%, hsl(44 46% 94%) 58%);
}

/* Keep the original PAWN_FOOT bounds: x 31..69, y 68..83. */
.pawn-base {
  background-image: radial-gradient(ellipse at 40% 35%, hsl(43 34% 56%), hsl(36 24% 25%) 66%, hsl(28 27% 12%) 70%);
  box-shadow: inset 0 0 0 1px hsl(41 42% 69% / .7), 0 1px 1px hsl(22 25% 4% / .8);
}

.pawn-body {
  width: 66%;
  height: 56%;
  animation: none;
}

.pawn-body > span {
  position: absolute;
  left: 50%;
  translate: -50% 0;
  box-sizing: border-box;
}

.pawn-leg {
  bottom: 1%;
  width: 17%;
  height: 29%;
  border-radius: 15% 15% 16% 16%;
  background: linear-gradient(90deg, hsl(218 11% 13%), hsl(218 9% 29%) 40%, hsl(218 11% 12%));
  box-shadow: inset 0 0 0 1px hsl(24 24% 4% / .8);
}

.pawn-body > .pawn-leg-left { left: 38%; transform: rotate(3deg); }
.pawn-body > .pawn-leg-right { left: 62%; transform: rotate(-3deg); }

.pawn-leg::after {
  content: '';
  position: absolute;
  left: -12%;
  right: -25%;
  bottom: -2%;
  height: 26%;
  border-radius: 40% 35% 22% 16%;
  background: linear-gradient(hsl(30 11% 32%), hsl(25 18% 8%));
  box-shadow: inset 0 -1px hsl(36 18% 53% / .7);
}

.pawn-arm {
  bottom: 26%;
  width: 16%;
  height: 41%;
  border-radius: 45% 45% 24% 24%;
  background: linear-gradient(100deg, var(--coat-lit), var(--coat));
  box-shadow: inset 0 0 0 1px hsl(24 24% 4% / .75), inset 2px 0 hsl(40 40% 92% / .16);
  transform-origin: 50% 10%;
}

.pawn-body > .pawn-arm-left { left: 24%; transform: rotate(12deg); }
.pawn-body > .pawn-arm-right { left: 76%; transform: rotate(-14deg); }

.pawn-arm::after {
  content: '';
  position: absolute;
  left: 12%;
  right: 12%;
  bottom: -8%;
  height: 22%;
  border-radius: 40%;
  background: linear-gradient(90deg, var(--pawn-skin), var(--pawn-skin-shade));
  box-shadow: inset 0 0 0 .6px hsl(24 24% 4% / .6);
}

.pawn-coat {
  bottom: 23%;
  width: 62%;
  height: 49%;
  border-radius: 26% 26% 10% 10% / 20% 20% 8% 8%;
  background-image:
    linear-gradient(90deg, transparent 47%, hsl(24 25% 7% / .55) 48% 51%, transparent 52%),
    linear-gradient(105deg, var(--coat-lit), var(--coat) 68%);
  box-shadow: inset 0 0 0 1px hsl(24 24% 4% / .9), inset 2px 0 1px hsl(42 44% 84% / .32), inset -2px -1px 2px hsl(20 22% 5% / .3);
}

.pawn-coat > svg {
  position: relative;
  align-self: end;
  width: 57%;
  height: auto;
  margin-bottom: 12%;
  padding: 1px;
  box-sizing: border-box;
  overflow: visible;
  color: hsl(43 50% 92%);
  background: hsl(216 18% 12%);
  border: .7px solid hsl(43 45% 70%);
  border-radius: 30%;
}

.pawn-collar {
  bottom: 67%;
  width: 26%;
  height: 12%;
  border-radius: 15%;
  background: linear-gradient(100deg, hsl(41 30% 88%), hsl(34 19% 61%));
  box-shadow: inset 0 0 0 .7px hsl(24 24% 4% / .5);
}

.pawn-lapel {
  bottom: 51%;
  width: 19%;
  height: 22%;
  background: linear-gradient(120deg, hsl(42 34% 76%), hsl(33 20% 46%));
}

.pawn-body > .pawn-lapel-left {
  left: 39%;
  clip-path: polygon(7% 0, 100% 19%, 89% 100%, 0 40%, 29% 30%);
}

.pawn-body > .pawn-lapel-right {
  left: 61%;
  clip-path: polygon(93% 0, 0 19%, 11% 100%, 100% 40%, 71% 30%);
}

.pawn-head {
  bottom: 73%;
  width: 31%;
  height: 25%;
  aspect-ratio: auto;
  border-radius: 32% 35% 43% 43%;
  background-image:
    radial-gradient(ellipse at 35% 46%, hsl(24 28% 9%) 0 5%, transparent 6%),
    radial-gradient(ellipse at 68% 46%, hsl(24 28% 9%) 0 5%, transparent 6%),
    radial-gradient(ellipse at 49% 79%, hsl(17 30% 31% / .7) 0 10%, transparent 11%),
    linear-gradient(108deg, var(--pawn-skin), var(--pawn-skin-shade));
  box-shadow: inset 1px 0 hsl(41 36% 88% / .75), inset -1px -1px 1px hsl(24 24% 4% / .6);
}

.pawn-head::before {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 30%;
  border-radius: 30% 30% 20% 0;
  background: hsl(24 24% 15%);
}

.pawn-hat {
  bottom: 91%;
  width: 37%;
  height: 15%;
  border-radius: 28% 28% 8% 8%;
  background: linear-gradient(105deg, hsl(39 24% 53%), hsl(31 21% 26%) 80%);
  box-shadow: inset 0 0 0 .8px hsl(24 24% 4% / .8), inset 2px 0 hsl(43 43% 86% / .27);
}

.pawn-hat::before {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 10%;
  height: 24%;
  background: var(--coat);
}

.pawn-hat::after {
  content: '';
  position: absolute;
  left: -25%;
  right: -25%;
  bottom: -8%;
  height: 27%;
  border-radius: 50% 40% 25% 30%;
  background: linear-gradient(hsl(40 30% 64%), hsl(32 22% 30%));
  box-shadow: 0 1px 1px hsl(24 24% 4% / .65);
  transform: rotate(-5deg);
}

@media (forced-colors: active) {
  .pawn-coat > svg { color: CanvasText; background: Canvas; border-color: CanvasText; }
}

/* Local surface atlas: every image is mapped onto an existing real face.
   Four columns/rows; no downloaded scenery and no replacement board bitmap. */
.furn .bx { --ring-w: .75px; --ring-c: hsl(24 35% 9% / .82); }
.furn .bx-top { box-shadow: var(--ring, inset 0 0 0 var(--ring-w) var(--ring-c)), inset 0 1px hsl(44 65% 88% / .22); }
.furn :is(.t-wood,.t-oak,.t-mahogany,.t-ebony) > :is(.bx-top,.bx-front) {
  background-image: url('../assets/world/mansion-materials.webp');
  background-size: 400% 400%;
  background-position: 0 0;
  background-repeat: no-repeat;
  background-color: #d8b98c;
  background-blend-mode: multiply;
}
.furn :is(.t-wood,.t-oak,.t-mahogany,.t-ebony) > .bx-front { background-color: #a3917d; }
.furn .t-mahogany > .bx-top { background-color: #c09b87; }
.furn .t-mahogany > .bx-front { background-color: #96725f; }
.furn .t-ebony > .bx-top { background-color: #7f7667; }
.furn .t-ebony > .bx-front { background-color: #615546; }
.furn :is(.t-brass,.t-gilt) > :is(.bx-top,.bx-front) {
  background-image: url('../assets/world/mansion-materials.webp');
  background-size: 400% 400%; background-position: 0 100%;
  background-color: #f5e2b2; background-blend-mode: multiply;
}
.furn :is(.t-brass,.t-gilt) > .bx-front { background-color: #c4ac77; }
.furn .t-marble > :is(.bx-top,.bx-front) {
  background-image: url('../assets/world/mansion-materials.webp');
  background-size: 400% 400%; background-position: 33.333333% 100%;
}
.furn .t-marble > .bx-front { background-color: #b7ada0; background-blend-mode: multiply; }
.furn :is(.detail-panel,.detail-cabinet) > .bx-front {
  background-image: url('../assets/world/mansion-materials.webp');
  background-size: 400% 400%; background-position: 33.333333% 0;
  background-color: #eee0ca; background-blend-mode: multiply;
}
.furn :is(.detail-panel,.detail-cabinet) > .bx-front::before,
.furn :is(.detail-panel,.detail-cabinet) > .bx-front::after { content: none; }
.furn .detail-drawers > .bx-front {
  background-image: url('../assets/world/mansion-materials.webp');
  background-size: 400% 400%; background-position: 66.666667% 0;
  background-color: #e0caaa; background-blend-mode: multiply;
}
.furn :is(.detail-cushion,.detail-tuft) > :is(.bx-top,.bx-front) {
  background-image: url('../assets/world/mansion-materials.webp');
  background-size: 400% 400%; background-position: 100% 0;
  background-color: #e0c9bd; background-blend-mode: multiply;
}
.furn-sofa :is(.detail-cushion,.detail-tuft) > :is(.bx-top,.bx-front) { background-color: #b0a6ce; }
.furn .detail-cushion > .bx-top {
  background-image: radial-gradient(ellipse at 37% 26%,hsl(33 44% 75% / .25),transparent 70%),linear-gradient(135deg,var(--tone-lit),var(--tone-side));
  background-size: auto; background-blend-mode: normal;
  box-shadow: inset 0 0 0 .8px #452c29,inset 0 0 0 2px hsl(38 37% 75% / .28),inset 0 -3px 5px #271c29;
}
.furn .detail-cushion > .bx-front { background-image: linear-gradient(var(--tone-top),var(--tone-side)); background-size:auto; }
.furn .detail-map > .bx-front,
.furn .detail-globe > :is(.bx-top,.bx-front) {
  background-image: url('../assets/world/mansion-materials.webp');
  background-size: 400% 400%; background-position: 0 33.333333%;
}
.furn .detail-openbook > .bx-top,
.furn .detail-paper > .bx-top {
  background-image: url('../assets/world/mansion-materials.webp');
  background-size: 400% 400%; background-position: 100% 100%;
}
.furn .detail-globe > .bx-top {
  border-radius: 50%; box-shadow: inset -4px -3px 7px #342610, inset 2px 2px 3px #ead395;
}
.furn .detail-globe > .bx-front { border-radius: 0 0 50% 50%; box-shadow: inset -4px -2px 6px #332715; }
.furn-clock .t-ivory > .bx-front { background: url('../assets/world/clock-dial.svg') center / 100% 100% no-repeat; }
.furn :is(.detail-lampshade) > .bx-front { box-shadow: 0 3px 7px hsl(44 100% 75% / .45),inset 0 -2px 2px #eed89b; }
.furn .detail-plate > .bx-front { box-shadow: inset 0 0 0 .5px #e7d7b6,inset 1px 1px 2px #fff3d1; }
.furn :is(.detail-foliage) > :is(.bx-top,.bx-front) {
  background: url('../assets/world/fern-foliage.webp') center / 100% 100% no-repeat;
  box-shadow: none; border-radius: 0;
  filter: drop-shadow(1px 2px 1px hsl(154 40% 5% / .45));
}
.furn .detail-foliage > .bx-top { filter: drop-shadow(1px 2px 1px hsl(154 40% 5% / .3)); }
.furn .detail-book > .bx-front {
  box-shadow: inset 1px 0 hsl(45 60% 84% / .34), inset -1px 0 hsl(22 30% 5% / .7);
}
.furn .detail-book > .bx-front::after {
  content: ''; position: absolute; left: 24%; right: 21%; top: 31%; height: 14%;
  border-block: .6px solid hsl(42 54% 79% / .85);
}
.furn .detail-window > .bx-front {
  background:
    linear-gradient(90deg, transparent 47%, #987e51 47% 50%, #ead8aa 50% 52%, transparent 52%),
    linear-gradient(transparent 46%, #ad9263 46% 50%, transparent 50%),
    linear-gradient(135deg, #f6eed7, #c4e1e0 35%, #77a8af 78%, #487482);
  box-shadow: inset 0 0 0 2px #b99a67, inset 3px 3px 6px #354b4b;
}
.furn .t-terracotta > .bx-front {
  background-image: linear-gradient(90deg,#58351f,#b77340 22%,#d49c5e 43%,#8c552e 76%,#422d20);
  box-shadow: inset 0 2px 1px #e7bc7e, inset 0 -2px 1px #4c311f;
}
.furn .t-copper > .bx-top {
  background: radial-gradient(ellipse at 32% 27%,#ffdd9e,#ce793d 36%,#8b4525 67%,#4e2e22 80%,#d59c5b 94%);
}
.furn .t-fire > .bx-top,
.furn .t-fire > .bx-front {
  background: radial-gradient(ellipse at 48% 28%,#fffce4 0 18%,#ffe8a8 26%,#ffb548 54%,#d97024 83%);
  box-shadow: 0 0 5px #ffd791, 0 0 13px hsl(37 100% 70% / .65), 0 0 24px hsl(35 100% 70% / .26);
}
.furn-ground :is(.t-cloth,.t-cloth-blau,.t-cloth-gruen,.t-cloth-ocker) > .bx-top {
  background-image: url('../assets/world/mansion-materials.webp');
  background-size: 400% 400%; background-position: 66.666667% 33.333333%;
  background-color: #e8d8c1; background-blend-mode: multiply;
}
.furn-ground .t-cloth-gruen > .bx-top { background-position: 100% 33.333333%; }
.furn-ground .t-cloth-blau > .bx-top { background-color: #bdc7f2; }
.furn-ground .t-cloth-ocker > .bx-top { background-color: #f1d7a6; }

/* A shadow is measured from the actual grounded prisms in furnishings.js.
   The tight core fixes floor contact; the second lobe always falls down-right,
   matching the shared upper-left house light in every wall pose. */
.furn > .furn-shade {
  inset:auto;
  transform:translateZ(.2px);
  border-radius:46%;
  background:radial-gradient(ellipse at 43% 43%,hsl(20 28% 3% / .66) 0 25%,hsl(20 24% 3% / .38) 43%,transparent 70%);
  filter:blur(.45px);
  opacity:.92;
}
.furn > .furn-shade::after {
  content:'';position:absolute;inset:18% -20% -16% 24%;pointer-events:none;
  transform:translate(9%,13%) skewX(-15deg);
  border-radius:48%;
  background:radial-gradient(ellipse at 38% 38%,hsl(28 24% 3% / .28),transparent 72%);
  filter:blur(2px);
}

/* The selected hero families close their real prisms on both ends. Perspective
   exposes one of these planes away from the optical centre even though an
   orthographic top/front sketch would hide it. */
.furn .bx-side {
  position:absolute;top:0;height:100%;width:calc(var(--h) * var(--zu));
  backface-visibility:hidden;border-radius:1px;
  box-shadow:inset 0 0 0 var(--ring-w) var(--ring-c),inset 0 1px hsl(42 55% 85% / .12);
  background-repeat:no-repeat;
}
.furn .bx-side-l {
  left:0;transform-origin:left top;transform:rotateY(-90deg);
  background-image:repeating-linear-gradient(to right,transparent 0 7px,hsl(26 28% 8% / .14) 8px 9px),linear-gradient(to right,var(--tone-foot),var(--tone-side));
}
.furn .bx-side-r {
  right:0;transform-origin:right top;transform:rotateY(90deg);
  background-image:repeating-linear-gradient(to left,transparent 0 7px,hsl(26 28% 8% / .14) 8px 9px),linear-gradient(to right,var(--tone-side),var(--tone-foot));
}

/* Floor image opacity preserves the real cell's state colours underneath.
   Texture never crosses a generated room or receives any input. */
.world-floor {
  position: absolute; inset: 0; pointer-events: none;
  transform: translateZ(.08px) rotate(var(--floor-turn,0deg));
  --floor-x:100%;--floor-y:66.666667%;
  background-image:repeating-linear-gradient(103deg,hsl(42 35% 91% / .05) 0 1px,transparent 1px 6px),url('../assets/world/mansion-materials.webp');
  background-size:6px 6px,400% 400%;
  background-position:0 0,var(--floor-x) var(--floor-y);
  background-repeat:repeat,no-repeat;
  background-blend-mode:soft-light,normal;
  opacity:.62;
}
.world-floor-arbeit,.world-floor-bibliothek { --floor-x:0;--floor-y:0;opacity:.64; }
.world-floor-salon { --floor-x:0;--floor-y:0;opacity:.61; }
.world-floor-musik { --floor-x:66.666667%;--floor-y:33.333333%;opacity:.55; }
.world-floor-wintergarten { --floor-x:66.666667%;--floor-y:66.666667%;opacity:.84; }
.world-floor-kueche { --floor-x:33.333333%;--floor-y:66.666667%;opacity:.86; }
.world-floor-ballsaal { --floor-x:0;--floor-y:0;opacity:.58; }
.world-floor-waffen { --floor-x:33.333333%;--floor-y:66.666667%;opacity:.64; }
.world-floor-veranda { --floor-x:0;--floor-y:0;opacity:.55; }
.world-floor-werkstatt { --floor-x:100%;--floor-y:66.666667%;opacity:.56; }
.world-floor-billard { --floor-x:100%;--floor-y:33.333333%;opacity:.54; }
.cell:is(.cell-person,.cell-victim,.cell-target,.cell-blocked,.cell-searched,.cell-trace) > .world-floor { opacity: .24; }
.cell:focus-visible > .world-floor { opacity: .29; }

/* Daylight is restricted to the clipped same-room cells in world-light.js.
   The source edge chooses its direction; near shadows are crisper than distant. */
.world-light-layer { transform: translateZ(.18px); pointer-events: none; }
.world-light { position: absolute; inset: 0; pointer-events: none; opacity: var(--light-opacity,.2); }
.world-light-daylight {
  /* Each cell clips a translated view of one room-wide beam. The gradient and
     sash therefore cross cell seams once instead of restarting in every tile. */
  inset:auto;mix-blend-mode:screen;
}
.world-light-daylight:is(.from-l,.from-r) {
  top:-10%;bottom:-10%;width:calc(var(--light-span,1) * 100%);
  clip-path:polygon(0 5%,0 80%,100% 100%,100% 49%);
  background:
    repeating-linear-gradient(106deg,transparent 0 15%,hsl(185 16% 15% / .35) 16% 17.5%,transparent 18.5% 33%),
    linear-gradient(90deg,#fff2bce8 0,#ffefb5ad 32%,#d9eee379 67%,transparent 100%);
  box-shadow:inset 0 0 18px hsl(48 90% 83% / .24);
}
.world-light-daylight.from-l {left:calc(var(--light-distance) * -100%);}
.world-light-daylight.from-r {right:calc(var(--light-distance) * -100%);transform:scaleX(-1);}
.world-light-daylight:is(.from-t,.from-b) {
  left:-10%;right:-10%;height:calc(var(--light-span,1) * 100%);
  clip-path:polygon(5% 0,80% 0,100% 100%,49% 100%);
  background:
    repeating-linear-gradient(16deg,transparent 0 15%,hsl(185 16% 15% / .35) 16% 17.5%,transparent 18.5% 33%),
    linear-gradient(180deg,#fff2bce8 0,#ffefb5ad 32%,#d9eee379 67%,transparent 100%);
  box-shadow:inset 0 0 18px hsl(48 90% 83% / .24);
}
.world-light-daylight.from-t {top:calc(var(--light-distance) * -100%);}
.world-light-daylight.from-b {bottom:calc(var(--light-distance) * -100%);transform:scaleY(-1);}
.world-light-daylight::before {
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(168deg,transparent 0 46%,hsl(185 18% 12% / .42) 47% 50%,transparent 51%);
  mix-blend-mode:multiply;filter:blur(.75px);
}
.world-light-warm { background: radial-gradient(ellipse at 50% 16%,#ffd68a,transparent 73%); }
.world-light-warm.from-l { transform: rotate(-90deg); }
.world-light-warm.from-r { transform: rotate(90deg); }
.world-light-warm.from-b { transform: rotate(180deg); }
.cell:is(.cell-target,.cell-blocked,.cell-victim) .world-light-layer { opacity: .45; }
.world-light-daylight.has-foliage::after {
  content: ''; position: absolute; inset: 12% 10% 3% 16%;
  background: #183a2a; opacity: .2;
  mask: url('../assets/world/fern-crown.svg') center / 100% 100% no-repeat;
  transform: skew(-28deg) scaleY(.8); filter: blur(1px);
}

/* Walls share plaster, chair rail and timber panelling on their real planes.
   Horizontal and side planes use different gradient axes so panelling never
   turns sideways after the wall is folded upright. */
.cell .wl:not(.wl-door) {
  --wall-art: 0;
  background:
    repeating-linear-gradient(90deg,transparent 0 46%,hsl(30 30% 18% / .34) 47% 48%,hsl(42 38% 76% / .18) 49%,transparent 50%),
    linear-gradient(to bottom,#d9c8aa 0 43%,#e9d8b9 44% 46%,#7b5634 47% 51%,#49301f 52% 93%,#b89768 94% 97%,#53402f 98%);
  box-shadow:inset 0 3px 0 #8e6c45,inset 0 5px 1px #e5ca9e,inset 0 -3px 0 #39271b;
  border-top-color:#e8d4ad;
}
.cell :is(.wl-l,.wl-r):not(.wl-door) {
  background:
    repeating-linear-gradient(0deg,transparent 0 46%,hsl(30 30% 16% / .36) 47% 48%,hsl(42 38% 76% / .16) 49%,transparent 50%),
    linear-gradient(to right,#b7aa92 0 43%,#d8c6a4 44% 46%,#68482e 47% 51%,#3f2b1e 52% 93%,#97764f 94% 97%,#45372b 98%);
}
.cell > .wl-t.wl-ext:not(.wl-door) {
  background-image:linear-gradient(90deg,hsl(24 34% 10% / .27),transparent 14% 84%,hsl(24 34% 9% / .38)),url('../assets/world/wall-gallery.webp');
  background-size:100% 100%,200% 200%;
  background-position:center,100% 0;
  background-blend-mode:multiply,normal;
  box-shadow:inset 0 3px 0 #79542e,inset 0 5px 1px #ead4ab,0 0 14px hsl(39 52% 28% / .22);
}
/* One framed segment is allowed only where the actual exterior wall is free.
   Furniture, windows and doors therefore remove art structurally, not by z-index. */
.cell.room-bibliothek:not(:has(> .furn-dress,> .furn:not(.furn-room-floor))) > .wl-t.wl-ext:not(.wl-door),
.cell.room-arbeit:not(:has(> .furn-dress,> .furn:not(.furn-room-floor))) > .wl-t.wl-ext:not(.wl-door) {
  --wall-art:1;background-position:center,0 100%;
}
.cell.room-wintergarten:not(:has(> .furn-dress,> .furn:not(.furn-room-floor))) > .wl-t.wl-ext:not(.wl-door) {
  --wall-art:1;background-position:center,100% 100%;
}
.cell:is(.room-salon,.room-ballsaal):not(:has(> .furn-dress,> .furn:not(.furn-room-floor))) > .wl-t.wl-ext:not(.wl-door) {
  --wall-art:1;background-position:center,0 0;
}

/* Rear construction is wood panelling, never a second set of false drawers. */
.furn:is(.furn-mapchest,.furn-cardindex,.furn-rack,.furn-console,.furn-panelling)[data-world-edge="b"] > :is(.detail-drawers,.detail-panel) > .bx-front,
.furn:is(.furn-tallshelf,.furn-rack)[data-world-edge="b"] > .bx:first-child > .bx-front {
  background-image:url('../assets/world/cabinet-rear-panel.webp');background-size:100% 100%;background-position:center;
  background-blend-mode:normal;
}

@media(max-width:600px) {
  .furn .bx { --ring-w: .65px; }
  .world-floor { opacity: .42; }
  .world-floor-kueche,.world-floor-wintergarten { opacity: .58; }
  .world-light-daylight { opacity: calc(var(--light-opacity) * .8); }
}
@media(forced-colors:active) {
  .world-floor,.world-light-layer { display: none; }
  .furn .bx > :is(.bx-top,.bx-front) { background-image: none; }
}

/* Functional surfaces for the new authored room equipment. These carry no
   case facts and remain part of their furniture's existing passive geometry. */
.furn .detail-chess > .bx-top {
  background: repeating-conic-gradient(#eee0ba 0 25%,#4b3929 0 50%) 0 0 / 25% 25%;
  box-shadow: inset 0 0 0 1px #5c3f25,inset 0 0 0 2px #c49b52;
}
.furn .detail-radio-speaker > .bx-front {
  background:
    repeating-linear-gradient(90deg,#d1aa65aa 0 1px,transparent 1px 3px),
    repeating-linear-gradient(0deg,#36291b 0 1px,#856845 1px 3px);
  border-radius: 35% 35% 3px 3px; box-shadow: inset 0 0 0 1px #b6914e,inset 0 0 5px #241c14;
}
.furn .detail-radio-dial > .bx-front {
  background: repeating-linear-gradient(90deg,transparent 0 9%,#6c4522 10% 12%,transparent 13% 20%),linear-gradient(#deb873,#fff1be);
  box-shadow: inset 0 0 0 1px #7d5c29;
}
.furn .detail-medical > .bx-front {
  background: linear-gradient(#567365,#567365) center / 58% 21% no-repeat,linear-gradient(#567365,#567365) center / 20% 59% no-repeat,linear-gradient(#eee7d6,#bdb8a7);
}
.furn .detail-medicine > .bx-front {
  background: linear-gradient(#ece8cf,#c3b994) center / 80% 38% no-repeat,linear-gradient(90deg,#183b31,#789c74 35%,#27483a 79%,#16281e);
  box-shadow: inset 1px 0 #b9d7bfaa;
}
.furn .detail-film-reel > .bx-front {
  background:
    radial-gradient(circle at 50% 24%,#22272a 0 13%,transparent 15%),
    radial-gradient(circle at 26% 53%,#22272a 0 13%,transparent 15%),
    radial-gradient(circle at 76% 53%,#22272a 0 13%,transparent 15%),
    radial-gradient(circle at 50% 79%,#22272a 0 13%,transparent 15%),
    radial-gradient(circle,#d7d5be 0 6%,#515c5d 8% 13%,#a6adaa 15% 62%,#434c4c 66% 75%,#b7bbb0 79%);
  border-radius: 50%; box-shadow: inset 0 0 0 1px #344345;
}
.furn .detail-film-tin > .bx-front {
  background: linear-gradient(#d2c6a0,#d2c6a0) center / 54% 22% no-repeat,repeating-linear-gradient(0deg,#6e7774 0 12%,#adb4aa 13% 15%,#475350 16% 19%);
  box-shadow: inset 0 0 0 1px #303c38;
}
.furn .detail-lens > .bx-front {
  background: radial-gradient(ellipse at 42% 38%,#b8dbcd,#385462 22%,#101a22 45%,#a1956c 50% 58%,#252c2c 64%);
  box-shadow: inset 0 0 0 1px #151b1d;
}
.furn .detail-screen > .bx-front {
  background: linear-gradient(#3a3025,#3a3025) center 3% / 100% 3% no-repeat,
    linear-gradient(#3a3025,#3a3025) center 97% / 100% 3% no-repeat,
    radial-gradient(ellipse at 48% 43%,#f7f0d8,#c3bcaa 75%,#88877c);
  box-shadow: inset 0 0 0 1px #85775f,inset 0 0 5px #544b3c88;
}
.furn .detail-organ-pipe > .bx-front {
  background: linear-gradient(#273737,#273737) center 83% / 65% 9% no-repeat,linear-gradient(90deg,#3d5357,#adc1bc 24%,#ebeee0 38%,#7c9391 62%,#30454a);
  box-shadow: inset 0 1px #e5d6a1,inset 0 -1px #213337;
}
.furn .detail-keyboard > .bx-top {
  background: repeating-linear-gradient(90deg,#202324 0 6%,transparent 6% 14.2857%) left top / 100% 59% no-repeat,
    repeating-linear-gradient(90deg,#ebe6ce 0 13%,#9b9481 13% 14.2857%);
}
.furn .detail-saddle > :is(.bx-top,.bx-front) {
  background: radial-gradient(ellipse at 40% 20%,#b28661,#71513b 55%,#382a20);
  box-shadow: inset 0 0 0 1px #37271d,inset 0 0 0 2px #ba987888;
}
.furn .detail-wicker > :is(.bx-top,.bx-front) {
  background: repeating-linear-gradient(90deg,#5d452899 0 1px,transparent 1px 4px),repeating-linear-gradient(0deg,#d6b378 0 2px,#7e5b37 3px 4px);
  box-shadow: inset 0 0 0 1px #543b26,inset 0 2px #e1be82;
}
.furn .detail-linen > .bx-top {
  background: repeating-linear-gradient(0deg,transparent 0 6px,#686e661f 6px 7px),linear-gradient(135deg,var(--tone-lit),var(--tone-top));
  box-shadow: inset 0 0 0 .8px #6e6a5877,inset 0 -2px #ece7cfaa;
}
.furn .detail-linen > .bx-front {
  background: repeating-linear-gradient(0deg,var(--tone-side) 0 2px,var(--tone-lit) 2px 3px);
}
.furn .detail-trophy > .bx-top {
  background: radial-gradient(ellipse,#51401b 0 42%,#d5b566 47%,#f4d887 61%,#99763b 75%);
}

@media (forced-colors: active) {
  .furn .bx > :is(.bx-top,.bx-front) { background-image: none; }
}

/* Furniture illustrations share the measured contact point and projected
   envelope of the live solids. Only a decoded local image replaces the faces. */
.world-prop-art {
  position:absolute;
  max-width:none;
  --prop-run:calc(var(--prop-depth) * var(--prop-unit, 1px));
  --prop-rise:calc(var(--prop-height) * var(--zu));
  height:hypot(var(--prop-run),var(--prop-rise));
  transform-origin:bottom center;
  transform:rotateX(calc(-1 * atan2(var(--prop-rise),var(--prop-run)))) scaleX(var(--prop-mirror));
  object-fit:fill;
  pointer-events:none;
  user-select:none;
}
.has-prop-art > .bx { visibility:hidden; }
@supports not ((height: hypot(1px,1px)) and (transform: rotateX(atan2(1px,1px)))) {
  .world-prop-art { display:none; }
  .has-prop-art > .bx { visibility:visible; }
}

.world-room-rug {
  position:absolute;inset:0;transform:translateZ(.16px);pointer-events:none;
  overflow:hidden;opacity:.82;
  box-shadow:none;
}
.world-room-rug::before {
  content:'';position:absolute;
  width:calc(var(--rug-cols) * 100% - 12%);height:calc(var(--rug-rows) * 100% - 12%);
  left:calc(var(--rug-x) * -100% + 6%);top:calc(var(--rug-y) * -100% + 6%);
  background:
    repeating-linear-gradient(0deg,hsl(43 22% 90% / .06) 0 1px,hsl(20 25% 8% / .04) 1px 3px),
    repeating-linear-gradient(90deg,transparent 0 2px,hsl(38 24% 92% / .035) 2px 3px),
    url('../assets/world/room-rug-burgundy.webp') center / cover no-repeat;
  box-shadow:inset 0 0 0 2px #bd9557,inset 0 0 0 4px #382416,0 2px 4px hsl(20 30% 4% / .7);
}
.world-room-rug.rug-green::before {
  background:
    repeating-linear-gradient(0deg,hsl(43 22% 90% / .06) 0 1px,hsl(20 25% 8% / .04) 1px 3px),
    repeating-linear-gradient(90deg,transparent 0 2px,hsl(38 24% 92% / .035) 2px 3px),
    url('../assets/world/room-rug-green.webp') center / cover no-repeat;
}
.world-room-rug::before {filter:saturate(.9) contrast(1.08) brightness(.88);}
.world-room-rug::after {content:none;}
.cell:is(.cell-target,.cell-blocked,.cell-person,.cell-victim,.cell-searched,.cell-trace) .world-room-rug {opacity:.27;}
@media(forced-colors:active){.world-room-rug{display:none;}}
@media (forced-colors: active) {
  .world-prop-art { display:none; }
  .has-prop-art > .bx { visibility:visible; }
}

/* Finish the existing native faces as usable objects in every wall pose. */
.furn-barstool > .t-velvet > .bx-top {
  background:
    radial-gradient(circle at 35% 35%,#c8a45f 0 2%,#173c2e 3% 5%,transparent 7%),
    radial-gradient(circle at 65% 35%,#c8a45f 0 2%,#173c2e 3% 5%,transparent 7%),
    radial-gradient(circle at 35% 65%,#c8a45f 0 2%,#173c2e 3% 5%,transparent 7%),
    radial-gradient(circle at 65% 65%,#c8a45f 0 2%,#173c2e 3% 5%,transparent 7%),
    radial-gradient(ellipse at 36% 27%,#6f9a66,#35614a 53%,#1b3e2c 78%,#a98a4d 81%,#163124 86%);
  box-shadow:inset 0 0 0 1px #152f22,inset 0 0 0 2px #b79b6877;
}
.furn-barstool > .t-velvet > .bx-front {
  background:linear-gradient(#46674a,#1b3928 60%,#a68b57 67% 78%,#162b20 83%);
}
.furn-barstool > .t-brass > .bx-top {
  background:radial-gradient(ellipse,transparent 0 64%,#715226 65%,#e0c181 72%,#987038 83%,transparent 86%);
  box-shadow:none;
}
.furn-counter > .t-stone > .bx-top {
  background:linear-gradient(146deg,#e8dfc7,#b3ae9f 68%,#827e71);
  box-shadow:inset 0 0 0 1px #9d9380,inset 0 2px #f9efd7;
}
.furn-counter > .detail-sink > .bx-top {
  background:radial-gradient(ellipse at 55% 57%,#c3bbb0 0 3%,#303a35 5% 10%,transparent 12%),
    linear-gradient(135deg,#61746b,#344b43 38%,#94b1a3 80%);
  border:2px solid #bfcac0;border-radius:18%;
  box-shadow:inset 2px 2px 4px #263c35,inset -1px -1px 2px #e0e6cf;
}
.furn .detail-kettle > .bx-top {
  background:radial-gradient(ellipse at 33% 24%,#fff0c1,#d59d60 24%,#a96033 67%,#643d25 88%);
  box-shadow:inset 0 0 0 .7px #6c482c;
}
.furn .detail-kettle > .bx-front {
  background:linear-gradient(90deg,#704327,#d29250 30%,#b8753d 67%,#553822);
}
.furn .detail-teacup > .bx-top {
  background:radial-gradient(ellipse,#573523 0 38%,#cdb98e 40% 49%,#f9eacb 54% 70%,#819487 77%);
}
.furn .detail-teacup > .bx-front {
  background:linear-gradient(90deg,#b2bcaa,#f7eacb 30%,#e1d3b6 70%,#829387);
}
.furn-lumberstack > .bx > .bx-top {
  background-image:repeating-linear-gradient(0deg,transparent 0 30%,#352719aa 31% 33%,#d4b18288 34% 36%,transparent 37% 65%),url('../assets/world/mansion-materials.webp');
  background-size:100% 100%,400% 400%;background-position:center,0 0;
}
.furn-lumberstack > .bx > .bx-front {
  background-image:repeating-linear-gradient(90deg,transparent 0 17%,#39261699 18% 19%,#d8b27d88 20% 21%,transparent 22% 35%),url('../assets/world/mansion-materials.webp');
  background-size:100% 100%,400% 400%;background-position:center,0 0;
}
.cell:has(> .world-floor-werkstatt) .furn-rack > .bx:first-child > .bx-front {
  background:linear-gradient(38deg,transparent 42%,#4d342699 43%,#b58e57 45% 50%,#674c2f 52%,transparent 54%),url('../assets/world/cabinet-rear-panel.webp') center / 100% 100%;
  box-shadow:inset 0 0 0 2px #5f432b,inset 0 0 0 4px #b99866;
}
.furn:is(.furn-mapchest,.furn-cardindex)[data-world-edge="l"] > .bx:first-child > .bx-front,
.furn:is(.furn-mapchest,.furn-cardindex)[data-world-edge="r"] > .bx:first-child > .bx-front {
  background:url('../assets/world/cabinet-rear-panel.webp') center / 100% 100%;
  box-shadow:inset 0 0 0 1px #57402a,inset 0 0 0 2px #c4a57888;
}
.cell:has(> .world-floor-werkstatt) .furn-rack > .t-metal > .bx-front {
  background:linear-gradient(0deg,transparent 27%,#c0a27b 28% 32%,transparent 33% 66%,#c0a27b 67% 71%,transparent 72%),linear-gradient(90deg,#473627,#9b784d 42%,#664d34);
}
.furn-trunk > .t-oak > :is(.bx-top,.bx-front) {
  background:url('../assets/world/props-v3/trunk-lid.webp') center / 100% 100%;
  box-shadow:inset 0 0 0 .8px #392818,inset 0 1px #d7ae74;
}
.furn-trunk > .bx:nth-child(3) > .bx-front {
  background:linear-gradient(90deg,transparent 15%,#342d27 16% 27%,transparent 28% 71%,#342d27 72% 83%,transparent 84%),url('../assets/world/props-v3/trunk-lid.webp') center / 100% 100%;
}
.furn-punchbowl > .t-cloth > .bx-top {
  background:url('../assets/world/props-v3/punch-surface.webp') center / 100% 100%;
  box-shadow:inset 0 0 0 1px #e1d8c9,inset 0 0 0 2px #a33932;
}
.furn-punchbowl > .t-glass > :is(.bx-top,.bx-front) {
  background:repeating-linear-gradient(78deg,#cad3c09c 0 8%,#f3efddc7 10% 13%,#7893898c 16% 20%),linear-gradient(#eee9d9aa,#587c6b99);
  box-shadow:inset 0 0 0 1px #eae5d4aa;
}
.furn-punchbowl > .t-brass > :is(.bx-top,.bx-front) {
  background:linear-gradient(100deg,#737b70,#f2e8ce 38%,#a5a491 62%,#61695e);
}

/* Hero furniture keeps real depth while richer face finishes make every
   structural layer legible at a six-cell board scale. */
.furn-dress:is(.furn-telescope,.furn-tallshelf,.furn-lowshelf,.furn-mapchest,.furn-cardindex,.furn-desk,.furn-counter) .bx > :is(.bx-top,.bx-front) {
  filter:brightness(.97) saturate(1.08) contrast(1.06);
}
.furn :is(.detail-telescope-tube,.detail-telescope-bearing) > .bx-top {
  background:
    repeating-linear-gradient(90deg,transparent 0 18%,#684615 19% 21%,#f5d384 22% 24%,transparent 25% 42%),
    linear-gradient(155deg,#fff0b0,#bf8532 35%,#684313 68%,#e1bd63 86%);
  box-shadow:inset 0 0 0 1px #3f2a10,inset 0 2px 2px #fff0ad99,0 1px 2px #21150b;
}
.furn :is(.detail-telescope-tube,.detail-telescope-bearing) > .bx-front {
  background:linear-gradient(90deg,#41270e,#aa6d21 22%,#f1cf72 48%,#855317 72%,#35210d);
  box-shadow:inset 0 1px #f3d681aa,inset 0 -1px #2f1c0c;
}
.furn .detail-telescope-leg > :is(.bx-top,.bx-front) {
  background:linear-gradient(90deg,#3a2013,#9e6739 28%,#d39b62 45%,#704222 72%,#2b1a10);
  box-shadow:inset 0 0 0 1px #27160e,inset 1px 0 #e6bd8580;
}
.furn-telescope .detail-lens > .bx-top {
  background:radial-gradient(ellipse at 58% 42%,#d6f5e9 0 8%,#6ba0a6 18%,#173747 43%,#d6b661 48% 61%,#513314 67% 78%,#e4c975 82%);
  box-shadow:inset 0 0 0 1px #26180c,0 0 5px hsl(177 62% 72% / .35);
}
.furn:is(.furn-mapchest,.furn-cardindex):not([data-world-edge="b"]) > .detail-drawers > .bx-front {
  background:
    linear-gradient(#e8d49b,#a78245) center 42% / 24% 19% no-repeat,
    radial-gradient(ellipse at 50% 69%,#f0d287 0 5%,#6f491d 7% 11%,transparent 13%),
    linear-gradient(90deg,#4c2b18,#a76b38 20%,#d39a5c 48%,#83502b 78%,#3c2517);
  box-shadow:inset 0 0 0 1px #342014,inset 0 0 0 3px #c59a6275,inset 0 2px #ecc39180;
}
.furn:is(.furn-mapchest,.furn-cardindex)[data-world-edge="b"] > .detail-drawers > .bx-front {
  background:url('../assets/world/cabinet-rear-panel.webp') center / cover;
}
.furn-lowshelf .detail-book > .bx-front,
.furn-tallshelf .detail-book > .bx-front {
  background-image:linear-gradient(90deg,#f0dda277,transparent 17% 76%,#25160b99),linear-gradient(var(--tone-top),var(--tone-side));
  box-shadow:inset 1px 0 #f2dca6aa,inset -1px 0 #24150ccc,inset 0 2px #e3c98677;
}
.furn .detail-tabletop > .bx-top {
  background:
    linear-gradient(90deg,transparent 0 5%,#d0aa6a77 6% 7%,transparent 8% 92%,#321d10aa 93% 94%,transparent 95%),
    url('../assets/world/mansion-materials.webp') 0 0 / 400% 400%;
  box-shadow:inset 0 0 0 1px #2f1d12,inset 0 0 0 3px #d0a76866,inset 0 2px #efd3a066;
}
.furn-chairrow .detail-chairback > .bx-front {
  background:linear-gradient(90deg,#3a2118,#8d513d 11%,#351f19 17%,#6b2432 20% 80%,#351f19 83%,#8d513d 89%,#3a2118);
  box-shadow:inset 0 0 0 1px #25140f,inset 0 0 0 3px #c0806866;
}
