2022-06-03 22:47:14 +00:00
|
|
|
/* CSS that adds the bare minimum for a simple, accessible,
|
|
|
|
* touch-friendly layout.
|
2022-07-16 01:38:30 +00:00
|
|
|
* Nothing here exists purely for cosmetics; everything addresses a
|
2022-05-04 05:09:14 +00:00
|
|
|
* specific a11y, compatibility, or critical
|
2022-07-14 05:08:20 +00:00
|
|
|
* usability need.
|
2022-05-04 05:09:14 +00:00
|
|
|
*
|
2022-07-14 05:08:20 +00:00
|
|
|
* Two exceptions: I re-set the input styles so Safari wouldn't make
|
2022-07-16 01:38:30 +00:00
|
|
|
* them pill-shaped, and I tweaked some margins/paddings to make some
|
|
|
|
* things evenly aligned.
|
2022-05-27 00:23:51 +00:00
|
|
|
*
|
2022-07-16 05:04:15 +00:00
|
|
|
* I also don't use any classes except when styling depends on
|
|
|
|
* *content* of an element rather than structure/semantics. Examples
|
|
|
|
* include images that look better with pixelated upscaling, and
|
|
|
|
* posts on the list of entries in the "notes" section that are tall
|
|
|
|
* and need a larger contain-intrinsic-size.
|
|
|
|
* One exception: a class for narrow width body text. My HTML contains
|
|
|
|
* microformats2 classnames for IndieWeb parsers, but I don't actually
|
|
|
|
* use those for styling.
|
2022-05-04 05:09:14 +00:00
|
|
|
*
|
2022-08-02 04:24:53 +00:00
|
|
|
* Some pages (e.g. post archives) are really long despite having a
|
|
|
|
* small download size. Rather than resort to pagination, I decided to
|
|
|
|
* use CSS containment and content-visibility. I test performance on
|
|
|
|
* browsers with heavy throttling and no GPU acceleration to ensure that
|
|
|
|
* they're gentle on the CPU. For instance, Lighthouse benchmarks my
|
|
|
|
* machine's CPU power at 1200-1300 and recommends 2.8-3.0x throttling;
|
|
|
|
* I throttle at 12-15x.
|
|
|
|
*
|
|
|
|
* "content-visibility: auto" implies containment; however, some
|
|
|
|
* browsers don't support "content-visibility: auto" but do support the
|
|
|
|
* "contain" property. To be consistent across all these browsers, I
|
|
|
|
* therefore use both even if it's a bit redundant. Once the latest
|
|
|
|
* Safari has supported "content-visibility: auto" for a year or so and
|
|
|
|
* it's in the latest version of the Tor Browser (which typically uses
|
|
|
|
* whatever the latest Firefox-ESR was a month or two ago), I'll
|
|
|
|
* consider removing these redundancies. I'll probably have to wait two
|
|
|
|
* years.
|
|
|
|
*
|
2022-05-04 05:09:14 +00:00
|
|
|
* To keep myself from caring about minute details, I limited myself to
|
2022-06-03 22:47:14 +00:00
|
|
|
* only defining spacing in increments of .25em. Pixels are 1px or
|
2022-05-23 15:42:24 +00:00
|
|
|
* multiples of 3px. This also improves compression. No more "finding
|
|
|
|
* the perfect value".
|
2022-05-04 00:05:47 +00:00
|
|
|
*
|
2022-05-05 04:49:45 +00:00
|
|
|
* I cite WCAG 2.2 success criteria with "SC". I also tried to meet
|
|
|
|
* the Google a11y requirement of 48px tap targets separated by atl
|
|
|
|
* 8px, excluding inline links. This involved increasing font size,
|
|
|
|
* padding, line-height, and margins. */
|
2020-12-27 05:04:25 +00:00
|
|
|
|
2022-03-26 19:33:01 +00:00
|
|
|
html {
|
2022-03-26 19:32:22 +00:00
|
|
|
/* Mobile screens benefit from greater line-spacing so links are
|
|
|
|
* further apart. Dyslexic users prefer the spacing too.
|
2022-05-04 00:05:47 +00:00
|
|
|
* Necessary to meet SC 1.4.8.
|
2022-03-26 19:32:22 +00:00
|
|
|
* <100dpi screens: sans-serif is better. Why did browsers settle
|
2022-03-28 00:21:13 +00:00
|
|
|
* on serif being the default?? */
|
2022-04-06 03:20:56 +00:00
|
|
|
font: 100%/1.5 sans-serif;
|
2022-05-12 04:31:27 +00:00
|
|
|
/* Nearly every page on my site is taller than the viewport.
|
|
|
|
* Paint the scrollbar ASAP to prevent layout shifts. */
|
|
|
|
overflow-y: scroll;
|
2022-07-13 06:24:38 +00:00
|
|
|
|
|
|
|
/* Site is already mobile optimized.
|
|
|
|
* Don't screw up landscape mode. */
|
|
|
|
-webkit-text-size-adjust: none;
|
|
|
|
text-size-adjust: none;
|
2021-06-27 02:35:49 +00:00
|
|
|
}
|
|
|
|
|
2022-04-27 15:41:36 +00:00
|
|
|
/* This should not take effect on printouts, to save paper. */
|
2022-03-28 00:21:13 +00:00
|
|
|
@media screen {
|
2022-04-27 15:41:36 +00:00
|
|
|
body {
|
2022-04-22 05:31:38 +00:00
|
|
|
/* Default font sizes are one-size-fits-all; they're optimized for a
|
|
|
|
* wide variety of complex pages. For single-column websites like
|
2022-04-26 00:37:23 +00:00
|
|
|
* mine, it's ideal to bump it up ever so slightly. This also makes
|
2022-05-02 04:59:11 +00:00
|
|
|
* <sup>, <sub>, <small>, etc. large enough to have decent contrast
|
2022-05-04 00:05:47 +00:00
|
|
|
* with minimal adjustment, and makes tap-targets larger.
|
2022-04-22 05:31:38 +00:00
|
|
|
* Only do this on screen, since printouts already improve legibility
|
2022-05-23 15:42:24 +00:00
|
|
|
* and cost paper + ink.
|
2022-08-02 04:24:53 +00:00
|
|
|
* 109.375% is the minimum required to get text to 17.5 CSS pixels and
|
|
|
|
* superscripts past 14.75 px with most default stylesheets. At that
|
|
|
|
* size, my dark color palette has sufficient contrast.*/
|
|
|
|
font-size: 109.375%;
|
2022-04-23 22:35:08 +00:00
|
|
|
|
2022-04-27 15:41:36 +00:00
|
|
|
/* Aligning to the center with space on both sides prevents accidental
|
2022-05-04 00:05:47 +00:00
|
|
|
* link activation on tablets, and is a common practice that users are
|
2022-05-04 05:09:14 +00:00
|
|
|
* more used to for articles. */
|
2022-04-27 15:41:36 +00:00
|
|
|
margin: auto;
|
|
|
|
|
|
|
|
/* WCAG recommends a max line width. Not everyone can resize the
|
2022-05-04 00:05:47 +00:00
|
|
|
* viewport. This isn't for large blocks of text yet, so we don't have
|
|
|
|
* to go by SC 1.4.8.
|
2022-08-02 03:51:12 +00:00
|
|
|
* 40em = lowest acceptable width for titles, nav, footers, etc */
|
|
|
|
max-width: 40em;
|
2022-05-05 04:49:45 +00:00
|
|
|
|
|
|
|
/* Phone cases can cover the edges. Swipe-from-edge navigations
|
|
|
|
* should not conflict with the page elements. Focus outlines for
|
|
|
|
* heavily-padded nav links should not be cut-off. All three concerns
|
|
|
|
* are addressed by adding some body padding.
|
|
|
|
* I followed Google's a11y recommendations of "at least 8px space
|
|
|
|
* between tappables" by creating margins/paddings between nav links;
|
2022-05-10 00:51:44 +00:00
|
|
|
* re-use that same amount of space here. 24px is what it takes to
|
|
|
|
* create atl 48px of non-interactive space on <ul> and <ol> elements
|
2022-05-20 00:18:14 +00:00
|
|
|
* containing lists of interactives, with 8px in between.
|
2022-05-10 23:06:28 +00:00
|
|
|
* Don't use relative units here; this margin shouldn't scale with
|
|
|
|
* zoom, or else text will get narrower with zoom. */
|
2022-08-03 01:04:51 +00:00
|
|
|
padding: 0 14px;
|
2022-03-28 00:21:13 +00:00
|
|
|
}
|
|
|
|
|
2022-05-04 00:05:47 +00:00
|
|
|
/* 45em is too wide for long body text.
|
|
|
|
* Typically meets SC 1.4.8, plus or minus a few characters. */
|
2022-08-02 04:24:53 +00:00
|
|
|
[itemprop="articleBody"],
|
|
|
|
[itemprop="dataFeedElement"],
|
2022-07-12 00:20:36 +00:00
|
|
|
.narrow {
|
2022-03-28 00:21:13 +00:00
|
|
|
margin: auto;
|
2022-08-02 03:51:12 +00:00
|
|
|
max-width: 34em;
|
2022-03-28 00:21:13 +00:00
|
|
|
}
|
2022-05-02 22:42:57 +00:00
|
|
|
|
2022-07-14 05:08:20 +00:00
|
|
|
/* Enable containment, especially useful for achive pages with
|
|
|
|
* long lists of content. */
|
|
|
|
body > :not(main),
|
|
|
|
main > :not(article),
|
2022-07-16 01:38:30 +00:00
|
|
|
li article, /* Archive pages */
|
|
|
|
/* We increase the target size of h2/h3 links in a way that would cause
|
|
|
|
* issues with content containment */
|
|
|
|
article > :not(h2):not(h3) {
|
2022-08-02 03:51:12 +00:00
|
|
|
contain: inline-size layout paint;
|
2022-07-14 05:08:20 +00:00
|
|
|
/* Add padding on both sides so that focus outlines don't escape their
|
|
|
|
* containers. This will let us enable CSS containment without
|
|
|
|
* clipping overflowing elements. */
|
2022-08-02 03:51:12 +00:00
|
|
|
margin-top: .25em;
|
|
|
|
margin-bottom: .25em;
|
2022-08-02 04:24:53 +00:00
|
|
|
padding: 0 .5em;
|
2022-07-14 05:08:20 +00:00
|
|
|
}
|
|
|
|
|
2022-07-20 15:56:52 +00:00
|
|
|
/* Align titular h1 with top nav and body text. */
|
|
|
|
main > h1 {
|
|
|
|
padding-left: .25em
|
|
|
|
}
|
|
|
|
|
2022-07-16 05:04:15 +00:00
|
|
|
/* Archive pages can get long. Allow them to get long without slowing
|
|
|
|
* down the browser by using content-visibility. */
|
2022-08-02 04:24:53 +00:00
|
|
|
dt,
|
|
|
|
footer,
|
2022-08-02 03:51:12 +00:00
|
|
|
h2,
|
|
|
|
h3,
|
|
|
|
li article,
|
2022-08-02 04:24:53 +00:00
|
|
|
summary,
|
|
|
|
aside > a,
|
|
|
|
[role="doc-backlink"],
|
|
|
|
[role="doc-endnotes"] {
|
2022-07-16 05:04:15 +00:00
|
|
|
content-visibility: auto;
|
2022-07-24 18:28:23 +00:00
|
|
|
contain-intrinsic-size: auto 3em;
|
|
|
|
}
|
|
|
|
|
2022-08-02 03:51:12 +00:00
|
|
|
dt,
|
|
|
|
h3 {
|
|
|
|
contain-intrinsic-size: 1.5em;
|
|
|
|
}
|
|
|
|
|
2022-07-24 18:28:23 +00:00
|
|
|
footer,
|
|
|
|
li article {
|
2022-07-22 01:40:40 +00:00
|
|
|
contain-intrinsic-size: auto 16em;
|
2022-07-16 05:04:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Notes can get a bit long. */
|
|
|
|
li article[itemtype="https://schema.org/SocialMediaPosting"] {
|
2022-07-22 01:40:40 +00:00
|
|
|
contain-intrinsic-size: auto 36em;
|
2022-07-16 05:04:15 +00:00
|
|
|
}
|
|
|
|
|
2022-07-24 18:28:23 +00:00
|
|
|
.tall,
|
2022-08-02 04:24:53 +00:00
|
|
|
[role="doc-endnotes"] {
|
2022-07-22 01:40:40 +00:00
|
|
|
contain-intrinsic-size: auto 50em;
|
2022-07-16 05:04:15 +00:00
|
|
|
}
|
|
|
|
|
2022-07-24 18:28:23 +00:00
|
|
|
/* Full-width elements (e.g. display: block) have known widths, so
|
|
|
|
* contain their widths. */
|
|
|
|
article,
|
2022-08-02 04:24:53 +00:00
|
|
|
body,
|
|
|
|
dt,
|
2022-07-24 18:28:23 +00:00
|
|
|
h1,
|
2022-08-02 03:51:12 +00:00
|
|
|
h2,
|
|
|
|
h3,
|
2022-08-02 04:24:53 +00:00
|
|
|
html,
|
|
|
|
main,
|
2022-07-24 18:28:23 +00:00
|
|
|
pre,
|
2022-08-02 03:51:12 +00:00
|
|
|
summary,
|
2022-08-02 04:24:53 +00:00
|
|
|
[role="doc-endnotes"],
|
|
|
|
[role="doc-preface"] {
|
2022-08-02 03:51:12 +00:00
|
|
|
contain: inline-size layout paint;
|
2022-07-24 18:28:23 +00:00
|
|
|
}
|
|
|
|
|
2022-08-02 04:24:53 +00:00
|
|
|
figure,
|
|
|
|
p {
|
2022-08-02 03:51:12 +00:00
|
|
|
contain: inline-size layout;
|
|
|
|
}
|
|
|
|
|
2022-08-02 04:24:53 +00:00
|
|
|
/* Containment changed spaicng a bit; correct that. */
|
2022-08-02 03:51:12 +00:00
|
|
|
article > h2 {
|
|
|
|
margin: .25em 0;
|
|
|
|
padding: .25em 0;
|
2022-07-24 18:28:23 +00:00
|
|
|
}
|
|
|
|
|
2022-08-02 04:24:53 +00:00
|
|
|
/* A11y: If we have a list of disclosure widgets, we need some
|
2022-05-10 00:51:44 +00:00
|
|
|
* non-interactive space on the screen that's safe to tap. */
|
2022-08-02 04:24:53 +00:00
|
|
|
details,
|
|
|
|
form {
|
2022-08-02 03:51:12 +00:00
|
|
|
contain: inline-size layout;
|
2022-05-27 01:00:02 +00:00
|
|
|
margin: .5em 0;
|
2022-05-10 00:51:44 +00:00
|
|
|
}
|
2022-05-05 05:22:38 +00:00
|
|
|
|
2022-05-19 20:21:10 +00:00
|
|
|
/* SC 2.5.5, Google a11y: Increase tap target size a bit
|
|
|
|
* - Summary is a tappable button
|
|
|
|
* - standalone links in lists are usually parts of collections of
|
|
|
|
* links that should be easy to fat-finger
|
|
|
|
* - links that directly follow h2 without being contained in a
|
|
|
|
* paragraph are section permalinks. */
|
2022-06-03 22:47:14 +00:00
|
|
|
|
|
|
|
input,
|
2022-05-12 04:31:27 +00:00
|
|
|
summary,
|
2022-06-23 04:18:32 +00:00
|
|
|
aside > a, /* Used for section permalinks */
|
2022-08-02 04:24:53 +00:00
|
|
|
dt > a,
|
|
|
|
li > a,
|
|
|
|
[itemprop="comment"] dd > a,
|
|
|
|
[itemprop="breadcrumb"] a,
|
|
|
|
[itemprop="breadcrumb"] > span {
|
2022-06-03 22:47:14 +00:00
|
|
|
padding: .75em .25em;
|
|
|
|
}
|
2022-06-07 04:42:32 +00:00
|
|
|
|
2022-06-03 22:47:14 +00:00
|
|
|
/* Compensate for misalignment and wasted space caused by padding
|
2022-06-15 05:08:50 +00:00
|
|
|
* and margin adjustments in nav children made to meet SC 2.5.5
|
2022-06-03 22:47:14 +00:00
|
|
|
* Also prevent overlapping outlines on focus */
|
|
|
|
|
|
|
|
/* We've increased the padding for dt > a, but dt without a link
|
2022-08-02 04:24:53 +00:00
|
|
|
* should take up as much space. */
|
2022-06-03 22:47:14 +00:00
|
|
|
dt {
|
2022-07-24 18:28:23 +00:00
|
|
|
padding: 1em .5em;
|
|
|
|
margin: -.25em 0 -.25em -.5em;
|
2022-06-03 22:47:14 +00:00
|
|
|
}
|
|
|
|
|
2022-06-30 15:34:16 +00:00
|
|
|
/* <dt> should not be closer to the previous <dd> than the following <dd>.
|
|
|
|
* That can happen in webmentions. */
|
|
|
|
dd {
|
|
|
|
padding-bottom: .25em;
|
|
|
|
}
|
|
|
|
|
2022-08-02 04:24:53 +00:00
|
|
|
aside > a,
|
|
|
|
dt > a {
|
2022-08-02 03:51:12 +00:00
|
|
|
contain: content;
|
2022-06-03 22:47:14 +00:00
|
|
|
margin: -.75em -.25em;
|
|
|
|
}
|
|
|
|
|
2022-07-16 00:17:59 +00:00
|
|
|
header > nav,
|
2022-07-13 15:31:20 +00:00
|
|
|
a[href="#h1"], /* skip link */
|
2022-08-02 04:24:53 +00:00
|
|
|
[itemprop="comment"] dd > a ,
|
2022-06-03 22:47:14 +00:00
|
|
|
footer > nav,
|
2022-07-14 05:08:20 +00:00
|
|
|
/* List items with direct hyperlink children should only have one
|
|
|
|
* hyperlink. */
|
2022-05-27 00:06:56 +00:00
|
|
|
li > a,
|
2022-06-23 04:18:32 +00:00
|
|
|
aside > a,
|
2022-06-03 22:47:14 +00:00
|
|
|
nav ol a {
|
2022-07-16 01:38:30 +00:00
|
|
|
display: inline-block;
|
2022-06-03 22:47:14 +00:00
|
|
|
margin-left: -.25em;
|
2022-07-16 01:38:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Increase tap-target size of title links. */
|
2022-07-24 18:28:23 +00:00
|
|
|
|
2022-08-02 03:51:12 +00:00
|
|
|
h2 > a {
|
|
|
|
contain: content;
|
|
|
|
display: inline-block;
|
|
|
|
/* Mis-alignment, I have no clue why it's there. */
|
|
|
|
margin: 0 .125em;
|
|
|
|
padding: .25em;
|
|
|
|
}
|
|
|
|
|
2022-07-16 01:38:30 +00:00
|
|
|
h3 > a {
|
2022-07-24 18:28:23 +00:00
|
|
|
contain: content;
|
2022-06-03 22:47:14 +00:00
|
|
|
display: inline-block;
|
2022-07-16 01:38:30 +00:00
|
|
|
padding: .5em .25em;
|
2022-06-03 22:47:14 +00:00
|
|
|
}
|
|
|
|
|
2022-08-02 03:51:12 +00:00
|
|
|
article > h3 {
|
|
|
|
padding: .25em;
|
|
|
|
margin: 0 0 0 -.5em;
|
|
|
|
}
|
|
|
|
|
2022-07-22 01:40:40 +00:00
|
|
|
/* align h-feeds in sections; they typically follow articles. */
|
2022-08-02 04:24:53 +00:00
|
|
|
[role="doc-backlink"],
|
2022-07-22 01:40:40 +00:00
|
|
|
section article p {
|
|
|
|
margin-left: -.5em;
|
|
|
|
}
|
|
|
|
|
2022-07-14 05:08:20 +00:00
|
|
|
/* The nav has to be distant-enough from the top to make room for a
|
2022-07-16 00:17:59 +00:00
|
|
|
* skip-link. The breadcrumbs also can't have their focus-outlines
|
|
|
|
* overflow while CSS containment is enabled. */
|
2022-07-07 15:52:55 +00:00
|
|
|
header > nav {
|
2022-07-16 00:17:59 +00:00
|
|
|
padding: .75em 0 .25em;
|
2022-07-07 15:52:55 +00:00
|
|
|
}
|
|
|
|
|
2022-06-07 04:42:32 +00:00
|
|
|
/* Multiple consecutive <dt> that share a <dd> shouldn't have tap targets overlap */
|
2022-07-24 18:28:23 +00:00
|
|
|
dt + dt {
|
|
|
|
padding-top: .25em;
|
|
|
|
}
|
2022-06-07 04:42:32 +00:00
|
|
|
dt + dt > a {
|
|
|
|
padding-top: 0;
|
|
|
|
}
|
|
|
|
|
2022-08-02 04:24:53 +00:00
|
|
|
/* Lists of links should have some spacing so tap targets don't overlap. */
|
2022-08-02 03:51:12 +00:00
|
|
|
/* stylelint-disable selector-max-compound-selectors -- simplest way to describe link-lists */
|
|
|
|
:not(nav) > ul li > a,
|
2022-07-08 00:05:33 +00:00
|
|
|
nav:not([itemprop="breadcrumb"]) li,
|
2022-06-03 22:47:14 +00:00
|
|
|
ol li > a {
|
2022-08-02 03:51:12 +00:00
|
|
|
/* stylelint-enable selector-max-compound-selectors */
|
2022-06-03 22:47:14 +00:00
|
|
|
margin: .25em;
|
2022-05-12 04:31:27 +00:00
|
|
|
}
|
|
|
|
|
2022-07-11 22:18:15 +00:00
|
|
|
/* Increase backlink tap target size to at least 48x48 */
|
2022-08-02 04:24:53 +00:00
|
|
|
[role="doc-backlink"] {
|
2022-07-24 18:28:23 +00:00
|
|
|
contain: content;
|
2022-07-11 22:18:15 +00:00
|
|
|
display: inline-block;
|
|
|
|
padding: .75em .5em;
|
2022-05-02 22:42:57 +00:00
|
|
|
}
|
2022-07-07 15:52:55 +00:00
|
|
|
|
2022-07-11 05:38:25 +00:00
|
|
|
/* skip link: make it invisible until focused, and put it on the top. */
|
2022-07-13 15:31:20 +00:00
|
|
|
a[href="#h1"] {
|
2022-08-02 03:51:12 +00:00
|
|
|
contain: content;
|
|
|
|
content-visibility: auto;
|
2022-07-16 01:38:30 +00:00
|
|
|
padding: 0 .25em;
|
2022-07-07 15:52:55 +00:00
|
|
|
position: absolute;
|
|
|
|
top: -2em;
|
|
|
|
}
|
|
|
|
|
2022-07-13 15:31:20 +00:00
|
|
|
a[href="#h1"]:focus {
|
2022-07-07 15:52:55 +00:00
|
|
|
top: 0;
|
|
|
|
}
|
2022-08-02 04:24:53 +00:00
|
|
|
} /* End of adjustments for screen media type */
|
2022-03-26 19:32:22 +00:00
|
|
|
|
2022-07-24 18:28:23 +00:00
|
|
|
/* Make superscripts a bit easier to tap, and prevent consecutive
|
|
|
|
* superscripts from touching. */
|
|
|
|
sup > a {
|
|
|
|
margin-left: .25em;
|
|
|
|
padding-bottom: .5em;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Make superscript font size a bit larger so they cross some APCA color
|
|
|
|
* contrast thresholds on the dark theme. Also prevent them from messing
|
|
|
|
* with line-height. */
|
|
|
|
sup {
|
2022-08-02 03:51:12 +00:00
|
|
|
font-size: 0.85em;
|
2022-07-24 18:28:23 +00:00
|
|
|
line-height: 0;
|
|
|
|
}
|
|
|
|
|
2022-05-02 04:59:11 +00:00
|
|
|
/* narrow screens: reduce list indentation, hyphenate nested lists
|
2022-05-04 05:09:14 +00:00
|
|
|
* touch screens: lists of links should be easy to tap so give them
|
2022-05-05 05:22:38 +00:00
|
|
|
* some spacing (partial SC 2.5.5). There should be non-interactive
|
|
|
|
* space to the left that's safe to tap. */
|
2022-04-24 03:27:35 +00:00
|
|
|
dd,
|
|
|
|
ol,
|
|
|
|
ul {
|
2022-04-24 03:29:17 +00:00
|
|
|
margin: 0;
|
2022-06-03 22:47:14 +00:00
|
|
|
padding-left: 1.5em;
|
2022-04-24 03:29:17 +00:00
|
|
|
}
|
|
|
|
|
2022-07-08 00:05:33 +00:00
|
|
|
blockquote,
|
2022-04-26 05:11:18 +00:00
|
|
|
ol ol,
|
|
|
|
ul ul {
|
2022-05-05 05:22:38 +00:00
|
|
|
-webkit-hyphens: auto;
|
2022-04-26 05:11:18 +00:00
|
|
|
hyphens: auto;
|
2022-07-08 00:05:33 +00:00
|
|
|
margin: 0;
|
2022-04-27 15:41:36 +00:00
|
|
|
padding-left: 1em;
|
2022-04-26 05:11:18 +00:00
|
|
|
}
|
|
|
|
|
2022-05-05 04:49:45 +00:00
|
|
|
/* Save some space and paper by making the site nav and footer links
|
|
|
|
* single-line without bullets. The title should be visible in the fold
|
|
|
|
* on most screens so users can identify the current page. */
|
|
|
|
|
|
|
|
/* Step 1 to making the single-line nav: remove the bullet padding. */
|
2022-05-04 05:09:14 +00:00
|
|
|
nav ul {
|
2022-05-23 15:54:06 +00:00
|
|
|
padding: 0;
|
2022-05-04 05:09:14 +00:00
|
|
|
}
|
|
|
|
|
2022-07-16 01:38:30 +00:00
|
|
|
/* step 2: remove bullets and make elements inline. */
|
2022-08-02 04:24:53 +00:00
|
|
|
[itemprop="breadcrumb"] ol,
|
|
|
|
[itemprop="breadcrumb"] li,
|
|
|
|
[itemprop="breadcrumb"] > span,
|
2022-07-24 18:28:23 +00:00
|
|
|
nav ul li,
|
|
|
|
dt > a {
|
2022-07-08 00:05:33 +00:00
|
|
|
display: inline-block;
|
|
|
|
}
|
|
|
|
|
2022-08-02 04:24:53 +00:00
|
|
|
[itemprop="breadcrumb"] ol {
|
2022-07-24 18:28:23 +00:00
|
|
|
margin: -.25em;
|
2022-07-08 00:05:33 +00:00
|
|
|
padding: 0;
|
|
|
|
}
|
|
|
|
|
2022-08-02 04:24:53 +00:00
|
|
|
[itemprop="breadcrumb"] li:not(:last-of-type)::after {
|
2022-07-08 00:05:33 +00:00
|
|
|
content: "→";
|
|
|
|
}
|
|
|
|
/* narrow screens: we reduce margin for blockquotes a lot, using
|
|
|
|
* a border instead. */
|
2022-05-04 05:09:14 +00:00
|
|
|
blockquote {
|
|
|
|
border-left: 3px solid;
|
|
|
|
}
|
|
|
|
|
2022-07-11 05:38:25 +00:00
|
|
|
/* Narrow screens: allow hyphenating titles I can't add soft hyphens to
|
|
|
|
* these. Also decrease the top margin a bit; the navbar and breadcrumb
|
|
|
|
* list take up plenty of space on top. The latter is a purely
|
|
|
|
* aesthetic choice, since it was annoying me a lot. */
|
2022-04-14 01:42:52 +00:00
|
|
|
h1 {
|
2022-05-05 05:22:38 +00:00
|
|
|
-webkit-hyphens: auto;
|
2022-04-14 01:42:52 +00:00
|
|
|
hyphens: auto;
|
2022-07-11 05:38:25 +00:00
|
|
|
margin-top: .25em;
|
2022-04-14 01:42:52 +00:00
|
|
|
}
|
|
|
|
|
2022-05-27 00:06:56 +00:00
|
|
|
/* Very narrow screens: full hyphenation.
|
|
|
|
* This is the typical width of a smart feature phone. */
|
2022-08-02 03:51:12 +00:00
|
|
|
@media (max-width: 250px) {
|
2022-05-05 04:49:45 +00:00
|
|
|
body {
|
|
|
|
font-size: 100%;
|
2022-05-05 05:22:38 +00:00
|
|
|
-webkit-hyphens: auto;
|
2022-05-04 00:05:47 +00:00
|
|
|
hyphens: auto;
|
2022-05-10 23:06:28 +00:00
|
|
|
padding: 0 8px;
|
2022-04-14 01:42:52 +00:00
|
|
|
}
|
2022-07-24 18:28:23 +00:00
|
|
|
|
|
|
|
li > a,
|
2022-08-02 04:24:53 +00:00
|
|
|
[itemprop="breadcrumb"] a,
|
|
|
|
[itemprop="breadcrumb"] > span {
|
2022-07-24 18:28:23 +00:00
|
|
|
padding: .25em;
|
|
|
|
}
|
|
|
|
|
|
|
|
hr {
|
|
|
|
margin: .25em 0;
|
|
|
|
}
|
2022-04-14 01:42:52 +00:00
|
|
|
}
|
|
|
|
|
2022-04-19 02:54:40 +00:00
|
|
|
/* <kbd> should be distinguished from <code> and surrounding text
|
2022-05-04 00:05:47 +00:00
|
|
|
* in a way beyond font-face; at least two visual distinctions needed
|
|
|
|
* Also, Small text is easier to read when slightly bolder.
|
|
|
|
* This is important in the dark theme where I set my own colors and
|
|
|
|
* try to maintain good perceptual contrast even for small text, but
|
|
|
|
* I don't want toggling the theme to impact anything besides color so
|
|
|
|
* I set the weight here. */
|
2022-06-07 04:42:32 +00:00
|
|
|
dt,
|
2022-05-10 23:06:28 +00:00
|
|
|
kbd {
|
2022-04-03 06:54:39 +00:00
|
|
|
font-weight: bold;
|
|
|
|
}
|
|
|
|
|
2022-06-30 15:34:16 +00:00
|
|
|
/* <ins> should not be mistaken for hyperlinks.
|
|
|
|
* "note" roles should look distinct. */
|
|
|
|
ins,
|
|
|
|
[role="note"],
|
|
|
|
[role="doc-tip"] {
|
2022-08-02 04:24:53 +00:00
|
|
|
contain: content;
|
2022-05-28 21:22:52 +00:00
|
|
|
font-style: italic;
|
2022-06-03 22:47:14 +00:00
|
|
|
text-decoration: none;
|
2022-05-28 21:22:52 +00:00
|
|
|
}
|
|
|
|
|
2022-04-26 00:37:23 +00:00
|
|
|
/* narrow screens: remove unused figure margins
|
2022-04-26 05:11:18 +00:00
|
|
|
* figure captions shouldn't look like regular paragraphs; there should
|
2022-05-12 04:31:27 +00:00
|
|
|
* be some extra space.
|
2022-05-13 00:33:12 +00:00
|
|
|
* This does not hold true for figures in somewhat distinct sections; the
|
|
|
|
* section should instead get the spacing. A section that constitutes a
|
|
|
|
* separate schema.org object would qualify. */
|
2022-08-02 04:24:53 +00:00
|
|
|
figure,
|
|
|
|
section[itemprop="mentions"] {
|
2022-04-26 05:11:18 +00:00
|
|
|
margin: 1.5em 0;
|
2022-02-28 22:18:21 +00:00
|
|
|
}
|
|
|
|
|
2022-05-13 00:33:12 +00:00
|
|
|
section[itemprop="mentions"] > figure {
|
2022-05-12 04:31:27 +00:00
|
|
|
margin: 0;
|
|
|
|
}
|
|
|
|
|
2022-03-29 01:11:21 +00:00
|
|
|
/* browsers make monospace small and unreadable for some dumb legacy
|
|
|
|
* reason and this somehow fixes that without overriding the user's
|
|
|
|
* font size preferences. */
|
2021-06-27 02:35:49 +00:00
|
|
|
code,
|
2022-04-07 06:42:10 +00:00
|
|
|
kbd,
|
2022-05-12 04:31:27 +00:00
|
|
|
pre, /* Needed for ancient browsers */
|
2022-04-07 06:42:10 +00:00
|
|
|
samp {
|
2021-06-27 02:35:49 +00:00
|
|
|
font-family: monospace, monospace;
|
|
|
|
}
|
|
|
|
|
2022-05-30 19:07:33 +00:00
|
|
|
/* Some browsers don't support the hidden attr.
|
|
|
|
* I use hidden spans in backlinks to provide ARIA labels.
|
|
|
|
* Some ancient browsers don't support input[type="hidden"] */
|
2022-07-14 05:08:20 +00:00
|
|
|
[hidden],
|
2022-08-02 04:24:53 +00:00
|
|
|
[type="hidden"] {
|
2022-05-20 00:18:14 +00:00
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
|
2022-06-15 05:08:50 +00:00
|
|
|
/* Remove list style from data feeds. */
|
2022-07-14 05:08:20 +00:00
|
|
|
[itemtype="https://schema.org/DataFeed"] > ol {
|
2022-06-15 05:08:50 +00:00
|
|
|
list-style-type: none;
|
2022-07-14 05:08:20 +00:00
|
|
|
padding: 0;
|
2022-06-15 05:08:50 +00:00
|
|
|
}
|
|
|
|
|
2022-02-28 23:05:14 +00:00
|
|
|
/* Narrow screens: long words can cause content to flow out of the
|
|
|
|
* viewport, triggering horizontal scrolling. Allow breaking words in
|
2022-04-26 05:11:18 +00:00
|
|
|
* content I don't control (comments, names). For content I do control,
|
|
|
|
* I just add soft hyphens to the HTML. */
|
2022-08-02 04:24:53 +00:00
|
|
|
[itemprop="comment"],
|
2022-04-26 05:11:18 +00:00
|
|
|
:not(pre) > code,
|
|
|
|
:not(pre) > samp,
|
|
|
|
span[itemtype="https://schema.org/Person"] {
|
2022-02-27 01:18:44 +00:00
|
|
|
overflow-wrap: break-word;
|
2020-11-25 01:09:26 +00:00
|
|
|
}
|
2020-11-30 21:17:15 +00:00
|
|
|
|
2022-03-29 01:11:21 +00:00
|
|
|
/* Narrow screens: allow horizontal scroll in a pre block. */
|
2020-12-12 10:42:45 +00:00
|
|
|
pre {
|
2022-05-04 00:05:47 +00:00
|
|
|
overflow: auto;
|
2022-05-04 05:09:14 +00:00
|
|
|
padding: .5em;
|
2020-11-03 23:46:20 +00:00
|
|
|
}
|
2022-02-28 23:05:14 +00:00
|
|
|
|
|
|
|
/* Distinguish images from the background in case their color is
|
|
|
|
* too similar to the page background color. Also put a border around
|
2022-05-04 05:09:14 +00:00
|
|
|
* <pre> and <code> to distinguish them in ways besides font-family.
|
2022-06-11 20:00:48 +00:00
|
|
|
* The tappable region of a <summary> extends across the page: we
|
|
|
|
* need to tell users that the full space is interactive.
|
2022-05-04 05:09:14 +00:00
|
|
|
* This is Technique C25 of SC 1.4.8 */
|
2022-05-27 00:06:56 +00:00
|
|
|
input,
|
2022-02-28 23:05:14 +00:00
|
|
|
img,
|
2022-06-28 15:52:07 +00:00
|
|
|
mark, /* borders provide a distinguishing factor besides color */
|
2022-06-11 20:00:48 +00:00
|
|
|
pre,
|
|
|
|
summary {
|
2022-04-14 01:19:49 +00:00
|
|
|
border: 1px solid;
|
|
|
|
}
|
|
|
|
|
2022-05-04 05:09:14 +00:00
|
|
|
/* A black border is too harsh; the extra visual noise is distracting
|
|
|
|
* to users with eye-tracking or ADHD. Only special items like headings
|
|
|
|
* should draw gaze. */
|
2022-04-26 05:11:18 +00:00
|
|
|
:not(pre) > code,
|
|
|
|
:not(pre) > samp {
|
2022-05-05 05:22:38 +00:00
|
|
|
border: 1px solid #999;
|
2022-05-04 00:05:47 +00:00
|
|
|
|
|
|
|
/* borders shouldn't touch text */
|
2022-06-03 22:47:14 +00:00
|
|
|
padding: 0 .25em;
|
2022-04-27 15:41:36 +00:00
|
|
|
}
|
|
|
|
|
2022-05-04 05:09:14 +00:00
|
|
|
/* center standalone images; same justification as
|
2022-03-29 01:11:21 +00:00
|
|
|
* for centering the body contents. Also makes images easier to see
|
2022-05-05 04:49:45 +00:00
|
|
|
* for people holding a device with one hand. */
|
2022-08-02 04:24:53 +00:00
|
|
|
[itemprop="articleBody"] img {
|
2022-02-28 23:05:14 +00:00
|
|
|
display: block;
|
|
|
|
height: auto;
|
|
|
|
margin: auto;
|
2022-05-05 04:49:45 +00:00
|
|
|
max-width: 100%;
|
2022-02-28 23:05:14 +00:00
|
|
|
}
|
2022-03-26 19:32:22 +00:00
|
|
|
|
2022-07-14 05:08:20 +00:00
|
|
|
/* Stretch out audio elements so the progress meter is easier to use. */
|
2022-07-01 03:12:06 +00:00
|
|
|
audio {
|
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
|
2022-05-04 05:09:14 +00:00
|
|
|
/* Some images look blurry when scaled; this makes them easier to
|
|
|
|
* read. */
|
|
|
|
.pix {
|
|
|
|
image-rendering: pixelated;
|
|
|
|
}
|
|
|
|
|
2022-05-30 19:07:33 +00:00
|
|
|
/* Make search box and submit button as wide as possible while keeping
|
|
|
|
* them next to each other. */
|
|
|
|
|
|
|
|
/* Use table-style layout (no, not actual tables. eww.). It's like a
|
|
|
|
* single-row flexbox that supports more browsers. Kanged this CSS from
|
|
|
|
* ww.gov.uk. Give the entire width of the row to the search box, but
|
|
|
|
* allow the minimum width for the submit button. */
|
2022-06-06 04:17:18 +00:00
|
|
|
legend, /* Makes the <legend> wrap text in some browsers. */
|
2022-05-30 19:07:33 +00:00
|
|
|
form > div {
|
|
|
|
display: table;
|
|
|
|
width: 100%
|
|
|
|
}
|
|
|
|
|
|
|
|
input {
|
|
|
|
/* Browsers like Safari make the submit button pill-shaped which
|
2022-07-14 05:08:20 +00:00
|
|
|
* clashes with the input box. One of the only purely-cosmetic changes
|
|
|
|
* on this site. */
|
2022-05-30 19:07:33 +00:00
|
|
|
appearance: none;
|
|
|
|
|
|
|
|
/* Don't shrink the size of the text in forms or make it system-ui. */
|
|
|
|
font-family: sans-serif;
|
|
|
|
font-size: inherit;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* A text box should take all available width */
|
|
|
|
input:not([type="submit"]) {
|
|
|
|
display: table-cell;
|
|
|
|
width: 98%;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Pseudo-table-cell containing the submit button */
|
|
|
|
form > div > div {
|
|
|
|
display: table-cell;
|
|
|
|
vertical-align: top; /* IE and some botique browsers need this */
|
|
|
|
width: 1%;
|
|
|
|
}
|
|
|
|
|
2022-05-12 04:31:27 +00:00
|
|
|
|
2022-04-14 01:19:49 +00:00
|
|
|
/* Some browser focus indicators are inaccessible; override them with
|
|
|
|
* something more visible. See WCAG 2.x SC 2.4.12. I also tried to
|
|
|
|
* match browser behavior; mainstream browsers use :focus-visible
|
|
|
|
* instead of focus but older/simpler browsers only support :focus.
|
|
|
|
* I borrowed these directives from
|
|
|
|
* https://www.tempertemper.net/blog/refining-focus-styles-with-focus-visible
|
2022-05-14 00:16:15 +00:00
|
|
|
* To my knowledge: <a>, <summary>, and <pre tabindex=0> are the only
|
|
|
|
* focusable elements.
|
2022-04-14 01:19:49 +00:00
|
|
|
* */
|
|
|
|
|
|
|
|
a:focus,
|
2022-04-27 15:41:36 +00:00
|
|
|
summary:focus,
|
2022-08-02 04:24:53 +00:00
|
|
|
[tabindex="0"]:focus,
|
2022-05-27 00:06:56 +00:00
|
|
|
form :focus {
|
2022-04-14 01:19:49 +00:00
|
|
|
outline: 3px solid;
|
|
|
|
}
|
|
|
|
|
2022-07-16 02:26:40 +00:00
|
|
|
/* Remove :focus styling for browsers that do support :focus-visible.
|
2022-07-16 05:04:15 +00:00
|
|
|
* Leave it on for elements that are supposed to show focus on click. */
|
2022-07-16 02:26:40 +00:00
|
|
|
@supports selector(:focus-visible) {
|
|
|
|
a:focus:not(:focus-visible),
|
2022-08-02 04:24:53 +00:00
|
|
|
[tabindex="0"]:focus:not(:focus-visible) {
|
2022-07-16 02:26:40 +00:00
|
|
|
outline: none;
|
|
|
|
}
|
|
|
|
}
|
2022-04-14 01:19:49 +00:00
|
|
|
|
2022-03-26 19:32:22 +00:00
|
|
|
/* Todo:
|
|
|
|
* - Wait till Webkit fixes its broken-ass default dark stylesheet
|
|
|
|
* then consider trimming the dark stylesheet I provide.
|
2022-04-14 01:19:49 +00:00
|
|
|
* */
|