HTML
Copy
<div><span class="mb-3 block text-[.72rem] tracking-[.12em] text-[#6b5a60] uppercase">Icons, descriptions and prices</span><div class="rounded-2xl border border-[#efe3e6] bg-white px-6 pt-[22px] pb-6 shadow-[0_1px_2px_rgba(42,26,31,.04)]">
<div class="grid min-w-0 gap-[7px]">
<label class="text-[.9rem] font-semibold" for="cs-ship">Delivery</label>
<select class="cs block h-12 w-full cursor-pointer appearance-none rounded-xl border border-cs-line bg-white bg-(image:--cs-chev) bg-size-[16px] bg-position-[right_14px_center] bg-no-repeat pr-[42px] pl-3.5 text-[.95rem] text-cs-ink shadow-[0_1px_2px_rgba(42,26,31,.06)] [color-scheme:light] transition-[border-color,box-shadow] duration-150 hover:border-[#716669] focus-visible:border-cs-accent focus-visible:shadow-[0_0_0_4px_rgba(190,18,60,.22)] focus-visible:outline-none motion-reduce:transition-none" id="cs-ship" name="delivery" aria-describedby="cs-ship-hint">
<button><selectedcontent></selectedcontent></button>
<option value="standard"><span class="grid size-8 flex-none place-items-center rounded-[9px] bg-cs-tint text-cs-accent [&_svg]:size-[18px]" data-pic aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21 8-9-5-9 5v8l9 5 9-5V8Z"/><path d="m3 8 9 5 9-5M12 13v8"/></svg></span><span class="grid min-w-0"><span>Standard</span><span class="hidden"> — </span><span class="text-[.8rem] font-normal text-cs-muted in-[selectedcontent]:hidden">3 to 5 working days</span></span><span class="ml-auto text-[.85rem] font-semibold tabular-nums in-[selectedcontent]:hidden"><span class="hidden">, </span>Free</span></option>
<option value="express" selected><span class="grid size-8 flex-none place-items-center rounded-[9px] bg-cs-tint text-cs-accent [&_svg]:size-[18px]" data-pic aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2 4 14h7l-1 8 9-12h-7l1-8Z"/></svg></span><span class="grid min-w-0"><span>Express</span><span class="hidden"> — </span><span class="text-[.8rem] font-normal text-cs-muted in-[selectedcontent]:hidden">Next working day</span></span><span class="ml-auto text-[.85rem] font-semibold tabular-nums in-[selectedcontent]:hidden"><span class="hidden">, </span>€6.90</span></option>
<option value="sameday"><span class="grid size-8 flex-none place-items-center rounded-[9px] bg-cs-tint text-cs-accent [&_svg]:size-[18px]" data-pic aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></svg></span><span class="grid min-w-0"><span>Same day</span><span class="hidden"> — </span><span class="text-[.8rem] font-normal text-cs-muted in-[selectedcontent]:hidden">Order before 14:00, arrives by 21:00</span></span><span class="ml-auto text-[.85rem] font-semibold tabular-nums in-[selectedcontent]:hidden"><span class="hidden">, </span>€12.50</span></option>
<option value="pickup"><span class="grid size-8 flex-none place-items-center rounded-[9px] bg-cs-tint text-cs-accent [&_svg]:size-[18px]" data-pic aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21s-7-6.2-7-11.5a7 7 0 0 1 14 0C19 14.8 12 21 12 21Z"/><circle cx="12" cy="9.5" r="2.5"/></svg></span><span class="grid min-w-0"><span>Pickup point</span><span class="hidden"> — </span><span class="text-[.8rem] font-normal text-cs-muted in-[selectedcontent]:hidden">Collect in 2 days from 340 lockers</span></span><span class="ml-auto text-[.85rem] font-semibold tabular-nums in-[selectedcontent]:hidden"><span class="hidden">, </span>Free</span></option>
</select>
<p class="text-[.82rem] text-cs-muted" id="cs-ship-hint">Prices include VAT. Tracking arrives by email.</p>
</div>
</div></div>
<div><span class="mb-3 block text-[.72rem] tracking-[.12em] text-[#6b5a60] uppercase">Colour dots and typeface previews</span><div class="rounded-2xl border border-[#efe3e6] bg-white px-6 pt-[22px] pb-6 shadow-[0_1px_2px_rgba(42,26,31,.04)]">
<div class="grid grid-cols-[repeat(auto-fit,minmax(220px,1fr))] gap-4">
<div class="grid min-w-0 gap-[7px]">
<label class="text-[.9rem] font-semibold" for="cs-status">Status</label>
<select class="cs block h-12 w-full cursor-pointer appearance-none rounded-xl border border-cs-line bg-white bg-(image:--cs-chev) bg-size-[16px] bg-position-[right_14px_center] bg-no-repeat pr-[42px] pl-3.5 text-[.95rem] text-cs-ink shadow-[0_1px_2px_rgba(42,26,31,.06)] [color-scheme:light] transition-[border-color,box-shadow] duration-150 hover:border-[#716669] focus-visible:border-cs-accent focus-visible:shadow-[0_0_0_4px_rgba(190,18,60,.22)] focus-visible:outline-none motion-reduce:transition-none" id="cs-status" name="status">
<button><selectedcontent></selectedcontent></button>
<option value="draft"><span class="size-2.5 flex-none rounded-full bg-(--dot)" style="--dot:#78716c" aria-hidden="true"></span>Draft</option>
<option value="review"><span class="size-2.5 flex-none rounded-full bg-(--dot)" style="--dot:#d97706" aria-hidden="true"></span>In review</option>
<option value="scheduled" selected><span class="size-2.5 flex-none rounded-full bg-(--dot)" style="--dot:#2563eb" aria-hidden="true"></span>Scheduled</option>
<option value="published"><span class="size-2.5 flex-none rounded-full bg-(--dot)" style="--dot:#16a34a" aria-hidden="true"></span>Published</option>
<option value="archived"><span class="size-2.5 flex-none rounded-full bg-(--dot)" style="--dot:#be123c" aria-hidden="true"></span>Archived</option>
</select>
</div>
<div class="grid min-w-0 gap-[7px]">
<label class="text-[.9rem] font-semibold" for="cs-font">Heading typeface</label>
<select class="cs block h-12 w-full cursor-pointer appearance-none rounded-xl border border-cs-line bg-white bg-(image:--cs-chev) bg-size-[16px] bg-position-[right_14px_center] bg-no-repeat pr-[42px] pl-3.5 text-[.95rem] text-cs-ink shadow-[0_1px_2px_rgba(42,26,31,.06)] [color-scheme:light] transition-[border-color,box-shadow] duration-150 hover:border-[#716669] focus-visible:border-cs-accent focus-visible:shadow-[0_0_0_4px_rgba(190,18,60,.22)] focus-visible:outline-none motion-reduce:transition-none" id="cs-font" name="heading_font">
<button><selectedcontent></selectedcontent></button>
<option value="serif"><span class="grid min-w-0"><span class="text-[1.05rem] font-[Charter,'Bitstream_Charter','Sitka_Text',Cambria,serif]">Transitional serif</span><span class="hidden"> — </span><span class="text-[.8rem] font-normal text-cs-muted in-[selectedcontent]:hidden">Charter, Cambria</span></span></option>
<option value="geometric" selected><span class="grid min-w-0"><span class="text-[1.05rem] font-[Avenir,Montserrat,Corbel,'URW_Gothic',source-sans-pro,sans-serif]">Geometric sans</span><span class="hidden"> — </span><span class="text-[.8rem] font-normal text-cs-muted in-[selectedcontent]:hidden">Avenir, Montserrat</span></span></option>
<option value="rounded"><span class="grid min-w-0"><span class="text-[1.05rem] font-[ui-rounded,'Hiragino_Maru_Gothic_ProN',Quicksand,Comfortaa,Manjari,'Arial_Rounded_MT','Arial_Rounded_MT_Bold',Calibri,source-sans-pro,sans-serif]">Rounded sans</span><span class="hidden"> — </span><span class="text-[.8rem] font-normal text-cs-muted in-[selectedcontent]:hidden">SF Rounded, Quicksand</span></span></option>
<option value="didone"><span class="grid min-w-0"><span class="text-[1.05rem] font-[Didot,'Bodoni_MT','Noto_Serif_Display','URW_Palladio_L',P052,Sylfaen,serif]">Didone</span><span class="hidden"> — </span><span class="text-[.8rem] font-normal text-cs-muted in-[selectedcontent]:hidden">Didot, Bodoni</span></span></option>
<option value="mono"><span class="grid min-w-0"><span class="text-[1.05rem] font-[ui-monospace,'Cascadia_Code','Source_Code_Pro',Menlo,Consolas,'DejaVu_Sans_Mono',monospace]">Monospace</span><span class="hidden"> — </span><span class="text-[.8rem] font-normal text-cs-muted in-[selectedcontent]:hidden">Menlo, Cascadia Code</span></span></option>
</select>
</div>
</div>
</div></div>
CSS
Copy
@theme {
--color-cs-accent: #be123c;
--color-cs-tint: #fdeef1;
--color-cs-line: #948a8d;
--color-cs-ink: #2a1a1f;
--color-cs-muted: #6b5a60;
}
:root { --cs-chev: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%236b5a60' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4 6 4 4 4-4'/%3E%3C/svg%3E"); }
/* The utilities in the markup draw the native select. Where appearance: base-select is supported (Chrome and Edge 135+),
this block switches .cs to the customizable select and styles the parts utilities cannot reach: ::picker(select),
::picker-icon, ::checkmark and <selectedcontent>. */
@supports (appearance: base-select) {
.cs, .cs::picker(select) { appearance: base-select; }
.cs { display: flex; align-items: center; gap: 10px; height: auto; min-height: 48px; padding: 6px 14px 6px 8px; background-image: none; }
.cs:not(:has([data-pic])) { padding-left: 14px; }
.cs:open { border-color: var(--color-cs-accent); box-shadow: 0 0 0 4px rgb(190 18 60 / .22); }
.cs::picker-icon { content: ""; width: 16px; height: 16px; background: var(--cs-chev) center / 16px no-repeat; transition: rotate .2s; }
.cs:open::picker-icon { rotate: 180deg; }
.cs > button { display: flex; flex: 1; min-width: 0; }
.cs selectedcontent { display: flex; align-items: center; gap: 10px; min-width: 0; font-weight: 600; }
.cs::picker(select) { margin-top: 6px; padding: 6px; background: #fff; border: 1px solid #e6d9dc; border-radius: 14px; box-shadow: 0 18px 40px -12px rgb(42 26 31 / .3);
transition: opacity .15s, translate .15s, display .15s allow-discrete, overlay .15s allow-discrete; }
.cs:not(:open)::picker(select) { opacity: 0; translate: 0 -4px; }
@starting-style { .cs:open::picker(select) { opacity: 0; translate: 0 -4px; } }
.cs option { display: flex; align-items: center; gap: 12px; min-width: 0; padding: 8px 10px; border-radius: 9px; font-size: .93rem; cursor: pointer; outline: none; }
.cs option:hover, .cs option:focus-visible { background: var(--color-cs-tint); }
.cs option:focus-visible { box-shadow: inset 0 0 0 2px var(--color-cs-accent); }
.cs option:checked { font-weight: 600; }
.cs option::checkmark { order: 9; padding-left: 10px; color: var(--color-cs-accent); font-weight: 700; }
.cs option:not(:has(.ml-auto))::checkmark { margin-left: auto; }
}
@media (prefers-reduced-motion: reduce) { .cs, .cs::picker(select), .cs::picker-icon { transition: none; } }