HTML
Copy
<svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false">
<symbol id="dk-i-play" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M8 5.5v13l10.5-6.5z" fill="currentColor"/></symbol>
<symbol id="dk-i-pause" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M8 5.5v13M16 5.5v13" stroke-width="3"/></symbol>
<symbol id="dk-i-prev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6v12l-8.5-6zM6 6v12"/></symbol>
<symbol id="dk-i-next" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6v12l8.5-6zM18 6v12"/></symbol>
<symbol id="dk-i-heart" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20s-7.5-4.6-7.5-10A4.3 4.3 0 0 1 12 7.4 4.3 4.3 0 0 1 19.5 10c0 5.4-7.5 10-7.5 10z"/></symbol>
<symbol id="dk-i-volume" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 9.5h3.5L12 5.5v13l-4.5-4H4z"/><path d="M15.5 9a4.5 4.5 0 0 1 0 6M18 6.5a8 8 0 0 1 0 11"/></symbol>
<symbol id="dk-i-chevl" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="m15 6-6 6 6 6"/></symbol>
<symbol id="dk-i-chevr" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="m9 6 6 6-6 6"/></symbol>
<symbol id="dk-i-tick" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="m5 12.5 4.5 4.5L19 7.5" stroke-width="3"/></symbol>
<symbol id="dk-i-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="8.5"/><path d="M12 7.5V12l3 2"/></symbol>
<symbol id="dk-i-refresh" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M19.5 12a7.5 7.5 0 1 1-2.2-5.3L19.5 9"/><path d="M19.5 4.5V9H15"/></symbol>
</svg>
<div class="cols">
<section><span class="lbl">Audio player</span><article class="card dk-card card-body dk-player" aria-label="Podcast player">
<div class="dk-player__art"><svg viewBox="0 0 120 120" aria-hidden="true" focusable="false" style="display:block;width:100%;height:100%"><rect width="120" height="120" style="fill:var(--accent-soft)"/><circle cx="60" cy="60" r="34" style="fill:none;stroke:var(--accent);stroke-width:2;opacity:.55"/><circle cx="60" cy="60" r="22" style="fill:none;stroke:var(--accent);stroke-width:2;opacity:.8"/><path d="M18 60h14l6-16 8 34 7-26 5 14 4-6h40" style="fill:none;stroke:var(--accent);stroke-width:3;stroke-linecap:round;stroke-linejoin:round"/></svg></div><div><p class="dk-player__show mb-0">The On-Call Hour · Ep. 42</p><h3 class="dk-player__title">Debugging in production without waking anyone up</h3></div>
<div class="dk-player__seek"><input class="form-range dk-range" type="range" min="0" max="2830" value="1104" data-fill aria-label="Seek" aria-valuetext="18 minutes 24 seconds of 47 minutes 10 seconds" style="--val:39%"><div class="dk-player__time" aria-hidden="true"><span>18:24</span><span>−28:46</span></div></div>
<div class="dk-player__controls"><button class="btn btn-dk btn-dk-ghost btn-dk-icon dk-speed" type="button" aria-label="Playback speed 1.25 times">1.25×</button><span class="dk-spacer"></span><button class="btn btn-dk btn-dk-ghost btn-dk-icon" type="button" aria-label="Previous episode"><svg class="dk-ico" aria-hidden="true" focusable="false"><use href="#dk-i-prev"/></svg></button><button class="btn btn-dk btn-dk-primary btn-dk-icon btn-lg btn-dk-round" type="button" aria-label="Pause" data-play><svg class="dk-ico" aria-hidden="true" focusable="false"><use href="#dk-i-pause"/></svg></button><button class="btn btn-dk btn-dk-ghost btn-dk-icon" type="button" aria-label="Next episode"><svg class="dk-ico" aria-hidden="true" focusable="false"><use href="#dk-i-next"/></svg></button><span class="dk-spacer"></span><button class="btn btn-dk btn-dk-ghost btn-dk-icon" type="button" aria-label="Volume"><svg class="dk-ico" aria-hidden="true" focusable="false"><use href="#dk-i-volume"/></svg></button></div>
</article></section>
<section><span class="lbl">Chart card · SVG, with the data as a table</span><figure class="card dk-card card-body m-0">
<div class="dk-chart__head"><div><figcaption class="card-subtitle text-body-secondary">Requests per hour · today</figcaption><p class="dk-chart__value">19,800</p></div><ul class="dk-legend"><li><i></i>Today</li><li><i class="dk-legend--dash"></i>Last week</li></ul></div>
<div class="dk-chart__plot"><div class="dk-chart__y" aria-hidden="true"><span>4k</span><span>3k</span><span>2k</span><span>1k</span><span>0</span></div><svg viewBox="0 0 560 180" preserveAspectRatio="none" aria-hidden="true" focusable="false" style="display:block;width:100%;height:180px;overflow:visible"><path d="M0 0.5H560" style="stroke:var(--border);stroke-width:1;vector-effect:non-scaling-stroke"/><path d="M0 45H560" style="stroke:var(--border);stroke-width:1;vector-effect:non-scaling-stroke"/><path d="M0 90H560" style="stroke:var(--border);stroke-width:1;vector-effect:non-scaling-stroke"/><path d="M0 135H560" style="stroke:var(--border);stroke-width:1;vector-effect:non-scaling-stroke"/><path d="M0 179.5H560" style="stroke:var(--border);stroke-width:1;vector-effect:non-scaling-stroke"/><path d="M0.0 126.0 L80.0 139.5 L160.0 144.0 L240.0 108.0 L320.0 40.5 L400.0 9.0 L480.0 27.0 L560.0 63.0 L560 180 L0 180 Z" style="fill:color-mix(in srgb,var(--accent) 18%,transparent)"/><path d="M0.0 135.0 L80.0 144.0 L160.0 139.5 L240.0 117.0 L320.0 67.5 L400.0 45.0 L480.0 49.5 L560.0 81.0" style="fill:none;stroke:var(--text-3);stroke-width:1.5;stroke-dasharray:4 4;vector-effect:non-scaling-stroke"/><path d="M0.0 126.0 L80.0 139.5 L160.0 144.0 L240.0 108.0 L320.0 40.5 L400.0 9.0 L480.0 27.0 L560.0 63.0" style="fill:none;stroke:var(--accent);stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke"/></svg></div>
<div class="dk-chart__x" aria-hidden="true"><span>00</span><span>03</span><span>06</span><span>09</span><span>12</span><span>15</span><span>18</span><span>21</span></div><div class="visually-hidden"><table><caption>Requests per hour, today and the same day last week</caption><tr><th scope="col">Hour</th><th scope="col">Today</th><th scope="col">Last week</th></tr><tr><th scope="row">00:00</th><td>1,200</td><td>1,000</td></tr><tr><th scope="row">03:00</th><td>900</td><td>800</td></tr><tr><th scope="row">06:00</th><td>800</td><td>900</td></tr><tr><th scope="row">09:00</th><td>1,600</td><td>1,400</td></tr><tr><th scope="row">12:00</th><td>3,100</td><td>2,500</td></tr><tr><th scope="row">15:00</th><td>3,800</td><td>3,000</td></tr><tr><th scope="row">18:00</th><td>3,400</td><td>2,900</td></tr><tr><th scope="row">21:00</th><td>2,600</td><td>2,200</td></tr></table></div></figure></section></div>
<div class="cols"><section><span class="lbl">Mini calendar</span><div class="card dk-card card-body dk-cal">
<div class="dk-cal__head"><h3 class="m-0" aria-hidden="true">October 2026</h3><div class="dk-cal__nav"><button class="btn btn-dk btn-dk-ghost btn-dk-icon btn-sm" type="button" aria-label="Previous month"><svg class="dk-ico" aria-hidden="true" focusable="false"><use href="#dk-i-chevl"/></svg></button><button class="btn btn-dk btn-dk-ghost btn-dk-icon btn-sm" type="button" aria-label="Next month"><svg class="dk-ico" aria-hidden="true" focusable="false"><use href="#dk-i-chevr"/></svg></button></div></div>
<table class="table text-center"><caption class="visually-hidden">October 2026</caption><thead><tr><th class="" scope="col"><abbr title="Monday" style="text-decoration:none">Mo</abbr></th><th class="" scope="col"><abbr title="Tuesday" style="text-decoration:none">Tu</abbr></th><th class="" scope="col"><abbr title="Wednesday" style="text-decoration:none">We</abbr></th><th class="" scope="col"><abbr title="Thursday" style="text-decoration:none">Th</abbr></th><th class="" scope="col"><abbr title="Friday" style="text-decoration:none">Fr</abbr></th><th class="" scope="col"><abbr title="Saturday" style="text-decoration:none">Sa</abbr></th><th class="" scope="col"><abbr title="Sunday" style="text-decoration:none">Su</abbr></th></tr></thead><tbody><tr><td class=""><span class="dk-cal__out" aria-hidden="true">28</span></td><td class=""><span class="dk-cal__out" aria-hidden="true">29</span></td><td class=""><span class="dk-cal__out" aria-hidden="true">30</span></td><td class=""><button class="dk-day" type="button" aria-label="1 October" aria-pressed="false">1</button></td><td class=""><button class="dk-day" type="button" aria-label="2 October" aria-pressed="false">2</button></td><td class=""><button class="dk-day" type="button" aria-label="3 October" aria-pressed="false">3</button></td><td class=""><button class="dk-day" type="button" aria-label="4 October" aria-pressed="false">4</button></td></tr><tr><td class=""><button class="dk-day" type="button" aria-label="5 October" aria-pressed="false">5</button></td><td class=""><button class="dk-day" type="button" aria-label="6 October, 1 event" aria-pressed="false" data-events>6</button></td><td class=""><button class="dk-day" type="button" aria-label="7 October" aria-pressed="false">7</button></td><td class=""><button class="dk-day" type="button" aria-label="8 October" aria-pressed="false">8</button></td><td class=""><button class="dk-day" type="button" aria-label="9 October" aria-pressed="false">9</button></td><td class=""><button class="dk-day" type="button" aria-label="10 October" aria-pressed="false">10</button></td><td class=""><button class="dk-day" type="button" aria-label="11 October" aria-pressed="false">11</button></td></tr><tr><td class=""><button class="dk-day" type="button" aria-label="12 October" aria-pressed="false">12</button></td><td class=""><button class="dk-day" type="button" aria-label="13 October" aria-pressed="false">13</button></td><td class=""><button class="dk-day" type="button" aria-label="14 October, 2 events" aria-pressed="false" data-events>14</button></td><td class=""><button class="dk-day" type="button" aria-label="15 October" aria-pressed="false">15</button></td><td class=""><button class="dk-day" type="button" aria-label="16 October, today" aria-current="date" aria-pressed="false">16</button></td><td class=""><button class="dk-day" type="button" aria-label="17 October" aria-pressed="false">17</button></td><td class=""><button class="dk-day" type="button" aria-label="18 October" aria-pressed="false">18</button></td></tr><tr><td class=""><button class="dk-day" type="button" aria-label="19 October" aria-pressed="false">19</button></td><td class=""><button class="dk-day" type="button" aria-label="20 October" aria-pressed="false">20</button></td><td class=""><button class="dk-day" type="button" aria-label="21 October, 2 events" aria-pressed="true" data-events>21</button></td><td class=""><button class="dk-day" type="button" aria-label="22 October" aria-pressed="false">22</button></td><td class=""><button class="dk-day" type="button" aria-label="23 October" aria-pressed="false">23</button></td><td class=""><button class="dk-day" type="button" aria-label="24 October" aria-pressed="false">24</button></td><td class=""><button class="dk-day" type="button" aria-label="25 October" aria-pressed="false">25</button></td></tr><tr><td class=""><button class="dk-day" type="button" aria-label="26 October" aria-pressed="false">26</button></td><td class=""><button class="dk-day" type="button" aria-label="27 October, 1 event" aria-pressed="false" data-events>27</button></td><td class=""><button class="dk-day" type="button" aria-label="28 October" aria-pressed="false">28</button></td><td class=""><button class="dk-day" type="button" aria-label="29 October" aria-pressed="false">29</button></td><td class=""><button class="dk-day" type="button" aria-label="30 October" aria-pressed="false">30</button></td><td class=""><button class="dk-day" type="button" aria-label="31 October" aria-pressed="false">31</button></td><td class=""><span class="dk-cal__out" aria-hidden="true">1</span></td></tr></tbody></table>
<ul class="dk-agenda"><li><time datetime="2026-10-21T09:30">09:30</time><span><b>Incident review</b>INC-2291 · 45 min</span></li><li><time datetime="2026-10-21T14:00">14:00</time><span><b>Release 4.12 go / no-go</b>Platform team · 30 min</span></li></ul></div></section>
<section><span class="lbl">Progress · bars, stacked bar, ring, steps</span><div class="card dk-card card-body"><div class="dk-meters">
<div class="dk-meter"><p><span id="m-57">Build minutes</span><b>3,420 / 6,000</b></p><div class="progress dk-bar" role="progressbar" aria-labelledby="m-57" aria-valuenow="57" aria-valuemin="0" aria-valuemax="100" style="--c:var(--accent)"><div class="progress-bar" style="width:57%"></div></div></div>
<div class="dk-meter"><p><span id="m-82">Bandwidth</span><b>820 / 1,000 GB</b></p><div class="progress dk-bar" role="progressbar" aria-labelledby="m-82" aria-valuenow="82" aria-valuemin="0" aria-valuemax="100" style="--c:var(--warning)"><div class="progress-bar" style="width:82%"></div></div></div>
<div class="dk-meter"><p><span id="m-34">Edge requests</span><b>3.4M / 10M</b></p><div class="progress dk-bar" role="progressbar" aria-labelledby="m-34" aria-valuenow="34" aria-valuemin="0" aria-valuemax="100" style="--c:var(--success)"><div class="progress-bar" style="width:34%"></div></div></div>
<div class="dk-meter"><p><span>Storage · 88 of 100 GB</span><b>88%</b></p><div class="progress-stacked dk-stackbar" role="img" aria-label="Storage: logs 46 GB, build cache 28 GB, images 14 GB, 12 GB free"><div class="progress" style="width:46%;--c:var(--accent)"><div class="progress-bar"></div></div><div class="progress" style="width:28%;--c:var(--success)"><div class="progress-bar"></div></div><div class="progress" style="width:14%;--c:var(--warning)"><div class="progress-bar"></div></div></div><ul class="dk-stacklegend" aria-hidden="true"><li><i style="--c:var(--accent)"></i>Logs 46 GB</li><li><i style="--c:var(--success)"></i>Build cache 28 GB</li><li><i style="--c:var(--warning)"></i>Images 14 GB</li></ul></div></div>
<div class="dk-progress-row"><div class="dk-ring" role="progressbar" aria-label="Sprint completed" aria-valuenow="72" aria-valuemin="0" aria-valuemax="100"><svg viewBox="0 0 100 100" aria-hidden="true" focusable="false"><circle cx="50" cy="50" r="42" style="fill:none;stroke:var(--surface-3);stroke-width:9"/><circle cx="50" cy="50" r="42" pathLength="100" style="fill:none;stroke:var(--accent);stroke-width:9;stroke-linecap:round;stroke-dasharray:72 100"/></svg><span class="dk-ring__label" aria-hidden="true">72%<small class="">sprint</small></span></div><ol class="dk-steps" aria-label="Deployment dpl_7Kq2xT">
<li data-state="done"><span class="dk-steps__mark" aria-hidden="true"><svg class="dk-ico" aria-hidden="true" focusable="false"><use href="#dk-i-tick"/></svg></span><span><b>Build<span class="visually-hidden">, done</span></b>1 m 12 s</span></li>
<li data-state="done"><span class="dk-steps__mark" aria-hidden="true"><svg class="dk-ico" aria-hidden="true" focusable="false"><use href="#dk-i-tick"/></svg></span><span><b>Test<span class="visually-hidden">, done</span></b>2 m 40 s</span></li>
<li data-state="current" aria-current="step"><span class="dk-steps__mark" aria-hidden="true"></span><span><b>Deploy<span class="visually-hidden"></span></b>Uploading 18 functions</span></li>
<li data-state="todo"><span class="dk-steps__mark" aria-hidden="true"></span><span><b>Verify<span class="visually-hidden"></span></b>Waiting</span></li>
</ol></div></div></section></div>
CSS
Copy
/* ── Dark UI kit tokens (uiCookies) — identical in every set ──────────────────────────────
Dark first. Elevation is a lighter surface, not a shadow: surface-0 is the page, 1 cards and
panels, 2 controls, menus and dialogs, 3 hover, selected rows and tooltips.
Every colour is a light-dark() pair, so flipping color-scheme turns the whole kit light:
data-theme="dark" | "light" | "system" on any wrapper (system follows prefers-color-scheme),
or a checked .theme-pick radio inside a [data-theme] element (:has()).
Contrast, dark | light, on the worst surface (surface-3): text-1 12.2 | 15.0, text-2 6.6 | 7.3,
text-3 4.8 | 5.4, accent 5.4 | 5.1, success 7.7 | 5.0, warning 8.4 | 5.2, danger 6.8 | 5.0;
edge (control boundaries) 3.3 | 3.1 and focus 7.9 | 5.9 against every surface. */
:root{color-scheme:dark}
[data-theme="dark"]{color-scheme:dark}
[data-theme="light"]{color-scheme:light}
[data-theme="system"]{color-scheme:light dark}
[data-theme]:has(.theme-pick[value="dark"]:checked){color-scheme:dark}
[data-theme]:has(.theme-pick[value="light"]:checked){color-scheme:light}
[data-theme]:has(.theme-pick[value="system"]:checked){color-scheme:light dark}
:root{
--surface-0:light-dark(#eef1f5,#0b0d12); /* page */
--surface-1:light-dark(#ffffff,#151821); /* cards, panels, navbar, sidebar */
--surface-2:light-dark(#f6f7f9,#1d212c); /* controls, menus, dialogs, toasts */
--surface-3:light-dark(#e6e9ef,#262b38); /* hover, selected rows, tooltips */
--text-1:light-dark(#12151c,#eceef3); /* primary text */
--text-2:light-dark(#434a5a,#aab1bf); /* secondary text */
--text-3:light-dark(#555d6e,#8f96a8); /* captions, placeholders, axis labels */
--border:light-dark(#dde1e8,#2a2f3c); /* decorative 1px dividers and card edges */
--edge:light-dark(#7c8496,#737b90); /* control boundaries: fields, boxes, tracks */
--accent:light-dark(#4452d0,#8b97ff); /* the one vivid colour: links, selected, primary */
--accent-soft:light-dark(#e6e8ff,#232a4d); /* selected backgrounds; accent text keeps 5.2 | 5.3 on it */
--on-accent:light-dark(#ffffff,#0b0d12); /* text on accent fills, 6.2 | 7.4 */
--success:light-dark(#11713f,#5fd4a0); /* desaturated for dark, so they do not vibrate */
--warning:light-dark(#875500,#f0c060);
--danger:light-dark(#bb2532,#ff9790);
--focus:light-dark(#3b48c4,#b5bdff); /* 2px focus ring */
--highlight:light-dark(rgb(255 255 255 / 0),rgb(255 255 255 / .045)); /* 1px top light on dark surfaces */
--shadow-color:light-dark(rgb(16 24 40 / .16),rgb(0 0 0 / .55)); /* overlays only */
--radius:12px;--radius-sm:8px;
--mono:ui-monospace,"SF Mono","Cascadia Code",Menlo,Consolas,monospace;
}
/* No light-dark() (Chrome < 123, Safari < 17.5, Firefox < 120): the same values, chosen by attribute */
@supports not (color:light-dark(#fff,#000)){
:root,[data-theme="dark"]{--surface-0:#0b0d12;--surface-1:#151821;--surface-2:#1d212c;--surface-3:#262b38;--text-1:#eceef3;--text-2:#aab1bf;--text-3:#8f96a8;--border:#2a2f3c;--edge:#737b90;--accent:#8b97ff;--accent-soft:#232a4d;--on-accent:#0b0d12;--success:#5fd4a0;--warning:#f0c060;--danger:#ff9790;--focus:#b5bdff;--highlight:rgb(255 255 255 / .045);--shadow-color:rgb(0 0 0 / .55)}
[data-theme="light"]{--surface-0:#eef1f5;--surface-1:#ffffff;--surface-2:#f6f7f9;--surface-3:#e6e9ef;--text-1:#12151c;--text-2:#434a5a;--text-3:#555d6e;--border:#dde1e8;--edge:#7c8496;--accent:#4452d0;--accent-soft:#e6e8ff;--on-accent:#ffffff;--success:#11713f;--warning:#875500;--danger:#bb2532;--focus:#3b48c4;--highlight:rgb(255 255 255 / 0);--shadow-color:rgb(16 24 40 / .16)}
@media (prefers-color-scheme:light){[data-theme="system"]{--surface-0:#eef1f5;--surface-1:#ffffff;--surface-2:#f6f7f9;--surface-3:#e6e9ef;--text-1:#12151c;--text-2:#434a5a;--text-3:#555d6e;--border:#dde1e8;--edge:#7c8496;--accent:#4452d0;--accent-soft:#e6e8ff;--on-accent:#ffffff;--success:#11713f;--warning:#875500;--danger:#bb2532;--focus:#3b48c4;--highlight:rgb(255 255 255 / 0);--shadow-color:rgb(16 24 40 / .16)}}
}
@media (prefers-contrast:more){:root{--border:var(--edge);--text-3:var(--text-2)}}
[data-theme]{background:var(--surface-0);color:var(--text-1)}
/* Bootstrap's own variables mapped onto the kit tokens (identical in every Bootstrap set).
data-bs-theme="dark" on <html> gives Bootstrap's dark defaults; the tokens then win. */
:root,[data-bs-theme],[data-theme]{
--bs-body-bg:var(--surface-0);--bs-body-color:var(--text-1);--bs-emphasis-color:var(--text-1);
--bs-heading-color:var(--text-1);--bs-secondary-color:var(--text-2);--bs-tertiary-color:var(--text-3);
--bs-secondary-bg:var(--surface-2);--bs-tertiary-bg:var(--surface-3);
--bs-border-color:var(--border);--bs-border-color-translucent:var(--border);
--bs-border-radius:var(--radius-sm);--bs-border-radius-lg:var(--radius);--bs-border-radius-sm:6px;
--bs-link-color:var(--accent);--bs-link-hover-color:var(--accent);
--bs-focus-ring-color:var(--focus);--bs-code-color:var(--accent);
--bs-font-monospace:var(--mono);
--bs-success-text-emphasis:var(--success);--bs-warning-text-emphasis:var(--warning);--bs-danger-text-emphasis:var(--danger)}
/* Bootstrap draws the checkbox tick and select chevron as SVG images, which cannot read CSS
variables, so each theme gets its own copy */
:root,[data-theme="dark"]{--dk-check-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%230b0d12' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");--dk-select-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23aab1bf' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}
[data-theme="light"]{--dk-check-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");--dk-select-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23434a5a' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}
@media (prefers-color-scheme:light){[data-theme="system"]{--dk-check-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");--dk-select-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23434a5a' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}}
[data-theme]:has(.theme-pick[value="dark"]:checked){--dk-check-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%230b0d12' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");--dk-select-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23aab1bf' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}
[data-theme]:has(.theme-pick[value="light"]:checked){--dk-check-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");--dk-select-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23434a5a' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}
@media (prefers-color-scheme:light){[data-theme]:has(.theme-pick[value="system"]:checked){--dk-check-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");--dk-select-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23434a5a' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}}
@media (prefers-color-scheme:dark){[data-theme]:has(.theme-pick[value="system"]:checked){--dk-check-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%230b0d12' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");--dk-select-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23aab1bf' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}}
a{color:var(--accent)}
a:hover{color:var(--accent)}
/* Components */
.dk-ico{width:18px;height:18px;flex:none}
.dk-kbd{display:inline-grid;place-items:center;min-width:1.45rem;height:1.35rem;padding:0 .35rem;border:1px solid var(--border);border-bottom-width:2px;
border-radius:5px;background:var(--surface-2);color:var(--text-2);font:500 .72rem/1 var(--mono)}
.dk-link{color:var(--accent);font-weight:600;text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent);text-underline-offset:3px}
.dk-link:hover{color:var(--accent);text-decoration-color:currentColor}
.dk-link:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:3px;box-shadow:none}
/* .card through --bs-card-* */
.card.dk-card{--bs-card-bg:var(--surface-1);--bs-card-color:var(--text-1);--bs-card-border-color:var(--border);--bs-card-border-radius:var(--radius);
--bs-card-inner-border-radius:calc(var(--radius) - 1px);--bs-card-spacer-x:20px;--bs-card-spacer-y:20px;--bs-card-cap-bg:transparent;--bs-card-title-color:var(--text-1);
--bs-card-subtitle-color:var(--text-2);box-shadow:inset 0 1px 0 var(--highlight)}
.dk-card h2,.dk-card h3,.dk-card p{margin:0}
.dk-card .card-title{font-size:1rem;font-weight:650;letter-spacing:-.01em;margin:0}
.dk-card .card-subtitle{margin-top:2px;font-size:.85rem}
/* .btn variants through --bs-btn-* */
.btn-dk{--bs-btn-padding-x:1rem;--bs-btn-padding-y:.5rem;--bs-btn-font-size:.875rem;--bs-btn-font-weight:600;--bs-btn-line-height:1.2;--bs-btn-border-radius:var(--radius-sm);
--bs-btn-bg:var(--surface-2);--bs-btn-color:var(--text-1);--bs-btn-border-color:var(--border);
--bs-btn-hover-bg:var(--surface-3);--bs-btn-hover-color:var(--text-1);--bs-btn-hover-border-color:var(--border);
--bs-btn-active-bg:var(--surface-3);--bs-btn-active-color:var(--text-1);--bs-btn-active-border-color:var(--border);
--bs-btn-disabled-bg:var(--surface-2);--bs-btn-disabled-color:var(--text-1);--bs-btn-disabled-border-color:var(--border);--bs-btn-disabled-opacity:.5;
--bs-btn-focus-box-shadow:inset 0 1px 0 var(--highlight);
display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:38px;white-space:nowrap;box-shadow:inset 0 1px 0 var(--highlight)}
.btn-dk:focus-visible,.btn-check:focus-visible+.btn-dk{outline:2px solid var(--focus);outline-offset:2px}
.btn-dk-primary{--bs-btn-bg:var(--accent);--bs-btn-color:var(--on-accent);--bs-btn-border-color:var(--accent);
--bs-btn-hover-bg:color-mix(in srgb,var(--accent) 86%,var(--text-1));--bs-btn-hover-color:var(--on-accent);--bs-btn-hover-border-color:var(--accent);
--bs-btn-active-bg:color-mix(in srgb,var(--accent) 86%,var(--text-1));--bs-btn-active-color:var(--on-accent);--bs-btn-active-border-color:var(--accent);
--bs-btn-disabled-bg:var(--accent);--bs-btn-disabled-color:var(--on-accent);--bs-btn-disabled-border-color:var(--accent)}
.btn-dk-ghost{--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-color:var(--text-2);--bs-btn-hover-border-color:transparent;--bs-btn-active-border-color:transparent;box-shadow:none}
.btn-dk-danger{--bs-btn-color:var(--danger);--bs-btn-border-color:color-mix(in srgb,var(--danger) 40%,var(--border));--bs-btn-hover-color:var(--danger);
--bs-btn-hover-border-color:color-mix(in srgb,var(--danger) 40%,var(--border));--bs-btn-active-color:var(--danger)}
.btn-dk.btn-sm{--bs-btn-padding-x:.75rem;--bs-btn-padding-y:.35rem;--bs-btn-font-size:.8rem;min-height:32px}
.btn-dk.btn-lg{--bs-btn-padding-x:1.35rem;--bs-btn-padding-y:.7rem;--bs-btn-font-size:.95rem;--bs-btn-border-radius:var(--radius-sm);min-height:46px}
.btn-dk-icon{--bs-btn-padding-x:0;--bs-btn-padding-y:0;width:38px}
.btn-dk-icon.btn-sm{width:32px}.btn-dk-icon.btn-lg{width:46px}
.btn-dk.btn-dk-round{--bs-btn-border-radius:999px}
@media (prefers-reduced-motion:reduce){.btn-dk{transition:none}}
/* .form-range recoloured */
.dk-range.form-range{height:22px}
.dk-range.form-range::-webkit-slider-runnable-track{height:6px;border:1px solid var(--edge);border-radius:999px;background:linear-gradient(90deg,var(--accent) 0 var(--val,50%),var(--surface-3) var(--val,50%))}
.dk-range.form-range::-moz-range-track{height:6px;border:1px solid var(--edge);border-radius:999px;background:var(--surface-3)}
.dk-range.form-range::-moz-range-progress{height:6px;border-radius:999px;background:var(--accent)}
.dk-range.form-range::-webkit-slider-thumb{width:18px;height:18px;margin-top:-7px;border:2px solid var(--accent);border-radius:50%;background:var(--text-1);box-shadow:none}
.dk-range.form-range::-moz-range-thumb{width:14px;height:14px;border:2px solid var(--accent);border-radius:50%;background:var(--text-1)}
.dk-range.form-range:focus{box-shadow:none}
.dk-range.form-range:focus::-webkit-slider-thumb{box-shadow:none}
.dk-range.form-range:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:4px}
@media (prefers-reduced-motion:reduce){.dk-range.form-range::-webkit-slider-thumb{transition:none}}
/* Media player */
.dk-player{display:grid;grid-template-columns:96px minmax(0,1fr);gap:18px;align-items:center}
.dk-player__art{width:96px;height:96px;overflow:hidden;border:1px solid var(--border);border-radius:10px}
.dk-player__show{font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--accent)}
.dk-player__title{margin-top:4px!important;font-size:1rem;font-weight:650;line-height:1.35}
.dk-player__seek{grid-column:1/-1;display:grid;gap:4px}
.dk-player__time{display:flex;justify-content:space-between;font:500 .75rem var(--mono);color:var(--text-3)}
.dk-player__controls{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:10px}
.dk-player__controls .dk-btn--icon.dk-btn--lg{width:52px;min-height:52px}
.dk-player__controls .dk-spacer{flex:1}
.dk-speed{font:600 .78rem var(--mono)}
/* Chart card */
.dk-chart__head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:18px}
.dk-chart__value{margin-top:4px!important;font-size:1.6rem;font-weight:650;letter-spacing:-.02em;line-height:1.1}
.dk-legend{display:flex;flex-wrap:wrap;gap:14px;margin:0;padding:0;list-style:none;font-size:.78rem;color:var(--text-2)}
.dk-legend li{display:inline-flex;align-items:center;gap:6px}
.dk-legend i{width:14px;height:3px;border-radius:2px;background:var(--accent)}
.dk-legend i.dk-legend--dash{background:repeating-linear-gradient(90deg,var(--text-3) 0 4px,transparent 4px 7px)}
.dk-chart__plot{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px}
.dk-chart__y{display:flex;flex-direction:column;justify-content:space-between;height:180px;margin:-7px 0;font:500 .7rem var(--mono);color:var(--text-3);text-align:right}
.dk-chart__x{display:flex;justify-content:space-between;margin:8px 0 0 34px;font:500 .7rem var(--mono);color:var(--text-3)}
/* Mini calendar */
.dk-cal__head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
.dk-cal__head h3{font-size:.95rem;font-weight:650}
.dk-cal__nav{display:flex;gap:4px}
.dk-cal table{width:100%;border-collapse:collapse;table-layout:fixed;text-align:center}
.dk-cal th{padding:4px 0 8px;font-size:.7rem;font-weight:600;color:var(--text-3)}
.dk-cal td{padding:2px}
.dk-cal__out{display:inline-grid;place-items:center;width:34px;height:34px;font-size:.8rem;color:var(--text-3)}
.dk-day{position:relative;display:inline-grid;place-items:center;width:34px;height:34px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--text-1);
font-family:inherit;font-size:.82rem;font-variant-numeric:tabular-nums;cursor:pointer}
.dk-day:hover{background:var(--surface-3)}
.dk-day:focus-visible{outline:2px solid var(--focus);outline-offset:1px}
.dk-day[aria-current="date"]{border-color:var(--accent);color:var(--accent);font-weight:700}
.dk-day[aria-pressed="true"]{border-color:var(--accent);background:var(--accent);color:var(--on-accent);font-weight:700}
.dk-day[data-events]::after{content:"";position:absolute;bottom:4px;left:50%;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:currentColor}
.dk-agenda{display:grid;gap:8px;margin:14px 0 0;padding:14px 0 0;border-top:1px solid var(--border);list-style:none;font-size:.82rem}
.dk-agenda li{display:grid;grid-template-columns:52px 1fr;gap:10px;color:var(--text-2)}
.dk-agenda time{font:600 .75rem/1.6 var(--mono);color:var(--text-3)}
.dk-agenda b{display:block;font-weight:600;color:var(--text-1)}
/* Progress */
.dk-meters{display:grid;gap:16px}
.dk-meter p{display:flex;justify-content:space-between;gap:8px;margin:0 0 7px!important;font-size:.82rem;color:var(--text-2)}
.dk-meter b{font-weight:600;color:var(--text-1);font-variant-numeric:tabular-nums}
.dk-bar{height:8px;border-radius:999px;background:var(--surface-3);overflow:hidden;box-shadow:inset 0 0 0 1px var(--border)}
.dk-bar>span{display:block;height:100%;border-radius:inherit;background:var(--c,var(--accent))}
.dk-stackbar{display:flex;gap:2px;height:8px;border-radius:999px;overflow:hidden;background:var(--surface-3)}
.dk-stackbar>span{background:var(--c)}
.dk-stacklegend{display:flex;flex-wrap:wrap;gap:6px 14px;margin:9px 0 0;padding:0;list-style:none;font-size:.75rem;color:var(--text-2)}
.dk-stacklegend li{display:inline-flex;align-items:center;gap:6px}
.dk-stacklegend i{width:8px;height:8px;border-radius:2px;background:var(--c)}
.dk-progress-row{display:grid;grid-template-columns:auto minmax(0,1fr);gap:22px;align-items:center;margin-top:20px;padding-top:20px;border-top:1px solid var(--border)}
.dk-ring{position:relative;width:96px;height:96px}
.dk-ring svg{display:block;width:100%;height:100%;transform:rotate(-90deg)}
.dk-ring__label{position:absolute;inset:0;display:grid;place-content:center;text-align:center;font-size:1.15rem;font-weight:700;line-height:1.1}
.dk-ring__label small{font-size:.65rem;font-weight:500;color:var(--text-3)}
.dk-steps{display:grid;gap:12px;margin:0;padding:0;list-style:none}
.dk-steps li{display:grid;grid-template-columns:22px 1fr;gap:10px;align-items:start;font-size:.82rem;color:var(--text-2)}
.dk-steps b{display:block;font-weight:600;color:var(--text-1)}
.dk-steps__mark{display:grid;place-items:center;width:22px;height:22px;border:1.5px solid var(--edge);border-radius:50%;color:var(--on-accent)}
.dk-steps__mark .dk-ico{width:13px;height:13px}
.dk-steps [data-state="done"] .dk-steps__mark{border-color:var(--success);background:var(--success)}
.dk-steps [aria-current="step"] .dk-steps__mark{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.dk-steps [aria-current="step"] .dk-steps__mark::after{content:"";width:8px;height:8px;border-radius:50%;background:var(--accent);animation:dk-pulse 1.4s ease-in-out infinite}
@keyframes dk-pulse{50%{transform:scale(.55);opacity:.6}}
@media (prefers-reduced-motion:reduce){.dk-steps [aria-current="step"] .dk-steps__mark::after{animation:none}}
/* Bootstrap .progress recoloured; .table kept for the calendar grid */
.dk-bar.progress{--bs-progress-height:8px;--bs-progress-bg:var(--surface-3);--bs-progress-border-radius:999px;--bs-progress-bar-bg:var(--c,var(--accent))}
.dk-bar .progress-bar{border-radius:999px}
.dk-stackbar.progress-stacked{--bs-progress-height:8px;--bs-progress-bg:var(--surface-3);--bs-progress-border-radius:999px;gap:2px}
.dk-stackbar .progress{--bs-progress-bar-bg:var(--c);--bs-progress-border-radius:0}
.dk-cal .table{--bs-table-bg:transparent;--bs-table-color:var(--text-1);--bs-table-border-color:transparent;margin:0}
.dk-cal .table>:not(caption)>*>*{padding:2px;border:0}
.dk-player__controls .btn-dk-icon.btn-lg{width:52px;min-height:52px}