/* ============================================================
   Font faces
   ============================================================ */
@font-face {
    font-family: 'Adwaita Sans';
    src: url('/fonts/adwaita/AdwaitaSans-Regular.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Adwaita Sans';
    src: url('/fonts/adwaita/AdwaitaSans-Italic.ttf') format('truetype');
    font-weight: normal;
    font-style: italic;
    font-display: swap;
}

@font-face {
    font-family: 'Adwaita Mono';
    src: url('/fonts/adwaita/AdwaitaMono-Regular.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Adwaita Mono';
    src: url('/fonts/adwaita/AdwaitaMono-Italic.ttf') format('truetype');
    font-weight: normal;
    font-style: italic;
    font-display: swap;
}

@font-face {
    font-family: 'Adwaita Mono';
    src: url('/fonts/adwaita/AdwaitaMono-Bold.ttf') format('truetype');
    font-weight: bold;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Adwaita Mono';
    src: url('/fonts/adwaita/AdwaitaMono-BoldItalic.ttf') format('truetype');
    font-weight: bold;
    font-style: italic;
    font-display: swap;
}

@font-face {
    font-family: 'Fira Code';
    src: url('/fonts/firacode/FiraCode-Regular.woff2') format('woff2');
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Fira Code';
    src: url('/fonts/firacode/FiraCode-Bold.woff2') format('woff2');
    font-weight: bold;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Press Start 2P';
    src: url('/fonts/pressstart2p/PressStart2P-Regular.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}

/* ============================================================
   Design tokens
   ============================================================ */
:root {
    --color-bg: #fafaf7;
    --color-surface: #f0efe8;
    --color-surface-hover: #e4e3dc;
    --color-text: #1a1a1a;
    --color-text-muted: #666;
    --color-text-subtle: #888;
    --color-text-faint: #aaa;
    --color-text-secondary: #555;
    --color-border: #e5e5e0;
    --color-border-soft: rgba(26, 26, 26, 0.12);
    --color-border-faint: rgba(26, 26, 26, 0.1);
    --color-link: #0969da;
    --color-inverse-bg: #000;
    --color-inverse-fg: #fff;
    --color-accent-hover: #00FF00;
    --color-admin-bg: #f4f4f4;
    --color-admin-border: #ddd;
    --color-quote-border: #c0c0c0;

    --content-max-width: 880px;
    --content-padding-x: 1.25rem;

    --radius-sm: 4px;
    --radius-md: 5px;
    --radius-lg: 8px;
    --radius-pill: 999px;

    --font-body: system-ui;
    --font-mono: ui-monospace, monospace;
    --font-logo: "Press Start 2P", monospace;
}

/* ============================================================
   Base
   ============================================================ */
html {
    background-color: var(--color-bg);
}

body {
    color: var(--color-text);
    margin: 0;
    font-size: clamp(1rem, 2.5cqi, 1.4rem);
    line-height: 1.65;
    font-family: var(--font-body);
    -webkit-font-smoothing: antialiased;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

code, pre, kbd, samp {
    font-family: var(--font-mono);
}

a {
    color: var(--color-link);
    text-decoration: none;
}

a:hover {
    text-decoration: underline;
    text-underline-offset: 3px;
}

blockquote {
    border-left: 3px solid var(--color-quote-border);
    padding-left: 1rem;
    margin-left: 0;
    color: var(--color-text-secondary);
}

/* ============================================================
   Layout
   ============================================================ */
.page {
    max-width: var(--content-max-width);
    width: 100%;
    margin: 0 auto;
    padding: 1rem var(--content-padding-x) 0;
    box-sizing: border-box;
    container-type: inline-size;
    flex: 1;
}

/* ============================================================
   Admin bar
   ============================================================ */
.admin-bar {
    background: var(--color-admin-bg);
    border-bottom: 1px solid var(--color-admin-border);
    color: var(--color-text-secondary);
}

.admin-bar-inner {
    max-width: var(--content-max-width);
    margin: 0 auto;
    padding: 0.5rem var(--content-padding-x);
    box-sizing: border-box;
}

.admin-bar a {
    margin-left: 0.25rem;
}

/* ============================================================
   Site header
   ============================================================ */
.site-header-inner {
    max-width: var(--content-max-width);
    margin: 0 auto;
    padding: 1.25rem var(--content-padding-x) 0.75rem;
    box-sizing: border-box;
}

.site-header-inner > p {
    margin: 0;
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
}

.site-header-inner > p.byline {
    display: block;
    color: var(--color-text-muted);
    margin: 0.75rem 0 0;
}

.site-divider {
    border: 0;
    border-top: 1px solid var(--color-border);
    margin: 0;
}

a.logo,
a.logo:visited {
    color: var(--color-inverse-fg);
    background: var(--color-inverse-bg);
    padding: 0.4rem 0.75rem;
    border-radius: var(--radius-sm);
    font-family: var(--font-logo);
    font-size: 1.5rem;
    font-style: normal;
    font-weight: normal;
    letter-spacing: 0.02em;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
}

a.logo:hover {
    color: var(--color-accent-hover);
    text-decoration: none;
}

.logo-mark {
    display: block;
    width: 1.4em;
    height: 1.4em;
}

a.email,
a.email:visited {
    color: var(--color-text-subtle);
    font-weight: normal;
    text-decoration: none;
}

a.email:hover {
    color: var(--color-link);
    text-decoration: underline;
}

/* ============================================================
   Main content
   ============================================================ */
main h2 {
    font-size: inherit;
    font-weight: 800;
    letter-spacing: -0.02ch;
    line-height: 1.1;
    margin: 2rem 0 0.75rem;
    text-transform: capitalize;
}

main h2:first-of-type {
    margin-top: 0;
}

main ul,
main ol {
    padding-left: 1.5rem;
    margin: 1rem 0;
}

main li {
    padding: 0.2rem 0;
}

main li::marker {
    color: var(--color-text-subtle);
}

/* ============================================================
   Notes list
   ============================================================ */
ul.notes-list,
main ul.notes-list,
main ol.notes-list {
    list-style: none;
    padding: 0;
    margin: 0;
}

ul.notes-list li {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 1rem;
    padding: 0.45rem 0;
    border-bottom: 1px solid var(--color-border);
}

ul.notes-list li:last-child {
    border-bottom: 0;
}

ul.notes-list time {
    color: var(--color-text-subtle);
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.note-row-main {
    display: flex;
    align-items: baseline;
    gap: 0.75rem 0.6rem;
    flex-wrap: wrap;
    min-width: 0;
    padding-bottom: 0.5rem;
}

.notes-list .note-row-main a {
    text-transform: capitalize;
}

/* ============================================================
   Single note
   ============================================================ */
.note h1 {
    font-size: 2em;
    font-weight: 800;
    letter-spacing: -0.02ch;
    line-height: 1.1;
    margin-bottom: 0.25rem;
    text-wrap: balance;
    hyphens: auto;
    text-transform: capitalize;
    background: linear-gradient(to bottom, #3B0764, #581C87);
    background-clip: text;
    color: transparent;
}

.note-meta {
    color: var(--color-text-subtle);
    margin: 0 0 1.5rem;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.note-byline {
    color: var(--color-text-subtle);
    margin-left: 0.75rem;
}

.note-actions {
    margin: 0 0 1rem;
}

.note-disclaimer {
    clear: both;
    color: var(--color-text-faint);
    font-style: italic;
    line-height: 1.4;
    margin: 3rem 0 1.5rem;
}

.note-image {
    float: right;
    width: 360px;
    max-width: 50%;
    height: auto;
    margin: 0.5rem 0 1.5rem 2rem;
    border-radius: var(--radius-sm);
}

/* ============================================================
   Tags
   ============================================================ */
.tags {
    display: inline-flex;
    gap: 0.35rem;
    flex-wrap: wrap;
}

.note > .tags {
    display: flex;
    margin: 0.75rem 0 1.25rem;
}

.tag {
    display: inline-block;
    padding: 0.1rem 0.55rem;
    background: var(--color-surface);
    color: var(--color-text-secondary);
    border-radius: var(--radius-pill);
    font-size: 0.7em;
    letter-spacing: 0.02em;
    text-transform: lowercase;
    text-decoration: none;
}

a.tag:hover {
    background: var(--color-surface-hover);
    color: var(--color-text);
    text-decoration: none;
}

.tag--heading {
    padding: 0.15rem 0.75rem;
    vertical-align: middle;
}

/* ============================================================
   Pagination
   ============================================================ */
.pagination {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin: 2rem 0 0;
}

.pagination .disabled {
    color: var(--color-text-faint);
}

/* ============================================================
   Code & tables
   ============================================================ */
pre {
    display: inline-block;
    max-width: 100%;
    background: var(--color-surface);
    color: var(--color-text);
    padding: 0.6rem 0.85rem;
    border-radius: var(--radius-lg);
    border: 1px solid var(--color-border-soft);
    white-space: pre-wrap;
    word-break: break-word;
    overflow-wrap: anywhere;
    vertical-align: middle;
    font-weight: bold;
}

code {
    background: var(--color-surface);
    color: var(--color-text);
    padding: 0.15rem 0.45rem;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-border-soft);
    font-weight: bold;
}

table {
    width: 100%;
    border-collapse: collapse;
    margin: 1rem 0;
}

table tr + tr {
    border-top: 1px solid var(--color-border-faint);
}

table td {
    padding: 0.6rem 0.75rem;
    vertical-align: top;
    word-break: break-word;
    overflow-wrap: anywhere;
}

table td:first-child {
    white-space: nowrap;
    color: var(--color-text-secondary);
    font-family: var(--font-mono);
}

/* ============================================================
   Site footer
   ============================================================ */
.site-footer {
    margin-top: 1.5rem;
    background: var(--color-bg);
    color: var(--color-text-faint);
    border-top: 1px solid var(--color-border);
    font-size: 0.7em;
    line-height: 1.5;
}

.site-footer-inner {
    max-width: var(--content-max-width);
    margin: 0 auto;
    padding: 1rem var(--content-padding-x);
    box-sizing: border-box;
}

.site-footer-inner p {
    margin: 0;
}

.site-footer-inner p::after {
    content: "_";
    margin-left: 0.15em;
    animation: cursor-blink 1.1s ease-in-out infinite;
}

@keyframes cursor-blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0; }
}

/* ============================================================
   Turbo / view transitions
   ============================================================ */
turbo-frame {
    opacity: 1;
    transition: opacity 0.15s ease-in-out;
}

turbo-frame[busy] {
    opacity: 0.5;
}

::view-transition-old(root),
::view-transition-new(root) {
    animation-duration: 0.3s;
}

/* ============================================================
   Utilities
   ============================================================ */
.center {
    text-align: center;
}

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width: 640px) {
    .note-image {
        float: none;
        display: block;
        width: 100%;
        max-width: 100%;
        margin: 1rem 0 1.5rem;
    }
}
