.venue-map .table-shape {
  fill: color-mix(in srgb, var(--table-color) 8%, var(--surface));
  stroke: var(--table-color);
  stroke-width: 1.5;
}
.venue-map .table-inset {
  fill: none;
  stroke: var(--table-color);
  stroke-width: 1;
  opacity: 0.28;
  pointer-events: none;
}
.venue-map .object-label {
  font-size: 13px;
  font-weight: 650;
}
.venue-map .table-sub {
  font-size: 9px;
}
.venue-map .table-number {
  font-size: 26px;
  font-weight: 800;
  fill: var(--table-color);
  font-variant-numeric: tabular-nums;
}
.venue-map .table-custom-label {
  font-size: 11px;
}
.venue-map .map-labels {
  pointer-events: none;
}
.venue-map .feature-label {
  font-weight: 750;
  paint-order: stroke;
  stroke: var(--surface);
  stroke-width: 3px;
  stroke-linejoin: round;
}
.venue-map .object-hover-label {
  display: none;
  pointer-events: none;
}
.venue-map .object-hover-label rect {
  fill: var(--surface);
  stroke: var(--accent);
  stroke-width: 1px;
  vector-effect: non-scaling-stroke;
}
.venue-map .map-object:hover + .object-hover-label,
.venue-map .map-object:focus-visible + .object-hover-label,
.venue-map .object-selected + .object-hover-label {
  display: inline;
}
.venue-map .seat.free rect {
  fill: var(--surface);
  stroke: var(--table-color);
}
.venue-map .seat.free text {
  fill: var(--ink);
  font-weight: 600;
}
.venue-map .seat.free .chair-back {
  fill: color-mix(in srgb, var(--table-color) 18%, var(--surface));
}
.venue-map .seat.free[role="button"]:hover rect {
  fill: var(--soft);
  stroke-width: 2.5;
}
.venue-map .seat.selected rect {
  fill: var(--accent);
  stroke: var(--accent);
}
.venue-map .seat.mine rect {
  fill: #c5f5e7;
  stroke: #148a67;
}
.venue-map .seat.mine text {
  fill: #075a42;
}
.venue-map .seat.selected text {
  fill: #fff;
}
.venue-map .seat.booked rect,
.venue-map .seat.restricted rect {
  fill: #e6e7ef;
  stroke: #c2c5d5;
}
.venue-map .seat.held rect,
.venue-map .seat.otherTab rect {
  fill: #ffe6b3;
  stroke: #ae731b;
}
.venue-map .feature-shape {
  fill: color-mix(in srgb, var(--table-color) 7%, var(--surface));
  stroke: var(--table-color);
  stroke-width: 1.5;
}
.venue-map .feature-shape.wall {
  fill: color-mix(in srgb, var(--table-color) 30%, var(--surface));
}
.venue-map .feature-shape.partition {
  stroke-dasharray: 5 3;
}
.venue-map .feature-shape.emergency_exit {
  fill: #e6f7ee;
  stroke: #188654;
}
.venue-map .feature-icon {
  fill: none;
  stroke: var(--table-color);
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
  pointer-events: none;
}
.venue-map .feature-detail {
  fill: none;
  stroke: var(--table-color);
  stroke-width: 2;
  pointer-events: none;
}
.venue-map .wall-detail {
  opacity: 0.45;
  stroke-width: 1;
}
.venue-map .partition-detail {
  stroke-width: 2.5;
}
.venue-map .feature-hit {
  fill: transparent;
  stroke: transparent;
  stroke-width: 22px;
  vector-effect: non-scaling-stroke;
  pointer-events: all;
}
.venue-map .map-object.object-selected > .table-shape,
.venue-map .map-object.object-selected > .feature-shape {
  stroke: var(--accent);
  stroke-width: 3;
  stroke-dasharray: none;
  filter: drop-shadow(0 3px 6px #7039e825);
}
.venue-map .object-disabled > .table-shape {
  opacity: 0.45;
}
.venue-map .map-grid {
  pointer-events: none;
}

/* Stored furniture colors stay intact; their dark-surface rendering gains contrast. */
[data-theme="midnight"] .venue-map .table-shape,
[data-theme="midnight"] .venue-map .feature-shape,
[data-theme="midnight"] .venue-map .feature-icon,
[data-theme="midnight"] .venue-map .feature-detail,
[data-theme="midnight"] .venue-map .seat.free rect {
  stroke: color-mix(in srgb, var(--table-color) 45%, #ffffff);
}
[data-theme="midnight"] .venue-map .table-number,
[data-theme="midnight"]
  .venue-map.editor-semantic-map
  .semantic-labels
  .table-number {
  fill: color-mix(in srgb, var(--table-color) 35%, #ffffff);
}
[data-theme="midnight"] .venue-map .seat.booked text,
[data-theme="midnight"] .venue-map .seat.restricted text {
  fill: #41495a;
}
[data-theme="midnight"] .venue-map .seat.selected text {
  fill: #17212b;
}

/* Editor semantic zoom: markers explain a location without resizing furniture. */
.venue-map.editor-semantic-map .map-floor {
  stroke: #b7b0c8;
  stroke-width: 1.3px;
  vector-effect: non-scaling-stroke;
}
[data-theme="midnight"] .venue-map.editor-semantic-map .map-floor {
  stroke: #748098;
}
.venue-map.editor-semantic-map .table-shape {
  fill: color-mix(in srgb, var(--table-color) 18%, var(--surface));
  stroke-width: 1.8px;
  vector-effect: non-scaling-stroke;
}
.venue-map.editor-semantic-map .table-inset {
  stroke-width: 1px;
  vector-effect: non-scaling-stroke;
  opacity: 0.4;
}
.venue-map.editor-semantic-map .feature-shape {
  fill: color-mix(in srgb, var(--table-color) 14%, var(--surface));
  stroke-width: 1.6px;
  vector-effect: non-scaling-stroke;
}
.venue-map.editor-semantic-map .feature-shape.wall,
.venue-map.editor-semantic-map .feature-shape.pillar {
  fill: color-mix(in srgb, var(--table-color) 42%, var(--surface));
}
.venue-map.editor-semantic-map .feature-shape.emergency_exit {
  fill: #d0f3df;
  stroke: #167347;
}
.venue-map.editor-semantic-map .object-selected > .table-shape,
.venue-map.editor-semantic-map .object-selected > .feature-shape {
  fill: color-mix(in srgb, var(--table-color) 28%, var(--surface));
  stroke-width: 3px;
}
.venue-map.editor-semantic-map .semantic-labels .table-number {
  fill: color-mix(in srgb, var(--table-color) 65%, #15213a);
  font-weight: 850;
}
.venue-map.editor-semantic-map .semantic-labels .table-sub {
  fill: var(--ink);
  opacity: 0.85;
  font-weight: 600;
}
.venue-map.editor-semantic-map .semantic-labels .feature-label {
  stroke-width: 2.5px;
  fill: var(--ink);
}
.venue-map.editor-semantic-map .seat .chair-body,
.venue-map.editor-semantic-map .seat .chair-back {
  stroke-width: 0.8px;
  vector-effect: non-scaling-stroke;
}
.venue-map.editor-semantic-map .chair-overview {
  stroke-width: 0.45px;
  vector-effect: non-scaling-stroke;
}
.venue-map.editor-semantic-map .seat.free .chair-overview {
  fill: var(--table-color);
  stroke: var(--surface);
}
.venue-map.editor-semantic-map .seat.booked .chair-overview,
.venue-map.editor-semantic-map .seat.restricted .chair-overview {
  fill: #697183;
  stroke: var(--surface);
}
.venue-map.editor-semantic-map .map-overview-marker {
  cursor: grab;
}
.venue-map.editor-semantic-map .map-overview-marker > rect {
  fill: color-mix(in srgb, var(--table-color) 78%, #28304a);
  stroke: var(--surface);
  stroke-width: 1.5px;
  filter: drop-shadow(0 1px 2px #24194a30);
}
.venue-map.editor-semantic-map .map-overview-marker .overview-number {
  fill: var(--ink);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  paint-order: stroke;
  stroke: var(--surface);
  stroke-width: 3px;
  stroke-linejoin: round;
  pointer-events: none;
}
.venue-map.editor-semantic-map .table-marker {
  pointer-events: none;
}
.venue-map.editor-semantic-map .map-table-annotation {
  pointer-events: none;
}
.venue-map.editor-semantic-map .table-hit {
  fill: transparent;
  stroke: none;
  pointer-events: all;
}
.venue-map.editor-semantic-map
  .map-object:hover
  + .object-hover-label
  + .map-table-annotation
  .marker-deferred,
.venue-map.editor-semantic-map
  .map-object:focus-visible
  + .object-hover-label
  + .map-table-annotation
  .marker-deferred,
.venue-map.editor-semantic-map
  .map-table-annotation.annotation-selected
  .marker-deferred {
  opacity: 1;
}
.venue-map.editor-semantic-map
  .map-table-annotation.annotation-selected
  .overview-number {
  fill: var(--accent);
}
.venue-map .door-opening {
  fill: none;
  stroke: var(--table-color);
}
.venue-map .door-opening path {
  vector-effect: non-scaling-stroke;
}
.venue-map .opening-gap {
  stroke: var(--surface);
  stroke-width: 5px;
}
.venue-map .opening-jambs {
  stroke-width: 1.8px;
  stroke-linecap: square;
}
.venue-map .opening-threshold {
  stroke-width: 1px;
  stroke-dasharray: 3px 3px;
  opacity: 0.65;
}
.venue-map .opening-hit {
  fill: none;
  stroke: transparent;
  stroke-width: 18px;
  vector-effect: non-scaling-stroke;
  pointer-events: stroke;
}
.venue-map .door-opening.emergency_exit {
  stroke: #167347;
}
.venue-map .object-selected > .door-opening {
  stroke: var(--accent);
}
.venue-map .object-selected .opening-jambs {
  stroke-width: 2.5px;
}
.venue-map.editor-semantic-map .feature-marker > rect {
  fill: var(--surface);
  stroke: color-mix(in srgb, var(--table-color) 70%, #28304a);
}
.venue-map.editor-semantic-map .feature-marker .feature-icon {
  stroke: color-mix(in srgb, var(--table-color) 70%, #28304a);
  stroke-width: 2px;
}
.venue-map.editor-semantic-map .marker-deferred {
  opacity: 0;
  pointer-events: none;
}
.venue-map.editor-semantic-map .map-object:hover > .marker-deferred,
.venue-map.editor-semantic-map .map-object:focus-visible > .marker-deferred,
.venue-map.editor-semantic-map .object-selected > .marker-deferred {
  opacity: 1;
}
.venue-map.editor-semantic-map .object-selected > .map-overview-marker > rect {
  stroke: var(--accent);
  stroke-width: 2px;
}

/* Override the more specific semantic marker rules as well as full-size art. */
[data-theme="midnight"] .venue-map.editor-semantic-map .feature-marker > rect,
[data-theme="midnight"]
  .venue-map.editor-semantic-map
  .feature-marker
  .feature-icon {
  stroke: color-mix(in srgb, var(--table-color) 45%, #ffffff);
}
[data-theme="midnight"] .venue-map.editor-semantic-map .table-marker > rect {
  fill: color-mix(in srgb, var(--table-color) 35%, #17212b);
  stroke: color-mix(in srgb, var(--table-color) 45%, #ffffff);
}
[data-theme="midnight"] .venue-map .door-opening {
  stroke: color-mix(in srgb, var(--table-color) 45%, #ffffff);
}
[data-theme="midnight"] .venue-map .door-opening.emergency_exit {
  stroke: #7be8b1;
}
[data-theme="midnight"]
  .venue-map.editor-semantic-map
  .seat.free
  .chair-overview {
  fill: color-mix(in srgb, var(--table-color) 45%, #ffffff);
}
[data-theme="midnight"]
  .venue-map.editor-semantic-map
  .object-selected
  > .map-overview-marker
  > rect {
  stroke: var(--accent);
}
[data-theme="midnight"] .venue-map .feature-shape.emergency_exit,
[data-theme="midnight"]
  .venue-map.editor-semantic-map
  .feature-shape.emergency_exit {
  fill: #15382c;
  stroke: #7be8b1;
}
[data-theme="midnight"]
  .venue-map
  .map-object.object-selected
  > .feature-shape.emergency_exit {
  stroke: var(--accent);
}
