Skip to content

Commit 800e7fc

Browse files
committed
Refactor text decoration and font size for anchor elements to use cascade
1 parent 5f2ff39 commit 800e7fc

5 files changed

Lines changed: 24 additions & 25 deletions

File tree

‎_TODO.md‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,6 @@ if (window.matchMedia) {
103103
```bash
104104
```
105105

106-
107-
Good Next Cascade Candidates (similar spirit to the text-* cleanup)
108-
109-
Global/link-default underline styling (biggest repetition)
110-
111-
Evidence: the exact pattern underline decoration-dotted decoration-content underline-offset-4 ... shows up 15 times across just 3 components (Footer/Calendar/BugReporter).
112-
What to cascade: give "normal text links" a default underline style (dotted + decoration-content + offset) via base CSS (or a shared wrapper scope), and then only override the exceptions.
113-
Tradeoff: global a { … } is powerful but can surprise you (nav links, button-like links). A scoped approach (e.g., only inside markdown/content areas or only inside certain layout wrappers) is safer.
114-
Forms: default label + help text styling
115-
116106
Evidence: text-content-active in forms is still repeated ~25 times across 3 form components (Contact/Download/Privacy), often paired with text-sm font-medium.
117107
What to cascade: set label default to color: var(--color-content-active) and font-weight/size inside a form wrapper (e.g. .form root), so individual labels don't need to specify it.
118108
Tradeoff: safest when scoped to the Forms components (not global label { … } site-wide).

‎src/components/BugReporter/index.astro‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const {
3636
<button
3737
id={closeButtonId}
3838
type="button"
39-
class="underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
39+
class="hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
4040
>
4141
Close
4242
</button>
@@ -92,7 +92,7 @@ const {
9292
<button
9393
id={cancelButtonId}
9494
type="button"
95-
class="underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
95+
class="hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
9696
>
9797
Cancel
9898
</button>

‎src/components/Calendar/index.astro‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const { ...rest } = Astro.props
99
type="button"
1010
data-calendar-trigger
1111
aria-expanded="false"
12-
class="inline-flex items-center text-content underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
12+
class="inline-flex items-center text-content hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
1313
>
1414
<span class="[&_.icon]:h-5 [&_.icon]:w-5">
1515
<Icon name="calendar-generic-ical" variant="inherit" />
@@ -28,7 +28,7 @@ const { ...rest } = Astro.props
2828
data-calendar-link="google"
2929
href="https://calendar.google.com/calendar/render"
3030
rel="noopener"
31-
class="flex items-center text-content underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
31+
class="flex items-center text-content hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
3232
>
3333
<span class="[&_.icon]:h-5 [&_.icon]:w-5">
3434
<Icon name="calendar-google" variant="inherit" />
@@ -40,7 +40,7 @@ const { ...rest } = Astro.props
4040
data-calendar-link="outlook"
4141
href="https://outlook.office.com/calendar/0/deeplink/compose"
4242
rel="noopener"
43-
class="flex items-center text-content underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
43+
class="flex items-center text-content hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
4444
>
4545
<span class="[&_.icon]:h-5 [&_.icon]:w-5">
4646
<Icon name="calendar-outlook" variant="inherit" />
@@ -51,7 +51,7 @@ const { ...rest } = Astro.props
5151
<button
5252
type="button"
5353
data-calendar-download-ics
54-
class="flex items-center text-content underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
54+
class="flex items-center text-content hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
5555
>
5656
<span class="[&_.icon]:h-5 [&_.icon]:w-5">
5757
<Icon name="calendar_apple" variant="inherit" />

‎src/components/Footer/index.astro‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ const year = new Date().getFullYear()
4040
<p class="hyphens-none">
4141
<a
4242
href={`mailto:${contactData.company.email}`}
43-
class="underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
43+
class="hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
4444
>
4545
{contactData.company.email}
4646
</a>
@@ -49,7 +49,7 @@ const year = new Date().getFullYear()
4949
<a
5050
href={`tel:${contactData.company.telephoneTollFree}`}
5151
rel="nofollow"
52-
class="underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
52+
class="hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
5353
>
5454
Toll Free {formatPhoneNumber(contactData.company.telephoneTollFree)}
5555
</a>
@@ -58,7 +58,7 @@ const year = new Date().getFullYear()
5858
<a
5959
href={`tel:${contactData.company.telephoneLocal}`}
6060
rel="nofollow"
61-
class="underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
61+
class="hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
6262
>
6363
Local {formatPhoneNumber(contactData.company.telephoneLocal)}
6464
</a>
@@ -72,7 +72,7 @@ const year = new Date().getFullYear()
7272
id="page-footer__hire-me-anchor"
7373
class:list={[
7474
styles.footerHireMeAnchor,
75-
"hidden uppercase underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none after:content-['>']",
75+
"hidden uppercase hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none after:content-['>']",
7676
]}
7777
aria-label="Available Now. Hire Me"
7878
>
@@ -91,7 +91,7 @@ const year = new Date().getFullYear()
9191
href={social.url}
9292
title={social.displayName}
9393
rel="me"
94-
class="flex items-baseline uppercase underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
94+
class="flex items-baseline uppercase hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none [&_.icon]:fill-content! [&_.icon]:stroke-icons! hover:[&_.icon]:fill-secondary! hover:[&_.icon]:stroke-secondary! focus:[&_.icon]:fill-secondary! focus:[&_.icon]:stroke-secondary!"
9595
>
9696
<span class="[&_.icon]:h-4 [&_.icon]:w-4">
9797
<Icon name={social.iconName} variant="inherit" />
@@ -114,7 +114,7 @@ const year = new Date().getFullYear()
114114
<span class="flex flex-col justify-center lg:pt-3">
115115
<a
116116
href="/#newsletter"
117-
class="underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
117+
class="hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
118118
>
119119
<div class="lg:hidden">Subscribe to</div>
120120
<span class="lg:font-bold lg:uppercase">Mailing List</span>
@@ -128,7 +128,7 @@ const year = new Date().getFullYear()
128128
<span>
129129
<a
130130
href="/consent"
131-
class="underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
131+
class="hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
132132
>
133133
<span class="lg:font-bold lg:uppercase">Consent</span>
134134
<span class="hidden lg:block">
@@ -139,7 +139,7 @@ const year = new Date().getFullYear()
139139
<span>
140140
<a
141141
href="/privacy"
142-
class="underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
142+
class="hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
143143
>
144144
<span class="lg:font-bold lg:uppercase">Privacy Policy</span>
145145
<span class="hidden lg:block">
@@ -169,7 +169,7 @@ const year = new Date().getFullYear()
169169
<a
170170
rel="me"
171171
href={getSiteUrl()}
172-
class="underline decoration-dotted decoration-content underline-offset-4 hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
172+
class="hover:text-secondary hover:decoration-secondary focus:text-secondary focus:decoration-secondary focus:outline-none"
173173
>
174174
{contactData.company.name}
175175
</a>

‎src/styles/typography.css‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,4 +177,13 @@
177177
font-size: 0.75em;
178178
line-height: 0;
179179
}
180+
}
181+
182+
@layer utilities {
183+
a {
184+
text-decoration-color: var(--color-content);
185+
text-decoration-line: underline;
186+
text-decoration-style: dotted;
187+
text-underline-offset: 4px;
188+
}
180189
}

0 commit comments

Comments
 (0)