/* bloudraad white-label for Woodpecker — injected via WOODPECKER_CUSTOM_CSS_FILE. */
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Outfit:wght@500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap");

html { font-size: 16px !important; }

:root {
  --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif !important;
  --font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace !important;
  /* Primary action = brand --bloudraad-button-primary-bg #1E40AF, fixed both
     modes (white on it = 8.72:1). All three shades collapse to #1E40AF so the
     submit/save button reads brand-blue whichever shade utility paints it
     (-100 fill / -300 border were the source of the measured #2563EB/#1E3A8A). */
  --wp-primary-100: #1E40AF !important; --wp-primary-200: #1E40AF !important; --wp-primary-300: #1E40AF !important;
  --wp-primary-text-100: #FFFFFF !important;
  --wp-link-100: #1E40AF !important; --wp-link-200: #1D4ED8 !important;
  --wp-control-ok-100: #1E40AF !important; --wp-control-ok-200: #1E40AF !important; --wp-control-ok-300: #1E40AF !important;
}
:root[data-theme="dark"] {
  /* #1E40AF fixed in dark too (brand primary is mode-stable, 8.72:1). */
  --wp-primary-100: #1E40AF !important; --wp-primary-200: #1E40AF !important; --wp-primary-300: #1E40AF !important;
  --wp-primary-text-100: #FFFFFF !important;
  --wp-link-100: #93C5FD !important; --wp-link-200: #BFDBFE !important;
  --wp-control-ok-100: #1E40AF !important; --wp-control-ok-200: #1E40AF !important; --wp-control-ok-300: #1E40AF !important;
}

/* Headings use the brand display face (Outfit), the bloudraad wordmark typeface. */
h1, h2, h3, h4, h5, h6 { font-family: "Outfit", "Inter", ui-sans-serif, sans-serif !important; font-weight: 600 !important; letter-spacing: -0.01em !important; }

/* Type scale (px). */
.text-xs { font-size: 12px !important; } .text-sm { font-size: 14px !important; } .text-base { font-size: 16px !important; }
.text-lg { font-size: 18px !important; } .text-xl { font-size: 20px !important; } .text-2xl { font-size: 24px !important; } .text-3xl { font-size: 28px !important; }

/* ===========================================================================
   FORM CONTROLS — bloudraad brand mapping.

   Woodpecker is Tailwind v4; checkbox/radio are native <input appearance:none>
   with a CSS :before glyph, coloured via utilities that resolve through
   --color-wp-control-{ok,neutral}-*. custom.css loads BEFORE the route-split
   Checkbox-* and General-* CSS, whose rules are attribute-scoped: .checkbox
   [data-v-3445aaef] = (0,2,0) and .radio[data-v-80dd3401] = (0,2,0) both
   carry !important on width/height/transition. A bare 'input.checkbox' =
   (0,1,1) loses the !important tie on specificity, so the box stayed 1.3rem
   and the scoped focus/transition leaked through. We therefore qualify the
   checkbox/radio selectors with the data-v attribute (input.checkbox
   [data-v-3445aaef] = (0,2,1)) so brand !important values outrank Woodpecker's.
   The checked fill is brand --bloudraad-button-primary-bg #1E40AF (white on it
   = 8.72:1, the same reason the brand refuses accent-color) and is fixed in
   BOTH modes; borders/placeholders use the muted token; the focus ring is the
   brand's 2px solid focus-ring (custom controls) or 3px accent-ring halo at
   0.15 (native text fields). Dark keys off :root[data-theme="dark"].
   =========================================================================== */

/* ---- CHECKBOX -----------------------------------------------------------
   20px box, radius-sm 4px, 1.5px muted border; checked -> #1E40AF fill+border
   (both modes) with a white clip-path tick (brand checkmark, replacing WP's
   rotated-border glyph). Light unchecked border #6F6862, dark #858585.
   Qualified with [data-v-3445aaef] to outrank Woodpecker's scoped 1.3rem. */
input.checkbox[data-v-3445aaef] {
  appearance: none !important; -webkit-appearance: none !important;
  width: 20px !important; height: 20px !important; flex: none !important;
  border-radius: 4px !important;
  /* Longhands (not the 'border' shorthand) so the 1.5px width is not clamped to
     1px by Tailwind's later '.border' (border-width:1px) — mirrors the Forgejo
     checkbox rule. */
  border-width: 1.5px !important; border-style: solid !important; border-color: #6F6862 !important;
  background-color: rgba(0, 0, 0, 0.02) !important;
  display: grid !important; place-content: center !important;
  cursor: pointer !important;
  transition: background-color 150ms ease-out, border-color 150ms ease-out !important;
}
:root[data-theme="dark"] input.checkbox[data-v-3445aaef] {
  border-color: #858585 !important; background-color: rgba(255, 255, 255, 0.03) !important;
}
input.checkbox[data-v-3445aaef]:before {
  content: "" !important;
  width: 11px !important; height: 11px !important;
  border: 0 !important; background: #FFFFFF !important; border-radius: 0 !important;
  position: static !important; top: auto !important; left: auto !important;
  transform: scale(0) !important;
  clip-path: polygon(14% 47%, 0 60%, 40% 100%, 100% 22%, 86% 9%, 38% 70%) !important;
  transition: transform 150ms ease-out !important;
}
input.checkbox[data-v-3445aaef]:checked {
  background-color: #1E40AF !important; border-color: #1E40AF !important;
}
:root[data-theme="dark"] input.checkbox[data-v-3445aaef]:checked {
  background-color: #1E40AF !important; border-color: #1E40AF !important;
}
input.checkbox[data-v-3445aaef]:checked:before { transform: scale(1) !important; }
input.checkbox[data-v-3445aaef]:indeterminate:before {
  transform: scale(1) !important; width: 11px !important; height: 2.5px !important;
  border-radius: 1px !important; clip-path: none !important;
}
input.checkbox[data-v-3445aaef]:focus-visible {
  outline: 2px solid #1E40AF !important; outline-offset: 2px !important; box-shadow: none !important;
}
:root[data-theme="dark"] input.checkbox[data-v-3445aaef]:focus-visible { outline-color: #5B8DEF !important; }
input.checkbox[data-v-3445aaef][aria-invalid="true"] { border-color: #B91C1C !important; }
:root[data-theme="dark"] input.checkbox[data-v-3445aaef][aria-invalid="true"] { border-color: #EF4444 !important; }
input.checkbox[data-v-3445aaef]:disabled {
  opacity: 0.5 !important; cursor: not-allowed !important; pointer-events: none !important;
}

/* ---- RADIO --------------------------------------------------------------
   18px circle, full radius, 2px muted border; checked -> solid #1E40AF fill +
   border (BOTH modes — was dark-card in dark, only the rim was blue) with a
   white centre dot (10px diameter via radial-gradient, replacing WP's .5rem
   dot). Qualified with [data-v-80dd3401] to outrank Woodpecker's scoped rule. */
input.radio[data-v-80dd3401] {
  appearance: none !important; -webkit-appearance: none !important;
  width: 18px !important; height: 18px !important; flex: none !important;
  border-radius: 9999px !important;
  border: 2px solid #6F6862 !important;
  background-color: rgba(0, 0, 0, 0.02) !important;
  cursor: pointer !important;
  transition: border-color 150ms ease-out, box-shadow 150ms ease-out !important;
}
:root[data-theme="dark"] input.radio[data-v-80dd3401] {
  border-color: #858585 !important; background-color: rgba(255, 255, 255, 0.03) !important;
}
input.radio[data-v-80dd3401]:before { content: "" !important; display: none !important; }
input.radio[data-v-80dd3401]:checked {
  border-color: #1E40AF !important;
  background-color: #1E40AF !important;
  background-image: radial-gradient(circle at center, #FFFFFF 0 5px, transparent 5px) !important;
}
:root[data-theme="dark"] input.radio[data-v-80dd3401]:checked {
  border-color: #1E40AF !important;
  background-color: #1E40AF !important;
  background-image: radial-gradient(circle at center, #FFFFFF 0 5px, transparent 5px) !important;
}
input.radio[data-v-80dd3401]:focus-visible {
  outline: 2px solid #1E40AF !important; outline-offset: 2px !important; box-shadow: none !important;
}
:root[data-theme="dark"] input.radio[data-v-80dd3401]:focus-visible { outline-color: #5B8DEF !important; }
input.radio[data-v-80dd3401][aria-invalid="true"] { border-color: #B91C1C !important; border-width: 1.5px !important; }
:root[data-theme="dark"] input.radio[data-v-80dd3401][aria-invalid="true"] { border-color: #EF4444 !important; }
input.radio[data-v-80dd3401]:disabled {
  opacity: 0.5 !important; cursor: not-allowed !important; pointer-events: none !important;
}

/* ---- TEXT INPUT / NUMBER / SEARCH / SELECT (native text fields) ----------
   Brand .input skin: 14px, padding 10/14, radius-md 8px, 1px border token,
   card bg; focus -> blue border + 3px accent-ring halo rgba(30,64,175,0.15).
   Brand .input is ~38px tall; padding 10/14 + 1px border + 14px/1.4 line gives
   that target, replacing Woodpecker's taller native field. */
input:not([type="checkbox"]):not([type="radio"]), textarea, select {
  font-family: "Inter", ui-sans-serif, system-ui, sans-serif !important;
  font-size: 14px !important; line-height: 1.4 !important;
  color: #171412 !important;
  padding: 10px 14px !important; border-radius: 8px !important;
  border: 1px solid rgba(0, 0, 0, 0.08) !important;
  background-color: rgba(0, 0, 0, 0.02) !important;
  transition: border-color 150ms ease-out, box-shadow 150ms ease-out !important;
}
:root[data-theme="dark"] input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="dark"] textarea, :root[data-theme="dark"] select {
  color: #E5E5E5 !important;
  border-color: rgba(255, 255, 255, 0.06) !important;
  background-color: rgba(255, 255, 255, 0.03) !important;
}
input:not([type="checkbox"]):not([type="radio"])::placeholder, textarea::placeholder {
  color: #6F6862 !important; opacity: 1 !important;
}
:root[data-theme="dark"] input:not([type="checkbox"]):not([type="radio"])::placeholder,
:root[data-theme="dark"] textarea::placeholder { color: #858585 !important; }
input:not([type="checkbox"]):not([type="radio"]):focus,
input:not([type="checkbox"]):not([type="radio"]):focus-visible,
textarea:focus, textarea:focus-visible, select:focus, select:focus-visible {
  border-color: #1E40AF !important;
  box-shadow: 0 0 0 3px rgba(30, 64, 175, 0.15) !important;
  outline: none !important;
}
:root[data-theme="dark"] input:not([type="checkbox"]):not([type="radio"]):focus,
:root[data-theme="dark"] input:not([type="checkbox"]):not([type="radio"]):focus-visible,
:root[data-theme="dark"] textarea:focus, :root[data-theme="dark"] textarea:focus-visible,
:root[data-theme="dark"] select:focus, :root[data-theme="dark"] select:focus-visible {
  border-color: #5B8DEF !important;
  box-shadow: 0 0 0 3px rgba(30, 64, 175, 0.15) !important;
}
input:not([type="checkbox"]):not([type="radio"])[aria-invalid="true"],
textarea[aria-invalid="true"], select[aria-invalid="true"] {
  border: 1.5px solid #B91C1C !important;
}
:root[data-theme="dark"] input:not([type="checkbox"]):not([type="radio"])[aria-invalid="true"],
:root[data-theme="dark"] textarea[aria-invalid="true"], :root[data-theme="dark"] select[aria-invalid="true"] {
  border-color: #EF4444 !important;
}
input:not([type="checkbox"]):not([type="radio"]):disabled,
textarea:disabled, select:disabled {
  opacity: 0.5 !important; cursor: not-allowed !important; pointer-events: none !important;
}

/* ---- SELECT chevron ------------------------------------------------------
   Brand .select draws a CSS chevron from two crossed linear-gradients; reserve
   40px on the right for it (the base rule above pads 14px). */
select {
  appearance: none !important; -webkit-appearance: none !important;
  padding-right: 40px !important; cursor: pointer !important;
  background-image:
    linear-gradient(45deg, transparent 50%, #6F6862 50%),
    linear-gradient(135deg, #6F6862 50%, transparent 50%) !important;
  background-position: calc(100% - 18px) calc(50% + 1px), calc(100% - 13px) calc(50% + 1px) !important;
  background-size: 5px 5px, 5px 5px !important;
  background-repeat: no-repeat, no-repeat !important;
}
:root[data-theme="dark"] select {
  background-image:
    linear-gradient(45deg, transparent 50%, #858585 50%),
    linear-gradient(135deg, #858585 50%, transparent 50%) !important;
}

/* ---- TEXTAREA -----------------------------------------------------------
   Same .input skin + min-height 80px, resize vertical-only. */
textarea { min-height: 80px !important; resize: vertical !important; }

/* ---- BUTTON -------------------------------------------------------------
   Brand md radius 8px, 14/500, 8/14 padding. The primary/submit button is the
   brand primary token --bloudraad-button-primary-bg #1E40AF, fixed in BOTH
   modes (white on #1E40AF = 8.72:1) — Woodpecker had it on its ok palette
   (#2563EB light / #3B82F6 dark). Neutral buttons -> tertiary (transparent +
   border, not the WP grey fill). */
button.rounded-md.border, a.rounded-md.border {
  font-size: 14px !important; font-weight: 500 !important;
  padding: 8px 14px !important; border-radius: 8px !important;
}
/* Primary / submit: brand primary, fixed both modes. Woodpecker colours these
   with the ok/primary palette via bg-/border- utilities and resolves them
   through --wp-* vars; override the resolved colours directly. */
button.bg-wp-control-ok-200, a.bg-wp-control-ok-200,
button.bg-wp-primary-200, a.bg-wp-primary-200,
button[type="submit"], a[type="submit"] {
  background-color: #1E40AF !important;
  border-color: #1E40AF !important;
  color: #FFFFFF !important;
}
:root[data-theme="dark"] button.bg-wp-control-ok-200, :root[data-theme="dark"] a.bg-wp-control-ok-200,
:root[data-theme="dark"] button.bg-wp-primary-200, :root[data-theme="dark"] a.bg-wp-primary-200,
:root[data-theme="dark"] button[type="submit"], :root[data-theme="dark"] a[type="submit"] {
  background-color: #1E40AF !important;
  border-color: #1E40AF !important;
  color: #FFFFFF !important;
}
button.bg-wp-control-neutral-100, a.bg-wp-control-neutral-100 { background-color: transparent !important; }

/* Destructive / delete button -> brand destructive token #B91C1C, FIXED both
   modes (white on #B91C1C = 6.47:1). Woodpecker's delete button is
   'border-wp-error-300 bg-wp-error-100 hover:bg-wp-error-200 text-white': the
   RESTING fill is bg-wp-error-100 (#B91C1C light / #991B1B dark) and -200 is
   only the hover variant. Pin both the resting (-100) and the historical -200
   fill to the mode-stable brand destructive, and hold it through hover. */
button.bg-wp-error-100, a.bg-wp-error-100,
button.bg-wp-error-200, a.bg-wp-error-200 {
  background-color: #B91C1C !important;
  border-color: #B91C1C !important;
  color: #FFFFFF !important;
}
:root[data-theme="dark"] button.bg-wp-error-100, :root[data-theme="dark"] a.bg-wp-error-100,
:root[data-theme="dark"] button.bg-wp-error-200, :root[data-theme="dark"] a.bg-wp-error-200 {
  background-color: #B91C1C !important;
  border-color: #B91C1C !important;
  color: #FFFFFF !important;
}
/* Hover/active: brand destructive brightness, not the WP -200 hover swap. */
button.bg-wp-error-100:hover, a.bg-wp-error-100:hover,
button.bg-wp-error-200:hover, a.bg-wp-error-200:hover { filter: brightness(1.1) !important; }
button.bg-wp-error-100:active, a.bg-wp-error-100:active,
button.bg-wp-error-200:active, a.bg-wp-error-200:active { filter: brightness(0.9) !important; }

/* Button focus ring -> brand custom-control focus (2px solid focus-ring-solid,
   2px offset; #1E40AF light / #5B8DEF dark). Woodpecker buttons otherwise fall
   back to the UA default ring on keyboard focus. Destructive buttons take the
   brand's unique destructive-bg outline (#B91C1C). Inputs/selects keep their
   3px halo (set with outline:none above) and are unaffected. */
button:focus-visible, a.rounded-md.border:focus-visible {
  outline: 2px solid #1E40AF !important; outline-offset: 2px !important;
}
:root[data-theme="dark"] button:focus-visible, :root[data-theme="dark"] a.rounded-md.border:focus-visible {
  outline-color: #5B8DEF !important;
}
button.bg-wp-error-100:focus-visible, a.bg-wp-error-100:focus-visible,
button.bg-wp-error-200:focus-visible, a.bg-wp-error-200:focus-visible {
  outline-color: #B91C1C !important;
}
/* Destructive focus outline is mode-stable #B91C1C — re-assert in dark with
   matching specificity so the dark generic-button rule above cannot recolour it. */
:root[data-theme="dark"] button.bg-wp-error-100:focus-visible, :root[data-theme="dark"] a.bg-wp-error-100:focus-visible,
:root[data-theme="dark"] button.bg-wp-error-200:focus-visible, :root[data-theme="dark"] a.bg-wp-error-200:focus-visible {
  outline-color: #B91C1C !important;
}

/* Navbar logo. */
nav a[href="/"] > svg { display: none !important; }
nav a[href="/"]::before { content: ""; display: block; width: 2rem; height: 2rem; background: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQwIDI0MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8IS0tIGJsb3VkcmFhZCBzbWFsbC1tYXJrIOKAlCB0aGUgZmF2aWNvbiB2YXJpYW50IGZvciB0YWItc2l6ZSByZW5kZXJpbmcuCgogICAgICAgZmF2aWNvbi5zdmcgY2FycmllcyB0aGUgZnVsbCB0d2lzdGVkLXN0cmFuZCBtYXJrIChtYXRjaGVkIGluCiAgICAgICBzaWxob3VldHRlLnN2Zywgb2ctaW1hZ2Uuc3ZnLCBhbmQgdGhlIGxvY2t1cHMpLCBidXQgYXQgMTYvMzIvNDggcHgKICAgICAgIHRoZSBjdXJ2ZWQgYmV6aWVyIHN0cmFuZHMgZG93bnNhbXBsZSB0byB+MSBweCBhbmQgdGhlIHR3aXN0CiAgICAgICBjYW5ub3QgcmVzb2x2ZSDigJQgdGFicyByZW5kZXIgYXMgYW4gWC1pc2ggYmxvYi4gVGhpcyBmaWxlIGlzIHRoZQogICAgICAgc21hbGwtbWFyayB2YXJpYW50OiB0d28gY3Jvc3NlZCBzdHJva2VzIGF0IHN0cm9rZS13aWR0aCAzMCAoMTIuNSUKICAgICAgIG9mIHZpZXdCb3gsIH4yIHB4IGF0IDE2cHgpLCBBQS1zYWZlIGNvbnRyYXN0LCByZWNvZ25pc2FibHkgdGhlCiAgICAgICBicmFuZCBYLiBVc2VkIGFzIHRoZSBzb3VyY2UgZm9yIGZhdmljb24tezE2LDMyLDQ4fS5wbmcgYW5kIHRoZQogICAgICAgZmF2aWNvbi5pY28gZnJhbWVzOyBmYXZpY29uLTE5Mi5wbmcgYW5kIGZhdmljb24uc3ZnIGtlZXAgdGhlCiAgICAgICB0d2lzdCBmb3IgYXBwLWljb24gYW5kIGxhcmdlLWNvbnRleHQgcmVuZGVycy4KCiAgICAgICBFbmRwb2ludHMgbWF0Y2ggdGhlIGhpc3RvcmljYWwgYnJhbmQgZmF2aWNvbjogbGluZXMgKDk1LDMwKS0oMTcwLDIxMCkKICAgICAgIGFuZCAoMTQ1LDMwKS0oNzAsMjEwKSwgNzV4MTgwIFggYXJlYSBjZW50cmVkIGluIHRoZSAyNDB4MjQwCiAgICAgICByb3VuZGVkLXNxdWFyZSB0aWxlLiAtLT4KICA8cmVjdCB3aWR0aD0iMjQwIiBoZWlnaHQ9IjI0MCIgcng9IjQwIiBmaWxsPSIjMUU0MEFGIiAvPgogIDxnIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIzMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBmaWxsPSJub25lIj4KICAgIDxsaW5lIHgxPSI5NSIgeTE9IjMwIiB4Mj0iMTcwIiB5Mj0iMjEwIiAvPgogICAgPGxpbmUgeDE9IjE0NSIgeTE9IjMwIiB4Mj0iNzAiIHkyPSIyMTAiIC8+CiAgPC9nPgo8L3N2Zz4K") center / contain no-repeat; }
/* Login hero logo. */
div:has(> svg.h-32) > svg.h-32 { display: none !important; }
div:has(> svg.h-32)::before { content: ""; display: block; width: 9rem; height: 9rem; background: url("data:image/png;base64,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") center / contain no-repeat; }

/* Brand radius hierarchy + surfaces (radius-sm 4 / md 8 / lg 12). */
div.rounded-md.border { border-radius: 12px !important; }     /* cards/panels -> radius-lg */
input.checkbox { border-radius: 4px !important; }             /* small control -> radius-sm */
a[aria-current="page"] { border-bottom-color: #1E40AF !important; }   /* active tab -> brand blue */
:root[data-theme="dark"] a[aria-current="page"] { border-bottom-color: #5B8DEF !important; }
.code-box-inline { font-family: "JetBrains Mono", ui-monospace, monospace !important; border-radius: 4px !important; }

/* Info/default toast -> bloudraad blue (loads after custom.css inline, so !important;
   success/error/warn stay semantic status colours, like the pipeline-status favicon). */
.vue-notification:not(.success):not(.error):not(.warn) {
  background: #1E40AF !important;
  border-left-color: #1E3A8A !important;
}

/* Success toast -> brand success green. Woodpecker themes it with --wp-control-ok
   (which we rebranded blue for checked controls), so a success message would read
   blue; force it green (the brand's Success alert colour) — semantic, like the favicon. */
.vue-notification.success { background-color: #15803D !important; border-color: #15803D !important; }
:root[data-theme="dark"] .vue-notification.success { background-color: #22C55E !important; border-color: #22C55E !important; }
