*, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } ::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } /* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com */ /* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ *, ::before, ::after { box-sizing: border-box; /* 1 */ border-width: 0; /* 2 */ border-style: solid; /* 2 */ border-color: #e5e7eb; /* 2 */ } ::before, ::after { --tw-content: ''; } /* 1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. 4. Use the user's configured `sans` font-family by default. 5. Use the user's configured `sans` font-feature-settings by default. 6. Use the user's configured `sans` font-variation-settings by default. 7. Disable tap highlights on iOS */ html, :host { line-height: 1.5; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ -moz-tab-size: 4; /* 3 */ -o-tab-size: 4; tab-size: 4; /* 3 */ font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */ font-feature-settings: normal; /* 5 */ font-variation-settings: normal; /* 6 */ -webkit-tap-highlight-color: transparent; /* 7 */ } /* 1. Remove the margin in all browsers. 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ body { margin: 0; /* 1 */ line-height: inherit; /* 2 */ } /* 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 3. Ensure horizontal rules are visible by default. */ hr { height: 0; /* 1 */ color: inherit; /* 2 */ border-top-width: 1px; /* 3 */ } /* Add the correct text decoration in Chrome, Edge, and Safari. */ abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } /* Remove the default font size and weight for headings. */ h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } /* Reset links to optimize for opt-in styling instead of opt-out. */ a { color: inherit; text-decoration: inherit; } /* Add the correct font weight in Edge and Safari. */ b, strong { font-weight: bolder; } /* 1. Use the user's configured `mono` font-family by default. 2. Use the user's configured `mono` font-feature-settings by default. 3. Use the user's configured `mono` font-variation-settings by default. 4. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp, pre { font-family: JetBrains Mono, monospace; /* 1 */ font-feature-settings: normal; /* 2 */ font-variation-settings: normal; /* 3 */ font-size: 1em; /* 4 */ } /* Add the correct font size in all browsers. */ small { font-size: 80%; } /* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 3. Remove gaps between table borders by default. */ table { text-indent: 0; /* 1 */ border-color: inherit; /* 2 */ border-collapse: collapse; /* 3 */ } /* 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. 3. Remove default padding in all browsers. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-feature-settings: inherit; /* 1 */ font-variation-settings: inherit; /* 1 */ font-size: 100%; /* 1 */ font-weight: inherit; /* 1 */ line-height: inherit; /* 1 */ letter-spacing: inherit; /* 1 */ color: inherit; /* 1 */ margin: 0; /* 2 */ padding: 0; /* 3 */ } /* Remove the inheritance of text transform in Edge and Firefox. */ button, select { text-transform: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Remove default button styles. */ button, input:where([type='button']), input:where([type='reset']), input:where([type='submit']) { -webkit-appearance: button; /* 1 */ background-color: transparent; /* 2 */ background-image: none; /* 2 */ } /* Use the modern Firefox focus style for all focusable elements. */ :-moz-focusring { outline: auto; } /* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ :-moz-ui-invalid { box-shadow: none; } /* Add the correct vertical alignment in Chrome and Firefox. */ progress { vertical-align: baseline; } /* Correct the cursor style of increment and decrement buttons in Safari. */ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } /* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type='search'] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /* Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-search-decoration { -webkit-appearance: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Add the correct display in Chrome and Safari. */ summary { display: list-item; } /* Removes the default spacing and border for appropriate elements. */ blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { margin: 0; } fieldset { margin: 0; padding: 0; } legend { padding: 0; } ol, ul, menu { list-style: none; margin: 0; padding: 0; } /* Reset default styling for dialogs. */ dialog { padding: 0; } /* Prevent resizing textareas horizontally by default. */ textarea { resize: vertical; } /* 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 2. Set the default placeholder color to the user's configured gray 400 color. */ input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } input::placeholder, textarea::placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } /* Set the default cursor for buttons. */ button, [role="button"] { cursor: pointer; } /* Make sure disabled buttons don't get the pointer cursor. */ :disabled { cursor: default; } /* 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) This can trigger a poorly considered lint error in some tools but is included by design. */ img, svg, video, canvas, audio, iframe, embed, object { display: block; /* 1 */ vertical-align: middle; /* 2 */ } /* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) */ img, video { max-width: 100%; height: auto; } /* Make elements with the HTML hidden attribute stay hidden by default */ [hidden]:where(:not([hidden="until-found"])) { display: none; } html { overflow-x: hidden; } body { overflow-x: hidden; background-color: var(--bg); font-family: IBM Plex Sans, sans-serif; color: var(--text); } articlebody.border.border-border\/30.rounded-lg.overflow-hidden.group { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } h1, h2, h3, h4, h5, h6 { font-weight: 700; font-family: 'Oxanium', monospace; } h1 { font-size: 1.875rem; line-height: 2.25rem; } @media (min-width: 768px) { h1 { font-size: 2.25rem; line-height: 2.5rem; } } h2 { font-size: 1.5rem; line-height: 2rem; } @media (min-width: 768px) { h2 { font-size: 1.875rem; line-height: 2.25rem; } } h3 { font-size: 1.25rem; line-height: 1.75rem; } @media (min-width: 768px) { h3 { font-size: 1.5rem; line-height: 2rem; } } .heading-prefix { font-family: 'JetBrains Mono', monospace; font-weight: 400; font-size: 0.8em; color: var(--accent); opacity: 0.7; margin-right: 0.35em; -webkit-user-select: none; -moz-user-select: none; user-select: none; } a { color: var(--accent); transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } a:hover { opacity: 0.8; } code { border-radius: 0.25rem; border-width: 1px; border-color: var(--border); background-color: var(--surface); padding-left: 0.375rem; padding-right: 0.375rem; padding-top: 0.125rem; padding-bottom: 0.125rem; font-family: JetBrains Mono, monospace; color: var(--accent2); } articlecode.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } pre { background-color: rgba(var(--surface-rgb), 0.8); overflow-x: auto; border-radius: 0.25rem; border-width: 1px; border-color: var(--border); padding: 1rem; } articlepre.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } pre code { border-width: 0px; background-color: transparent; padding: 0px; color: var(--text); } *:focus-visible { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); --tw-ring-color: var(--accent); --tw-ring-offset-width: 2px; ring-offset-color: var(--bg); } button, input, textarea, select { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; } .container { width: 100%; } @media (min-width: 640px) { .container { max-width: 640px; } } @media (min-width: 768px) { .container { max-width: 768px; } } @media (min-width: 1060px) { .container { max-width: 1060px; } } @media (min-width: 1280px) { .container { max-width: 1280px; } } @media (min-width: 1536px) { .container { max-width: 1536px; } } .prose { color: var(--tw-prose-body); max-width: 65ch; } .prose :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 1.25em; margin-bottom: 1.25em; } .prose :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-lead); font-size: 1.25em; line-height: 1.6; margin-top: 1.2em; margin-bottom: 1.2em; } .prose :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-links); text-decoration: underline; font-weight: 500; } .prose :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-bold); font-weight: 600; } .prose :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } .prose :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } .prose :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } .prose :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: decimal; margin-top: 1.25em; margin-bottom: 1.25em; padding-inline-start: 1.625em; } .prose :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: upper-alpha; } .prose :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: lower-alpha; } .prose :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: upper-alpha; } .prose :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: lower-alpha; } .prose :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: upper-roman; } .prose :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: lower-roman; } .prose :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: upper-roman; } .prose :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: lower-roman; } .prose :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: decimal; } .prose :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: disc; margin-top: 1.25em; margin-bottom: 1.25em; padding-inline-start: 1.625em; } .prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { font-weight: 400; color: var(--tw-prose-counters); } .prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { color: var(--tw-prose-bullets); } .prose :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 600; margin-top: 1.25em; } .prose :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-color: var(--tw-prose-hr); border-top-width: 1px; margin-top: 3em; margin-bottom: 3em; } .prose :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 500; font-style: italic; color: var(--tw-prose-quotes); border-inline-start-width: 0.25rem; border-inline-start-color: var(--tw-prose-quote-borders); quotes: "\201C""\201D""\2018""\2019"; margin-top: 1.6em; margin-bottom: 1.6em; padding-inline-start: 1em; } .prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { content: open-quote; } .prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { content: close-quote; } .prose :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 800; font-size: 2.25em; margin-top: 0; margin-bottom: 0.8888889em; line-height: 1.1111111; } .prose :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 900; color: inherit; } .prose :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 700; font-size: 1.5em; margin-top: 2em; margin-bottom: 1em; line-height: 1.3333333; } .prose :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 800; color: inherit; } .prose :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 600; font-size: 1.25em; margin-top: 1.6em; margin-bottom: 0.6em; line-height: 1.6; } .prose :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 700; color: inherit; } .prose :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 600; margin-top: 1.5em; margin-bottom: 0.5em; line-height: 1.5; } .prose :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 700; color: inherit; } .prose :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 2em; margin-bottom: 2em; } .prose :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) { display: block; margin-top: 2em; margin-bottom: 2em; } .prose :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 2em; margin-bottom: 2em; } .prose :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 500; font-family: inherit; color: var(--tw-prose-kbd); box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows); font-size: 0.875em; border-radius: 0.3125rem; padding-top: 0.1875em; padding-inline-end: 0.375em; padding-bottom: 0.1875em; padding-inline-start: 0.375em; } .prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-code); font-weight: 600; font-size: 0.875em; } .prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { content: "`"; } .prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { content: "`"; } .prose :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } .prose :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } .prose :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; font-size: 0.875em; } .prose :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; font-size: 0.9em; } .prose :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } .prose :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } .prose :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } .prose :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-pre-code); background-color: var(--tw-prose-pre-bg); overflow-x: auto; font-weight: 400; font-size: 0.875em; line-height: 1.7142857; margin-top: 1.7142857em; margin-bottom: 1.7142857em; border-radius: 0.375rem; padding-top: 0.8571429em; padding-inline-end: 1.1428571em; padding-bottom: 0.8571429em; padding-inline-start: 1.1428571em; } .prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { background-color: transparent; border-width: 0; border-radius: 0; padding: 0; font-weight: inherit; color: inherit; font-size: inherit; font-family: inherit; line-height: inherit; } .prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { content: none; } .prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { content: none; } .prose :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) { width: 100%; table-layout: auto; margin-top: 2em; margin-bottom: 2em; font-size: 0.875em; line-height: 1.7142857; } .prose :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-bottom-width: 1px; border-bottom-color: var(--tw-prose-th-borders); } .prose :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 600; vertical-align: bottom; padding-inline-end: 0.5714286em; padding-bottom: 0.5714286em; padding-inline-start: 0.5714286em; } .prose :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-bottom-width: 1px; border-bottom-color: var(--tw-prose-td-borders); } .prose :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-bottom-width: 0; } .prose :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { vertical-align: baseline; } .prose :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-top-width: 1px; border-top-color: var(--tw-prose-th-borders); } .prose :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { vertical-align: top; } .prose :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-align: start; } .prose :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; margin-bottom: 0; } .prose :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-captions); font-size: 0.875em; line-height: 1.4285714; margin-top: 0.8571429em; } .prose { --tw-prose-body: #374151; --tw-prose-headings: #111827; --tw-prose-lead: #4b5563; --tw-prose-links: #111827; --tw-prose-bold: #111827; --tw-prose-counters: #6b7280; --tw-prose-bullets: #d1d5db; --tw-prose-hr: #e5e7eb; --tw-prose-quotes: #111827; --tw-prose-quote-borders: #e5e7eb; --tw-prose-captions: #6b7280; --tw-prose-kbd: #111827; --tw-prose-kbd-shadows: rgb(17 24 39 / 10%); --tw-prose-code: #111827; --tw-prose-pre-code: #e5e7eb; --tw-prose-pre-bg: #1f2937; --tw-prose-th-borders: #d1d5db; --tw-prose-td-borders: #e5e7eb; --tw-prose-invert-body: #d1d5db; --tw-prose-invert-headings: #fff; --tw-prose-invert-lead: #9ca3af; --tw-prose-invert-links: #fff; --tw-prose-invert-bold: #fff; --tw-prose-invert-counters: #9ca3af; --tw-prose-invert-bullets: #4b5563; --tw-prose-invert-hr: #374151; --tw-prose-invert-quotes: #f3f4f6; --tw-prose-invert-quote-borders: #374151; --tw-prose-invert-captions: #9ca3af; --tw-prose-invert-kbd: #fff; --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%); --tw-prose-invert-code: #fff; --tw-prose-invert-pre-code: #d1d5db; --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); --tw-prose-invert-th-borders: #4b5563; --tw-prose-invert-td-borders: #374151; font-size: 1rem; line-height: 1.75; } .prose :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; margin-bottom: 0; } .prose :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0.5em; margin-bottom: 0.5em; } .prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-start: 0.375em; } .prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-start: 0.375em; } .prose :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0.75em; margin-bottom: 0.75em; } .prose :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 1.25em; } .prose :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-bottom: 1.25em; } .prose :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 1.25em; } .prose :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-bottom: 1.25em; } .prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0.75em; margin-bottom: 0.75em; } .prose :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 1.25em; margin-bottom: 1.25em; } .prose :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0.5em; padding-inline-start: 1.625em; } .prose :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } .prose :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } .prose :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } .prose :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } .prose :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-start: 0; } .prose :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-end: 0; } .prose :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-top: 0.5714286em; padding-inline-end: 0.5714286em; padding-bottom: 0.5714286em; padding-inline-start: 0.5714286em; } .prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-start: 0; } .prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-end: 0; } .prose :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 2em; margin-bottom: 2em; } .prose :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } .prose :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-bottom: 0; } .prose-invert { --tw-prose-body: var(--tw-prose-invert-body); --tw-prose-headings: var(--tw-prose-invert-headings); --tw-prose-lead: var(--tw-prose-invert-lead); --tw-prose-links: var(--tw-prose-invert-links); --tw-prose-bold: var(--tw-prose-invert-bold); --tw-prose-counters: var(--tw-prose-invert-counters); --tw-prose-bullets: var(--tw-prose-invert-bullets); --tw-prose-hr: var(--tw-prose-invert-hr); --tw-prose-quotes: var(--tw-prose-invert-quotes); --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders); --tw-prose-captions: var(--tw-prose-invert-captions); --tw-prose-kbd: var(--tw-prose-invert-kbd); --tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows); --tw-prose-code: var(--tw-prose-invert-code); --tw-prose-pre-code: var(--tw-prose-invert-pre-code); --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg); --tw-prose-th-borders: var(--tw-prose-invert-th-borders); --tw-prose-td-borders: var(--tw-prose-invert-td-borders); } .container { margin-left: auto; margin-right: auto; max-width: 56rem; } /* Background utilities */ .bg-bg { background-color: var(--bg); } .bg-surface { background-color: var(--surface); } /* Border utilities */ .border-border { border-color: var(--border); } /* Text color utilities */ .text-accent { color: var(--accent); } .text-accent2 { color: var(--accent2); } .text-text { color: var(--text); } .text-text-dim { color: var(--text-dim); } /* Additional semantic utilities */ /* Glow effect utility */ .glow-accent { box-shadow: 0 0 20px var(--accent-glow); } /* Frosted glass bar (header/footer) */ .frosted-bar { background-color: rgba(var(--bg2-rgb), 0.75); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); box-shadow: 0 0 20px var(--accent-glow); /* border applied via utility classes in templates */ } /* Border utilities for frosted-bar component */ .frosted-bar.border-b, .frosted-bar.border-t { border-color: var(--border); } /* Button component styles */ .btn { display: inline-flex; cursor: pointer; align-items: center; justify-content: center; border-radius: 0.25rem; padding-left: 1rem; padding-right: 1rem; padding-top: 0.5rem; padding-bottom: 0.5rem; font-weight: 700; transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; background-color: var(--accent); color: #ffffff; border: none; outline: none; } .btn:hover:not(:disabled) { opacity: 0.85; transform: translateY(-1px); } .btn:focus-visible { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); --tw-ring-offset-width: 2px; ring-color: var(--accent); ring-offset-color: var(--bg); } .btn:active:not(:disabled) { transform: translateY(0); opacity: 0.75; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } /* Button variants */ .btn-primary { background-color: var(--accent); color: #ffffff; } .btn-primary:hover:not(:disabled) { background-color: var(--accent); } .btn-secondary { background-color: var(--accent2); color: var(--bg); font-weight: 600; } .btn-secondary:hover:not(:disabled) { background-color: var(--accent2); } .btn-outline { background-color: transparent; color: var(--accent); border: 2px solid var(--accent); } .btn-outline:hover:not(:disabled) { background-color: var(--accent); color: #ffffff; } /* Button sizes */ .btn-sm { padding-left: 0.75rem; padding-right: 0.75rem; padding-top: 0.25rem; padding-bottom: 0.25rem; font-size: 0.875rem; line-height: 1.25rem; } .btn-lg { padding-left: 1.5rem; padding-right: 1.5rem; padding-top: 0.75rem; padding-bottom: 0.75rem; font-size: 1.125rem; line-height: 1.75rem; } /* Icon button (for icons without text) */ /* Force Feather icons to match size */ /* Sidebar widget — no box, no border */ .sidebar-widget { margin-bottom: 1.5rem; } /* Sidebar widget title — bash comment style */ .sidebar-widget-label { font-family: var(--font-mono, monospace); font-size: 1rem; font-weight: bold; color: var(--accent); letter-spacing: 0.08em; margin-bottom: 0.5rem; } /* Sidebar separator */ .sidebar-hr { border: none; border-top: 1px solid var(--border); margin-bottom: 1.5rem; } /* ===================== Tag Cloud Component ===================== */ .tag-cloud { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.75rem; align-items: baseline; overflow: visible; } .tag-cloud-link { display: inline-flex; align-items: center; gap: 0.375rem; padding: 0.25rem 0.625rem; border: 1px solid var(--border); border-radius: 0.25rem; font-family: var(--font-mono, 'JetBrains Mono', monospace); color: var(--text-dim); text-decoration: none; background-color: var(--bg2); transition: border-color 150ms ease-out, color 150ms ease-out, background-color 150ms ease-out, opacity 150ms ease-out; white-space: nowrap; line-height: 1.4; } .tag-cloud-link:hover { border-color: rgba(var(--accent-rgb), 0.5); color: var(--accent); background-color: rgba(var(--accent-rgb), 0.1); } .tag-cloud-link:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 0.25rem; } .tag-cloud-count { display: inline-flex; align-items: center; justify-content: center; padding: 0 0.375rem; border-radius: 9999px; font-size: 0.65em; font-weight: 600; background-color: rgba(var(--accent-rgb), 0.12); color: var(--accent); line-height: 1.6; min-width: 1.2em; } @media (prefers-reduced-motion: reduce) { .tag-cloud-link { transition: none; } } .share-grid { display: grid; grid-template-columns: repeat(3, 50px); justify-content: space-evenly; justify-items: center; align-content: space-evenly; align-items: center; } .btn-share { display: inline-flex; align-items: center; justify-content: center; width: 50px; height: 50px; border-radius: 4px; border: 1px solid var(--border); background: var(--surface); color: var(--text-dim); cursor: pointer; transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease; text-decoration: none; } .btn-share svg, .btn-share i, .btn-share [data-feather] { width: 22px !important; height: 22px !important; flex-shrink: 0; } .btn-share:hover { color: var(--accent); border-color: rgba(var(--accent-rgb), 0.5); background: rgba(var(--accent-rgb), 0.06); box-shadow: 0 0 10px var(--accent-glow); } .btn-share:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; color: var(--accent); border-color: var(--accent); } .btn-share--copied { color: var(--accent2); border-color: var(--accent2); background: var(--surface); } @media (prefers-reduced-motion: reduce) { .btn-share { transition: none; } } /* Badge base style */ .badge { display: inline-flex; align-items: center; white-space: nowrap; border-radius: 0.25rem; padding-left: 0.625rem; padding-right: 0.625rem; padding-top: 0.25rem; padding-bottom: 0.25rem; font-family: JetBrains Mono, monospace; font-size: 0.875rem; line-height: 1.25rem; font-weight: 600; transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; border: 1px solid; } /* Article type badge styles */ /* Legacy type-* classes for compatibility (with badge styling) */ /* Card component */ .card { overflow: hidden; border-radius: 0.5rem; border-width: 1px; border-color: var(--border); transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; } article.card.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } article.border.border-border\/30.card.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } article.border.border-border\/30.rounded-lg.card.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } .card { box-shadow: 0 0 20px var(--accent-glow); } .card:hover { transform: translateY(-2px); box-shadow: 0 0 30px var(--accent-glow); } .card-image { aspect-ratio: 16 / 9; width: 100%; -o-object-fit: cover; object-fit: cover; } .card-body > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); } .card-body { padding: 1.25rem; } @media (min-width: 768px) { .card-body { padding: 1.5rem; } } /* ===================== Repository Grid ===================== */ .repo-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem; } /* ===================== Timeline Layout ===================== */ .timeline { position: relative; margin-left: auto; margin-right: auto; max-width: 64rem; padding-left: 1rem; padding-right: 1rem; padding-top: 3rem; padding-bottom: 3rem; } /* Vertical spine */ .timeline::before { content: ''; position: absolute; top: 0px; bottom: 0px; /* Mobile: fixed 20px from container left edge */ left: 20px; width: 2px; background: linear-gradient(to bottom, var(--accent), var(--accent2, var(--accent))); opacity: 0.7; } @media (min-width: 768px) { .timeline::before { left: 50%; transform: translateX(-50%); } } /* Each timeline row — block, full width, positioned context for abs children */ .timeline-item { position: relative; margin-bottom: 2.5rem; /* Mobile geometry (.timeline has px-4 = 16px padding): spine left = 20px from
    border → 20-16 = 4px from item's containing block. We want card to start ~8px right of spine right edge (22px from
      = 6px from block). Use margin-left: 30px so card starts at 16+30=46px from
        , 24px right of spine right. abs children: spine left relative to item = 4 - 30 = -26px. */ margin-left: 30px; } @media (min-width: 768px) { .timeline-item { margin-left: 0; } } /* ---- Connector line ---- */ .timeline-connector { position: absolute; top: 20px; height: 2px; /* Mobile: .timeline px-4(16px) + item margin-left(30px) = 46px from
          border. Spine right edge = 22px from
            border = 22-46 = -24px from item left. Connector: left=-24px, width=24px → touches spine right and card left edge. */ left: -24px; width: 24px; } @media (min-width: 768px) { /* spine center = 50% of item. Spine is 2px: left edge at 50%-1px, right at 50%+1px. Cards occupy [0 .. 50%-24px] (left) or [50%+24px .. 100%] (right). Left connector: left=50%-24px, width=23px → touches card right edge and spine left. Right connector: left=50%+1px, width=23px → touches spine right and card left. */ .timeline-item--left .timeline-connector { left: calc(50% - 24px); width: 23px; } .timeline-item--right .timeline-connector { left: calc(50% + 1px); width: 23px; } } /* ---- Node on spine ---- */ .timeline-node { position: absolute; z-index: 10; border-radius: 9999px; top: 14px; /* Mobile: spine center = 21px from
              border = 21-46 = -25px from item left. Node (10px wide): left = -25 - 5 = -30px. */ left: -30px; width: 10px; height: 10px; border: 2px solid var(--bg); } @media (min-width: 768px) { .timeline-node { width: 12px; height: 12px; top: 14px; /* Desktop: spine center = 50% of item. Node center on spine: left = 50% - 6px */ left: calc(50% - 6px); } } /* ---- Card wrapper ---- */ .timeline-card { display: flex; overflow: hidden; border-radius: 0.5rem; border-width: 1px; background-color: var(--surface); } article.timeline-card.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } article.border.border-border\/30.timeline-card.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } article.border.border-border\/30.rounded-lg.timeline-card.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } .timeline-card { /* Mobile: column (thumb on top) */ flex-direction: column; width: 100%; transition: box-shadow 0.2s, transform 0.2s; } .timeline-card:hover { transform: translateY(-2px); } @media (min-width: 768px) { /* Desktop: push card into left or right half via item padding */ .timeline-item--left { padding-right: calc(50% + 24px); } .timeline-item--right { padding-left: calc(50% + 24px); } /* Left card: thumb outer-left, body inner-right */ .timeline-item--left .timeline-card { flex-direction: row; } /* Right card: body inner-left, thumb outer-right */ .timeline-item--right .timeline-card { flex-direction: row-reverse; } } /* ---- Thumbnail panel ---- */ .timeline-thumb { flex-shrink: 0; overflow: hidden; } article.border.border-border\/30.rounded-lg.timeline-thumb.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } .timeline-thumb { /* Mobile: full-width banner */ width: 100%; height: 90px; } @media (min-width: 768px) { .timeline-thumb { /* 3:2 landscape: wider than tall */ width: 40%; height: auto; aspect-ratio: 3 / 2; } } .timeline-thumb img { height: 100%; width: 100%; -o-object-fit: cover; object-fit: cover; transition: transform 0.2s; } .timeline-card:hover .timeline-thumb img { transform: scale(1.03); } /* ---- Text panel ---- */ .timeline-body { display: flex; flex: 1 1 0%; flex-direction: column; gap: 0.5rem; padding: 1rem; } /* ---- Meta row (TYPE · date) ---- */ .timeline-meta { display: flex; align-items: center; gap: 0.5rem; font-family: JetBrains Mono, monospace; font-size: 0.75rem; line-height: 1rem; text-transform: uppercase; letter-spacing: 0.1em; } .timeline-meta-sep { color: var(--border); } .timeline-date { text-transform: none; letter-spacing: 0em; color: var(--text-dim); } /* ---- Title ---- */ .timeline-title { font-size: 1rem; line-height: 1.5rem; font-weight: 600; line-height: 1.375; } .timeline-title a { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .timeline-title a:hover { color: var(--accent); } /* ---- Excerpt ---- */ .timeline-excerpt { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; font-size: 0.875rem; line-height: 1.25rem; line-height: 1.625; color: var(--text-dim); } /* ---- Pinned badge ---- */ .timeline-pinned { display: inline-flex; align-items: center; gap: 0.25rem; border-radius: 0.25rem; padding-left: 0.5rem; padding-right: 0.5rem; padding-top: 0.125rem; padding-bottom: 0.125rem; font-size: 0.75rem; line-height: 1rem; font-weight: 600; } /* ---- Type-color variants (node, connector, card) ---- */ /* Tech (purple) */ /* Life (amber) */ /* Quote (green) */ /* Link (cyan) */ /* Photo (pink) */ /* ---- Timeline lazy-reveal (scroll-triggered) ---- */ .js-lazy-timeline > .timeline-item { opacity: 0; transform: translateX(-18px); transition: opacity 320ms ease-out, transform 320ms ease-out; } .js-lazy-timeline > .timeline-item.is-visible { opacity: 1; transform: translateX(0); } /* Header navigation styling */ .header { position: fixed; top: 0px; left: 0px; right: 0px; z-index: 40; } /* Mobile menu overlay */ .menu-overlay.active { visibility: visible; opacity: 1; } /* Breadcrumb navigation */ .breadcrumb { display: flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; line-height: 1.25rem; color: var(--text-dim); } .breadcrumb a { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .breadcrumb a:hover { color: var(--accent); } .breadcrumb-separator { opacity: 0.5; } /* Article metadata styling (with icons) */ /* Hero typography with fluid sizing */ /* ---- Article prev/next navigation ---- */ .article-nav { } .article-nav-prompt { margin-bottom: 0.5rem; font-family: JetBrains Mono, monospace; font-size: 0.875rem; line-height: 1.25rem; color: var(--accent); } .article-nav-links { display: flex; flex-direction: column; gap: 1rem; font-family: JetBrains Mono, monospace; font-size: 0.875rem; line-height: 1.25rem; } @media (min-width: 768px) { .article-nav-links { flex-direction: row; align-items: center; justify-content: space-between; gap: 0px; } } .article-nav-link { color: var(--text); transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .article-nav-link:hover { color: var(--accent); } .article-nav-placeholder { color: var(--text-dim); opacity: 0.4; } /* ---- Footer badge variants ---- */ .badge-footer-accent { display: inline-flex; align-items: center; white-space: nowrap; border-radius: 0.25rem; padding-left: 0.625rem; padding-right: 0.625rem; padding-top: 0.25rem; padding-bottom: 0.25rem; font-family: JetBrains Mono, monospace; font-size: 0.75rem; line-height: 1rem; font-weight: 600; border: 1px solid rgba(168, 85, 247, 0.35); background: rgba(168, 85, 247, 0.1); color: var(--accent); } .badge-footer-accent2 { display: inline-flex; align-items: center; white-space: nowrap; border-radius: 0.25rem; padding-left: 0.625rem; padding-right: 0.625rem; padding-top: 0.25rem; padding-bottom: 0.25rem; font-family: JetBrains Mono, monospace; font-size: 0.75rem; line-height: 1rem; font-weight: 600; border: 1px solid rgba(0, 255, 136, 0.35); background: rgba(0, 255, 136, 0.1); color: var(--accent2); } /* Back to top button */ .back-to-top { position: fixed; bottom: 1.5rem; right: 1.5rem; z-index: 40; display: flex; height: 2.75rem; width: 2.75rem; align-items: center; justify-content: center; border-radius: 9999px; background: var(--accent); box-shadow: 0 0 12px rgba(var(--accent-rgb), 0.4); transition: background 200ms ease, box-shadow 200ms ease; color: #fff; } .back-to-top:hover { background: var(--accent); filter: brightness(0.85); box-shadow: 0 0 20px var(--accent); } .back-to-top:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } .pointer-events-none { pointer-events: none; } .visible { visibility: visible; } .invisible { visibility: hidden; } .static { position: static; } .fixed { position: fixed; } .absolute { position: absolute; } .relative { position: relative; } .sticky { position: sticky; } .inset-0 { inset: 0px; } .bottom-0 { bottom: 0px; } .left-0 { left: 0px; } .right-0 { right: 0px; } .right-3 { right: 0.75rem; } .right-4 { right: 1rem; } .top-0 { top: 0px; } .top-3 { top: 0.75rem; } .top-4 { top: 1rem; } .z-10 { z-index: 10; } .z-20 { z-index: 20; } .z-40 { z-index: 40; } .z-50 { z-index: 50; } .order-last { order: 9999; } .mx-4 { margin-left: 1rem; margin-right: 1rem; } .mx-auto { margin-left: auto; margin-right: auto; } .my-12 { margin-top: 3rem; margin-bottom: 3rem; } .my-6 { margin-top: 1.5rem; margin-bottom: 1.5rem; } .my-8 { margin-top: 2rem; margin-bottom: 2rem; } .mb-1 { margin-bottom: 0.25rem; } .mb-12 { margin-bottom: 3rem; } .mb-2 { margin-bottom: 0.5rem; } .mb-3 { margin-bottom: 0.75rem; } .mb-4 { margin-bottom: 1rem; } .mb-6 { margin-bottom: 1.5rem; } .mb-8 { margin-bottom: 2rem; } .ml-1 { margin-left: 0.25rem; } .ml-2 { margin-left: 0.5rem; } .mt-0\.5 { margin-top: 0.125rem; } .mt-1 { margin-top: 0.25rem; } .mt-12 { margin-top: 3rem; } .mt-16 { margin-top: 4rem; } .mt-2 { margin-top: 0.5rem; } .mt-20 { margin-top: 5rem; } .mt-3 { margin-top: 0.75rem; } .mt-4 { margin-top: 1rem; } .mt-8 { margin-top: 2rem; } .mt-auto { margin-top: auto; } .line-clamp-1 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; } .line-clamp-3 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; } .block { display: block; } .inline { display: inline; } .flex { display: flex; } .inline-flex { display: inline-flex; } .grid { display: grid; } .hidden { display: none; } .aspect-video { aspect-ratio: 16 / 9; } .h-1 { height: 0.25rem; } .h-3\.5 { height: 0.875rem; } .h-32 { height: 8rem; } .h-4 { height: 1rem; } .h-48 { height: 12rem; } .h-5 { height: 1.25rem; } .h-auto { height: auto; } .h-screen { height: 100vh; } .max-h-40 { max-height: 10rem; } .max-h-96 { max-height: 24rem; } .min-h-\[calc\(100vh-200px\)\] { min-height: calc(100vh - 200px); } .min-h-screen { min-height: 100vh; } .w-1 { width: 0.25rem; } .w-20 { width: 5rem; } .w-3\.5 { width: 0.875rem; } .w-32 { width: 8rem; } .w-4 { width: 1rem; } .w-5 { width: 1.25rem; } .w-full { width: 100%; } .min-w-0 { min-width: 0px; } .max-w-2xl { max-width: 42rem; } .max-w-3xl { max-width: 48rem; } .max-w-4xl { max-width: 56rem; } .max-w-5xl { max-width: 64rem; } .max-w-7xl { max-width: 80rem; } .max-w-lg { max-width: 32rem; } .max-w-md { max-width: 28rem; } .max-w-none { max-width: none; } .max-w-sm { max-width: 24rem; } .flex-1 { flex: 1 1 0%; } .flex-shrink-0 { flex-shrink: 0; } .shrink-0 { flex-shrink: 0; } .translate-x-0 { --tw-translate-x: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-full { --tw-translate-x: 100%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-0 { --tw-translate-y: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-4 { --tw-translate-y: 1rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .cursor-pointer { cursor: pointer; } .resize-none { resize: none; } .resize { resize: both; } .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .flex-col { flex-direction: column; } .flex-wrap { flex-wrap: wrap; } .items-center { align-items: center; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .gap-1 { gap: 0.25rem; } .gap-1\.5 { gap: 0.375rem; } .gap-2 { gap: 0.5rem; } .gap-3 { gap: 0.75rem; } .gap-4 { gap: 1rem; } .gap-8 { gap: 2rem; } .space-y-1 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); } .space-y-2 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } .space-y-3 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); } .space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); } .space-y-6 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); } .space-y-8 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(2rem * var(--tw-space-y-reverse)); } .overflow-hidden { overflow: hidden; } .overflow-y-auto { overflow-y: auto; } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .whitespace-nowrap { white-space: nowrap; } .rounded { border-radius: 0.25rem; } .rounded-full { border-radius: 9999px; } .rounded-lg { border-radius: 0.5rem; } .rounded-b-lg { border-bottom-right-radius: 0.5rem; border-bottom-left-radius: 0.5rem; } .border { border-width: 1px; } .border-2 { border-width: 2px; } .border-4 { border-width: 4px; } .border-b { border-bottom-width: 1px; } .border-l { border-left-width: 1px; } .border-l-2 { border-left-width: 2px; } .border-l-4 { border-left-width: 4px; } .border-t { border-top-width: 1px; } .border-none { border-style: none; } .border-\[--type-quote\] { border-color: var(--type-quote); } .border-accent { border-color: var(--accent); } .border-border { border-color: var(--border); } .bg-accent { background-color: var(--accent); } .bg-bg { background-color: var(--bg); } .bg-black\/50 { background-color: rgb(0 0 0 / 0.5); } .bg-surface { background-color: var(--surface); } .object-cover { -o-object-fit: cover; object-fit: cover; } .p-2 { padding: 0.5rem; } .p-3 { padding: 0.75rem; } .p-4 { padding: 1rem; } .p-6 { padding: 1.5rem; } .p-8 { padding: 2rem; } .px-1 { padding-left: 0.25rem; padding-right: 0.25rem; } .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; } .px-2\.5 { padding-left: 0.625rem; padding-right: 0.625rem; } .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; } .px-4 { padding-left: 1rem; padding-right: 1rem; } .px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } .py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; } .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; } .py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; } .py-12 { padding-top: 3rem; padding-bottom: 3rem; } .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; } .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; } .py-4 { padding-top: 1rem; padding-bottom: 1rem; } .py-8 { padding-top: 2rem; padding-bottom: 2rem; } .pl-3 { padding-left: 0.75rem; } .pl-6 { padding-left: 1.5rem; } .pt-0 { padding-top: 0px; } .pt-2 { padding-top: 0.5rem; } .pt-6 { padding-top: 1.5rem; } .pt-8 { padding-top: 2rem; } .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; } .font-mono { font-family: JetBrains Mono, monospace; } .font-oxanium { font-family: Oxanium, monospace; } .text-2xl { font-size: 1.5rem; line-height: 2rem; } .text-3xl { font-size: 1.875rem; line-height: 2.25rem; } .text-4xl { font-size: 2.25rem; line-height: 2.5rem; } .text-5xl { font-size: 3rem; line-height: 1; } .text-7xl { font-size: 4.5rem; line-height: 1; } .text-lg { font-size: 1.125rem; line-height: 1.75rem; } .text-sm { font-size: 0.875rem; line-height: 1.25rem; } .text-xl { font-size: 1.25rem; line-height: 1.75rem; } .text-xs { font-size: 0.75rem; line-height: 1rem; } .font-bold { font-weight: 700; } .font-medium { font-weight: 500; } .font-semibold { font-weight: 600; } .italic { font-style: italic; } .not-italic { font-style: normal; } .leading-relaxed { line-height: 1.625; } .leading-snug { line-height: 1.375; } .text-accent { color: var(--accent); } .text-accent2 { color: var(--accent2); } .text-bg { color: var(--bg); } .text-text { color: var(--text); } .text-text-dim { color: var(--text-dim); } .text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } .underline { text-decoration-line: underline; } .antialiased { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .placeholder-text-dim::-moz-placeholder { color: var(--text-dim); } .placeholder-text-dim::placeholder { color: var(--text-dim); } .opacity-0 { opacity: 0; } .opacity-100 { opacity: 1; } .opacity-5 { opacity: 0.05; } .shadow { --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-xl { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .outline { outline-style: solid; } .ring { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .backdrop-blur { --tw-backdrop-blur: blur(8px); -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .transition { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-colors { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-shadow { transition-property: box-shadow; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-transform { transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .duration-100 { transition-duration: 100ms; } .duration-200 { transition-duration: 200ms; } .duration-300 { transition-duration: 300ms; } .ease-in { transition-timing-function: cubic-bezier(0.4, 0, 1, 1); } .ease-out { transition-timing-function: cubic-bezier(0, 0, 0.2, 1); } /* Dark theme (default) - CSS custom properties */ :root { --bg: #060b10; --bg2: #0c1520; --bg2-rgb: 12, 21, 32; --surface: #101e2d; --surface-rgb: 16, 30, 45; --border: #182840; --accent: #a855f7; --accent-rgb: 168, 85, 247; --accent2: #00ff88; --accent-glow: rgba(168, 85, 247, 0.12); --text: #c4d6e8; --text-dim: #7a9bb8; --muted: #304860; /* Article type colors - dark */ --type-tech: #a855f7; --type-life: #f59e0b; --type-quote: #00ff88; --type-link: #38bdf8; --type-photo: #ec4899; /* Article type text colors - dark (all black for WCAG AA) */ --type-tech-text: #000000; --type-life-text: #000000; --type-quote-text: #000000; --type-link-text: #000000; --type-photo-text: #000000; /* Callout shortcode colors */ --callout-note: var(--accent); --callout-tip: var(--accent2); --callout-info: var(--type-link); --callout-warning: var(--type-life); --callout-danger: #ef4444; --callout-success: var(--accent2); } /* Light theme overrides */ html.theme-light { --bg: #f0f4f8; --bg2: #e2eaf4; --bg2-rgb: 226, 234, 244; --surface: #d4dff0; --surface-rgb: 212, 223, 240; --border: #a8bdd8; --accent: #7c3aed; --accent-rgb: 124, 58, 237; --accent2: #008f5a; --accent-glow: rgba(124, 58, 237, 0.1); --text: #0d1b2a; --text-dim: #2e4a6a; --muted: #6888a8; /* Article type colors - light */ --type-tech: #7c3aed; --type-life: #d97706; --type-quote: #008f5a; --type-link: #0284c7; --type-photo: #be185d; /* Article type text colors - light (mixed for WCAG AA) */ --type-tech-text: #ffffff; --type-life-text: #000000; --type-quote-text: #000000; --type-link-text: #000000; --type-photo-text: #ffffff; /* Callout shortcode colors */ --callout-danger: #ef4444; } /* No-JS fallback: prefers-color-scheme light */ @media (prefers-color-scheme: light) { html:not(.theme-dark) { --bg: #f0f4f8; --bg2: #e2eaf4; --bg2-rgb: 226, 234, 244; --surface: #d4dff0; --surface-rgb: 212, 223, 240; --border: #a8bdd8; --accent: #7c3aed; --accent-rgb: 124, 58, 237; --accent2: #008f5a; --accent-glow: rgba(124, 58, 237, 0.1); --text: #0d1b2a; --text-dim: #2e4a6a; --muted: #6888a8; --type-tech: #7c3aed; --type-life: #d97706; --type-quote: #008f5a; --type-link: #0284c7; --type-photo: #be185d; --type-tech-text: #ffffff; --type-life-text: #000000; --type-quote-text: #000000; --type-link-text: #000000; --type-photo-text: #ffffff; /* Callout shortcode colors */ --callout-danger: #ef4444; } } /* Theme-aware picture element for default thumbnails */ html.theme-light picture img[src="/images/default_thumbnail_dark.png"] { content: url('/images/default_thumbnail_light.png'); } /* Prose overrides for light theme */ html.theme-light .prose, html.theme-light .prose-invert { color: var(--text); } html.theme-light .prose a, html.theme-light .prose-invert a { color: var(--accent); } html.theme-light .prose strong, html.theme-light .prose-invert strong { color: var(--text); } html.theme-light .prose code, html.theme-light .prose-invert code { color: var(--accent2); } html.theme-light .prose pre, html.theme-light .prose-invert pre { background-color: var(--surface); color: var(--text); } html.theme-light .prose h1, html.theme-light .prose h2, html.theme-light .prose h3, html.theme-light .prose h4, html.theme-light .prose h5, html.theme-light .prose h6, html.theme-light .prose-invert h1, html.theme-light .prose-invert h2, html.theme-light .prose-invert h3, html.theme-light .prose-invert h4, html.theme-light .prose-invert h5, html.theme-light .prose-invert h6 { color: var(--text); } html.theme-light .prose blockquote, html.theme-light .prose-invert blockquote { color: var(--text); border-left-color: var(--accent); } /* Responsive container utilities - mobile-first */ .container { max-width: 100%; padding-left: 1rem; padding-right: 1rem; } @media (min-width: 768px) { .container { max-width: 56rem; padding-left: 1.5rem; padding-right: 1.5rem; } } @media (min-width: 1060px) { .container { max-width: 64rem; padding-left: 2rem; padding-right: 2rem; } } /* Alpine.js x-cloak - hide content until Alpine initializes */ [x-cloak] { display: none !important; } /* Respect user's motion preferences */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } /* Matrix rain canvas background */ #matrix-rain { position: fixed; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 1; } /* Dark theme: 13% opacity (inner pages) */ html.theme-dark #matrix-rain { opacity: 0.13; } /* Light theme: 18% opacity (inner pages) */ html.theme-light #matrix-rain { opacity: 0.18; } /* Homepage: more prominent background */ html.theme-dark body[data-page-kind="home"] #matrix-rain { opacity: 0.28; } html.theme-light body[data-page-kind="home"] #matrix-rain { opacity: 0.35; } /* Reduced motion: hide canvas entirely */ @media (prefers-reduced-motion: reduce) { #matrix-rain { display: none; } } /* Content grid background — blocks rain under text, visible in gutters (single pages only) */ .content-grid { position: relative; z-index: 10; background-color: var(--bg); padding: 2px; border: 1px solid var(--border); box-shadow: 0 0 20px var(--accent-glow); } @media (min-width: 768px) { .content-grid { padding: 2rem; } } /* Article list items — soft glow effect */ article.border.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } /* ============================================ FORM COMPONENTS (Week 4) ============================================ */ /* Form input base styles */ .form-input, .form-textarea, .form-select { width: 100%; border-radius: 0.25rem; border-width: 1px; border-color: var(--border); background-color: var(--bg2); padding-left: 1rem; padding-right: 1rem; padding-top: 0.5rem; padding-bottom: 0.5rem; font-family: IBM Plex Sans, sans-serif; color: var(--text); transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; } article.form-input.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg,article .form-textarea.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg,article .form-select.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } /* Input placeholder styling */ .form-input::-moz-placeholder, .form-textarea::-moz-placeholder { color: var(--text-dim); opacity: 0.7; } .form-input::placeholder, .form-textarea::placeholder { color: var(--text-dim); opacity: 0.7; } /* Input focus state */ .form-input:focus, .form-textarea:focus, .form-select:focus { outline: 2px solid transparent; outline-offset: 2px; --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); --tw-ring-color: var(--accent); --tw-ring-offset-width: 2px; ring-offset-color: var(--bg); border-color: var(--accent); } /* Input invalid/error state */ .form-input:invalid, .form-textarea:invalid, .form-select:invalid, .form-input.error, .form-textarea.error, .form-select.error { --tw-border-opacity: 1; border-color: rgb(239 68 68 / var(--tw-border-opacity, 1)); --tw-ring-opacity: 1; --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1)); } .form-input:invalid:focus, .form-textarea:invalid:focus, .form-select:invalid:focus { --tw-border-opacity: 1; border-color: rgb(239 68 68 / var(--tw-border-opacity, 1)); --tw-ring-opacity: 1; --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1)); ring-offset-color: var(--bg); } /* Input disabled state */ .form-input:disabled, .form-textarea:disabled, .form-select:disabled { cursor: not-allowed; background-color: var(--muted); opacity: 0.5; } /* Textarea specific */ .form-textarea { min-height: 8rem; resize: vertical; } .form-textarea.auto-expand { resize: none; overflow-y: hidden; } /* Select dropdown */ .form-select { cursor: pointer; -webkit-appearance: none; -moz-appearance: none; appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23a855f7' d='M6 9L1 4h10z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.75rem center; padding-right: 2.5rem; } html.theme-light .form-select { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239333ea' d='M6 9L1 4h10z'/%3E%3C/svg%3E"); } /* Checkbox and radio button base */ .form-checkbox, .form-radio { height: 1.25rem; width: 1.25rem; cursor: pointer; accent-color: var(--accent); transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; -webkit-appearance: none; -moz-appearance: none; appearance: none; border: 2px solid var(--border); border-radius: 0.375rem; flex-shrink: 0; } .form-radio { border-radius: 50%; } /* Checkbox/radio focus state */ .form-checkbox:focus-visible, .form-radio:focus-visible { outline: 2px solid transparent; outline-offset: 2px; --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); --tw-ring-color: var(--accent); --tw-ring-offset-width: 2px; ring-offset-color: var(--bg); } /* Checkbox/radio checked state */ .form-checkbox:checked, .form-radio:checked { background-color: var(--accent); border-color: var(--accent); background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: center; background-size: 100%; } .form-radio:checked { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3.5'/%3E%3C/svg%3E"); } /* Checkbox/radio disabled state */ .form-checkbox:disabled, .form-radio:disabled { cursor: not-allowed; opacity: 0.5; border-color: var(--muted); } /* Form group layout */ .form-group > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } .form-group label { display: block; font-size: 0.875rem; line-height: 1.25rem; font-weight: 600; color: var(--text); } .form-group.required label::after { content: ' *'; color: #ef4444; } .form-group-input { position: relative; } .form-group-help { font-size: 0.75rem; line-height: 1rem; color: var(--text-dim); } .form-group.error .form-group-help { --tw-text-opacity: 1; color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } .form-error { margin-top: 0.25rem; font-size: 0.875rem; line-height: 1.25rem; --tw-text-opacity: 1; color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } /* Form layout utilities */ .form-row { display: flex; flex-direction: column; gap: 1rem; } @media (min-width: 768px) { .form-row { flex-direction: row; } } .form-row > .form-group { flex: 1 1 0%; } .form-inline { display: flex; flex-direction: column; align-items: flex-end; gap: 1rem; } @media (min-width: 640px) { .form-inline { flex-direction: row; } } .form-inline .form-group { flex: 1 1 0%; } .form-inline .btn { height: 2.5rem; } /* Character count indicator */ .form-char-count { text-align: right; font-size: 0.75rem; line-height: 1rem; color: var(--text-dim); } .form-char-count.warning { --tw-text-opacity: 1; color: rgb(245 158 11 / var(--tw-text-opacity, 1)); } .form-char-count.error { --tw-text-opacity: 1; color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } /* ============================================ FOCUS MANAGEMENT (Week 5) ============================================ */ /* Enhanced :focus-visible with accent color styling */ :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } /* Respect motion preferences for focus indicator */ @media (prefers-reduced-motion: reduce) { :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } } /* Button and link hover/focus transitions */ button, a.btn, .btn { transition: all 150ms ease-out; } button:hover, a.btn:hover, .btn:hover { opacity: 0.8; transform: translateY(-1px); } button:active, a.btn:active, .btn:active { transform: translateY(0); } /* Form input focus transitions with glow effect */ input, textarea, select { transition: all 200ms ease-out; } input:focus, textarea:focus, select:focus, input:focus-visible, textarea:focus-visible, select:focus-visible { box-shadow: 0 0 0 3px rgba(var(--accent-rgb), 0.1); } /* ============================================ MODAL COMPONENTS (Week 4) ============================================ */ /* Modal backdrop */ .modal-backdrop { visibility: hidden; position: fixed; inset: 0px; z-index: 40; background-color: rgb(0 0 0 / 0.5); opacity: 0; transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 300ms; -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); } .modal-backdrop.active { visibility: visible; opacity: 1; } /* Modal container */ .modal { visibility: hidden; position: fixed; inset: 0px; z-index: 50; display: flex; align-items: center; justify-content: center; padding: 1rem; opacity: 0; transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 300ms; pointer-events: none; } .modal.active { visibility: visible; opacity: 1; pointer-events: auto; } .modal.active .modal-backdrop { visibility: visible; opacity: 1; pointer-events: auto; } /* Modal content box */ .modal-content { display: flex; max-height: 90vh; width: 100%; max-width: 32rem; flex-direction: column; border-radius: 0.5rem; border-width: 1px; border-color: var(--border); background-color: var(--bg2); --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } article.modal-content.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } article.border.border-border\/30.modal-content.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } .modal-content { box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5); animation: modalSlideUp 0.3s ease-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes modalSlideUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } /* Modal header */ .modal-header { border-color: var(--border); } .frosted-bar.modal-header { border-color: var(--border); } .modal-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; border-bottom-width: 1px; border-color: var(--border); padding: 1.5rem; } .modal-title { font-size: 1.25rem; line-height: 1.75rem; font-weight: 700; color: var(--text); } .modal-close { display: flex; height: 2rem; width: 2rem; cursor: pointer; align-items: center; justify-content: center; border-radius: 0.25rem; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .modal-close:hover { background-color: var(--surface); } .modal-close::before, .modal-close::after { content: ''; position: absolute; height: 0.125rem; width: 1.25rem; background-color: var(--text-dim); } .modal-close::before { transform: rotate(45deg); } .modal-close::after { transform: rotate(-45deg); } .modal-close:hover::before, .modal-close:hover::after { background-color: var(--accent); } /* Modal body */ .modal-body { flex: 1 1 0%; } .modal-body > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); } .modal-body { overflow-y: auto; padding: 1.5rem; } /* Modal footer */ .modal-footer { border-color: var(--border); } .frosted-bar.modal-footer { border-color: var(--border); } .modal-footer { display: flex; align-items: center; justify-content: flex-end; gap: 0.75rem; border-top-width: 1px; border-color: var(--border); padding: 1.5rem; } /* Modal sizes */ .modal-content.modal-sm { max-width: 24rem; } .modal-content.modal-md { max-width: 28rem; } .modal-content.modal-lg { max-width: 42rem; } /* Modal variants */ .modal-content.modal-alert { max-width: 24rem; } .modal-content.modal-confirm { max-width: 24rem; } /* Modal button styling */ .modal-footer .btn { min-width: 100px; } /* ============================================ INTERACTIVE PATTERNS (Week 4) ============================================ */ /* Loading spinner */ .spinner { display: inline-block; width: 1rem; height: 1rem; border: 2px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: spin 0.6s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .spinner-sm { width: 0.75rem; height: 0.75rem; border-width: 1.5px; } .spinner-lg { width: 1.5rem; height: 1.5rem; border-width: 3px; } /* Button with spinner */ .btn:disabled .spinner { margin-right: 0.5rem; display: inline-block; } /* Toast notification container */ .toast-container { position: fixed; bottom: 0px; right: 0px; z-index: 50; max-width: 24rem; } .toast-container > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); } .toast-container { padding: 1rem; } @media (max-width: 640px) { .toast-container { left: 0px; right: 0px; padding-left: 1rem; padding-right: 1rem; } } /* Toast base */ .toast { display: flex; align-items: flex-start; gap: 0.75rem; border-radius: 0.5rem; border-width: 1px; border-color: var(--border); padding: 1rem; --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } article.border.border-border\/30.toast.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } article.toast.border-border\/30.rounded-lg.overflow-hidden.group.bg-bg { border-color: var(--border); box-shadow: 0 0 20px var(--accent-glow); } .toast { animation: slideInUp 0.3s ease-out; background-color: var(--bg2); color: var(--text); } @keyframes slideInUp { from { transform: translateY(100%); opacity: 0; } to { transform: translateY(0); opacity: 1; } } /* Animation Utility Classes */ .animate-fade-in { animation: fadeIn 300ms ease-out; } .animate-slide-up { animation: slideUp 300ms ease-out; } .animate-spin-loader { animation: spin 600ms linear infinite; } /* Toast variants */ .toast-success { border-color: #10b981; background-color: rgba(16, 185, 129, 0.1); } .toast-success::before { content: '✓'; color: #10b981; font-weight: bold; flex-shrink: 0; } .toast-error { border-color: #ef4444; background-color: rgba(239, 68, 68, 0.1); } .toast-error::before { content: '✕'; color: #ef4444; font-weight: bold; flex-shrink: 0; } .toast-info { border-color: #3b82f6; background-color: rgba(59, 130, 246, 0.1); } .toast-info::before { content: 'ℹ'; color: #3b82f6; flex-shrink: 0; } .toast-warning { border-color: #f59e0b; background-color: rgba(245, 158, 11, 0.1); } .toast-warning::before { content: '⚠'; color: #f59e0b; flex-shrink: 0; } .toast-close { margin-left: auto; display: flex; height: 1.5rem; width: 1.5rem; flex-shrink: 0; cursor: pointer; align-items: center; justify-content: center; border-radius: 0.25rem; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .toast-close:hover { background-color: var(--surface); } /* Tooltip */ .tooltip { position: relative; display: inline-block; } .tooltip-text { pointer-events: none; visibility: hidden; position: absolute; white-space: nowrap; border-radius: 0.25rem; background-color: var(--bg2); padding-left: 0.5rem; padding-right: 0.5rem; padding-top: 0.25rem; padding-bottom: 0.25rem; font-size: 0.75rem; line-height: 1rem; color: var(--text-dim); opacity: 0; transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; z-index: 50; bottom: 125%; left: 50%; transform: translateX(-50%); } .tooltip:hover .tooltip-text { visibility: visible; opacity: 1; } .tooltip-text::after { content: ''; position: absolute; height: 0.5rem; width: 0.5rem; background-color: var(--bg2); bottom: -4px; left: 50%; transform: translateX(-50%) rotate(45deg); } /* Tooltip directions */ .tooltip-bottom .tooltip-text { top: 125%; bottom: auto; } .tooltip-bottom .tooltip-text::after { top: -4px; bottom: auto; transform: translateX(-50%) rotate(225deg); } .tooltip-left .tooltip-text { left: auto; right: 125%; transform: none; } .tooltip-left .tooltip-text::after { left: auto; right: -4px; transform: rotate(135deg); } .tooltip-right .tooltip-text { left: 125%; transform: none; } .tooltip-right .tooltip-text::after { left: -4px; right: auto; transform: rotate(315deg); } /* Obsolete article banner */ .banner-obsolete { margin: 1.5rem 0; padding: 1rem 1.25rem; border-left: 4px solid var(--type-life); border-radius: 0.5rem; background-color: rgba(245, 158, 11, 0.08); } .banner-obsolete__inner { display: flex; align-items: flex-start; gap: 0.75rem; color: var(--type-life); } .banner-obsolete__inner svg { flex-shrink: 0; margin-top: 0.125rem; color: var(--type-life); } .banner-obsolete__body { display: flex; flex-direction: column; gap: 0.75rem; flex: 1; } .banner-obsolete__body p { color: var(--text); font-size: 0.9rem; margin: 0; } .banner-obsolete__cta { display: inline-flex; align-items: center; gap: 0.5rem; align-self: center; padding: 0.4rem 1rem; border: 1px solid var(--type-life); border-radius: 0.375rem; color: var(--type-life); font-size: 0.875rem; font-weight: 500; text-decoration: none; transition: background-color 0.2s; } .banner-obsolete__cta:hover { background-color: rgba(245, 158, 11, 0.12); } /* Light theme override — #d97706 passes WCAG AA on white */ html.theme-light .banner-obsolete { background-color: rgba(217, 119, 6, 0.07); border-left-color: var(--type-life); } /* ============================================================ Callout Shortcode ============================================================ */ .callout { position: relative; margin-top: 1.5rem; margin-bottom: 1.5rem; border-top-right-radius: 0.375rem; border-bottom-right-radius: 0.375rem; padding-top: 0.75rem; padding-bottom: 0.75rem; padding-left: 1rem; padding-right: 1rem; } .callout::after { content: ''; position: absolute; bottom: 0; left: 0; width: 50%; height: 1px; background: linear-gradient(to right, var(--callout-color), transparent); } .callout-title { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.375rem; } .callout-title span { font-family: var(--font-mono, 'JetBrains Mono', monospace); font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--callout-color); } .callout-title svg, .callout-title i { width: 14px; height: 14px; color: var(--callout-color); flex-shrink: 0; } .callout-body { color: var(--text); font-size: 0.875rem; line-height: 1.6; } .callout-body p:last-child { margin-bottom: 0; } /* Type variants - sets --callout-color for border, title, icon, and ::after gradient */ .callout-note { --callout-color: var(--callout-note); border-left: 4px solid var(--callout-note); background: rgba(168, 85, 247, 0.08); } .callout-tip { --callout-color: var(--callout-tip); border-left: 4px solid var(--callout-tip); background: rgba(0, 255, 136, 0.08); } .callout-info { --callout-color: var(--callout-info); border-left: 4px solid var(--callout-info); background: rgba(56, 189, 248, 0.08); } .callout-warning { --callout-color: var(--callout-warning); border-left: 4px solid var(--callout-warning); background: rgba(245, 158, 11, 0.08); } .callout-danger { --callout-color: var(--callout-danger); border-left: 4px solid var(--callout-danger); background: rgba(239, 68, 68, 0.08); } .callout-success { --callout-color: var(--callout-success); border-left: 4px solid var(--callout-success); background: rgba(0, 255, 136, 0.08); } /* Light mode - reduce opacity to 0.06 per theming standard */ html.theme-light .callout-note { background: rgba(124, 58, 237, 0.06); } html.theme-light .callout-tip { background: rgba(0, 143, 90, 0.06); } html.theme-light .callout-info { background: rgba(2, 132, 199, 0.06); } html.theme-light .callout-warning { background: rgba(217, 119, 6, 0.06); } html.theme-light .callout-danger { background: rgba(239, 68, 68, 0.06); } html.theme-light .callout-success { background: rgba(0, 143, 90, 0.06); } /* Motion Safety - Respect prefers-reduced-motion */ @media (prefers-reduced-motion: reduce) { /* Remove all animations */ *, *::before, *::after { animation: none !important; transition: none !important; } /* Ensure focus-visible is still visible */ :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } } /* Twemoji inline emoji sizing */ .prose img.emoji { display: inline-block; height: 1em; width: 1em; vertical-align: -0.1em; margin: 0; } .hover\:bg-surface:hover { background-color: var(--surface); } .hover\:text-accent:hover { color: var(--accent); } .hover\:text-accent2:hover { color: var(--accent2); } .hover\:text-text:hover { color: var(--text); } .group:hover .group-hover\:text-accent { color: var(--accent); } @media (prefers-color-scheme: dark) { .dark\:prose-invert { --tw-prose-body: var(--tw-prose-invert-body); --tw-prose-headings: var(--tw-prose-invert-headings); --tw-prose-lead: var(--tw-prose-invert-lead); --tw-prose-links: var(--tw-prose-invert-links); --tw-prose-bold: var(--tw-prose-invert-bold); --tw-prose-counters: var(--tw-prose-invert-counters); --tw-prose-bullets: var(--tw-prose-invert-bullets); --tw-prose-hr: var(--tw-prose-invert-hr); --tw-prose-quotes: var(--tw-prose-invert-quotes); --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders); --tw-prose-captions: var(--tw-prose-invert-captions); --tw-prose-kbd: var(--tw-prose-invert-kbd); --tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows); --tw-prose-code: var(--tw-prose-invert-code); --tw-prose-pre-code: var(--tw-prose-invert-pre-code); --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg); --tw-prose-th-borders: var(--tw-prose-invert-th-borders); --tw-prose-td-borders: var(--tw-prose-invert-td-borders); } .dark\:hover\:text-text:hover { color: var(--text); } } .first-letter\:text-3xl::first-letter { font-size: 1.875rem; line-height: 2.25rem; } .hover\:bg-surface:hover { background-color: var(--surface); } .hover\:text-accent:hover { color: var(--accent); } .hover\:text-accent2:hover { color: var(--accent2); } .hover\:text-text:hover { color: var(--text); } .hover\:underline:hover { text-decoration-line: underline; } .hover\:opacity-80:hover { opacity: 0.8; } .hover\:opacity-90:hover { opacity: 0.9; } .hover\:shadow-lg:hover { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .focus\:not-sr-only:focus { position: static; width: auto; height: auto; padding: 0; margin: 0; overflow: visible; clip: auto; white-space: normal; } .focus\:fixed:focus { position: fixed; } .focus\:left-4:focus { left: 1rem; } .focus\:top-4:focus { top: 1rem; } .focus\:z-50:focus { z-index: 50; } .focus\:rounded:focus { border-radius: 0.25rem; } .focus\:border-accent:focus { border-color: var(--accent); } .focus\:border-transparent:focus { border-color: transparent; } .focus\:bg-accent:focus { background-color: var(--accent); } .focus\:px-4:focus { padding-left: 1rem; padding-right: 1rem; } .focus\:py-2:focus { padding-top: 0.5rem; padding-bottom: 0.5rem; } .focus\:text-white:focus { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; } .focus\:ring-1:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus\:ring-2:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus\:ring-accent:focus { --tw-ring-color: var(--accent); } .disabled\:cursor-not-allowed:disabled { cursor: not-allowed; } .disabled\:opacity-50:disabled { opacity: 0.5; } .group:hover .group-hover\:scale-105 { --tw-scale-x: 1.05; --tw-scale-y: 1.05; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .group:hover .group-hover\:text-accent { color: var(--accent); } @media (min-width: 640px) { .sm\:flex-row { flex-direction: row; } } @media (min-width: 768px) { .md\:order-none { order: 0; } .md\:col-span-1 { grid-column: span 1 / span 1; } .md\:col-span-2 { grid-column: span 2 / span 2; } .md\:inline { display: inline; } .md\:flex { display: flex; } .md\:hidden { display: none; } .md\:h-48 { height: 12rem; } .md\:w-48 { width: 12rem; } .md\:max-w-\[45\%\] { max-width: 45%; } .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .md\:gap-6 { gap: 1.5rem; } .md\:text-4xl { font-size: 2.25rem; line-height: 2.5rem; } .md\:text-5xl { font-size: 3rem; line-height: 1; } .md\:text-6xl { font-size: 3.75rem; line-height: 1; } .md\:text-8xl { font-size: 6rem; line-height: 1; } } @media (prefers-color-scheme: dark) { .dark\:hover\:text-text:hover { color: var(--text); } }