/*
 * ============================================================
 *  EXTRACTED TAILWIND UTILITIES — FULL SITE
 *  Covers: status.php  +  nav.php  +  footer.php
 *
 *  Drop-in replacement for:
 *    <script src="https://cdn.tailwindcss.com/3.4.17"></script>
 *  Replace with:
 *    <link rel="stylesheet" href="/css/tailwind-extracted.css">
 *
 *  Sections:
 *   1.  Preflight / base reset
 *   2.  Display
 *   3.  Position & inset
 *   4.  Z-index (including arbitrary values)
 *   5.  Flexbox
 *   6.  Grid
 *   7.  Gap & spacing helpers
 *   8.  Sizing (w / h / max / min)
 *   9.  Padding & margin
 *  10.  Typography
 *  11.  Colors — text / bg / border
 *  12.  Gradients (bg-gradient-to-*)
 *  13.  Opacity
 *  14.  Borders & radius
 *  15.  Box-shadow
 *  16.  Backdrop & blur effects
 *  17.  Overflow
 *  18.  Object-fit
 *  19.  List style
 *  20.  Transforms & translate
 *  21.  Transitions & animation
 *  22.  Cursor & interaction
 *  23.  Accessibility (sr-only)
 *  24.  Miscellaneous (outline, order, drop-shadow)
 *  25.  Hover / focus / group pseudo-classes
 *  26.  Responsive breakpoints (sm / md / lg / xl)
 *  27.  Chart.js canvas helpers
 * ============================================================
 */


/* ──────────────────────────────────────────────
   1. PREFLIGHT / BASE RESET
   Subset of Tailwind preflight relevant to this site
────────────────────────────────────────────── */

*, ::before, ::after {
  box-sizing: border-box;
  border-width: 0;
  border-style: solid;
  border-color: #e5e7eb;
}

html {
  line-height: 1.5;
  -webkit-text-size-adjust: 100%;
  tab-size: 4;
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
    "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}

body { margin: 0; line-height: inherit; }

hr { height: 0; color: inherit; border-top-width: 1px; }

h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; }

a { color: inherit; text-decoration: inherit; }

.article-content a {
    color: #0d6efd;
    text-decoration: underline;
}

b, strong { font-weight: bolder; }

code, kbd, samp, pre {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
    "Liberation Mono", "Courier New", monospace;
  font-size: 1em;
}

small { font-size: 80%; }

table { text-indent: 0; border-color: inherit; border-collapse: collapse; }

button, input, optgroup, select, textarea {
  font-family: inherit;
  font-size: 100%;
  font-weight: inherit;
  line-height: inherit;
  color: inherit;
  margin: 0;
  padding: 0;
}

button, select { text-transform: none; }

button, [type='button'], [type='reset'], [type='submit'] {
  -webkit-appearance: button;
  background-color: transparent;
  background-image: none;
}

:-moz-focusring { outline: auto; }
:-moz-ui-invalid { box-shadow: none; }

::-webkit-inner-spin-button,
::-webkit-outer-spin-button { height: auto; }

[type='search'] { -webkit-appearance: textfield; outline-offset: -2px; }
::-webkit-search-decoration { -webkit-appearance: none; }
::-webkit-file-upload-button { -webkit-appearance: button; font: inherit; }

summary { display: list-item; }

blockquote, dl, dd, h1, h2, h3, h4, h5, h6,
hr, figure, p, pre { margin: 0; }

fieldset { margin: 0; padding: 0; }
legend { padding: 0; }
ol, ul, menu { list-style: none; margin: 0; padding: 0; }

textarea { resize: vertical; }

input::placeholder,
textarea::placeholder { opacity: 1; color: #9ca3af; }

button, [role="button"] { cursor: pointer; }
:disabled { cursor: default; }

img, svg, video, canvas, audio, iframe, embed, object {
  display: block;
  vertical-align: middle;
}

img, video { max-width: 100%; height: auto; }


/* ──────────────────────────────────────────────
   2. DISPLAY
────────────────────────────────────────────── */

.block        { display: block; }
.inline       { display: inline; }
.inline-block { display: inline-block; }
.inline-flex  { display: inline-flex; }
.flex         { display: flex; }
.grid         { display: grid; }
.hidden       { display: none; }
.table        { display: table; }


/* ──────────────────────────────────────────────
   3. POSITION & INSET
────────────────────────────────────────────── */

.static   { position: static; }
.relative { position: relative; }
.absolute { position: absolute; }
.fixed    { position: fixed; }
.sticky   { position: sticky; }

.inset-0    { top: 0; right: 0; bottom: 0; left: 0; }
.-inset-1   { top: -4px; right: -4px; bottom: -4px; left: -4px; }

.top-0      { top: 0; }
.top-1\/2   { top: 50%; }
.right-0    { right: 0; }
.right-2    { right: 8px; }
.bottom-0   { bottom: 0; }
.left-0     { left: 0; }
.left-1\/2  { left: 50%; }


/* ──────────────────────────────────────────────
   4. Z-INDEX  (including arbitrary nav/modal values)
────────────────────────────────────────────── */

.z-10              { z-index: 10; }
.z-50              { z-index: 50; }

/* Nav uses very high z-index values via arbitrary syntax */
.z-\[999999999\]   { z-index: 999999999; }
.z-\[1000000001\]  { z-index: 1000000001; }
.z-\[9999999999\]  { z-index: 9999999999; }


/* ──────────────────────────────────────────────
   5. FLEXBOX
────────────────────────────────────────────── */

.flex-row      { flex-direction: row; }
.flex-col      { flex-direction: column; }
.flex-wrap     { flex-wrap: wrap; }
.flex-nowrap   { flex-wrap: nowrap; }

.flex-1        { flex: 1 1 0%; }
.flex-none     { flex: none; }
.flex-shrink-0 { flex-shrink: 0; }

.items-start   { align-items: flex-start; }
.items-end     { align-items: flex-end; }
.items-center  { align-items: center; }
.items-stretch { align-items: stretch; }

.justify-start   { justify-content: flex-start; }
.justify-end     { justify-content: flex-end; }
.justify-center  { justify-content: center; }
.justify-between { justify-content: space-between; }

.place-items-center   { place-items: center; }
.place-content-center { place-content: center; }

.order-first { order: -9999; }


/* ──────────────────────────────────────────────
   6. GRID
────────────────────────────────────────────── */

.grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }

.col-span-full  { grid-column: 1 / -1; }
.lg\:col-span-2 { /* set in breakpoint section */ }
.lg\:col-span-3 { /* set in breakpoint section */ }


/* ──────────────────────────────────────────────
   7. GAP & SPACE HELPERS
────────────────────────────────────────────── */

.gap-1  { gap: 4px; }
.gap-2  { gap: 8px; }
.gap-3  { gap: 12px; }
.gap-4  { gap: 16px; }
.gap-6  { gap: 24px; }
.gap-8  { gap: 32px; }
.gap-12 { gap: 48px; }

.space-x-1 > * + * { margin-left: 4px; }
.space-x-4 > * + * { margin-left: 16px; }
.space-y-1 > * + * { margin-top: 4px; }


/* ──────────────────────────────────────────────
   8. SIZING
────────────────────────────────────────────── */

/* Width */
.w-1    { width: 4px; }
.w-3    { width: 12px; }
.w-5    { width: 20px; }
.w-6    { width: 24px; }
.w-14   { width: 56px; }
.w-28   { width: 112px; }
.w-32   { width: 128px; }
.w-36   { width: 144px; }
.w-44   { width: 176px; }
.w-96   { width: 384px; }
.w-full { width: 100%; }
.w-auto { width: auto; }

/* Height */
.h-1    { height: 4px; }
.h-3    { height: 12px; }
.h-5    { height: 20px; }
.h-6    { height: 24px; }
.h-16   { height: 64px; }
.h-96   { height: 384px; }
.h-full { height: 100%; }
.h-auto { height: auto; }

/* Max / Min */
.max-w-lg   { max-width: 32rem; }  /* 512px */
.max-w-full { max-width: 100%; }
.max-h-72   { max-height: 288px; }
.max-h-\[calc\(100vh-4rem\)\] { max-height: calc(100vh - 4rem); }
.min-w-0    { min-width: 0; }
.min-h-0    { min-height: 0; }


/* ──────────────────────────────────────────────
   9. PADDING & MARGIN
────────────────────────────────────────────── */

/* Padding */
.p-2  { padding: 8px; }
.p-4  { padding: 16px; }

.px-2 { padding-left: 8px;  padding-right: 8px; }
.px-3 { padding-left: 12px; padding-right: 12px; }
.px-4 { padding-left: 16px; padding-right: 16px; }

.py-2 { padding-top: 8px;  padding-bottom: 8px; }
.py-3 { padding-top: 12px; padding-bottom: 12px; }

.pt-2  { padding-top: 8px; }
.pt-8  { padding-top: 32px; }
.pb-2  { padding-bottom: 8px; }
.pb-3  { padding-bottom: 12px; }
.pb-5  { padding-bottom: 20px; }
.pb-8  { padding-bottom: 32px; }

/* Margin */
.mx-auto { margin-left: auto; margin-right: auto; }

.ml-2  { margin-left: 8px; }
.ml-4  { margin-left: 16px; }
.mr-2  { margin-right: 8px; }
.mr-4  { margin-right: 16px; }
.mr-12 { margin-right: 48px; }

.mt-1  { margin-top: 4px; }
.mt-6  { margin-top: 24px; }
.mt-8  { margin-top: 32px; }

.mb-2  { margin-bottom: 8px; }
.mb-6  { margin-bottom: 24px; }
.mb-8  { margin-bottom: 32px; }
.mb-12 { margin-bottom: 48px; }


/* ──────────────────────────────────────────────
   10. TYPOGRAPHY
────────────────────────────────────────────── */

/* Font size */
.text-xs   { font-size: 12px;  line-height: 16px; }
.text-sm   { font-size: 14px;  line-height: 20px; }
.text-base { font-size: 16px;  line-height: 24px; }
.text-lg   { font-size: 18px;  line-height: 28px; }
.text-xl   { font-size: 20px;  line-height: 28px; }
.text-2xl  { font-size: 24px;  line-height: 32px; }
.text-3xl  { font-size: 30px;  line-height: 36px; }

/* Font weight */
.font-normal   { font-weight: 400; }
.font-medium   { font-weight: 500; }
.font-semibold { font-weight: 600; }
.font-bold     { font-weight: 700; }

/* Font family */
.font-sans   { font-family: ui-sans-serif, system-ui, -apple-system, sans-serif; }
.font-mono   { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; }
/* font-poppins: loaded from Google Fonts or your own stack */
.font-poppins { font-family: 'Poppins', ui-sans-serif, system-ui, sans-serif; }

/* Alignment */
.text-left   { text-align: left; }
.text-center { text-align: center; }
.text-right  { text-align: right; }

/* Leading */
.leading-none    { line-height: 1; }
.leading-tight   { line-height: 1.25; }
.leading-normal  { line-height: 1.5; }
.leading-relaxed { line-height: 1.625; }
.leading-loose   { line-height: 2; }

/* Tracking */
.tracking-wide   { letter-spacing: 0.025em; }
.tracking-wider  { letter-spacing: 0.05em; }
.tracking-widest { letter-spacing: 0.1em; }

/* Decoration / transform */
.underline    { text-decoration-line: underline; }
.no-underline { text-decoration-line: none; }
.uppercase    { text-transform: uppercase; }
.lowercase    { text-transform: lowercase; }
.capitalize   { text-transform: capitalize; }
.italic       { font-style: italic; }

/* Overflow */
.truncate         { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.whitespace-nowrap { white-space: nowrap; }
.break-words      { overflow-wrap: break-word; word-break: break-word; }
.break-all        { word-break: break-all; }

/* Vertical align */
.align-middle { vertical-align: middle; }


/* ──────────────────────────────────────────────
   11. TEXT COLORS
────────────────────────────────────────────── */

.text-white       { color: #ffffff; }
.text-black       { color: #000000; }

/* Gray scale */
.text-gray-300    { color: #d1d5db; }
.text-gray-400    { color: #9ca3af; }
.text-gray-500    { color: #6b7280; }
.text-gray-600    { color: #4b5563; }
.text-gray-700    { color: #374151; }
.text-gray-900    { color: #111827; }

/* Green */
.text-green-300   { color: #86efac; }
.text-green-400   { color: #4ade80; }

/* Blue */
.text-blue-300    { color: #93c5fd; }
.text-blue-400    { color: #60a5fa; }

/* Arbitrary hex values used in nav SVG icons */
.text-\[\#bedbff\] { color: #bedbff; }
.text-blue-200\/70 { color: rgba(191,219,254,0.70); }


/* ──────────────────────────────────────────────
   12. BACKGROUND COLORS & GRADIENTS
────────────────────────────────────────────── */

/* Solid backgrounds */
.bg-white        { background-color: #ffffff; }
.bg-transparent  { background-color: transparent; }
.bg-blue-600     { background-color: #2563eb; }
.bg-green-400    { background-color: #4ade80; }

/* Arbitrary hex values (nav buttons) */
.bg-\[\#1e1f3a\] { background-color: #1e1f3a; }
.bg-\[\#2a2b6d\] { background-color: #2a2b6d; }

/* Alpha / slash utilities (Tailwind opacity modifier) */
.bg-white\/5     { background-color: rgba(255,255,255,0.05); }
.bg-white\/10    { background-color: rgba(255,255,255,0.10); }
.bg-white\/20    { background-color: rgba(255,255,255,0.20); }
.bg-blue-500\/10 { background-color: rgba(59,130,246,0.10); }
.bg-blue-500\/15 { background-color: rgba(59,130,246,0.15); }
.bg-purple-500\/10 { background-color: rgba(168,85,247,0.10); }
.bg-purple-500\/15 { background-color: rgba(168,85,247,0.15); }
.bg-green-500\/10  { background-color: rgba(34,197,94,0.10); }

/* Gradient direction */
.bg-gradient-to-r  { background-image: linear-gradient(to right,  var(--tw-gradient-stops)); }
.bg-gradient-to-b  { background-image: linear-gradient(to bottom, var(--tw-gradient-stops)); }
.bg-gradient-to-br { background-image: linear-gradient(to bottom right, var(--tw-gradient-stops)); }

/* Gradient colour stops */
/* from- */
.from-blue-500\/15  { --tw-gradient-from: rgba(59,130,246,0.15);  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, rgba(59,130,246,0)); }
.from-blue-600\/5   { --tw-gradient-from: rgba(37,99,235,0.05);   --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, rgba(37,99,235,0)); }
.from-blue-950      { --tw-gradient-from: #172554;                 --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, rgba(23,37,84,0)); }
.from-green-400     { --tw-gradient-from: #4ade80;                 --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, rgba(74,222,128,0)); }
.from-slate-900     { --tw-gradient-from: #0f172a;                 --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, rgba(15,23,42,0)); }

/* via- */
.via-gray-900       { --tw-gradient-stops: var(--tw-gradient-from), #111827, var(--tw-gradient-to, rgba(17,24,39,0)); }
.via-indigo-950     { --tw-gradient-stops: var(--tw-gradient-from), #1e1b4b, var(--tw-gradient-to, rgba(30,27,75,0)); }
.via-purple-600\/5  { --tw-gradient-stops: var(--tw-gradient-from), rgba(147,51,234,0.05), var(--tw-gradient-to, rgba(147,51,234,0)); }

/* to- */
.to-blue-600\/5    { --tw-gradient-to: rgba(37,99,235,0.05); }
.to-emerald-400    { --tw-gradient-to: #34d399; }
.to-purple-500\/15 { --tw-gradient-to: rgba(168,85,247,0.15); }
.to-purple-950     { --tw-gradient-to: #2e1065; }
.to-slate-900      { --tw-gradient-to: #0f172a; }


/* ──────────────────────────────────────────────
   13. OPACITY
────────────────────────────────────────────── */

.opacity-0   { opacity: 0; }
.opacity-30  { opacity: 0.30; }
.opacity-50  { opacity: 0.50; }
.opacity-75  { opacity: 0.75; }
.opacity-100 { opacity: 1; }


/* ──────────────────────────────────────────────
   14. BORDERS & BORDER RADIUS
────────────────────────────────────────────── */

/* Border width */
.border   { border-width: 1px; }
.border-0 { border-width: 0; }
.border-b { border-bottom-width: 1px; }
.border-t { border-top-width: 1px; }

/* Border colors with alpha */
.border-white\/10      { border-color: rgba(255,255,255,0.10); }
.border-white\/20      { border-color: rgba(255,255,255,0.20); }
.border-white\/30      { border-color: rgba(255,255,255,0.30); }  /* hover target */
.border-blue-400\/40   { border-color: rgba(96,165,250,0.40); }
.border-blue-400\/50   { border-color: rgba(96,165,250,0.50); }
.border-green-400\/30  { border-color: rgba(74,222,128,0.30); }
.border-purple-400\/30 { border-color: rgba(192,132,252,0.30); }
.border-purple-400\/40 { border-color: rgba(192,132,252,0.40); }
.border-purple-400\/60 { border-color: rgba(192,132,252,0.60); }  /* hover target */

/* Border radius */
.rounded-none { border-radius: 0; }
.rounded-sm   { border-radius: 2px; }
.rounded      { border-radius: 4px; }
.rounded-md   { border-radius: 6px; }
.rounded-lg   { border-radius: 8px; }
.rounded-xl   { border-radius: 12px; }
.rounded-2xl  { border-radius: 16px; }
.rounded-full { border-radius: 9999px; }


/* ──────────────────────────────────────────────
   15. BOX-SHADOW
────────────────────────────────────────────── */

.shadow-none { box-shadow: none; }
.shadow-sm   { box-shadow: 0 1px 2px 0 rgba(0,0,0,0.05); }
.shadow-md   { box-shadow: 0 4px 6px -1px rgba(0,0,0,0.10), 0 2px 4px -2px rgba(0,0,0,0.10); }
.shadow-lg   { box-shadow: 0 10px 15px -3px rgba(0,0,0,0.10), 0 4px 6px -4px rgba(0,0,0,0.10); }
.shadow-xl   { box-shadow: 0 20px 25px -5px rgba(0,0,0,0.10), 0 8px 10px -6px rgba(0,0,0,0.10); }

/* Coloured shadows used in nav */
.shadow-blue-500\/10  { box-shadow: 0 0 0 0 rgba(59,130,246,0.10); }
.shadow-blue-500\/20  { box-shadow: 0 8px 20px -4px rgba(59,130,246,0.20); }
.shadow-green-400\/60 { box-shadow: 0 0 10px 2px rgba(74,222,128,0.60); }

/* Drop-shadow (filter) */
.drop-shadow-sm { filter: drop-shadow(0 1px 1px rgba(0,0,0,0.05)); }


/* ──────────────────────────────────────────────
   16. BACKDROP BLUR  (nav glass effect)
────────────────────────────────────────────── */

.backdrop-blur-sm  { backdrop-filter: blur(4px);  -webkit-backdrop-filter: blur(4px); }
.backdrop-blur-2xl { backdrop-filter: blur(40px); -webkit-backdrop-filter: blur(40px); }


/* ──────────────────────────────────────────────
   17. BLUR (footer decorative circle)
────────────────────────────────────────────── */

.blur-3xl { filter: blur(64px); }


/* ──────────────────────────────────────────────
   18. OVERFLOW
────────────────────────────────────────────── */

.overflow-hidden  { overflow: hidden; }
.overflow-auto    { overflow: auto; }
.overflow-visible { overflow: visible; }
.overflow-x-hidden { overflow-x: hidden; }
.overflow-y-auto  { overflow-y: auto; }


/* ──────────────────────────────────────────────
   19. OBJECT-FIT
────────────────────────────────────────────── */

.object-contain { object-fit: contain; }
.object-cover   { object-fit: cover; }


/* ──────────────────────────────────────────────
   20. LIST STYLE
────────────────────────────────────────────── */

.list-none    { list-style-type: none; }
.list-disc    { list-style-type: disc; }
.list-decimal { list-style-type: decimal; }


/* ──────────────────────────────────────────────
   21. TRANSFORMS & TRANSLATE
────────────────────────────────────────────── */

.transform          { transform: var(--tw-transform); }

/* translate used in footer decorative circle + nav mobile btn */
.-translate-x-1\/2  { transform: translateX(-50%); }
.-translate-y-1\/2  { transform: translateY(-50%); }

/* When combined (footer: transform -translate-x-1/2) */
.transform.-translate-x-1\/2 { transform: translateX(-50%); }


/* ──────────────────────────────────────────────
   22. TRANSITIONS & ANIMATION
────────────────────────────────────────────── */

.transition        { transition-property: color, background-color, border-color,
                       text-decoration-color, fill, stroke, opacity, box-shadow,
                       transform, filter, backdrop-filter;
                     transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
                     transition-duration: 150ms; }

.transition-all    { transition-property: all;
                     transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
                     transition-duration: 150ms; }

.transition-colors { transition-property: color, background-color, border-color,
                       text-decoration-color, fill, stroke;
                     transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
                     transition-duration: 150ms; }

.duration-150 { transition-duration: 150ms; }
.duration-200 { transition-duration: 200ms; }
.duration-300 { transition-duration: 300ms; }

.ease-in-out  { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
.ease-in      { transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }
.ease-out     { transition-timing-function: cubic-bezier(0, 0, 0.2, 1); }

/* Animations */
@keyframes pulse {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0.5; }
}

@keyframes ping {
  75%, 100% { transform: scale(2); opacity: 0; }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

@keyframes bounce {
  0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(0.8,0,1,1); }
  50%       { transform: none; animation-timing-function: cubic-bezier(0,0,0.2,1); }
}

.animate-pulse { animation: pulse 2s cubic-bezier(0.4,0,0.6,1) infinite; }
.animate-ping  { animation: ping  1s cubic-bezier(0,0,0.2,1) infinite; }
.animate-spin  { animation: spin  1s linear infinite; }
.animate-bounce { animation: bounce 1s infinite; }


/* ──────────────────────────────────────────────
   23. CURSOR & INTERACTION
────────────────────────────────────────────── */

.cursor-pointer     { cursor: pointer; }
.cursor-default     { cursor: default; }
.cursor-not-allowed { cursor: not-allowed; }

.select-none { user-select: none; }
.select-all  { user-select: all; }
.select-text { user-select: text; }

.pointer-events-none { pointer-events: none; }
.pointer-events-auto { pointer-events: auto; }


/* ──────────────────────────────────────────────
   24. ACCESSIBILITY
────────────────────────────────────────────── */

.sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0,0,0,0); white-space: nowrap; border-width: 0;
}

.not-sr-only {
  position: static; width: auto; height: auto;
  padding: 0; margin: 0; overflow: visible;
  clip: auto; white-space: normal;
}


/* ──────────────────────────────────────────────
   25. MISCELLANEOUS
────────────────────────────────────────────── */

.outline-none { outline: 2px solid transparent; outline-offset: 2px; }
.shadow-inner { box-shadow: inset 0 2px 4px 0 rgba(0,0,0,0.05); }


/* ──────────────────────────────────────────────
   26. HOVER / FOCUS / GROUP PSEUDO-CLASSES
────────────────────────────────────────────── */

/* Hover: text */
.hover\:text-blue-300:hover  { color: #93c5fd; }
.hover\:text-green-200:hover { color: #bbf7d0; }
.hover\:text-blue-400:hover  { color: #60a5fa; }

/* Hover: background */
.hover\:bg-white\/10:hover   { background-color: rgba(255,255,255,0.10); }
.hover\:bg-white\/20:hover   { background-color: rgba(255,255,255,0.20); }
.hover\:bg-blue-500\/10:hover  { background-color: rgba(59,130,246,0.10); }
.hover\:bg-green-500\/10:hover { background-color: rgba(34,197,94,0.10); }
.hover\:bg-purple-500\/20:hover { background-color: rgba(168,85,247,0.20); }
.hover\:bg-\[\#4a4190\]:hover  { background-color: #4a4190; }

/* Hover: border */
.hover\:border-white\/30:hover       { border-color: rgba(255,255,255,0.30); }
.hover\:border-blue-400\/50:hover    { border-color: rgba(96,165,250,0.50); }
.hover\:border-green-400\/50:hover   { border-color: rgba(74,222,128,0.50); }
.hover\:border-purple-400\/60:hover  { border-color: rgba(192,132,252,0.60); }

/* Hover: shadow */
.hover\:shadow-blue-500\/30:hover   { box-shadow: 0 8px 20px -4px rgba(59,130,246,0.30); }
.hover\:shadow-purple-500\/10:hover { box-shadow: 0 4px 12px -2px rgba(168,85,247,0.10); }
.hover\:shadow-purple-500\/20:hover { box-shadow: 0 8px 20px -4px rgba(168,85,247,0.20); }

/* Hover: text color for footer links */
.hover\:text-blue-300:hover { color: #93c5fd; }

/* Focus */
.focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; }
.focus\:ring-2:focus       { box-shadow: 0 0 0 2px #3b82f6; }

/* Group hover — used on social icon buttons in footer */
.group:hover .group-hover\:text-blue-400  { color: #60a5fa; }
.group:hover .group-hover\:text-green-400 { color: #4ade80; }
.group:hover .group-hover\:text-green-200 { color: #bbf7d0; }

/* Transition shorthand on colors (used extensively in nav/footer) */
.transition-colors { transition-property: color, background-color, border-color,
                       fill, stroke;
                     transition-timing-function: cubic-bezier(0.4,0,0.2,1);
                     transition-duration: 150ms; }


/* ──────────────────────────────────────────────
   27. RESPONSIVE BREAKPOINTS
   sm ≥ 640px  |  md ≥ 768px  |  lg ≥ 1024px  |  xl ≥ 1280px
────────────────────────────────────────────── */

@media (min-width: 640px) {
  .sm\:px-3   { padding-left: 12px; padding-right: 12px; }
  .sm\:px-6   { padding-left: 24px; padding-right: 24px; }
  .sm\:flex-row { flex-direction: row; }
  .sm\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .sm\:block  { display: block; }
  .sm\:hidden { display: none; }
  .sm\:flex   { display: flex; }
  .sm\:w-full { width: 100%; }
  .sm\:gap-4  { gap: 16px; }
}

@media (min-width: 768px) {
  .md\:ml-3   { margin-left: 12px; }
  .md\:ml-12  { margin-left: 48px; }
  .md\:mr-4   { margin-right: 16px; }
  .md\:block  { display: block; }
  .md\:hidden { display: none; }
  .md\:flex   { display: flex; }
  .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .md\:flex-row { flex-direction: row; }
  .md\:items-center { align-items: center; }
  .md\:justify-between { justify-content: space-between; }
  .md\:gap-6  { gap: 24px; }
  .md\:gap-8  { gap: 32px; }
  .md\:px-8   { padding-left: 32px; padding-right: 32px; }
  .md\:w-auto { width: auto; }
}

@media (min-width: 1024px) {
  .lg\:flex   { display: flex; }
  .lg\:hidden { display: none; }
  .lg\:block  { display: block; }
  .lg\:px-8   { padding-left: 32px; padding-right: 32px; }
  .lg\:gap-8  { gap: 32px; }
  .lg\:col-span-2 { grid-column: span 2 / span 2; }
  .lg\:col-span-3 { grid-column: span 3 / span 3; }
  .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .lg\:grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
  .lg\:flex-row { flex-direction: row; }
  .lg\:items-center { align-items: center; }
}

@media (min-width: 1280px) {
  .xl\:flex   { display: flex; }
  .xl\:hidden { display: none; }
  .xl\:block  { display: block; }
  .xl\:px-0   { padding-left: 0; padding-right: 0; }
  .xl\:gap-8  { gap: 32px; }
  .xl\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .xl\:flex-row { flex-direction: row; }
  .xl\:items-center { align-items: center; }
}


/* ──────────────────────────────────────────────
   28. CHART.JS & SVG CANVAS HELPERS
   Chart.js reads canvas dimensions from the DOM.
   Without these rules the chart may render at
   0×0 or overflow its container.
────────────────────────────────────────────── */

/* The 24h Chart.js canvas container */
#outageChartWrap { display: block; position: relative; }
#outageChartWrap canvas { display: block; }

/* The 30-day inline SVG uses class="w-full" */
svg.w-full { display: block; width: 100%; }

/* Ensure Chart.js responsive mode works */
canvas { display: block; }


/* ──────────────────────────────────────────────
   29. FOOTER PARTNERS
────────────────────────────────────────────── */

	.fp-block {
    border-bottom: 1px solid rgba(255,255,255,0.1);
    padding-bottom: 2rem;
    margin-bottom: 0.5rem;
}

.fp-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 1.5rem;
}

.fp-title {
    font-size: 1.125rem;
    line-height: 1.75rem;
    font-weight: 600;
    color: #ffffff;
    font-family: "Poppins", sans-serif;
}

.fp-subtitle {
    font-size: 0.875rem;
    line-height: 1.25rem;
    color: #9ca3af;
    margin-top: 0.25rem;
}

.fp-badge-spots {
    display: none;
    padding: 0.25rem 0.75rem;
    border-radius: 9999px;
    background-color: rgba(59, 130, 246, 0.15);
    color: #93c5fd;
    font-size: 0.75rem;
    line-height: 1rem;
    font-weight: 500;
}

@media (min-width: 768px) {
    .fp-badge-spots { display: inline-flex; align-items: center; }
}

.fp-grid {
    display: grid;
    gap: 1.25rem;
    grid-template-columns: 1fr;
}

@media (min-width: 768px) {
    .fp-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 1280px) {
    .fp-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
}

.fp-card {
    display: block;
    border-radius: 1rem;
    border: 1px solid rgba(255,255,255,0.1);
    background-color: rgba(255,255,255,0.05);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    padding: 1.25rem;
    text-decoration: none;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.fp-card:hover {
    border-color: rgba(59, 130, 246, 0.5);
    background-color: rgba(255,255,255,0.1);
    transform: translateY(-0.25rem);
}

.fp-card--empty {
    border-style: dashed;
    border-width: 2px;
    border-color: rgba(255,255,255,0.15);
}

.fp-card--empty:hover {
    border-color: #3b82f6;
}

.fp-card-top {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    margin-bottom: 1rem;
}

.fp-logo {
    width: 3rem;
    height: 3rem;
    border-radius: 0.75rem;
    background-color: #ffffff;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    flex-shrink: 0;
}

.fp-logo-img {
    width: 2rem;
    height: 2rem;
    object-fit: contain;
}

.fp-name {
    color: #ffffff;
    font-weight: 600;
    transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1);
}

.fp-card:hover .fp-name {
    color: #93c5fd;
}

.fp-badge-partner {
    display: inline-block;
    font-size: 0.75rem;
    line-height: 1rem;
    padding: 0.25rem 0.5rem;
    border-radius: 9999px;
    background-color: rgba(59, 130, 246, 0.2);
    color: #93c5fd;
}

.fp-desc {
    font-size: 0.875rem;
    line-height: 1.625;
    color: #9ca3af;
}

.fp-desc--center {
    margin-top: 0.5rem;
    text-align: center;
}

.fp-cta {
    margin-top: 1.25rem;
    font-size: 0.875rem;
    font-weight: 500;
    color: #60a5fa;
    transition: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
}

.fp-card:hover .fp-cta {
    transform: translateX(0.25rem);
}

.fp-cta--static {
    color: #60a5fa;
    font-weight: 500;
}

/* Tomma platser (Partner 4 & 5) */
.fp-card-empty-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100%;
    text-align: center;
}

.fp-plus {
    width: 4rem;
    height: 4rem;
    border-radius: 1rem;
    background-color: rgba(255,255,255,0.05);
    border: 1px solid rgba(255,255,255,0.1);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.875rem;
    line-height: 2.25rem;
    color: rgba(255,255,255,0.4);
    margin-bottom: 1rem;
}