On real Android touchscreens, a horizontal drag on content with nothing left to scroll horizontally gets claimed by Chrome's native swipe-to-go-back/forward gesture before our own touchend listener (article-view swipe navigation) ever sees it — silently, with no touchend firing at all. Synthetic touch testing (mouse-drag emulation in devtools) doesn't go through that gesture recognizer, so it worked there while doing nothing on an actual phone. Fix: overscroll-behavior-x: contain on body stops Chrome from claiming the gesture for its own navigation, letting our touchend fire normally. Also drops the overflow-x: hidden added to .article-single for the slide transition — body already has it (for the same full-bleed-image reason), so it was redundant. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
101 lines
3.2 KiB
CSS
101 lines
3.2 KiB
CSS
/* color palette from <https://github.com/vuejs/theme> */
|
|
:root {
|
|
--vt-c-white: #ffffff;
|
|
--vt-c-white-soft: #f8f8f8;
|
|
--vt-c-white-mute: #f2f2f2;
|
|
|
|
--vt-c-black: #181818;
|
|
--vt-c-black-soft: #222222;
|
|
--vt-c-black-mute: #282828;
|
|
|
|
--vt-c-indigo: #2c3e50;
|
|
|
|
--vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
|
|
--vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
|
|
--vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
|
|
--vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
|
|
|
|
--vt-c-text-light-1: var(--vt-c-indigo);
|
|
--vt-c-text-light-2: rgba(60, 60, 60, 0.66);
|
|
--vt-c-text-dark-1: var(--vt-c-white);
|
|
--vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
|
|
}
|
|
|
|
/* semantic color variables for this project */
|
|
:root {
|
|
--headline-font-family: Glook, 'Courier New';
|
|
--content-font-family: Merriweather, Georgia, 'Times New Roman', Times, serif;
|
|
--headline-font-size-scale: 1;
|
|
--content-font-size-scale: 1;
|
|
--content-text-align: left;
|
|
--content-padding: 1rem;
|
|
|
|
--color-background: var(--vt-c-white);
|
|
--color-background-soft: var(--vt-c-white-soft);
|
|
--color-background-mute: var(--vt-c-white-mute);
|
|
|
|
--color-border: var(--vt-c-divider-light-2);
|
|
--color-border-hover: var(--vt-c-divider-light-1);
|
|
|
|
--color-heading: var(--vt-c-text-light-1);
|
|
--color-text: var(--vt-c-text-light-1);
|
|
|
|
--color-accent: hsla(160, 100%, 37%, 1);
|
|
--color-accent-hover: hsla(160, 100%, 37%, 0.2);
|
|
--color-accent-2: hsla(200, 90%, 45%, 1);
|
|
--color-accent-2-hover: hsla(200, 90%, 35%, 1);
|
|
--color-info: #3498db;
|
|
--color-info-text: white;
|
|
|
|
--section-gap: 160px;
|
|
}
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
:root {
|
|
--color-background: var(--vt-c-black);
|
|
--color-background-soft: var(--vt-c-black-soft);
|
|
--color-background-mute: var(--vt-c-black-mute);
|
|
|
|
--color-border: var(--vt-c-divider-dark-2);
|
|
--color-border-hover: var(--vt-c-divider-dark-1);
|
|
|
|
--color-heading: var(--vt-c-text-dark-1);
|
|
--color-text: var(--vt-c-text-dark-2);
|
|
|
|
--color-accent-2: hsla(200, 90%, 65%, 1);
|
|
--color-accent-2-hover: hsla(200, 90%, 75%, 1);
|
|
}
|
|
}
|
|
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
box-sizing: border-box;
|
|
margin: 0;
|
|
font-weight: normal;
|
|
}
|
|
|
|
body {
|
|
min-height: 100vh;
|
|
/* Full-bleed article images use a `100vw`-based breakout, which can be
|
|
wider than the visible content area (scrollbar) and would otherwise
|
|
introduce a horizontal scrollbar. */
|
|
overflow-x: hidden;
|
|
/* Without this, a horizontal touch drag on content with nothing left to
|
|
scroll (true here, given overflow-x: hidden above) is claimed by
|
|
Chrome-on-Android's native swipe-to-go-back/forward gesture before our
|
|
own touchend listener (article-view swipe navigation) ever sees it —
|
|
the gesture is silently swallowed with no error, no touchend fires. */
|
|
overscroll-behavior-x: contain;
|
|
color: var(--color-text);
|
|
background: var(--color-background);
|
|
transition: color 0.5s, background-color 0.5s;
|
|
line-height: 1.6;
|
|
font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,
|
|
Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
|
font-size: clamp(14px, 2.5vw, 16px);
|
|
text-rendering: optimizeLegibility;
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
}
|