:root {
  --blue:      #0057a8;
  --blue-dk:   #003d7a;
  --blue-md:   #006acc;
  --blue-lt:   #e6f0fa;
  --orange:    #f05a00;
  --orange-dk: #c94800;
  --orange-lt: #fff3eb;
  --gold:      #e6a817;
  --white:     #ffffff;
  --off:       #f5f8fc;
  --g100:      #eef1f5;
  --g200:      #dde2ea;
  --g400:      #9aa4b2;
  --g600:      #5c6b7a;
  --text:      #1a2330;
  --muted:     #5c6b7a;
  --r4:4px;--r8:8px;--r12:12px;--r16:16px;--r24:24px;
  --sh1:0 1px 4px rgba(0,0,0,.07);
  --sh2:0 4px 18px rgba(0,0,0,.10);
  --sh3:0 12px 48px rgba(0,0,0,.14);
  /* Sofia Sans for text and UI -- the family valeotravel.net uses, matching
     the main site. --fs stays Source Serif 4 for display type. */
  --f:'Sofia Sans',system-ui,sans-serif;
  --fs:'Source Serif 4',Georgia,serif;
  /* ── OFFER BADGE GRADIENTS ────────────────────────────────────────────
     Shared by every badge that marks an offer -- the card's -NN% and Топ
     цена, the detail page's, and the featured tile's -- so the four cannot
     drift apart.

     Both stay inside the brand's own warm range. An earlier version swept
     amber through orange into magenta, which is lastminute.bg's signature
     and read as theirs rather than ours; the magenta is gone and the sweep
     ends on the brand's deep vermilion instead.

     The two are told apart by VALUE, not hue: the discount is dark enough
     for white text, Топ цена light enough for dark. Mid-stop luminance is
     0.25 against 0.60, so they stay distinct even side by side on a photo.

     Direction is doing accessibility work, not just decoration. The light
     end sits at 0%, under the badge's icon disc, and the dark end runs
     beneath the TEXT: white on #ffa023 is 2.04:1 and unreadable, while
     #ef4f08 is 3.63 and #c41f06 is 5.92, both clearing the 3:1 large-bold
     threshold. Reversed, this would look identical in a swatch and fail on
     the page. Keep the light stop first. */
  --grad-hot:linear-gradient(100deg,#ffa023 0%,#ef4f08 38%,#c41f06 100%);
  --sh-hot:0 3px 12px rgba(196,31,6,.34);
  /* Gold keeps dark text (10.8:1 light end, 6.2:1 dark), so it may run
     brightest first -- there is no contrast floor to respect. */
  --grad-gold:linear-gradient(100deg,#ffe45c 0%,#ffc21f 50%,#ff9500 100%);
  --sh-gold:0 3px 12px rgba(255,149,0,.34);

  --save:#0f8a55;
  --save-dk:#0b6b41;
  /* Validation red. Not a new colour: --x-ico already draws the design's
     "no" cross in #c0392b, so errors reuse the mark readers know. Orange is
     deliberately not used -- it is the CTA, and a field that looks like a
     button is the opposite of a warning. */
  --err:#c0392b;
  --err-lt:#fdecea;
  --t:200ms ease;
  --clock-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='8' cy='8' r='6.4'/%3E%3Cpath d='M8 4.4V8l2.6 1.6'/%3E%3C/svg%3E");
  --heart-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3E%3Cpath d='M8 14.2S1.6 10 1.6 5.9A3.6 3.6 0 0 1 8 4a3.6 3.6 0 0 1 6.4 1.9c0 4.1-6.4 8.3-6.4 8.3z'/%3E%3C/svg%3E");
  --star-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M8 1.6l1.9 3.9 4.3.6-3.1 3 .7 4.3L8 11.4l-3.8 2 .7-4.3-3.1-3 4.3-.6z'/%3E%3C/svg%3E");
  --star-ico-dk:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%233d2a00'%3E%3Cpath d='M8 1.6l1.9 3.9 4.3.6-3.1 3 .7 4.3L8 11.4l-3.8 2 .7-4.3-3.1-3 4.3-.6z'/%3E%3C/svg%3E");
  --chk-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='%230b6b41' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 6.3 4.6 9 10 3.2'/%3E%3C/svg%3E");
  --x-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='%23c0392b' stroke-width='2.2' stroke-linecap='round'%3E%3Cpath d='M3 3l6 6M9 3l-6 6'/%3E%3C/svg%3E");
  --pct-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.4 8.7V3.1a.8.8 0 0 1 .8-.8h5.6l5 5a.8.8 0 0 1 0 1.1l-4.5 4.5a.8.8 0 0 1-1.1 0z'/%3E%3Ccircle cx='5.4' cy='5.4' r='1.05'/%3E%3C/svg%3E");
}
