.elementor-555 .elementor-element.elementor-element-3661381{--e-filter-direction:row;--e-filter-white-space:nowrap;--e-filter-justify-content:flex-start;--e-filter-item-width:initial;--e-filter-item-flex-grow:0;--e-filter-wrap:wrap;--e-filter-overflow-x:initial;}.elementor-555 .elementor-element.elementor-element-bebe522{--e-filter-direction:row;--e-filter-white-space:nowrap;--e-filter-justify-content:flex-start;--e-filter-item-width:initial;--e-filter-item-flex-grow:0;--e-filter-wrap:wrap;--e-filter-overflow-x:initial;}.elementor-555 .elementor-element.elementor-element-1d7ca51{--e-filter-direction:row;--e-filter-white-space:nowrap;--e-filter-justify-content:flex-start;--e-filter-item-width:initial;--e-filter-item-flex-grow:0;--e-filter-wrap:wrap;--e-filter-overflow-x:initial;}.elementor-555 .elementor-element.elementor-element-c05bd79{--e-filter-direction:row;--e-filter-white-space:nowrap;--e-filter-justify-content:flex-start;--e-filter-item-width:initial;--e-filter-item-flex-grow:0;--e-filter-wrap:wrap;--e-filter-overflow-x:initial;}.elementor-widget-loop-grid .elementor-button{background-color:var( --e-global-color-accent );font-family:var( --e-global-typography-accent-font-family ), Sans-serif;font-weight:var( --e-global-typography-accent-font-weight );}.elementor-widget-loop-grid .elementor-pagination{font-family:var( --e-global-typography-secondary-font-family ), Sans-serif;font-weight:var( --e-global-typography-secondary-font-weight );}.elementor-widget-loop-grid .e-load-more-message{font-family:var( --e-global-typography-secondary-font-family ), Sans-serif;font-weight:var( --e-global-typography-secondary-font-weight );}.elementor-555 .elementor-element.elementor-element-acd7b71{--grid-columns:4;--grid-row-gap:48px;--grid-column-gap:32px;}.elementor-555 .elementor-element.elementor-element-acd7b71 .elementor-pagination{text-align:center;}body:not(.rtl) .elementor-555 .elementor-element.elementor-element-acd7b71 .elementor-pagination .page-numbers:not(:first-child){margin-left:calc( 10px/2 );}body:not(.rtl) .elementor-555 .elementor-element.elementor-element-acd7b71 .elementor-pagination .page-numbers:not(:last-child){margin-right:calc( 10px/2 );}body.rtl .elementor-555 .elementor-element.elementor-element-acd7b71 .elementor-pagination .page-numbers:not(:first-child){margin-right:calc( 10px/2 );}body.rtl .elementor-555 .elementor-element.elementor-element-acd7b71 .elementor-pagination .page-numbers:not(:last-child){margin-left:calc( 10px/2 );}@media(max-width:1024px){.elementor-555 .elementor-element.elementor-element-acd7b71{--grid-columns:2;}}@media(max-width:767px){.elementor-555 .elementor-element.elementor-element-acd7b71{--grid-columns:1;}}/* Start custom CSS *//* Hide-if-empty (content/projects.docx): a block with an empty field value, a group with no values,
   a photo stage with no photos and a related-projects block with no projects are not shown. */
.dsp-optional:has(.dsp-value:empty),
.dsp-group:not(:has(.dsp-value:not(:empty))):not(:has(.elementor-post-info__terms-list-item)):not(:has(.dsp-compare-before img[src])),
.dsp-scope-col:not(:has(.elementor-post-info__terms-list-item)),
.dsp-compare-col:not(:has(.dsp-compare-before img[src])),
.dsp-compare-col:not(:has(.dsp-compare-after img[src])),
.dsp-stage:not(:has(img, .e-gallery-image)),
.dsp-related:not(:has(.e-loop-item)) { display: none !important; }

/* Terms (Post Info widget): one <span> per term with ", " text between them. font-size: 0 hides the commas,
   and spacing uses margins/padding (not gap), because the comma text nodes count as flex/grid items. */
.dsp-tags .elementor-icon-list-items, .dsp-scope .elementor-icon-list-items { display: flex !important; flex-wrap: wrap; margin: 0 !important; padding: 0; list-style: none; }
.dsp-tags .elementor-icon-list-item, .dsp-scope .elementor-icon-list-item { margin: 0 !important; padding: 0 !important; }
.dsp-tags .elementor-icon-list-item::after { display: none !important; }
.dsp-tags .elementor-post-info__terms-list, .dsp-scope .elementor-post-info__terms-list { font-size: 0 !important; display: flex !important; flex-wrap: wrap; }
.dsp-tags .elementor-post-info__terms-list-item { display: inline-block !important; margin: 0 0.5rem 0.5rem 0; font-family: var(--ds-font-body); font-size: 0.8125rem; font-weight: 600; letter-spacing: 0.04em; line-height: 1.2; padding: 0.4375rem 0.75rem; border: 1px solid currentColor; border-radius: 2px; color: inherit !important; }
.dsp-tags .elementor-icon-list-text, .dsp-tags .elementor-post-info__item { color: inherit !important; }
.dsp-tags-plain .elementor-post-info__terms-list-item { border: 0; padding: 0; margin: 0 0.75rem 0 0; font-weight: 500; letter-spacing: 0; font-size: 0.9375rem; }

/* Scope of work: a ✓ list in two columns */
.dsp-scope .elementor-icon-list-items, .dsp-scope .elementor-icon-list-item, .dsp-scope .elementor-post-info__item { display: block !important; width: 100%; }
.dsp-scope .elementor-post-info__terms-list-item { display: flex !important; flex: 0 0 50%; box-sizing: border-box; gap: 0.875rem; align-items: baseline; padding: 1rem 2.5rem 1rem 0; border-top: 1px solid rgba(217,212,199,0.25); font-family: var(--ds-font-body); font-size: 1.0625rem; line-height: 1.4; color: var(--ds-white) !important; }
.dsp-scope .elementor-post-info__terms-list-item::before { content: "✓"; color: var(--ds-gold); font-weight: 700; }
@media (max-width: 767px) { .dsp-scope .elementor-post-info__terms-list-item { flex-basis: 100%; padding-right: 0; } }

/* Before/after slider: before photo on top, clipped to the left --pos of the box. Hidden unless both photos exist. */
.dsp-compare:not(:has(.dsp-compare-before img[src]:not([src=""]))),
.dsp-compare:not(:has(.dsp-compare-after img[src]:not([src=""]))) { display: none !important; }
.dsp-compare { width: 100% !important; aspect-ratio: 4 / 3; }
@media (max-width: 767px) { .dsp-compare { aspect-ratio: 4 / 3; } }
.dsp-compare-before { display: none; }
.dsp-compare-on .dsp-compare-before { display: block; clip-path: inset(0 calc(100% - var(--pos, 50%)) 0 0); }
.dsp-compare-range { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: ew-resize; z-index: 3; touch-action: pan-y; }
.dsp-compare-handle { position: absolute; top: 0; bottom: 0; left: var(--pos, 50%); width: 2px; margin-left: -1px; background: var(--ds-white); z-index: 2; pointer-events: none; box-shadow: 0 0 0 1px rgba(35,31,32,0.2); }
.dsp-compare-handle::after { content: "‹ ›"; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 2.75rem; height: 2.75rem; border-radius: 50%; background: var(--ds-white); color: var(--ds-ink); font: 700 1rem/2.75rem var(--ds-font-body); text-align: center; letter-spacing: 0.1em; box-shadow: 0 2px 8px rgba(0,0,0,0.25); }
.dsp-compare-range:focus-visible + .dsp-compare-handle, .dsp-compare:has(.dsp-compare-range:focus-visible) .dsp-compare-handle::after { outline: 3px solid var(--ds-gold); outline-offset: 2px; }

/* During: a sideways photo strip (swipe / scroll, snaps to each photo) */
.dsp-strip .e-gallery-container { display: grid !important; grid-auto-flow: column; grid-auto-columns: calc((100% - 36px) / 3.4); grid-template-columns: none !important; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory; padding: 0 0 0.75rem !important; height: auto !important; scrollbar-color: var(--ds-clay) transparent; }
.dsp-strip .e-gallery-item { position: relative !important; inset: auto !important; width: auto !important; scroll-snap-align: start; }
.dsp-strip .e-gallery-image { padding-bottom: 75% !important; height: auto !important; }
@media (max-width: 767px) { .dsp-strip .e-gallery-container { grid-auto-columns: 82%; } }

/* After: mosaic, first photo large (and every 7th after it) */
.dsp-bento .e-gallery-container { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)) !important; grid-auto-rows: clamp(9rem, 14vw, 15rem); grid-auto-flow: dense; gap: 12px; padding: 0 !important; height: auto !important; }
.dsp-bento .e-gallery-item { position: relative !important; inset: auto !important; width: auto !important; }
.dsp-bento .e-gallery-item:nth-child(7n+1) { grid-column: span 2; grid-row: span 2; }
.dsp-bento .e-gallery-item:nth-child(7n+5) { grid-column: span 2; }
.dsp-bento .e-gallery-image { padding-bottom: 0 !important; height: 100% !important; }
@media (max-width: 767px) { .dsp-bento .e-gallery-container { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; grid-auto-rows: 9rem; } }

/* Galleries: no hover overlay, square corners */
.dsp-gallery .elementor-gallery-item__overlay, .dsp-gallery .elementor-gallery-item__content { display: none !important; }

/* Project cards */
.dsp-card .dsp-cover { transition: transform 0.5s ease-out; }
.dsp-card:hover .dsp-cover { transform: scale(1.03); }
.dsp-card:hover .ds-link { color: var(--ds-clay); }
@media (prefers-reduced-motion: reduce) { .dsp-card .dsp-cover { transition: none; } }

/* Filters: brand chips */
.dsp-filter .e-filter { gap: 0.5rem; flex-wrap: wrap; }
.dsp-filter .e-filter-item { font-family: var(--ds-font-body); font-size: 0.875rem; font-weight: 500; padding: 0.5rem 0.875rem; border: 1px solid var(--ds-line); border-radius: 2px; background: transparent; color: var(--ds-ink); }
.dsp-filter .e-filter-item[aria-pressed="true"] { background: var(--ds-ink); border-color: var(--ds-ink); color: var(--ds-white); }
.dsp-grid .e-load-more-anchor + .elementor-pagination, .dsp-grid .elementor-pagination { margin-top: 3rem; font-family: var(--ds-font-body); }

/* Showcase grid (build/projects_showcase.py). Rows are 7rem tall; a normal card is 1 column x 3 rows and a feature card
   (every 5th, only when 4 more cards follow) is 2 columns x 6 rows, so each block of 5 fills a clean 4 x 6 rectangle. */
.dsp-grid .elementor-loop-container { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)) !important; grid-auto-rows: 7rem; grid-auto-flow: dense; gap: 0.75rem !important; }
.dsp-grid .e-loop-item { position: relative; grid-row: span 3; min-height: 0; border-radius: 4px; overflow: hidden; background: var(--ds-ink); }
.dsp-grid .e-loop-item:nth-of-type(5n+1):nth-last-of-type(n+5) { grid-column: span 2; grid-row: span 6; }
.dsp-grid .e-loop-item > .elementor-element, .dsp-grid .e-loop-item [data-elementor-type="loop-item"] { height: 100%; }
.dsp-grid .dsp-card .dsp-cover { transition: transform 0.6s ease-out; }
.dsp-grid .dsp-card:hover .dsp-cover { transform: scale(1.05); }
@media (max-width: 1024px) {
  .dsp-grid .elementor-loop-container { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .dsp-grid .e-loop-item:nth-of-type(5n+1):nth-last-of-type(n+5) { grid-column: span 2; grid-row: span 4; }
}
@media (max-width: 767px) {
  .dsp-grid .elementor-loop-container { grid-template-columns: minmax(0, 1fr) !important; grid-auto-rows: 6.5rem; }
  .dsp-grid .e-loop-item:nth-of-type(5n+1):nth-last-of-type(n+5) { grid-column: span 1; grid-row: span 4; }
}
@media (prefers-reduced-motion: reduce) { .dsp-grid .dsp-card .dsp-cover, .dsp-grid .dsp-card:hover .dsp-cover { transition: none; transform: none; } }

/* (body.elementor-page-555s are .dsp-filter.dsp-select so they beat the widget's own chip rules)
   Filters as dropdowns on devices with a mouse (CSS only). Only the chosen option shows, like a select box; hover or
   keyboard focus opens the list. Touch devices keep the normal chips, because phones don't hover. */
@media (hover: hover) {
  .dsp-filter.dsp-select { position: relative; z-index: 1; min-height: 2.875rem; }
  .dsp-filter.dsp-select:hover, .dsp-filter.dsp-select:focus-within { z-index: 30; }
  .dsp-filter.dsp-select .e-filter { position: absolute; top: 0; left: 0; width: 100%; flex-direction: column; flex-wrap: nowrap; align-items: stretch; gap: 0; max-height: 19rem; overflow-x: hidden; overflow-y: auto; box-sizing: border-box; background: var(--ds-white); border: 1px solid var(--ds-line); border-radius: 2px; }
  .dsp-filter.dsp-select:is(:hover, :focus-within) .e-filter { box-shadow: 0 12px 32px rgba(35,31,32,0.16); border-color: var(--ds-ink); }
  .dsp-filter.dsp-select .e-filter-item { display: none; box-sizing: border-box; width: 100%; justify-content: flex-start; text-align: left; border: 0; border-radius: 0; background: transparent; color: var(--ds-ink); padding: 0.8125rem 1rem; font-size: 0.9375rem; }
  .dsp-filter.dsp-select:is(:hover, :focus-within) .e-filter-item { display: flex; }
  .dsp-filter.dsp-select .e-filter-item:hover { background: var(--ds-sand); }
  .dsp-filter.dsp-select .e-filter-item[aria-pressed="true"] { display: flex; order: -1; border: 0; align-items: center; background: var(--ds-white); color: var(--ds-ink); font-weight: 600; }
  .dsp-filter.dsp-select .e-filter-item[aria-pressed="true"]::after { content: ""; width: 0.5rem; height: 0.5rem; margin: -0.25rem 0 0 auto; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg); }
}/* End custom CSS */