Base Stylesheets
Reset Stylesheets
Normalize Stylesheets
Classless Stylesheets
The rules of user-based styles
The styles of a webpage, any webpage, always begin with a browser stylesheet — a set of default CSS rules for HTML elements. It's inevitable. Google Chrome, Mozilla Firefox, and every other browser comes with one.
Without this sheet, development would have start from a screen with ghosts; a screen with invincible content. No color rules to differentiate foreground content from background space. No size rules to ensure a visible dimension.
With this sheet, the ghosts come alive; content becomes visible. You start to see things.
Developers, while having a safety net to build upon, must deal with the inconsistencies of styles across all browsers. The horrors of cross-browser compatibility.
Users, on the other hand, deals with poor readability of content. Nonetheless, they can personalize the page with their preference of color mode, font size, and font family. Poor but customizable.
Fair readability for users and inconsistent styles for developers are the banes of browser stylesheets.
Then comes reset stylesheets. It was popularized by Eric Meyer's reset.css in 2007. They flattens presentation styles of content. The ghost you now see looks like another. For one, headings are no different from paragraphs.
Developers get consistent styles across all browsers. In addition, it encourages the use of semantic elements. Devs can no longer, lazily, use elements based on their presentational style.
Users, meanwhile, get poor readability. Worse. It takes extra effort from developers to get that fair readability of browser stylesheet, if they need a doc page.
Poor readability for users and need for styles from developers are the banes of reset stylesheets. We trade fair readability for better consistency.
Then comes normalize stylesheets. It was popularized by Nicolas Gallagher's normalize.css in 2012. It preserves useful defaults and fixes the poor ones.
Developers get consistent styles.
Users maintain fair readability.
Fair readability, unfortunately, is still not enough. It is the bane of normalize stylesheets. Eyes have to sweep a long distance, depending on how wide the viewport is, to read a page. Sometimes, the eyes miss the next line to read.
Then comes classless stylesheets. Lexi Mattick's water.css is a popular choice since 2018. They prioritize better readability. Some classless stylesheet like magick.css strongly recommends using normalize.css.
Developers can get consistent styles.
Users get better readability, and, many a time, fair customizations that are more or less than browser sylesheets. Unfortunately, on poor semantics.
Fair customizations and Poor semantics are the banes of classless stylesheets.
Now comes Base.css, a base stylesheet by Toheeb Ogunbiyi in 2025. A 3 in 1: Base.css, the reset stylesheet; Base.css, the normalize stylesheet; Base.css, the classless stylesheet.
Developers get consistent and semantic styles
Users get better and customizable readability.
The ghosts are their best. Developers can use them as-is or build upon for web apps and web docs. Users can wave their magic wand to wear a different skin on ghosts.
Base.css
Introduction
The web's first multipurpose base stylesheet, with the most semantic rules, for complete customization and personalization.
Base.css is: first, a classless stylesheet; second, a normalize stylesheet; third, a reset stylesheet; and, fourth, every shit between those sheets. An all in one.
Through a mix of 13 properties, for customizations, developers can: reset or normalize a page for web apps, power readability of content for blog posts, and, as well, do both on the same page.
On top of developer's choices, users may personalize the aesthetics of the deployed page with a plugin like Elo.
Base.css is, by far, the most semantic classless stylesheet there is, so far. It's the only stylesheet that has unique styles for components. Verify by switching the classless stylesheets, with Elo, on the illustrations in the following sections.
Start using base.css in 2 steps:
-
Create a web page with semantic HTML
-
Link the stylesheet from a CDN, as shown below.
<link rel="stylesheet" href="https://unpkg.com/@toheeb/base/base.css">
Properties
Shape and Fill are the 2 fundamental design elements. Like a yin and yang, you need a fill to reveal a shape and you need a shape to have a fill.
Other design elements in the wild are color, space, form, line, texture, and so on; but, they are far-fetched.
Fill can be 3 things: a color, a blend of colors called gradients, or a free-form blend of colors called textures.
Shapes can be glyphs or objects. Glyphs are text characters while object are media characters. This object can, further, be 3 things: a dot if height and width are collapsed, a line if height or width is collapsed, or a form if in a 3-dimensional area.
In design, any kind of design, color is the basic type of fill. In web design, glyphs are the basic shapes of a page, not objects, since web pages are web documents.
Browsers, since time memorial, provide means to modify properties of glyphs like font size and font family. It stops at that. To modify other properties, you need a browser extension like Elo.
CSS, on the other hand, provides partial and indirect support for customizations. While CSS cascade down user's preferences of font size, it doesn't for font family. It takes some workarounds to ensure cascade from the document root. This cascade is needed for customization of design elements.
Font family
Given a page with no declaration for font family, content will inherit the user's preference from the browser settings. And, responds to user's changes.
The moment a webpage has, at least, a declaration, a thing developers do, it stops responding to user's changes in the browser settings. Nothing a user prefers that will supercede a developer's preference. This limitation only applies to the option via browser settings. It doesn't applies to extensions like Elo.
A font family declaration is a set of typefaces to create safer designs, not richer designs. Subsequent typefaces are fallbacks in case the previous typefaces fail to load.
To create richer designs, a design with mulitiple typefaces: 2, 3, 4, or any number, a developer need the respective no of declarations. Similarly, a user need the respective no of forms to change those declarations.
Using multiple typefaces requires a sound knowledge of type pairings. A knowledge many designers and developers suck at.
Rather than presenting multiple forms to users, delegating the nerdy task of type pairing to simple users who want nice pairing without any effort, we present one form for one typeface. A re-engineered typeface.
As of now, OpenType fonts can include alternate glyphs of some main glyphs. It takes CSS's font-variant-alternates property to choose preferred alternates.
Rather than having alternates of some glyphs, we'll have alternates of the whole glyphs. We'll have Many-in-one font. There'll be no need to look for nice pairs; it's baked in.
So, a font, for a script like latin, will have glyphs for characters (letters, puntuations, and numbers) in the following variations:
-
Class
-
Space: monospace and proportional
-
Type: sans, serif, and cursive
-
-
Axis
-
Weight: thin (100) to black (900)
-
Width: ultra-condensed (50%) to ultra-expanded (200%)
-
Style: normal and italic
-
-
Cases: smalls, caps, and small caps
-
roles: caption, body, and display
One font becomes a font system. Users can choose a font, with all typeface variations, and have the webpage responds to the variations it supports.
Font Size
Unlike for font family, CSS provides relative units for font sizes. One of such units, em, inherit the font size of a parent that has one. In the lack of that parent, as in the case of html element, it inherit the user's preference in the browser settings.
Font size determines the size of glyphs — the primary shape. It should also determine the size of objects — the secondary shapes, if they are to be responsive.
Beside font sizing, zooming also sizes the shapes on a page. Yet, font sizing has one advantage; it applies to designs across opened tabs in the browser.
Designs rarely use one size for its components. They need many sizes for visual hierarchy, and a type scale to ensure harmony across those sizes.
It takes a custom css property to implement the type scale for a size system.
A typical type size system for a webpage grow sizes for the following order of components: preheadings, section contents, postheading, heading level 6 to 1. Offsides like ::markers inherit from containers while Asides like ::before can inherit from their blocks.
Line Height
Line height distributes space around lines of text in a block. In the spirit of continuity, it should also manage that between blocks, and containers. In short, it should manage the vertical space of a document.
For cohesion within blocks, because of their differing sizes, line height decreases as the font size increases.
The lead that line height creates, a subtraction of one x-height from one line-height, on a basic block, paragraph blocks, becomes the base space unit. Not some arbitrary 4-point or 8-point grid unit. Afterall, glyphs, not objects, are the primary shape of a document.
Lead, together with a lead scale, creates an arithmetic sequence of space units for content gaps, and section margins.
When a block-level object media is at either start or end of a block, they impose a margin start or bottom to compensate for their lack of ascender space or descender space; respectively.
Line length
Line length caps content. It helps the reader's eyes flow easily from a line end to the start of the next line.
It caps blocks and mixes, not containers, to allow for multi-column content within containers.
The cap on mixes ensures markers and borders are beside their blocks.
On segments, at a screen width beyond the line length, an extended cap, an extension by one leading, makes their markers visually apply to all content, rather than the nearest block or mix.
On paragraph separator, a quarter cap conveys a thematic change. By quarter, or anything significantly less than 1 and more than 0, there's a visual distinction from partitions.
With a padding inline on landmarks, on root containers, all content get a breathing space to the inline edges of the viewport.
Color
Browser stylesheets come with color pallete for dark and light color mode out-of-the-box.
Developers can declare their support for either or both modes via a color-scheme meta tag in HTML or style property in CSS. To respect this support, developers must use light-dark() function to declare pallete rather than using the prefers-color-scheme media query.
Users, on the other hand, may choose their preferred mode via the browser settings.
Both users and developers can't theme the color pallete because browsers use named colors which are uncustomizable.
Customizable Color pallete builds on color components of color models.
CSS supports many color models. Human-based models such as HSL, HSB, HWB, and LCH are more intuitive than Computer-based models such as Hex, RGB, and Lab. They describe colors with components that aligns with how humans perceive and interpetes color.
Of the human-based models, LCH is the only choice for a customizable design. It has a perceptually uniform model. Users can change a component of a color and other colors in the pallete will adjust accordingly. Better still is OKLCH — an improved version of LCH. OKLCH uses Lightness, Chroma, and Hue components.
The primary color component is Hue. Lightness and Chroma creates variations. Variations for one hue is a monochromatic pallete; for 2 hues is diadic; for 3 hues is triadic; and so on.
CSS can programmatically create a live pallete from one hue using calc(). A 90deg deviation creates a complementary scheme; a type of diadic. Other deviations create as richer as possible of a pallete. A live and responsive pallete, based on one hue, thanks to OKLCH().
CSS has no native property for color hue, but an equivalent custom property works (--color-hue)
Styles
Styles are the differentiating factor. They are what makes a component look, feel, and sound distinct.
The web is filled with unsemantic styles: the absence of styles, the misuse of styles, the lack of unique styles. This can be seen through the lens of base stylesheets, as of writing.
-
None identifies landmarks, segments, preheading blocks, postheading blocks, and many other components. Absence of styles.
-
Some infer a navigation style on any list found within a nav element without ensuring its accessibility. Misuse of styles.
-
All use same styles on multiple components. Like same bold font weight on Title Phrase and Keyword Phrase. Lack of unique styles.
Blocks
All lead blocks, heading blocks and title blocks, are bolden to draw attention to their content.
Preheading blocks are inline-leveled to introduce as many taxonomies as possible without taking much screen space. Postheading blocks remained block-leveled as it buttress main headings.
Each heading group prompts a parent section that sit besides other parts called segments. Moreso, the root section prompts the main landmark that, also, sit besides other parts called landmark.
It takes lines to demarcate parts, and icons to distinguish those partitions. Same partitioning styles apply to some other components. For aesthetics purpose, landmarks use inline borders capped to one-half of the line length.
Sections use the same partitioning styles of windows to distinguish segments. All segments but heading groups and custom segments use no icons. Heading groups are uniquely identified by its bold heading block; custom segments are, well, custom to the developer.
In addition, sections use tier systems to relate their heading level and position.
A title's card, like a heading's section, is partitioned to separate leads from followers. Expecially, leads from sets of followers like we may have in a description item.
Yet, out of all 4 titles, only a detail's title and a fieldset's title influence the partition of their card.
Furthermore, a detail's title positions its marker outside of its block. Safe, because of the card's style, it wouldn't collapse on other markers, like a list marker if it's the first child of a list item.
All follower blocks, plain paragraphs and preformatted paragraphs, maintain normal font weight.
Unlike plain paragraphs, preformatted paragraphs use monospace font to preserve their semantics — preformats. If a proportional font had been used, it requires that same font to preserve any preformats.
Mixes
Mixes use all-round borders to define the boundary of their content — their mix of some title blocks, of any paragraph blocks, and of any mixes.
The border infers an inline padding to breathe space for content, and to create a margin area for markers of child mixes. This inline padding is balanced by the margin block start of the leading content and margin block end of the trailing content.
Most cards, cards without titles, except general cards, are iconified for distinction to similar cards like it were for windows.
The other cards, cards with titles or captions, including other mixes with titles, are partitioned like windows.
List layers use markers to identify their items. Ordered Lists use decimal leading zero, Unordered Lists use squares, definition lists use circles, Menu List use discs.
Illustration testing Mixes
Mix styles in the wild
Starting from the inline end of the title, a line runs, turn down, runs, turn right, runs, turn up, runs, turn left, and runs, around the content, to the inline start of the title.
With those lines, browser stylesheets ensure that a fieldset element contains its mix of content with a visible boundary.
Like browser stylesheets, most classless stylesheets use the same styles. Great!
Unfortunately, that style, the ability to see the borders of a mix of content is limited to only fieldset element. Some extended it to details element, like new.css and water.css, but none extended it to all mixes until Base.css.
With all mixes having borders, to visualize the boundary of their content, there's a need to test for space consistency with paragraph blocks — the sibling blocks of a mix.
It takes 3 samples of components to test for space consistency for all 2 boundary scenarios: a paragraph block, this paragraph, which has no borders; a fieldset card, which has partial borders because the title dissallows a full border at block start; and any other block, since they have all-round borders.
Details title
This details after a fieldset tests for the space consistency between two component with adjacent no-borders — two of the two boundary scenarios.
Besides, there's a test for a demarcation between the title and the content.
While testing for space consistency, we've provided 2 cases to test for demarcations within mixes. The other mixes worth demarcating are Figures, Tables, and Description Lists.
This caption is at the start of a figure. There should be a clear demarcation from the content it describes.
This caption is at the end of a figure. There should be a clear demarcation from the content it describes.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Empty column should be visible without a stress. There's one after this column. |
Similarly, empty row should be visible without a stress. There's one after this row. |
The 4 parts of a table, this table, should be clearly demarcated. For example, with thicker lines. |
||||||||||
|
|
|
|
|
|
|
|
|||||
|
Unlike caption, where its content should fit a viewport, content of a cell, or a span of cells, may spread across multiple viewports and that's unfortunately okay. Like this very paragraph |
||||||||||||
- A
dlitem with 3dditems: -
-
-
You should be able to tell that this is the third of the
dditems in thisdlitem.
Like dl, there are 3 other list layers. Marker type distinguishes them.
-
ol, no matter how deep, should use an unlimitedlist-typevalue. Likedecimal; Unlikelower-roman.-
ol, no matter how deep, should use an unlimitedlist-typevalue. Likedecimal; Unlikelower-roman.
-
-
ul, menu, and dl, all lists with items in no particular order, no matter how deep, should use unique shapes for markers.
-
ul, menu, and dl, all lists with items in no particular order, no matter how deep, should use unique shapes for markers.
-
- List style type
-
ul, menu, and dl, all lists with items in no particular order, no matter how deep, should use unique shapes for markers.
- List style type
-
ul, menu, and dl, all lists with items in no particular order, no matter how deep, should use unique shapes for markers.
The remaining mixes, mixes with no titles, no captions, no items, but not the custom card like this very card containing this paragraph, should be distinguishable even when with empty content. There are 7 below.
Mixes Rules
-
Use borders to mark the boundaries of all mixes.
With the presence of borders, add padding inline for space at inline ends,a
Then, margin block of double --line-lead since border conceal ascender and descende space.b The margin block on paragraphs act as padding block for the mix.
Redeclare: display of block to target transparent mixes;c text-decoration of none for del and ins elements;d and color for a elements.e
For any second mix in a row, 2 bordered components, except fieldset whose title is not bordered, the margin top, for separation, is a triple --line-lead.f
For dl, a padding top compensates the lack of a paragraph's margin top.g
-
Position icons of mixes in the margin area of the mixes' parent, right under that of segments which is, also, under that of landmarks.
-
Partition cards
Separate caption from content in a figure.a
Separate title from content in a fieldset or details.b
Separate multiple titles and descriptions, respectively, in items of description layers.c
Separate caption, heads, bodies, foots, and cells in a table layer.
-
Style list layers
Provide space to accomodate 3 digit markers.a
Apply: decimal-leading-zero to ol, square to menu, disc to ul, and circle to dl.b
Make marker size smaller to content size.c
/* 1 */
ul,
ol,
dl,
menu,
figure,
dialog,
address,
details,
fieldset,
blockquote,
a:has(:is(p, pre)),
del:has(:is(p, pre)),
ins:has(:is(p, pre)),
map:has(:is(p, pre))
{
border:
calc(1px * var(--border-width))
solid
var(--border-color)
;
/* 1a */
padding-inline: calc(2 * var(--line-lead) * var(--border-width) / var(--border-width));
/* 1b */
margin-block: calc(2 * var(--line-lead));
/* 1c */
display: block;
/* 1d */
text-decoration: none;
}
dialog {
margin: auto;
}
dialog::backdrop {
background-color: color-mix(in srgb, currentColor 20%, transparent 100%);
backdrop-filter: blur(1em);
}
/* 1d */
:is(
ul,
ol,
dl,
menu,
table,
figure,
address,
details,
fieldset,
blockquote,
a:has(:is(p, pre)),
del:has(:is(p, pre)),
ins:has(:is(p, pre)),
map:has(:is(p, pre)),
) +
:is(
ul,
ol,
dl,
menu,
table,
figure,
address,
details,
blockquote,
a:has(:is(p, pre)),
del:has(:is(p, pre)),
ins:has(:is(p, pre)),
map:has(:is(p, pre)),
)
{
margin-block-start: calc(3 * var(--line-lead));
}
/* 1f */
:is(p, pre) + fieldset:has(> legend)
{
margin-block-start: calc(1 * var(--line-lead));
}
/* 1g */
dl
{
padding-block-start: var(--line-lead);
}
/* 2 */
:is(
figure,
address,
blockquote,
a:has(:is(p, pre)),
del:has(:is(p, pre)),
ins:has(:is(p, pre)),
map:has(:is(p, pre)),
)::before
{
transform: translate(-3.2em, 1em);
top: 4em;
}
/* 3a */
figcaption:first-child
{
border-block-end: 1px solid var(--border-color);
}
figcaption:last-child
{
border-block-start: 1px solid var(--border-color);
}
/* 3b */
legend,
details[open] > summary
{
border-block-end:
calc(1px * var(--border-width))
solid
var(--border-color)
;
}
/* 3c */
dt:not(:last-of-type)
{
background-image:
linear-gradient(to right, var(--border-color) 0, var(--border-color) 2ch, transparent 2ch, transparent 3ch)
;
background-size: 1ch 1px;
background-position: left bottom;
background-repeat: no-repeat;
}
dd
{
border-block-start: calc(1px * var(--border-width)) solid var(--border-color);
margin-block-start: calc(1 * var(--line-lead) * var(--border-width) / var(--border-width));
}
/* 3d */
table
{
border-collapse: collapse;
width: 100%;
display: block;
overflow: auto;
margin-block: calc(2 * var(--line-lead));
}
caption
{
display: block;
border: 1px solid var(--border-color);
text-align: start;
position: sticky;
left: 0;
}
thead
{
border-block-end: calc(var(--border-width) * 2px) solid var(--border-color);
}
tfoot
{
border-block-start: calc(var(--border-width) * 2px) solid var(--border-color);
}
th, td
{
border: calc(var(--border-width) * 1px) solid var(--border-color);
}
th
{
padding-block: calc(1 * var(--line-lead)) calc((1 * var(--line-lead)) + var(--lh-pad));
}
td
{
vertical-align: top;
}
/* 4a */
ol,
ul,
dl,
menu
{
padding-inline-start: calc(3ch * var(--border-width) / var(--border-width));
}
/* 4b */
ol {
list-style-type: decimal-leading-zero;
}
menu
{
list-style-type: square;
}
ul {
list-style-type: disc;
}
dl > div
{
display: list-item;
list-style-type: circle;
}
/* 4c */
::marker
{
font-size: .75em;
}
Phrases
Form phrases maintain their dimension within a line. Specifically, their block dimension within a line height to avoid line overflow. All except textarea forms which are, by semantics, multi-line forms. With borders, forms distinguish their input areas within a block.
Text Forms, like Picker Forms, use icons for labelling and consistency.
Beside Form Phrases are Media Phrases. Media Phrases can be Text Media or Object Media.
Except image media with a height of 16, a height to keep images flow inline with font size — like icons, object media use a block layout for maximum viewing experience.
Text Media phrasing computer outputs need a monospace typeface to preserve any space sensitivity. Other phrases inherit the block's typeface.
General Text, General code, and Text Media targeting machines and programs need no distinction from others. Those targeting humans do.
For unique styles, other Text Phrases use icons to delimit inline sides except for the following phrases with common styles:
-
strong, like other leads, use a bold weight. -
markrelated a highlights with a background color -
delrelate a deleted text with a line through. -
inssignals inserted text with a solid underline abbrrelate an abbreviation with a dotted underline-
varrelate a variable with an italic font style. -
subrelate a subscript with a reduced font size at the baseline -
suprelate a superscript with a reduced font size at the capline -
smallrelate an aside content with a redued font size -
qandrubymaintain their quotes and positioning styles.
Illustration testing phrases
Look at the space between these lines you're reading. None of the following major culprits should cause more space at certain lines: Media phrases like icons ; Picker Forms like a date form ; Non-picker forms like a text form ; Text phrases like sup and sub: H2O1
Other than icons, other object media should have a block display.
Other than span, data, and time, other text phrases should have unique styles.
code
data
strong
mark
del
ins
abbr
var
sub
sup
small
q
红宝石
b
s
a
em
cite
dfn
samp
kbd
i
b
u
Other than buttons, for custom actions, other forms should have unique styles.
Phrases Rules
-
Place icon-like images at inline level.
-
Place other media at block level.
-
Use monospace font, a fixed width font, on phrases with computer outputs.
-
Align meter and progress, graphical components, to the middle of their line height. Also match their accent color to the current color.
-
Use implied style on top text phrases.
-
Use icons to label other text phrases.
-
Blend all forms to design style.
Make single-line text forms take the height of the line height. No more to avoid overflow; no less for enough writing space.a
Make multi-line form (textarea) and non-text forms use auto height. With such, these forms are better vertically aligned to the middle.b
Fix line height not beign centered in height of button-like forms.c
Remove inconsistent background colors; both grey of button forms, and white of non-button forms.d
Make accent color be current color for input type of range, radio, and checkbox.e
Change cursor type on hovering a form.f
-
Make select forms customizable.
-
Iconify non-picker forms for consistency with picker forms.
Make wrappers contain forms.a
Create space for icon.b
Place icon.c
/* 1 */
:is(svg, img)[height="16"] {
height: 1em;
}
/* 2 */
video,
audio,
iframe,
object,
svg:not([height='16']),
img:not([height='16'])
{
display: block;
max-width: 100%;
}
/* 3 */
kbd,
code,
samp,
output
{
font-family: monospace;
}
/* 4 */
meter,
progress
{
vertical-align: middle;
accent-color: currentColor;
}
/* 5 */
strong
{
font-weight: 700;
}
mark
{
background-color: color-mix(in srgb, currentColor 5%, transparent 100%);
padding: 0 .4em .3em;
}
ins:not(:has(p, pre)),
del:not(:has(p, pre))
{
text-decoration-thickness: calc(.0625em * var(--border-width));
}
ins:not(:has(p, pre))
{
text-underline-position: from-font;
}
abbr[title] {
text-decoration: underline 1px dotted currentColor;
text-underline-offset: 2px;
}
var
{
font-style: italic;
}
sub,
sup
{
font-size: .7em;
line-height: 1;
position: relative;
vertical-align: baseline;
}
sub
{
bottom: -1ex;
}
sup
{
top: -1.5ex;
}
small
{
font-size: .875em;
}
/* 6 */
i,
b,
u,
s,
em,
cite,
a:not(:has(p, pre))
{
/* font-weight: 400; */
/* font-style: normal; */
text-decoration: none;
/* color: currentColor; */
}
:where(
i,
b,
u,
s,
em,
kbd,
cite,
samp,
output,
map:not(:has(p, pre)),
a:not(:has(p, pre))[href],
)::after
{
content: var(--content, "");
display: inline-block;
width: .7em;
height: .7em;
mask-size: cover;
mask-repeat: no-repeat;
background-color: currentColor;
vertical-align: text-top;
}
kbd::after,
samp::after,
output::after
{
margin-inline: .5ch;
}
i::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcm91dGUtYWx0LWxlZnQiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik04IDNIM3Y1bTEzLTVoNXY1Ii8+PHBhdGggZD0ibTMgMyA3LjUzNiA3LjUzNkE1IDUgMCAwIDEgMTIgMTQuMDdWMjFtNi0xNC45OVY2bS0yIDIuMDJ2LS4wMU0xNCAxMHYuMDEiLz48L3N2Zz4=");
}
b::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItYmVsbC1yaW5naW5nIj48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMTAgNWEyIDIgMCAwIDEgNCAwIDcgNyAwIDAgMSA0IDZ2M2E0IDQgMCAwIDAgMiAzSDRhNCA0IDAgMCAwIDItM3YtM2E3IDcgMCAwIDEgNC02TTkgMTd2MWEzIDMgMCAwIDAgNiAwdi0xbTYtMTAuMjczQTExLjA1IDExLjA1IDAgMCAwIDE4LjIwNiAzTTMgNi43MjdBMTEuMDUgMTEuMDUgMCAwIDEgNS43OTIgMyIvPjwvc3ZnPg==");
}
u::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGlsZGUiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik00IDEyYzAtMS42NTcgMS41OTItMyAzLjU1Ni0zczMuMTEgMS41IDQuNDQ0IDNjMS4zMzMgMS41IDIuNDggMyA0LjQ0NCAzUzIwIDEzLjY1NyAyMCAxMiIvPjwvc3ZnPg==");
}
s::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItY2FuY2VsIj48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMyAxMmE5IDkgMCAxIDAgMTggMCA5IDkgMCAxIDAtMTggMG0xNS4zNjQtNi4zNjRMNS42MzYgMTguMzY0Ii8+PC9zdmc+");
}
em::after {
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcXVlc3Rpb24tbWFyayI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTggOGEzLjUgMyAwIDAgMSAzLjUgLTNoMWEzLjUgMyAwIDAgMSAzLjUgM2EzIDMgMCAwIDEgLTIgM2EzIDQgMCAwIDAgLTIgNCIgLz48cGF0aCBkPSJNMTIgMTlsMCAuMDEiIC8+PC9zdmc+");
margin-inline-start: -.2em;
}
kbd::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXIta2V5Ym9hcmQiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yIDZtMCAyYTIgMiAwIDAgMSAyIC0yaDE2YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEgLTIgMmgtMTZhMiAyIDAgMCAxIC0yIC0yeiIgLz48cGF0aCBkPSJNNiAxMGwwIC4wMSIgLz48cGF0aCBkPSJNMTAgMTBsMCAuMDEiIC8+PHBhdGggZD0iTTE0IDEwbDAgLjAxIiAvPjxwYXRoIGQ9Ik0xOCAxMGwwIC4wMSIgLz48cGF0aCBkPSJNNiAxNGwwIC4wMSIgLz48cGF0aCBkPSJNMTggMTRsMCAuMDEiIC8+PHBhdGggZD0iTTEwIDE0bDQgLjAxIiAvPjwvc3ZnPg==");
}
samp::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItbG9nb3V0Ij48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgOHYtMmEyIDIgMCAwIDAgLTIgLTJoLTdhMiAyIDAgMCAwIC0yIDJ2MTJhMiAyIDAgMCAwIDIgMmg3YTIgMiAwIDAgMCAyIC0ydi0yIiAvPjxwYXRoIGQ9Ik05IDEyaDEybC0zIC0zIiAvPjxwYXRoIGQ9Ik0xOCAxNWwzIC0zIiAvPjwvc3ZnPg==");
}
output::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfOF8yMCkiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTE0IDhWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxMmEyIDIgMCAwIDAgMiAyaDdhMiAyIDAgMCAwIDItMnYtMm00LTcgMyAzaC02bTMgMyAzLTMiLz48L2c+PC9zdmc+");
}
cite::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGFnIj48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNNi41IDcuNWExIDEgMCAxIDAgMiAwIDEgMSAwIDEgMC0yIDAiLz48cGF0aCBkPSJNMyA2djUuMTcyYTIgMiAwIDAgMCAuNTg2IDEuNDE0bDcuNzEgNy43MWEyLjQxIDIuNDEgMCAwIDAgMy40MDggMGw1LjU5Mi01LjU5MmEyLjQxIDIuNDEgMCAwIDAgMC0zLjQwOGwtNy43MS03LjcxQTIgMiAwIDAgMCAxMS4xNzIgM0g2YTMgMyAwIDAgMC0zIDMiLz48L3N2Zz4=");
margin-inline-start: .2em;
}
map:not(:has(p, pre))::after
{
mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-photo%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M15%208h.01%22%20%2F%3E%3Cpath%20d%3D%22M3%206a3%203%200%200%201%203%20-3h12a3%203%200%200%201%203%203v12a3%203%200%200%201%20-3%203h-12a3%203%200%200%201%20-3%20-3v-12z%22%20%2F%3E%3Cpath%20d%3D%22M3%2016l5%20-5c.928%20-.893%202.072%20-.893%203%200l5%205%22%20%2F%3E%3Cpath%20d%3D%22M14%2014l1%20-1c.928%20-.893%202.072%20-.893%203%200l3%203%22%20%2F%3E%3C%2Fsvg%3E");
}
a:not(:has(p, pre))[href]::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItZXh0ZXJuYWwtbGluayI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDZoLTZhMiAyIDAgMCAwIC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMiAtMnYtNiIgLz48cGF0aCBkPSJNMTEgMTNsOSAtOSIgLz48cGF0aCBkPSJNMTUgNGg1djUiIC8+PC9zdmc+");
}
a:not(:has(p, pre))[href]:hover {
cursor: pointer;
text-decoration: underline 1px currentColor;
}
/* 7 */
button,
select,
textarea,
input[type]
{
font: inherit;
/* 7a */
height: 1lh;
border: 1px solid currentColor;
padding: 0 .5em var(--lh-pad);
/* 7d */
background-color: transparent;
/* 7e */
accent-color: currentColor;
/* 7f */
cursor: pointer;
}
/* 7b */
textarea,
input[type=range],
input[type=radio],
input[type=checkbox]
{
height: auto;
}
span:has(>
:is(
textarea,
input[type=radio],
input[type=range],
input[type=checkbox]
)
)
{
vertical-align: middle;
}
/* 7c */
button,
input[type=image],
input[type=reset],
input[type=submit],
input[type=button]
{
line-height: .5lh;
height: 2lh;
}
/* 8 */
select
{
appearance: base-select;
border-radius: 0;
align-items: center;
}
select::picker-icon {
transition: .4s rotate;
font-size: .7em;
}
select:open::picker-icon {
rotate: 180deg;
}
/* 9a */
span:has(> input:only-child),
span:has(> select:only-child)
{
display: inline-flex;
position: relative;
}
/* 9b */
span > input[type=url]:only-child,
span > input[type=tel]:only-child,
span > input[type=text]:only-child,
span > input[type=email]:only-child,
span > input[type=number]:only-child,
span > input[type=search]:only-child,
span > input[type=password]:only-child
{
padding-inline-start: 1.4em;
}
/* 9c */
:where(
span:has(
> :is(
input[type=tel],
input[type=url],
input[type=text],
input[type=email],
input[type=number],
input[type=search],
input[type=password],
):only-child
)
)::after
{
content: var(--content, "");
position: absolute;
left: .4em;
top: 0;
bottom: 0;
margin-block: auto;
display: block;
width: .75em;
height: .75em;
mask-size: cover;
mask-repeat: no-repeat;
background-color: #000;
color: currentColor;
}
span:has(input[type=search]:only-child)::after
{
mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-search%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M10%2010m-7%200a7%207%200%201%200%2014%200a7%207%200%201%200%20-14%200%22%20%2F%3E%3Cpath%20d%3D%22M21%2021l-6%20-6%22%20%2F%3E%3C%2Fsvg%3E");
}
span:has(input[type=text]:only-child)::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGV4dC1pbmNyZWFzZSI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0iTTQgMTlWOC41YTMuNSAzLjUgMCAxIDEgNyAwVjE5bS03LTZoN203LTR2Nm0zLTNoLTYiLz48L3N2Zz4=");
}
span:has(input[type=tel]:only-child)::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcGhvbmUiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik01IDRoNGwyIDUtMi41IDEuNWExMSAxMSAwIDAgMCA1IDVMMTUgMTNsNSAydjRhMiAyIDAgMCAxLTIgMkExNiAxNiAwIDAgMSAzIDZhMiAyIDAgMCAxIDItMiIvPjwvc3ZnPg==");
}
span:has(input[type=email]:only-child)::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItYXQiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik04IDEyYTQgNCAwIDEgMCA4IDAgNCA0IDAgMSAwLTggMCIvPjxwYXRoIGQ9Ik0xNiAxMnYxLjVhMi41IDIuNSAwIDAgMCA1IDBWMTJhOSA5IDAgMSAwLTUuNSA4LjI4Ii8+PC9zdmc+");
}
span:has(input[type=number]:only-child)::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItbnVtYmVyLTEyMyI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0ibTMgMTAgMi0ydjhtNC04aDNhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoM200LThoMi41QTEuNSAxLjUgMCAwIDEgMjEgOS41djFhMS41IDEuNSAwIDAgMS0xLjUgMS41SDE4aDEuNWExLjUgMS41IDAgMCAxIDEuNSAxLjV2MWExLjUgMS41IDAgMCAxLTEuNSAxLjVIMTciLz48L3N2Zz4=");
}
span:has(input[type=password]:only-child)::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcGFzc3dvcmQiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAxMHY0bS0yLTEgNC0ybS00IDAgNCAybS05LTN2NG0tMi0xIDQtMm0tNCAwIDQgMm0xMi0zdjRtLTItMSA0LTJtLTQgMCA0IDIiLz48L3N2Zz4=");
}
span:has(input[type=url]:only-child)::after
{
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItd29ybGQtd3d3Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMTkuNSA3QTkgOSAwIDAgMCAxMiAzYTguOTkgOC45OSAwIDAgMC03LjQ4NCA0Ii8+PHBhdGggZD0iTTExLjUgM2ExNyAxNyAwIDAgMC0xLjgyNiA0TTEyLjUgM2ExNyAxNyAwIDAgMSAxLjgyOCA0TTE5LjUgMTdhOSA5IDAgMCAxLTcuNSA0IDguOTkgOC45OSAwIDAgMS03LjQ4NC00Ii8+PHBhdGggZD0iTTExLjUgMjFhMTcgMTcgMCAwIDEtMS44MjYtNG0yLjgyNiA0YTE3IDE3IDAgMCAwIDEuODI4LTRNMiAxMGwxIDQgMS41LTRMNiAxNGwxLTRtMTAgMCAxIDQgMS41LTQgMS41IDQgMS00TTkuNSAxMGwxIDQgMS41LTQgMS41IDQgMS00Ii8+PC9zdmc+");
}