/* Geometric Color Palettes — loaded only with projects-templates/geometric-color-palettes.php */

/* Hide theme chrome for full-screen app */
body.geometric-color-palettes-page .site-header,
body.geometric-color-palettes-page .site-header__nav-backdrop {
  display: none !important;
}

body.geometric-color-palettes-page {
  margin: 0;
}

body.geometric-color-palettes-page .site-main.geometric-color-palettes {
  max-width: none;
  margin: 0;
  padding: 0;
}

.geometric-color-palettes-page {
  /* Slightly below panel luminance so #2c2c2c panels read as cards */
  background: #252525;
  color-scheme: dark;
  /* Same as invoice “Download PDF” / buildmeone.css --blue */
  --accent: #3662e3;
}

.geometric-color-palettes {
  --gcp-accent: #3662e3;
  --gcp-accent-dim: rgba(54, 98, 227, 0.22);
  /* Palette derived from panel base #2c2c2c */
  --gcp-panel: #2c2c2c;
  --gcp-border: #3d3d3d;
  --gcp-border-hover: #4f4f4f;
  --gcp-text: #ececec;
  --gcp-muted: #9a9a9a;
  --gcp-surface: #333333;
  --gcp-surface-hover: #3d3d3d;
  --gcp-input-bg: #222222;
  --gcp-input-focus: #383838;
  --gcp-radius: 10px;
  --gcp-font: 'Inter', system-ui, sans-serif;
  box-sizing: border-box;
  color: var(--gcp-text);
  font-family: var(--gcp-font);
}

.geometric-color-palettes *,
.geometric-color-palettes *::before,
.geometric-color-palettes *::after {
  box-sizing: inherit;
}

.geometric-color-palettes__inner {
  height: 100vh;
  height: 100dvh;
  margin-inline: auto;
  padding: clamp(1rem, 2.5vw, 1.5rem) clamp(2.75rem, 2vw, 1.5rem) clamp(1.5rem, 4vw, 2.5rem);
  background-color: #000;
}

/* ——— App shell ——— */
.gcp-app {
  min-height: min(85vh, 920px);
}

.gcp-workspace {
  display: grid;
  grid-template-columns: minmax(17.5rem, 22rem) minmax(0, 1fr) minmax(17.5rem, 22rem);
  gap: clamp(0.65rem, 1.5vw, 1rem);
  align-items: stretch;
}
@media (min-width: 991px) and (max-width: 1280px) {
  .gcp-workspace {
    grid-template-columns: minmax(17.5rem, 15rem) minmax(0, 1fr) minmax(17.5rem, 15rem);
  }
}
/* Edition rail + overflow menu — desktop: flatten into panel scroll; mobile: slide-in sheet */
.gcp-edition-rail {
  display: contents;
}

.gcp-edition-overflow {
  display: contents;
}

.gcp-edition-overflow__backdrop,
.gcp-edition-overflow__head {
  display: none;
}

.gcp-edition-overflow__sheet {
  display: contents;
}

.gcp-edition-overflow__body {
  display: contents;
}

.gcp-edition-menu-toggle {
  display: none;
}

/* Second “Open library” lives in settings; hide on desktop where the preview panel button is used */
.gcp-btn--library-from-settings {
  display: none;
}

@media (min-width: 992px) {
  .gcp-mobile-toolbar-actions,
  .gcp-mobile-toolbar-btn {
    display: none !important;
  }

  .gcp-palette-tray__handle,
  .gcp-palette-tray__backdrop {
    display: none !important;
  }
}


/* Preview panel — light backdrop (toggle; does not affect edition or canvas) */
.gcp-panel--preview.gcp-panel--preview-light {
  --pv-bg: #ebecef;
  --pv-border: #cdd0d8;
  --pv-surface: #ffffff;
  --pv-surface-2: #f3f4f7;
  --pv-input: #fafafa;
  --pv-text: #1a1d21;
  --pv-muted: #5a6170;

  background: var(--pv-bg);
  border-color: var(--pv-border);
  color: var(--pv-text);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-panel__scroll {
  scrollbar-color: rgba(0, 0, 0, 0.12) transparent;
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-panel__scroll::-webkit-scrollbar-thumb {
  background: rgba(0, 0, 0, 0.14);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-section {
  border-bottom-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-section__title {
  color: var(--pv-muted);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-microcopy {
  color: var(--pv-muted);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-toggle__text {
  color: var(--pv-text);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-toggle__ui {
  background: #b8bcc8;
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-toggle__ui::after {
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-swatch {
  background: var(--pv-surface);
  border-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-swatch__chip {
  border-color: rgba(0, 0, 0, 0.1);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-swatch__codes {
  color: var(--pv-text);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-swatch__copy {
  background: var(--pv-input);
  border-color: var(--pv-border);
  color: var(--pv-text);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-swatch__copy:hover {
  border-color: var(--gcp-accent);
  color: var(--gcp-accent);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-swatch__copy--flash {
  background: var(--gcp-accent-dim);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-mock {
  background: var(--pv-surface);
  border-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-context-illustr {
  background: var(--pv-surface);
  border-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-context-pattern {
  background: var(--pv-surface);
  border-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-context-pattern__empty,
.gcp-panel--preview.gcp-panel--preview-light .gcp-context-illustr__empty {
  color: var(--pv-muted);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--context {
  border-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--context .gcp-seg__btn {
  background: var(--pv-input);
  color: var(--pv-muted);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--context .gcp-seg__btn + .gcp-seg__btn {
  border-left-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--context .gcp-seg__btn--active {
  background: var(--pv-surface);
  color: var(--gcp-accent);
  box-shadow: inset 0 -2px 0 var(--gcp-accent);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--context .gcp-seg__btn:focus-visible {
  outline-color: var(--gcp-accent);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--triangle-fill,
.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--square-fill,
.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--calendar-fill {
  border-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--triangle-fill .gcp-seg__btn,
.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--square-fill .gcp-seg__btn,
.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--calendar-fill .gcp-seg__btn {
  background: var(--pv-input);
  color: var(--pv-muted);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--triangle-fill .gcp-seg__btn + .gcp-seg__btn,
.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--square-fill .gcp-seg__btn + .gcp-seg__btn,
.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--calendar-fill .gcp-seg__btn + .gcp-seg__btn {
  border-left-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--triangle-fill .gcp-seg__btn--active,
.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--square-fill .gcp-seg__btn--active,
.gcp-panel--preview.gcp-panel--preview-light .gcp-seg--calendar-fill .gcp-seg__btn--active {
  background: var(--pv-surface);
  color: var(--gcp-accent);
  box-shadow: inset 0 -2px 0 var(--gcp-accent);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-mock-swipe-fill__label {
  color: var(--pv-muted);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-mock__card {
  background: var(--pv-surface-2);
  border-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-mock__card-title {
  color: var(--pv-text);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-mock__card-body {
  color: var(--pv-muted);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-btn--library {
  background: var(--pv-surface);
  border-color: var(--pv-border);
  color: var(--pv-text);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-btn--library:hover {
  filter: none;
  background: var(--pv-surface-2);
  border-color: #b4b9c5;
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-btn--export {
  background: var(--pv-surface);
  color: var(--pv-text);
  border-color: var(--pv-border);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-btn--export:hover {
  border-color: var(--gcp-accent);
  color: var(--gcp-accent);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-toast--preview {
  background: var(--pv-surface);
  border-color: var(--pv-border);
  color: var(--pv-text);
}

/* Mobile palette tray handle (“Palette” peek control) */
.gcp-panel--preview.gcp-panel--preview-light .gcp-palette-tray__handle {
  background: var(--pv-bg);
  color: var(--pv-muted);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-palette-tray__label {
  color: var(--pv-muted);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-palette-tray__grip {
  background: rgba(0, 0, 0, 0.14);
}

/* ——— Panels ——— */
.gcp-panel {
  background: var(--gcp-panel);
  border: 1px solid var(--gcp-border);
  border-radius: var(--gcp-radius);
  min-height: 320px;
  overflow: hidden;
}


.gcp-panel__scroll {
  max-height: min(88vh, 920px);
  overflow-y: auto;
  padding: 1rem 1.1rem 1.25rem;
  scrollbar-width: thin;
  scrollbar-color: rgba(255, 255, 255, 0.12) transparent;
}

.gcp-panel__scroll::-webkit-scrollbar {
  width: 6px;
}

.gcp-panel__scroll::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.14);
  border-radius: 99px;
}

.gcp-section {
  padding-bottom: 1.1rem;
  margin-bottom: 1.1rem;
  border-bottom: 1px solid var(--gcp-border);
}

.gcp-section:last-child {
  border-bottom: none;
  margin-bottom: 0;
  padding-bottom: 0;
}

.gcp-section--actions {
  border-bottom: none;
  margin-bottom: 0;
}

.gcp-section__title {
  margin: 0 0 1rem;
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--gcp-muted);
}

.gcp-microcopy {
  margin: 0.65rem 0;
  font-size: 0.8125rem;
  color: var(--gcp-muted);
}

/* Shape selector — square tiles; SVG icons tinted via mask (replaces black strokes) */
.gcp-shape-select {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.5rem;
  margin-bottom: 1.5rem;
}

.gcp-shape-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  aspect-ratio: 1;
  width: 100%;
  min-width: 0;
  padding: clamp(0.45rem, 2.5vw, 0.65rem);
  border: 2px solid var(--gcp-border);
  border-radius: 8px;
  background: var(--gcp-surface);
  color: inherit;
  font: inherit;
  cursor: pointer;
  box-shadow:
    inset 0 1px 2px rgba(0, 0, 0, 0.38),
    inset 0 -1px 1px rgba(255, 255, 255, 0.04);
  transition:
    border-color 0.2s ease,
    border-width 0.2s ease,
    background 0.2s ease,
    box-shadow 0.2s ease;
}

.gcp-shape-btn:hover {
  border-color: var(--gcp-border-hover);
  background: var(--gcp-surface-hover);
  box-shadow:
    inset 0 1px 3px rgba(0, 0, 0, 0.42),
    inset 0 -1px 1px rgba(255, 255, 255, 0.05);
}

.gcp-shape-btn:hover .gcp-shape-btn__graphic {
  opacity: 1;
}

.gcp-shape-btn--active {
  border-width: 1px;
  border-color: var(--gcp-accent);
  background: var(--gcp-input-focus);
  box-shadow:
    inset 0 1px 3px rgba(0, 0, 0, 0.48),
    inset 0 -1px 1px rgba(255, 255, 255, 0.05);
}

/* :hover alone outranks .--active; keep 1px accent border when active */
.gcp-shape-btn--active:hover {
  border-width: 1px;
  border-color: var(--gcp-accent);
  background: var(--gcp-input-focus);
  box-shadow:
    inset 0 1px 3px rgba(0, 0, 0, 0.42),
    inset 0 -1px 1px rgba(255, 255, 255, 0.05);
}

.gcp-shape-btn--active .gcp-shape-btn__graphic {
  background-color: var(--gcp-accent);
  opacity: 1;
  box-shadow:
    inset 0 1px 2px rgba(0, 0, 0, 0.55),
    inset 0 -1px 1px rgba(255, 255, 255, 0.12);
}

.gcp-shape-btn:focus-visible {
  outline: 2px solid var(--gcp-accent);
  outline-offset: 2px;
}

/* Same visual weight as former Unicode icons: body text at ~85% opacity; active uses accent */
.gcp-shape-btn__graphic {
  display: block;
  width: 55%;
  height: 55%;
  max-width: 2.35rem;
  max-height: 2.35rem;
  margin: auto;
  background-color: var(--gcp-text);
  opacity: 0.85;
  -webkit-mask-image: var(--gcp-shape-icon-src);
  mask-image: var(--gcp-shape-icon-src);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
  box-shadow:
    inset 0 1px 2px rgba(0, 0, 0, 0.5),
    inset 0 -1px 1px rgba(255, 255, 255, 0.07);
  transition: opacity 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
}

.gcp-shape-btn__fallback {
  font-size: clamp(1.15rem, 4.5vw, 1.45rem);
  line-height: 1;
  opacity: 0.85;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.35));
}

.gcp-shape-btn--active .gcp-shape-btn__fallback {
  color: var(--gcp-accent);
  opacity: 1;
}

/* Fields */
.gcp-field {
  margin-bottom: 0.85rem;
}

.gcp-field:last-child {
  margin-bottom: 0;
}

.gcp-field--split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.65rem;
  margin-bottom: 2rem;
}

.gcp-label {
  display: block;
  margin-bottom: 0.35rem;
  font-size: 0.8125rem;
  font-weight: 500;
}

.gcp-label--small {
  margin-top: 0.5rem;
  margin-bottom: 0.4rem;
  font-size: 0.75rem;
  color: var(--gcp-muted);
}

.gcp-range {
  width: 100%;
  height: 4px;
  border-radius: 99px;
  appearance: none;
  background: linear-gradient(90deg, #454545, var(--gcp-accent));
  outline: none;
}

.gcp-range::-webkit-slider-thumb {
  appearance: none;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--gcp-panel);
  border: 2px solid var(--gcp-accent);
  cursor: grab;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);
}

.gcp-range::-moz-range-thumb {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--gcp-panel);
  border: 2px solid var(--gcp-accent);
  cursor: grab;
}

.gcp-range__value {
  display: block;
  margin-top: 0.25rem;
  font-size: 0.6875rem;
  color: var(--gcp-muted);
  font-variant-numeric: tabular-nums;
}

.gcp-input {
  width: 100%;
  padding: 0.5rem 0.65rem;
  border: 1px solid var(--gcp-border);
  border-radius: 8px;
  font: inherit;
  font-size: 0.875rem;
  background: var(--gcp-input-bg);
  color: var(--gcp-text);
  transition: border-color 0.15s ease;
}

.gcp-input:focus {
  outline: none;
  border-color: var(--gcp-accent);
  background: var(--gcp-input-focus);
}

/* Toggle */
.gcp-toggle {
  display: flex;
  align-items: flex-start;
  gap: 0.55rem;
  margin-bottom: 0.85rem;
  cursor: pointer;
  font-size: 0.8125rem;
  line-height: 1.35;
}

.gcp-toggle:last-of-type {
  margin-bottom: 0;
}

.gcp-toggle input {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.gcp-toggle__ui {
  flex-shrink: 0;
  width: 36px;
  height: 20px;
  border-radius: 99px;
  background: #454545;
  position: relative;
  transition: background 0.2s ease;
  margin-top: 0.05rem;
}

.gcp-toggle__ui::after {
  content: '';
  position: absolute;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--gcp-text);
  top: 2px;
  left: 2px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
  transition: transform 0.2s ease;
}

.gcp-toggle input:checked + .gcp-toggle__ui {
  background: var(--gcp-accent);
}

.gcp-toggle input:checked + .gcp-toggle__ui::after {
  transform: translateX(16px);
}

.gcp-toggle input:focus-visible + .gcp-toggle__ui {
  outline: 2px solid var(--gcp-accent);
  outline-offset: 2px;
}

/* Lock row */
.gcp-lock-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}

.gcp-lock {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  padding: 0.25rem 0.45rem;
  border: 1px solid var(--gcp-border);
  border-radius: 6px;
  font-size: 0.75rem;
  background: var(--gcp-surface);
  cursor: pointer;
  user-select: none;
}

.gcp-lock--on {
  border-color: var(--gcp-accent);
  background: var(--gcp-accent-dim);
}

.gcp-lock input {
  accent-color: var(--gcp-accent);
}

/* Segmented format */
.gcp-seg {
  display: flex;
  border: 1px solid var(--gcp-border);
  border-radius: 8px;
  overflow: hidden;
}

.gcp-seg__btn {
  flex: 1;
  padding: 0.45rem 0.35rem;
  border: none;
  background: var(--gcp-surface);
  font: inherit;
  font-size: 0.75rem;
  font-weight: 600;
  cursor: pointer;
  color: var(--gcp-muted);
  transition:
    background 0.15s ease,
    color 0.15s ease;
}

.gcp-seg__btn + .gcp-seg__btn {
  border-left: 1px solid var(--gcp-border);
}

.gcp-seg__btn--active {
  background: var(--gcp-input-focus);
  color: var(--gcp-accent);
  box-shadow: inset 0 -2px 0 var(--gcp-accent);
}

.gcp-seg__btn:focus-visible {
  outline: 2px solid var(--gcp-accent);
  outline-offset: -2px;
  z-index: 1;
}

.gcp-seg--canvas {
  margin-bottom: 1rem;
}

.gcp-canvas-image-actions {
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
}

.gcp-canvas-image-actions[hidden] {
  display: none !important;
}

.gcp-canvas-file-input {
  position: absolute;
  width: 0;
  height: 0;
  opacity: 0;
  pointer-events: none;
}

.gcp-btn--upload {
  width: 100%;
  justify-content: center;
}

.gcp-save-wrap {
  display: block;
}

.gcp-save-wrap--hint {
  cursor: help;
}

.gcp-save-wrap .gcp-btn:disabled {
  cursor: not-allowed;
  opacity: 0.62;
  width: 100%;
}

/* Presets */
.gcp-presets {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.gcp-chip {
  padding: 0.4rem 0.65rem;
  border: 1px solid var(--gcp-border);
  border-radius: 99px;
  background: var(--gcp-surface);
  font: inherit;
  font-size: 0.75rem;
  font-weight: 500;
  cursor: pointer;
  transition:
    border-color 0.15s ease,
    background 0.15s ease;
}

.gcp-chip:hover {
  border-color: var(--gcp-border-hover);
  background: var(--gcp-surface-hover);
}

/* Buttons */
.gcp-actions {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
}

.gcp-btn {
  width: 100%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.35rem;
  padding: 0.55rem 0.85rem;
  border: 1px solid var(--gcp-accent);
  border-radius: 8px;
  background: var(--gcp-accent);
  color: #fff;
  font: inherit;
  font-size: 0.8125rem;
  font-weight: 600;
  cursor: pointer;
  transition:
    filter 0.15s ease,
    transform 0.1s ease;
}

.gcp-btn:hover {
  filter: brightness(1.05);
}

.gcp-btn:active {
  transform: scale(0.98);
}

.gcp-btn--saved-flash {
  transition:
    filter 0.2s ease,
    border-color 0.2s ease;
  filter: brightness(1.08);
}

.gcp-btn--ghost {
  background: var(--gcp-surface);
  color: var(--gcp-text);
  border-color: var(--gcp-border);
}

.gcp-btn--ghost:hover {
  filter: none;
  border-color: var(--gcp-border-hover);
  background: var(--gcp-surface-hover);
}

.gcp-export-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.45rem;
}

.gcp-btn--export {
  background: var(--gcp-surface);
  color: var(--gcp-text);
  border-color: var(--gcp-border);
  font-size: 0.75rem;
}

.gcp-btn--export:hover {
  border-color: var(--gcp-accent);
  color: var(--gcp-accent);
}

@keyframes gcp-export-pulse-hint {
  0%,
  100% {
    border-color: var(--gcp-border);
    box-shadow: none;
  }

  22% {
    border-color: rgba(54, 98, 227, 0.95);
    box-shadow:
      0 0 0 2px rgba(54, 98, 227, 0.35),
      0 0 14px rgba(54, 98, 227, 0.55),
      0 0 26px rgba(54, 98, 227, 0.3);
  }

  48% {
    border-color: rgba(54, 98, 227, 0.7);
    box-shadow:
      0 0 0 1px rgba(54, 98, 227, 0.2),
      0 0 10px rgba(54, 98, 227, 0.38);
  }
}

@keyframes gcp-export-pulse-hint-light {
  0%,
  100% {
    border-color: var(--pv-border);
    box-shadow: none;
  }

  22% {
    border-color: rgba(54, 98, 227, 0.95);
    box-shadow:
      0 0 0 2px rgba(54, 98, 227, 0.35),
      0 0 14px rgba(54, 98, 227, 0.55),
      0 0 26px rgba(54, 98, 227, 0.3);
  }

  48% {
    border-color: rgba(54, 98, 227, 0.7);
    box-shadow:
      0 0 0 1px rgba(54, 98, 227, 0.2),
      0 0 10px rgba(54, 98, 227, 0.38);
  }
}

.gcp-btn--export.gcp-btn--export--pulse-hint {
  position: relative;
  z-index: 1;
  animation: gcp-export-pulse-hint 1.9s ease-out forwards;
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-btn--export.gcp-btn--export--pulse-hint {
  animation-name: gcp-export-pulse-hint-light;
}

/* Canvas column — spectrum fills the stack (square), as large as the column allows */
.gcp-canvas-column {
  display: flex;
  align-items: stretch;
  min-height: min(88vh, 920px);
}

.gcp-canvas-frame {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-height: min(88vh, 920px);
  padding: 0;
  background: transparent;
  border: none;
  border-radius: var(--gcp-radius);
  overflow: hidden;
}

.gcp-canvas-stack {
  position: relative;
  flex: 0 0 auto;
  width: min(100%, min(88vh, 920px));
  max-width: 100%;
  aspect-ratio: 1 / 1;
  display: block;
}

.gcp-canvas-wheel-layer {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
}

.gcp-canvas--wheel {
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  max-width: none;
  max-height: none;
  border-radius: 50%;
  touch-action: none;
  background: #000;
  box-shadow: none;
}

.gcp-canvas--overlay,
.gcp-canvas {
  position: absolute;
  left: 0;
  top: 0;
  z-index: 2;
  display: block;
  max-width: none;
  max-height: none;
  border-radius: 50%;
  cursor: crosshair;
  touch-action: none;
  background: transparent;
  box-shadow: none;
}

/* Harmony badge */
.gcp-harmony {
  padding: 0.75rem 0.85rem;
  margin-bottom: 1rem;
  border: 1px solid var(--gcp-border);
  border-radius: 8px;
  background: linear-gradient(135deg, var(--gcp-surface) 0%, var(--gcp-panel) 100%);
  transition:
    border-color 0.35s ease,
    box-shadow 0.35s ease;
}

.gcp-harmony--flash {
  border-color: var(--gcp-accent);
  box-shadow: 0 0 0 1px var(--gcp-accent-dim);
}

.gcp-harmony__label {
  display: block;
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--gcp-muted);
  margin-bottom: 0.25rem;
}

.gcp-harmony__value {
  margin: 0;
  font-size: 1rem;
  font-weight: 600;
  letter-spacing: -0.02em;
  transition: opacity 0.25s ease;
}

/* Harmony as shape description (edition panel); no negative top margin — matches preview panel inset */
.gcp-harmony--shape {
  padding: 0;
  margin: 0 0 0.65rem;
  border: none;
  border-radius: 0;
  background: none;
  box-shadow: none;
}

/* Harmony title: same treatment as .gcp-section__title (was “Shape”) */
.gcp-shape-copy__harmony {
  margin: 0 0 0.65rem;
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--gcp-muted);
  line-height: 1.3;
  transition: color 0.35s ease;
}

.gcp-shape-copy__desc {
  margin: -0.35rem 0 0.65rem;
  font-size: 0.8125rem;
  font-weight: 500;
  letter-spacing: normal;
  line-height: 1.45;
  color: var(--gcp-muted);
  transition: color 0.35s ease;
}

.gcp-harmony--shape.gcp-harmony--flash .gcp-shape-copy__harmony,
.gcp-harmony--shape.gcp-harmony--flash .gcp-shape-copy__desc {
  color: var(--gcp-accent);
}

/* Swatches */
.gcp-swatches {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.gcp-swatch {
  display: grid;
  grid-template-columns: 3.25rem 1fr auto;
  gap: 0.65rem;
  align-items: center;
  padding: 0.5rem 0.55rem;
  border: 1px solid var(--gcp-border);
  border-radius: 8px;
  background: var(--gcp-surface);
  transition:
    border-color 0.35s ease,
    background 0.35s ease;
}

.gcp-swatch__chip {
  width: 3.25rem;
  height: 3.25rem;
  border-radius: 6px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  transition: background-color 0.35s ease;
}

.gcp-swatch__meta {
  min-width: 0;
}

.gcp-swatch__codes {
  display: block;
  font-size: 0.6875rem;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.02em;
  word-break: break-all;
}

.gcp-swatch__copy {
  flex-shrink: 0;
  padding: 0.35rem 0.5rem;
  border: 1px solid var(--gcp-border);
  border-radius: 6px;
  background: var(--gcp-input-bg);
  font: inherit;
  font-size: 0.6875rem;
  font-weight: 600;
  cursor: pointer;
  color: var(--gcp-text);
  transition:
    border-color 0.15s ease,
    color 0.15s ease;
}

.gcp-swatch__copy:hover {
  border-color: var(--gcp-accent);
  color: var(--gcp-accent);
}

.gcp-swatch__copy--flash {
  border-color: var(--gcp-accent);
  color: var(--gcp-accent);
  background: var(--gcp-accent-dim);
}

/* In context: illustration vs UI */
.gcp-seg--context {
  margin-bottom: 0.75rem;
}

.gcp-context-panels {
  min-width: 0;
}

.gcp-context-panel[hidden] {
  display: none !important;
}

.gcp-context-illustr {
  padding: 1.75rem 1rem;
  border: 1px solid var(--gcp-border);
  border-radius: 8px;
  background: var(--gcp-surface);
  overflow: hidden;
  min-height: 5rem;
}

.gcp-context-pattern {
  padding: 1.75rem 1rem;
  border: 1px solid var(--gcp-border);
  border-radius: 8px;
  background: var(--gcp-surface);
  overflow: hidden;
  min-height: 5rem;
}

.gcp-context-illustr__live {
  min-width: 0;
}

.gcp-context-pattern__live {
  min-width: 0;
}

.gcp-context-illustr__live svg {
  display: block;
  width: 100%;
  height: auto;
  max-height: 14rem;
}

.gcp-context-pattern__live svg {
  display: block;
  width: 100%;
  height: auto;
  max-height: 14rem;
}

.gcp-context-illustr__empty {
  margin: 0;
}

.gcp-context-pattern__empty {
  margin: 0;
}

/* Mock UI */
.gcp-mock {
  padding: 1rem;
  border: 1px solid var(--gcp-border);
  border-radius: 8px;
  background: var(--gcp-surface);
  overflow: hidden;
}

.gcp-mock__gradient {
  height: 3.5rem;
  border-radius: 6px;
  margin-bottom: 0.85rem;
  transition: background 0.45s ease;
}

.gcp-mock__row {
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
}

.gcp-mock__btn {
  align-self: flex-start;
  padding: 0.45rem 1rem;
  border: none;
  border-radius: 6px;
  font: inherit;
  font-size: 0.75rem;
  font-weight: 600;
  color: #fff;
  cursor: default;
  transition:
    background 0.35s ease,
    color 0.35s ease;
}

.gcp-mock__card {
  padding: 0.65rem 0.75rem;
  border-radius: 6px;
  border: 1px solid var(--gcp-border);
  background: var(--gcp-input-focus);
  transition:
    border-color 0.35s ease,
    background 0.35s ease;
}

.gcp-mock__card-title {
  display: block;
  font-size: 0.8125rem;
  font-weight: 600;
  margin-bottom: 0.2rem;
  transition: color 0.35s ease;
}

.gcp-mock__card-body {
  font-size: 0.6875rem;
  line-height: 1.45;
  color: var(--gcp-muted);
  transition: color 0.35s ease;
}

/* Triangle UI tab — swipe-to-unlock rows (palette colors on handles). Dark track by default; very light grey track when preview “Light background” is on. */
.gcp-mock__triangle-swipes {
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
}

.gcp-mock-swipe-fill {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  margin-bottom: 0.15rem;
}

.gcp-mock-swipe-fill__label {
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gcp-muted);
}

.gcp-seg--triangle-fill,
.gcp-seg--square-fill,
.gcp-seg--calendar-fill {
  align-self: stretch;
}

.gcp-seg--triangle-fill .gcp-seg__btn,
.gcp-seg--square-fill .gcp-seg__btn,
.gcp-seg--calendar-fill .gcp-seg__btn {
  font-size: 0.6875rem;
  padding: 0.4rem 0.45rem;
}

.gcp-mock__triangle-swipes[hidden] {
  display: none !important;
}

.gcp-mock__default[hidden] {
  display: none !important;
}

.gcp-mock-swipe {
  width: 100%;
  max-width: 18rem;
  margin-inline: auto;
}

.gcp-mock-swipe__track {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  min-height: 3.05rem;
  padding: 0.5rem;
  border-radius: 999px;
  background: #1a1d23;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.45);
}

.gcp-mock-swipe__handle {
  flex: 1 1 0;
  min-width: 0;
  max-width: 64%;
  padding: 0.55rem 0.5rem;
  border-radius: 999px;
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.01em;
  line-height: 1.3;
  text-align: center;
  white-space: nowrap;
  color: #fff;
  box-shadow:
    0 1px 2px rgba(0, 0, 0, 0.22),
    inset 0 1px 0 rgba(255, 255, 255, 0.12);
  transition:
    background 0.35s ease,
    color 0.35s ease;
}

.gcp-mock-swipe__label {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
}

.gcp-mock-swipe__chevrons {
  margin-left: auto;
  flex-shrink: 0;
  padding-right: 0.25rem;
  font-size: 1.05rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  line-height: 1;
  color: rgba(148, 156, 175, 0.55);
  user-select: none;
}

/* Light preview skin — swipe rows use a soft grey track (handles still use palette colors from JS). */
.gcp-panel--preview.gcp-panel--preview-light .gcp-mock-swipe__track {
  background: #e9ebf0;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.75),
    inset 0 -1px 1px rgba(0, 0, 0, 0.04);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-mock-swipe__chevrons {
  color: rgba(90, 97, 112, 0.4);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-mock-swipe__handle {
  box-shadow:
    0 1px 2px rgba(0, 0, 0, 0.1),
    inset 0 1px 0 rgba(255, 255, 255, 0.22);
}

/* Square UI tab — 2×2 progress rings (--sq-p from markup; --sq-a/--sq-b from JS). */
.gcp-mock__square-progress {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}

.gcp-mock__square-progress[hidden] {
  display: none !important;
}

.gcp-mock-square-fill {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  margin-bottom: 0.1rem;
}

.gcp-mock-square-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.85rem 0.75rem;
  align-items: center;
  justify-items: center;
}

.gcp-sq-ring {
  --sq-track: #4a4d45;
  position: relative;
  isolation: isolate;
  width: 100%;
  max-width: 5.75rem;
  aspect-ratio: 1;
  margin: 0 auto;
}

.gcp-sq-ring__track {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  z-index: 0;
  background: var(--sq-track);
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.38);
  -webkit-mask: radial-gradient(farthest-side, transparent 79.5%, #000 79.85%, #000 96.8%, transparent 100%);
  mask: radial-gradient(farthest-side, transparent 79.5%, #000 79.85%, #000 96.8%, transparent 100%);
}

.gcp-sq-ring__meter {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  z-index: 1;
  background: conic-gradient(
    from -90deg,
    var(--sq-a) 0deg,
    var(--sq-b) calc(var(--sq-p) * 3.6deg),
    transparent calc(var(--sq-p) * 3.6deg),
    transparent 360deg
  );
  -webkit-mask: radial-gradient(farthest-side, transparent 79.5%, #000 79.85%, #000 96.8%, transparent 100%);
  mask: radial-gradient(farthest-side, transparent 79.5%, #000 79.85%, #000 96.8%, transparent 100%);
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.28));
  transition: filter 0.35s ease;
}

.gcp-sq-ring__pct {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -52%);
  z-index: 3;
  font-size: 0.8125rem;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  pointer-events: none;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
  transition: color 0.35s ease;
}

.gcp-sq-ring__pct-sym {
  font-size: 0.72em;
  font-weight: 600;
  opacity: 0.92;
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-sq-ring {
  --sq-track: #c8ccd6;
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-sq-ring__track {
  box-shadow:
    inset 0 1px 2px rgba(255, 255, 255, 0.65),
    inset 0 -1px 2px rgba(0, 0, 0, 0.06);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-sq-ring__meter {
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.12));
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-sq-ring__pct {
  text-shadow:
    0 0 1px rgba(255, 255, 255, 0.9),
    0 1px 2px rgba(0, 0, 0, 0.12);
}

/* Golden-rectangle UI tab — stacked calendar planners */
.gcp-mock__calendar-planners {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}

.gcp-mock__calendar-planners[hidden] {
  display: none !important;
}

.gcp-mock-calendar-fill {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  margin-bottom: 0.1rem;
}

.gcp-cal-column {
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
}

.gcp-cal-card {
  padding: 1rem 1rem 1.1rem;
  border-radius: 10px;
  border: 1px solid var(--gcp-border);
  background: rgba(255, 255, 255, 0.04);
}

.gcp-cal-card__head {
  margin-bottom: 0.5rem;
}

.gcp-cal-card__title {
  margin: 0;
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--cal-accent, var(--gcp-accent));
}

.gcp-cal-weekbar {
  width: 100%;
  border-radius: 12px;
  padding: 0.55rem 0.55rem;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.22);
}

.gcp-cal-weekbar__grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 0.25rem;
  align-items: center;
}

.gcp-cal-day {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  color: #ffffff;
  min-width: 0;
}

.gcp-cal-day__num {
  font-size: 1rem;
  font-weight: 700;
  line-height: 1.05;
}

.gcp-cal-day__abbr {
  font-size: 0.55rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  opacity: 0.9;
  line-height: 1.1;
}

.gcp-cal-day--selected {
  background: #ffffff;
  border-radius: 12px;
  padding: 0.35rem 0.25rem;
  color: var(--cal-accent, var(--gcp-accent));
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.06);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-cal-card {
  background: var(--pv-surface-2);
  border-color: var(--pv-border);
}

/* Pentagon UI tab — activity card, pill progress bars, segmented donut */
.gcp-mock__pent-activity {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.gcp-mock__pent-activity[hidden] {
  display: none !important;
}

.gcp-pent-card {
  width: 100%;
  max-width: 18rem;
  margin-inline: auto;
  padding: 1rem 1rem 1.1rem;
  border-radius: 16px;
  border: 1px solid var(--gcp-border);
  background: rgba(255, 255, 255, 0.05);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
}

.gcp-pent-card__title {
  margin: 0 0 0.75rem;
  font-size: 1rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--gcp-text);
}

.gcp-pent-bars {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  margin-bottom: 0.85rem;
}

.gcp-pent-bar__row {
  display: grid;
  grid-template-columns: minmax(0, 4.85rem) minmax(0, 1fr) auto;
  gap: 0.4rem 0.5rem;
  align-items: center;
}

.gcp-pent-bar__label {
  margin: 0;
  min-width: 0;
  font-size: 0.6875rem;
  font-weight: 500;
  color: var(--gcp-muted);
}

.gcp-pent-bar__track-wrap {
  min-width: 0;
}

.gcp-pent-bar__track {
  height: 0.45rem;
  border-radius: 999px;
  background: rgba(0, 0, 0, 0.35);
  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.45);
  overflow: hidden;
}

.gcp-pent-bar__fill {
  height: 100%;
  width: calc(var(--pent-frac, 0) * 100%);
  max-width: 100%;
  border-radius: inherit;
  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06) inset;
  transition:
    width 0.35s ease,
    background 0.35s ease;
}

.gcp-pent-bar__count {
  margin: 0;
  font-size: 0.6875rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  color: var(--gcp-text);
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
  transition: color 0.35s ease;
}

.gcp-pent-donut-wrap {
  display: flex;
  justify-content: center;
  padding-top: 0.15rem;
}

.gcp-pent-donut {
  position: relative;
  width: min(11.5rem, 100%);
  aspect-ratio: 1;
}

.gcp-pent-donut__svg {
  display: block;
  width: 100%;
  height: auto;
  overflow: visible;
  animation: gcp-pent-donut-breathe 5.5s ease-in-out infinite;
}

@keyframes gcp-pent-donut-breathe {
  0%,
  100% {
    filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.32));
  }

  50% {
    filter: drop-shadow(0 2px 7px rgba(0, 0, 0, 0.42));
  }
}

.gcp-pent-donut__track-ring {
  stroke: rgba(255, 255, 255, 0.14);
  stroke-width: 4.35;
  stroke-linecap: round;
  opacity: 0.95;
}

.gcp-pent-donut__segment {
  stroke-linejoin: round;
  paint-order: stroke fill;
}

.gcp-pent-donut__total {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -52%);
  z-index: 2;
  max-width: 58%;
  font-size: clamp(1.85rem, 7.5vw, 2.45rem);
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.045em;
  line-height: 0.95;
  text-align: center;
  color: rgba(255, 255, 255, 0.94);
  text-shadow:
    0 1px 0 rgba(255, 255, 255, 0.06),
    0 2px 10px rgba(0, 0, 0, 0.45);
  pointer-events: none;
  transition: color 0.35s ease;
}

/* Dark preview: light numeral (no stale inline color when toggling theme) */
.gcp-panel--preview:not(.gcp-panel--preview-light) .gcp-pent-donut__total {
  color: rgba(255, 255, 255, 0.94);
  text-shadow:
    0 0 1px rgba(0, 0, 0, 0.85),
    0 0 18px rgba(0, 0, 0, 0.55),
    0 2px 6px rgba(0, 0, 0, 0.65);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-pent-card {
  background: var(--pv-surface-2);
  border-color: var(--pv-border);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.65);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-pent-card__title {
  color: var(--pv-text);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-pent-bar__track {
  background: #dfe2ea;
  box-shadow:
    inset 0 1px 2px rgba(255, 255, 255, 0.75),
    inset 0 -1px 1px rgba(0, 0, 0, 0.05);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-pent-bar__count {
  text-shadow:
    0 0 1px rgba(255, 255, 255, 0.85),
    0 1px 2px rgba(0, 0, 0, 0.12);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-pent-donut__svg {
  animation-name: gcp-pent-donut-breathe-light;
}

@keyframes gcp-pent-donut-breathe-light {
  0%,
  100% {
    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));
  }

  50% {
    filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.14));
  }
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-pent-donut__track-ring {
  stroke: rgba(0, 0, 0, 0.12);
}

.gcp-panel--preview.gcp-panel--preview-light .gcp-pent-donut__total {
  color: var(--pv-text);
  text-shadow:
    0 0 1px rgba(255, 255, 255, 0.9),
    0 1px 3px rgba(0, 0, 0, 0.12);
}

@media (prefers-reduced-motion: reduce) {
  .gcp-pent-donut__svg {
    animation: none;
    filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.32));
  }

  .gcp-panel--preview.gcp-panel--preview-light .gcp-pent-donut__svg {
    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));
  }
}

/* Toast */
.gcp-toast {
  padding: 0.55rem 0.65rem;
  border-radius: 8px;
  font-size: 0.8125rem;
  background: var(--gcp-surface-hover);
  color: var(--gcp-text);
  border: 1px solid var(--gcp-border);
}

.gcp-toast--preview {
  margin-top: 1rem;
}

.gcp-toast[hidden] {
  display: none;
}

.geometric-color-palettes .gcp-input::placeholder {
  color: var(--gcp-muted);
  opacity: 0.85;
}

/* Saved palettes — centered modal */
body.gcp-saved-drawer-open {
  overflow: hidden;
}

.gcp-saved-drawer[hidden] {
  display: none;
}

.gcp-saved-drawer {
  position: fixed;
  inset: 0;
  z-index: 500;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(1rem, 4vw, 2rem);
  box-sizing: border-box;
  pointer-events: none;
}

.gcp-saved-drawer.gcp-saved-drawer--open {
  pointer-events: auto;
}

.gcp-saved-drawer__backdrop {
  position: absolute;
  inset: 0;
  border: none;
  padding: 0;
  margin: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.55);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  opacity: 0;
  transition: opacity 0.28s ease;
}

.gcp-saved-drawer--open .gcp-saved-drawer__backdrop {
  opacity: 1;
}

.gcp-saved-drawer__panel {
  position: relative;
  z-index: 1;
  width: min(22rem, 100%);
  max-height: min(85vh, 34rem);
  min-height: 0;
  display: flex;
  flex-direction: column;
  background: var(--gcp-panel);
  border: 1px solid var(--gcp-border);
  border-radius: var(--gcp-radius);
  box-shadow:
    0 24px 64px rgba(0, 0, 0, 0.55),
    0 0 0 1px rgba(255, 255, 255, 0.04) inset;
  overflow: hidden;
  opacity: 0;
  transform: scale(0.96) translateY(0.75rem);
  transition:
    opacity 0.28s ease,
    transform 0.32s cubic-bezier(0.22, 1, 0.36, 1);
}

.gcp-saved-drawer--open .gcp-saved-drawer__panel {
  opacity: 1;
  transform: none;
}

/* Preview panel — library trigger */
.gcp-btn--library {
  width: 100%;
  justify-content: center;
}

.gcp-saved-drawer__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 1rem 1rem 0.75rem;
  border-bottom: 1px solid var(--gcp-border);
  flex-shrink: 0;
}

.gcp-saved-drawer__title {
  margin: 0;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--gcp-muted);
}

.gcp-saved-drawer__close {
  flex-shrink: 0;
  padding: 0.35rem 0.65rem;
  border: 1px solid var(--gcp-border);
  border-radius: 8px;
  background: var(--gcp-surface);
  color: var(--gcp-text);
  font: inherit;
  font-size: 0.75rem;
  font-weight: 500;
  cursor: pointer;
  transition:
    border-color 0.15s ease,
    background 0.15s ease;
}

.gcp-saved-drawer__close:hover {
  border-color: var(--gcp-border-hover);
  background: var(--gcp-surface-hover);
}

.gcp-saved-drawer__close:focus-visible {
  outline: 2px solid var(--gcp-accent);
  outline-offset: 2px;
}

.gcp-saved-drawer__body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 0.85rem 1rem 1.25rem;
  scrollbar-width: thin;
  scrollbar-color: rgba(255, 255, 255, 0.12) transparent;
}

.gcp-saved-drawer__hint {
  margin: 0 0 0.85rem;
}

.gcp-saved-drawer__empty {
  margin: 0;
  font-size: 0.8125rem;
  color: var(--gcp-muted);
  line-height: 1.45;
}

.gcp-saved-drawer__empty[hidden] {
  display: none;
}

.gcp-saved-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
}

.gcp-saved-item {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding: 0.65rem 0.7rem;
  border: 1px solid var(--gcp-border);
  border-radius: 10px;
  background: var(--gcp-surface);
}

.gcp-saved-item__strip {
  height: 7px;
  width: 100%;
  border-radius: 4px;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.35);
}

.gcp-saved-item__main {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  min-width: 0;
}

.gcp-saved-item__name {
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--gcp-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gcp-saved-item__date {
  font-size: 0.72rem;
  color: var(--gcp-muted);
}

.gcp-saved-item__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.gcp-saved-item__load,
.gcp-saved-item__delete {
  padding: 0.4rem 0.65rem;
  font-size: 0.75rem;
  min-height: 0;
}

.gcp-saved-item__delete {
  flex: 1;
  min-width: 5rem;
}

/* ——— Mobile (max-width: 991px) ——— */
@media (max-width: 991px) {
  body.gcp-palette-tray-expanded {
    overflow: hidden;
  }

  body.gcp-edition-overflow-open {
    overflow: hidden;
  }

  /* Escape edition panel stacking (380) so settings sit above preview tray (390) */
  body.gcp-edition-overflow-open .gcp-panel--edition {
    z-index: 480;
  }

  body.gcp-edition-overflow-open .gcp-panel--preview {
    z-index: 300;
  }
  .gcp-shape-select {
    margin-bottom: 0;
  }
  .geometric-color-palettes__inner {
    padding: 0 max(0, env(safe-area-inset-left, 0px)) max(0, env(safe-area-inset-bottom, 0px))
      max(0, env(safe-area-inset-right, 0px));
    height: auto;
    min-height: 100dvh;
    background: #000;
  }

  .gcp-app {
    min-height: 100dvh;
    --gcp-tray-peek: 7.35rem;
    /* Shape rail: 2.65rem buttons + 0.4rem vertical padding ×2 + bottom border */
    --gcp-mobile-topbar-h: calc(2.65rem + 0.8rem + 1px);
  }

  .gcp-workspace {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    min-height: 100dvh;
    max-width: 100%;
    position: relative;
    padding-bottom: 0;
  }
  .gcp-panel--edition {
    flex: 0 0 auto;
    order: 1;
    width: 100%;
    margin: 0;
    border: none;
    border-radius: 0;
    background: var(--gcp-panel);
    box-shadow: none;
    position: sticky;
    top: 0;
    z-index: 420;
    isolation: isolate;
    border-bottom: 1px solid var(--gcp-border);
  }

  body.gcp-wheel-view-zoomed .gcp-panel--edition {
    z-index: 420;
    background: var(--gcp-panel);
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.55);
  }

  body.gcp-wheel-view-zoomed .gcp-panel--edition .gcp-panel__scroll {
    background: var(--gcp-panel);
  }

  .gcp-panel--edition .gcp-panel__scroll {
    max-height: none;
    overflow: visible;
    padding: 0.4rem 0.5rem;
    display: flex;
    flex-direction: column;
    align-items: stretch;
    min-height: 0;
    background: var(--gcp-panel);
  }

  .gcp-edition-rail {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: stretch;
    gap: 0.35rem;
    width: 100%;
    flex-shrink: 0;
  }

  .gcp-section--edition-rail {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.45rem;
    padding-bottom: 0;
    margin-bottom: 0;
    border-bottom: none;
    width: 100%;
    min-width: 0;
  }

  .gcp-section--edition-rail .gcp-harmony--shape {
    display: none;
  }

  .gcp-shape-select {
    display: flex;
    flex-direction: row;
    flex: 0 1 auto;
    justify-content: flex-start;
    align-items: center;
    min-width: 0;
    max-width: none;
  }

  .gcp-shape-btn {
    flex: 0 0 auto;
    width: 2.65rem;
    height: 2.65rem;
    max-width: 2.65rem;
    max-height: 2.65rem;
    min-width: 0;
    aspect-ratio: 1;
    min-height: 2.65rem;
    padding: 0;
  }

  .gcp-shape-btn__graphic {
    width: 1.25rem;
    height: 1.25rem;
    max-width: 1.25rem;
    max-height: 1.25rem;
  }

  .gcp-shape-btn__fallback {
    font-size: 1.25rem;
  }

  .gcp-mobile-toolbar-actions {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: flex-end;
    gap: 0.5rem;
    flex-shrink: 0;
    margin-left: auto;
  }

  .gcp-mobile-toolbar-btn,
  .gcp-edition-menu-toggle.gcp-mobile-toolbar-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.65rem;
    height: 2.65rem;
    margin: 0;
    padding: 0;
    border: 2px solid var(--gcp-border);
    border-radius: 8px;
    background: var(--gcp-surface);
    color: var(--gcp-muted);
    cursor: pointer;
    box-shadow:
      inset 0 1px 2px rgba(0, 0, 0, 0.38),
      inset 0 -1px 1px rgba(255, 255, 255, 0.04);
    transition:
      border-color 0.2s ease,
      background 0.2s ease,
      color 0.2s ease;
    -webkit-tap-highlight-color: transparent;
    font-size: 1.05rem;
    line-height: 1;
  }

  .gcp-mobile-toolbar-btn:hover,
  .gcp-edition-menu-toggle.gcp-mobile-toolbar-btn:hover {
    border-color: var(--gcp-border-hover);
    background: var(--gcp-surface-hover);
    color: var(--gcp-text);
  }

  .gcp-mobile-toolbar-btn:focus-visible,
  .gcp-edition-menu-toggle.gcp-mobile-toolbar-btn:focus-visible {
    outline: 2px solid var(--gcp-accent);
    outline-offset: 2px;
  }

  .gcp-mobile-toolbar-btn__ico {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 1.25rem;
    height: 1.25rem;
    flex-shrink: 0;
  }

  .gcp-mobile-toolbar-btn__ico svg {
    display: block;
    width: 100%;
    height: 100%;
  }

  .gcp-edition-overflow {
    display: block;
    position: fixed;
    inset: 0;
    z-index: 450;
    pointer-events: none;
    visibility: hidden;
    transition: visibility 0.3s;
  }

  .gcp-edition-overflow.gcp-edition-overflow--open {
    pointer-events: auto;
    visibility: visible;
    z-index: 500;
  }

  .gcp-edition-overflow__backdrop {
    display: block;
    position: absolute;
    inset: 0;
    border: none;
    padding: 0;
    margin: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.55);
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    opacity: 0;
    transition: opacity 0.28s ease;
  }

  .gcp-edition-overflow--open .gcp-edition-overflow__backdrop {
    opacity: 1;
  }

  .gcp-edition-overflow__sheet {
    display: flex;
    flex-direction: column;
    position: fixed;
    left: 0;
    right: 0;
    top: var(
      --gcp-mobile-tray-top,
      calc(var(--gcp-mobile-topbar-h) + env(safe-area-inset-top, 0px))
    );
    bottom: auto;
    width: 100%;
    max-width: none;
    max-height: calc(
      100dvh - var(--gcp-mobile-tray-top, var(--gcp-mobile-topbar-h)) -
        env(safe-area-inset-bottom, 0px)
    );
    background: var(--gcp-panel);
    border-right: none;
    border-bottom: 1px solid var(--gcp-border);
    border-radius: 0 0 14px 14px;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.45);
    transform: translateY(-100%);
    transition: transform 0.38s cubic-bezier(0.22, 1, 0.36, 1);
    min-height: 0;
    z-index: 1;
  }

  .gcp-edition-overflow--open .gcp-edition-overflow__sheet {
    transform: translateY(0);
  }

  .gcp-edition-overflow__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    padding: 0.85rem 1rem 0.65rem;
    border-bottom: 1px solid var(--gcp-border);
    flex-shrink: 0;
  }

  .gcp-edition-overflow__title {
    margin: 0;
    font-size: 0.8125rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--gcp-muted);
  }

  .gcp-edition-overflow__close {
    flex-shrink: 0;
    padding: 0.35rem 0.65rem;
    border: 1px solid var(--gcp-border);
    border-radius: 8px;
    background: var(--gcp-surface);
    color: var(--gcp-text);
    font: inherit;
    font-size: 0.75rem;
    font-weight: 500;
    cursor: pointer;
    transition:
      border-color 0.15s ease,
      background 0.15s ease;
  }

  .gcp-edition-overflow__close:hover {
    border-color: var(--gcp-border-hover);
    background: var(--gcp-surface-hover);
  }

  .gcp-edition-overflow__close:focus-visible {
    outline: 2px solid var(--gcp-accent);
    outline-offset: 2px;
  }

  .gcp-edition-overflow__body {
    display: block;
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    padding: 0.85rem 1rem 1.35rem;
    scrollbar-width: thin;
    scrollbar-color: rgba(255, 255, 255, 0.12) transparent;
  }

  .gcp-palette-tray__backdrop {
    display: block;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    top: var(
      --gcp-mobile-tray-top,
      calc(var(--gcp-mobile-topbar-h) + env(safe-area-inset-top, 0px))
    );
    z-index: 385;
    border: none;
    padding: 0;
    margin: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.45);
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.28s ease;
  }

  .gcp-palette-tray__backdrop:not([hidden]) {
    opacity: 1;
    pointer-events: auto;
  }

  .gcp-canvas-column {
    flex: 1 1 auto;
    order: 2;
    align-self: stretch;
    min-height: 0;
    min-width: 0;
    position: relative;
    z-index: 1;
    background: #000;
    overflow: hidden;
  }

  .gcp-canvas-frame {
    min-height: 0;
    flex: 1;
    height: 100%;
    min-width: 0;
    width: 100%;
    background: #000;
    border: none;
    border-radius: 0;
    justify-content: center;
    overflow: hidden;
    padding: 0.25rem 0.35rem;
  }

  .gcp-canvas-stack {
    width: min(100%, 100vw - 0.35rem);
    max-width: calc(100vw - 0.35rem);
    max-height: min(
      100%,
      calc(
        100dvh - var(--gcp-mobile-tray-top, var(--gcp-mobile-topbar-h)) -
          var(--gcp-tray-peek) - 1rem
      )
    );
    aspect-ratio: 1 / 1;
    height: auto;
    align-self: center;
    flex: 0 1 auto;
  }

  .gcp-canvas-wheel-layer {
    touch-action: none;
    z-index: 0;
  }

  .gcp-canvas--overlay {
    z-index: 2;
    pointer-events: auto;
  }

  body.gcp-wheel-view-zoomed .gcp-canvas-wheel-layer {
    z-index: 0;
  }

  .gcp-panel--preview {
    order: 3;
    position: fixed;
    left: 0;
    right: 0;
    top: var(
      --gcp-mobile-tray-top,
      calc(var(--gcp-mobile-topbar-h) + env(safe-area-inset-top, 0px))
    );
    bottom: 0;
    z-index: 390;
    margin: 0;
    border: none;
    border-radius: 14px 14px 0 0;
    min-height: 0;
    height: auto;
    max-height: none;
    background: var(--gcp-panel);
    box-shadow:
      0 -8px 32px rgba(0, 0, 0, 0.55),
      0 -1px 0 rgba(255, 255, 255, 0.04);
    transform: translateY(calc(100% - var(--gcp-tray-peek)));
    transition:
      transform 0.38s cubic-bezier(0.22, 1, 0.36, 1),
      box-shadow 0.25s ease;
    padding-bottom: env(safe-area-inset-bottom, 0px);
    will-change: transform;
  }

  .gcp-panel--preview.gcp-panel--preview--tray-expanded {
    transform: translateY(0);
    box-shadow:
      0 -12px 48px rgba(0, 0, 0, 0.6),
      0 -1px 0 rgba(255, 255, 255, 0.06);
  }

  .gcp-panel--preview .gcp-panel__scroll {
    height: 100%;
    max-height: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    padding: 0 20px;
    min-height: 0;
  }

  .gcp-panel--preview.gcp-panel--preview--tray-expanded .gcp-panel__scroll {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
  }

  .gcp-palette-tray__handle {
    flex: 0 0 auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.2rem;
    width: 100%;
    margin: 0;
    padding: 0.35rem 0.75rem 0.25rem;
    border: none;
    border-radius: 14px 14px 0 0;
    background: var(--gcp-panel);
    color: var(--gcp-muted);
    font: inherit;
    cursor: grab;
    touch-action: none;
    -webkit-tap-highlight-color: transparent;
    transition: background 0.2s ease;
  }

  .gcp-palette-tray__handle:active {
    cursor: grabbing;
  }

  .gcp-panel--preview.gcp-panel--preview--tray-dragging {
    transition: none;
  }

  .gcp-palette-tray__handle:focus-visible {
    outline: 2px solid var(--gcp-accent);
    outline-offset: -2px;
  }

  .gcp-palette-tray__grip {
    display: block;
    width: 2.25rem;
    height: 4px;
    border-radius: 99px;
    background: rgba(255, 255, 255, 0.18);
  }

  .gcp-palette-tray__label {
    font-size: 0.625rem;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--gcp-muted);
  }

  .gcp-panel--preview:not(.gcp-panel--preview--tray-expanded) .gcp-section--palette-tray-expandable {
    display: none !important;
  }

  .gcp-panel--preview .gcp-section--mobile-palette-bar {
    margin: 0;
    border-bottom: none;
    flex: 1 1 auto;
    min-height: 0;
  }

  .gcp-panel--preview .gcp-section--mobile-palette-bar .gcp-section__title {
    display: none;
  }

  .gcp-panel--preview .gcp-swatches {
    flex-direction: row;
    flex-wrap: nowrap;
    gap: 0.45rem;
    overflow-x: auto;
    overflow-y: hidden;
    padding: 0.1rem 0 0.2rem;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
  }

  .gcp-panel--preview .gcp-swatch {
    flex: 0 0 auto;
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: auto auto auto;
    justify-items: center;
    align-items: center;
    gap: 0.3rem;
    min-width: 4.5rem;
    max-width: 6.5rem;
    padding: 0.45rem 0.5rem 0.5rem;
    text-align: center;
  }

  .gcp-panel--preview .gcp-swatch__chip {
    grid-row: 1;
    width: 2.5rem;
    height: 2.5rem;
  }

  .gcp-panel--preview .gcp-swatch__meta {
    grid-row: 2;
    width: 100%;
    min-width: 0;
  }

  .gcp-panel--preview .gcp-swatch__codes {
    display: block;
    font-size: 0.625rem;
    line-height: 1.25;
    text-align: center;
    word-break: break-all;
  }

  .gcp-panel--preview .gcp-swatch__copy {
    grid-row: 3;
    width: 100%;
    justify-self: stretch;
  }

  .gcp-panel--preview:not(.gcp-panel--preview--tray-expanded) .gcp-swatch {
    grid-template-rows: auto auto;
    min-width: 4.25rem;
  }

  .gcp-panel--preview:not(.gcp-panel--preview--tray-expanded) .gcp-swatch__copy {
    display: none !important;
  }

  .gcp-panel--preview.gcp-panel--preview--tray-expanded .gcp-section--mobile-palette-bar {
    flex: 0 0 auto;
  }

  .gcp-panel--preview .gcp-toast--preview {
    position: fixed;
    bottom: max(calc(var(--gcp-tray-peek) + 1rem), calc(env(safe-area-inset-bottom, 0px) + var(--gcp-tray-peek) + 0.35rem));
    left: 50%;
    transform: translateX(-50%);
    z-index: 460;
    max-width: min(22rem, calc(100vw - 2rem));
    margin: 0;
  }

  .gcp-btn--library-from-settings {
    display: inline-flex;
  }
  .gcp-panel {
    min-height: 0;
  }
}
