/*
 * This is a manifest file that'll be compiled into application.css.
 *
 * With Propshaft, assets are served efficiently without preprocessing steps. You can still include
 * application-wide styles in this file, but keep in mind that CSS precedence will follow the standard
 * cascading order, meaning styles declared later in the document or override earlier ones,
 * depending on specificity.
 *
 * Consider organizing styles into separate files for maintainability.
 */

/*
 * Inter, self-hosted (latin subset, app/assets/fonts). Served same-origin with
 * the 1-year digest cache instead of the render-blocking Google Fonts chain.
 * Weights 300/800 were declared but unused in any view/component, so only
 * 400/500/600/700 ship. Propshaft rewrites the relative url()s to digests.
 */
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/inter-400-1e94a563.woff2") format("woff2");
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/assets/inter-500-5949f5fc.woff2") format("woff2");
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/assets/inter-600-a957bd0d.woff2") format("woff2");
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 700;
  /* `optional` (not `swap`) on the hero weight: the LCP element is the bold H1.
     `swap` paints it in a fallback then re-paints when Inter-700 arrives, and
     that late re-paint is what Lighthouse records as LCP. `optional` keeps the
     fallback if 700 isn't ready within the ~100ms block period (no swap →
     LCP locks at the first paint). The 700 preload below is fetchpriority:high
     so most visitors still get Inter inside that window. */
  font-display: optional;
  src: url("/assets/inter-700-cbc762c0.woff2") format("woff2");
}

/* Range slider styling for simple logo tool */
.slider {
  appearance: none;
  cursor: pointer;
  width: 100%;
  height: 2.75rem;
  border-radius: 0.5rem;
  background: transparent;
}

/* Keep the visible track inside the larger input hit box. */
.slider::-webkit-slider-runnable-track {
  height: 0.5rem;
  border-radius: 0.5rem;
  background: var(--sl-border-hover);
}

/* WebKit browsers (Chrome, Safari, Edge) */
.slider::-webkit-slider-thumb {
  appearance: none;
  margin-top: -0.5rem;
  width: 1.5rem;
  height: 1.5rem;
  border-radius: 9999px;
  background: var(--sl-accent);
  cursor: pointer;
  transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1);
}

.slider::-webkit-slider-thumb:hover {
  transform: scale(1.1);
  box-shadow: 0 0 10px color-mix(in srgb, var(--sl-accent) 30%, transparent);
}

/* Firefox */
.slider::-moz-range-thumb {
  width: 1.5rem;
  height: 1.5rem;
  border-radius: 9999px;
  background: var(--sl-accent);
  cursor: pointer;
  border: none;
  transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1);
}

.slider::-moz-range-thumb:hover {
  transform: scale(1.1);
  box-shadow: 0 0 10px color-mix(in srgb, var(--sl-accent) 30%, transparent);
}

/* Firefox track */
.slider::-moz-range-track {
  height: 0.5rem;
  border-radius: 0.5rem;
  background: var(--sl-border-hover);
  border: none;
}

/* Keep the track edge and thumb visible in the user's system colors. */
@media (forced-colors: active) {
  .slider,
  input[type="range"].appearance-none {
    border: 1px solid ButtonText;
  }

  /* The idea validator keeps its native thumb, which the system draws in its own colours. */
  .slider::-webkit-slider-thumb {
    background: ButtonText;
  }

  .slider::-moz-range-thumb {
    background: ButtonText;
  }
}

/* Dialogs are styled only by the .sl-dialog recipe in
   app/assets/tailwind/application.css. This sheet is not in a cascade
   layer, so a dialog rule here would override every dialog's utilities. */
