diff --git a/TODO.md b/TODO.md index 21b2d7a..be25b56 100644 --- a/TODO.md +++ b/TODO.md @@ -2,6 +2,7 @@ ## Done - [x] Bump all font sizes ~10% across all CSS files (admin, system, search, main, apropos, common, tfe) +- [x] Migrate to utopia fluid type scale (--step--2 → --step-5) and space scale (--space-3xs → --space-3xl) across all CSS files - [x] Split search logic into search.php - [x] `public/search.php` — new page for text-query search results - [x] `public/repertoire.php` — stripped to répertoire index only diff --git a/public/assets/css/admin.css b/public/assets/css/admin.css index fd0c8e3..8ea12de 100644 --- a/public/assets/css/admin.css +++ b/public/assets/css/admin.css @@ -32,18 +32,18 @@ .admin-body main { flex: 1; - padding: 2.5rem 2rem 4rem; + padding: var(--space-l) var(--space-l) var(--space-2xl); max-width: 1100px; width: 100%; margin-inline: auto; } .admin-body main > h1 { - font-size: 1.98rem; + font-size: var(--step-2); font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; - margin: 0 0 2.5rem 0; + margin: 0 0 var(--space-l) 0; } /* ── Forms ─────────────────────────────────────────────────────────────── */ @@ -58,8 +58,8 @@ grid-template-columns: 260px 1fr; align-items: start; border-top: 1px solid var(--border-primary); - padding: 0.75rem 0; - gap: 1rem; + padding: var(--space-xs) 0; + gap: var(--space-s); } .admin-form > div:not(.admin-form-footer):last-of-type { @@ -68,8 +68,8 @@ .admin-form > div:not(.admin-form-footer) > label, .admin-form > div:not(.admin-form-footer) > span.admin-row-label { - font-size: 1.01rem; - padding-top: 0.5rem; + font-size: var(--step--1); + padding-top: var(--space-2xs); font-weight: 400; } @@ -86,9 +86,9 @@ background: transparent; border: none; border-bottom: 1px solid var(--border-primary); - font-size: 1.01rem; + font-size: var(--step--1); font-family: inherit; - padding: 0.4rem 0; + padding: var(--space-3xs) 0; border-radius: 0; transition: border-color 0.15s; -webkit-appearance: none; @@ -109,7 +109,7 @@ .admin-form input::placeholder, .admin-form textarea::placeholder { - font-size: 0.97rem; + font-size: var(--step--1); color: var(--text-tertiary); } @@ -133,14 +133,14 @@ .admin-file-input { display: flex; flex-direction: column; - gap: 0.25rem; + gap: var(--space-3xs); } .admin-file-input input[type="file"] { - font-size: 0.94rem; + font-size: var(--step--1); background: transparent; border: 1px dashed var(--border-primary); - padding: 0.4rem 0.6rem; + padding: var(--space-3xs) var(--space-2xs); border-radius: 3px; cursor: pointer; font-family: inherit; @@ -151,16 +151,13 @@ } .admin-body form small { - font-size: 0.86rem; + font-size: var(--step--2); color: var(--text-secondary); - margin-top: 0.15rem; + margin-top: var(--space-3xs); display: block; } -/* Checkbox group fieldset (languages, formats) - Wraps the
directly inside the card link, below the media */ .home-body li > a > p { - padding: 0.55rem 0.75rem 0.65rem; - font-size: 0.97rem; + padding: var(--space-2xs) var(--space-xs) var(--space-xs); + font-size: var(--step--1); line-height: 1.35; color: var(--text-primary); margin: 0; @@ -161,9 +161,9 @@ /* Empty-state message shown when no cards exist */ .cards-empty { - padding: 2rem; + padding: var(--space-l); color: var(--text-tertiary); - font-size: 0.99rem; + font-size: var(--step--1); list-style: none; } @@ -171,21 +171,21 @@ .filter-info { background: var(--accent-muted); color: var(--accent-secondary); - padding: 0.4rem 1.5rem; - font-size: 0.94rem; + padding: var(--space-3xs) var(--space-s); + font-size: var(--step--1); display: flex; align-items: center; - gap: 1rem; + gap: var(--space-s); flex-shrink: 0; } .clear-filter { color: var(--accent-secondary); text-decoration: none; - padding: 0.15rem 0.6rem; + padding: var(--space-3xs) var(--space-2xs); background: var(--accent-muted); border-radius: 3px; - font-size: 0.9rem; + font-size: var(--step--1); } .clear-filter:hover { @@ -203,8 +203,8 @@ display: flex; justify-content: center; align-items: center; - gap: 0.5rem; - padding: 1rem; + gap: var(--space-2xs); + padding: var(--space-s); list-style: none; margin: 0; } @@ -215,11 +215,11 @@ justify-content: center; min-width: 2.75rem; min-height: 2.75rem; - padding: 0 0.6rem; + padding: 0 var(--space-2xs); border: 1px solid var(--border-secondary); border-radius: 3px; color: var(--text-primary); - font-size: 0.99rem; + font-size: var(--step--1); text-decoration: none; transition: all 0.15s; } @@ -236,9 +236,9 @@ } .pagination-info { - font-size: 0.99rem; + font-size: var(--step--1); color: var(--text-secondary); - padding: 0 0.5rem; + padding: 0 var(--space-2xs); } .page-current { diff --git a/public/assets/css/search.css b/public/assets/css/search.css index 7a29cf6..37aff92 100644 --- a/public/assets/css/search.css +++ b/public/assets/css/search.css @@ -23,14 +23,14 @@ display: grid; grid-template-columns: 0.7fr 1.2fr 1.4fr 0.9fr 1.4fr 1fr; gap: 0; - padding: 0 1.5rem; + padding: 0 var(--space-m); min-height: 100%; } @media (max-width: 1024px) { .repertoire-index { grid-template-columns: 1fr 1fr 1fr; - padding: 0 1rem; + padding: 0 var(--space-s); min-height: auto; } @@ -47,14 +47,14 @@ @media (max-width: 600px) { .repertoire-index { grid-template-columns: 1fr; - padding: 0 1rem; + padding: 0 var(--space-s); min-height: auto; } .repertoire-col { border-right: none; border-bottom: 1px solid var(--border-primary); - padding: 1rem 0 1.25rem; + padding: var(--space-s) 0 var(--space-m); } .repertoire-col:last-child { @@ -63,7 +63,7 @@ } .repertoire-col { - padding: 0.75rem 0.5rem 2rem; + padding: var(--space-xs) var(--space-2xs) var(--space-l); border-right: 1px solid var(--border-secondary); } @@ -72,13 +72,13 @@ } .repertoire-index section > h2 { - font-size: 0.79rem; + font-size: var(--step--2); letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-secondary); font-weight: 400; - margin: 0 0 0.5rem 0; - padding-bottom: 0.4rem; + margin: 0 0 var(--space-2xs) 0; + padding-bottom: var(--space-3xs); border-bottom: 1px solid var(--border-secondary); } @@ -96,10 +96,10 @@ text-align: left; background: none; border: none; - padding: 0.1rem 0; + padding: var(--space-3xs) 0; margin: 0; font-family: inherit; - font-size: 1.04rem; + font-size: var(--step-0); color: var(--text-primary); line-height: 1.4; cursor: pointer; @@ -130,18 +130,18 @@ /* Years column — big bold numbers */ .repertoire-col[data-col="years"] .rep-entry { - font-size: 2.42rem; + font-size: var(--step-3); font-weight: 700; line-height: 1.1; letter-spacing: -0.02em; - padding: 0.05rem 0; + padding: var(--space-3xs) 0; } /* Empty state in students column */ .rep-empty { color: var(--text-tertiary); - font-size: 0.99rem; - padding: 0.1rem 0; + font-size: var(--step--1); + padding: var(--space-3xs) 0; } /* ---- HTMX loading indicator ---- */ @@ -173,18 +173,18 @@ /* ---- Search results view (grid) ---- */ .search-results-header { display: block; - font-size: 0.94rem; + font-size: var(--step--1); color: var(--text-secondary); - margin: 1rem 1.5rem 0.5rem; + margin: var(--space-s) var(--space-m) var(--space-2xs); } .results-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: 1.5rem; + gap: var(--space-m); list-style: none; margin: 0; - padding: 0.5rem 1.5rem 1.5rem; + padding: var(--space-2xs) var(--space-m) var(--space-m); } .result-card { @@ -192,17 +192,17 @@ color: inherit; display: flex; flex-direction: column; - gap: 0.4rem; + gap: var(--space-3xs); } .result-card__authors { - font-size: 0.99rem; + font-size: var(--step--1); font-weight: 500; color: var(--text-primary); } .result-card__title { - font-size: 0.94rem; + font-size: var(--step--1); color: var(--text-secondary); line-height: 1.35; display: -webkit-box; @@ -212,7 +212,7 @@ } .result-card__meta { - font-size: 0.86rem; + font-size: var(--step--2); color: var(--accent-primary); font-style: normal; } @@ -221,8 +221,8 @@ .search-controls { display: flex; align-items: center; - gap: 1rem; - padding: 0.4rem 1.5rem; + gap: var(--space-s); + padding: var(--space-3xs) var(--space-m); border-bottom: 1px solid var(--border-secondary); flex-shrink: 0; flex-wrap: wrap; @@ -231,8 +231,8 @@ .search-filter-label { display: flex; align-items: center; - gap: 0.4rem; - font-size: 0.86rem; + gap: var(--space-3xs); + font-size: var(--step--2); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.06em; @@ -241,10 +241,10 @@ } .search-filter-select { - font-size: 0.9rem; + font-size: var(--step--1); border: 1px solid var(--border-primary); border-radius: 3px; - padding: 0.2rem 0.5rem; + padding: var(--space-3xs) var(--space-2xs); background: var(--bg-primary); color: var(--text-primary); font-family: inherit; @@ -256,8 +256,8 @@ } .search-apply-btn { - font-size: 0.9rem; - padding: 0.2rem 0.8rem; + font-size: var(--step--1); + padding: var(--space-3xs) var(--space-xs); background: var(--accent-primary); color: var(--accent-foreground); border: none; @@ -272,7 +272,7 @@ } .search-reset-link { - font-size: 0.9rem; + font-size: var(--step--1); color: var(--text-secondary); text-decoration: underline; cursor: pointer; @@ -283,8 +283,8 @@ display: flex; justify-content: center; align-items: center; - gap: 0.5rem; - padding: 1.5rem 0; + gap: var(--space-2xs); + padding: var(--space-m) 0; } .pagination-btn { @@ -293,11 +293,11 @@ justify-content: center; min-width: 2.75rem; min-height: 2.75rem; - padding: 0 0.6rem; + padding: 0 var(--space-2xs); border: 1px solid var(--border-secondary); border-radius: 3px; color: var(--text-primary); - font-size: 0.99rem; + font-size: var(--step--1); text-decoration: none; transition: all 0.15s; } @@ -314,15 +314,15 @@ } .pagination-info { - font-size: 0.99rem; + font-size: var(--step--1); color: var(--text-secondary); - padding: 0 0.5rem; + padding: 0 var(--space-2xs); } .search-empty { - padding: 3rem 1.5rem; + padding: var(--space-xl) var(--space-m); color: var(--text-secondary); - font-size: 1.1rem; + font-size: var(--step-0); text-align: center; } @@ -331,8 +331,8 @@ background: var(--search-error-bg); border-left: 3px solid var(--search-error-border); color: var(--search-error-color); - padding: 0.5rem 1rem; - font-size: 0.97rem; - margin: 0.5rem 1.5rem; + padding: var(--space-2xs) var(--space-s); + font-size: var(--step--1); + margin: var(--space-2xs) var(--space-m); flex-shrink: 0; } diff --git a/public/assets/css/system.css b/public/assets/css/system.css index 31ee778..eb1083d 100644 --- a/public/assets/css/system.css +++ b/public/assets/css/system.css @@ -9,12 +9,12 @@ display: flex; gap: 0; border-bottom: 1px solid var(--sys-border); - margin-bottom: 1.75rem; + margin-bottom: var(--space-m); } .sys-tab { display: inline-block; - padding: .55rem 1.1rem; - font-size: 0.92rem; + padding: var(--space-3xs) var(--space-s); + font-size: var(--step--1); font-weight: 500; color: var(--sys-text-dim); text-decoration: none; @@ -35,23 +35,23 @@ background: var(--sys-bg-panel); border: 1px solid var(--sys-border); border-radius: 6px; - padding: 1rem 1.25rem 1.25rem; - margin-bottom: 1.75rem; + padding: var(--space-s) var(--space-m); + margin-bottom: var(--space-m); } .sys-status-header { display: flex; align-items: center; justify-content: space-between; - margin-bottom: 1rem; + margin-bottom: var(--space-s); } .sys-status-toggle { background: none; border: 1px solid var(--sys-border); color: var(--sys-text-dim); border-radius: 3px; - font-size: 0.79rem; + font-size: var(--step--2); font-family: inherit; - padding: .2rem .55rem; + padding: var(--space-3xs) var(--space-2xs); cursor: pointer; white-space: nowrap; transition: color .15s, border-color .15s; @@ -63,9 +63,9 @@ .sys-status-meta { display: grid; grid-template-columns: 1fr 1fr; - gap: 1.5rem 2rem; - margin-top: 1.5rem; - padding-top: 1.25rem; + gap: var(--space-m) var(--space-l); + margin-top: var(--space-m); + padding-top: var(--space-m); border-top: 1px solid var(--sys-border-deep); } @media (max-width: 700px) { @@ -76,47 +76,47 @@ .srv-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); - gap: 1rem; - margin-bottom: 2.5rem; + gap: var(--space-s); + margin-bottom: var(--space-l); } .srv-card { background: var(--sys-bg-surface); border: 1px solid var(--sys-border); border-radius: 5px; - padding: 1rem 1.25rem; + padding: var(--space-s) var(--space-m); } .srv-card__header { display: flex; align-items: center; justify-content: space-between; - margin-bottom: .4rem; + margin-bottom: var(--space-3xs); } .srv-card__name { - font-size: 0.9rem; + font-size: var(--step--1); text-transform: uppercase; letter-spacing: .07em; color: var(--sys-text-dim); font-weight: 500; } .srv-card__detail { - font-size: 0.88rem; + font-size: var(--step--2); color: var(--sys-text-dim); - margin-top: .25rem; + margin-top: var(--space-3xs); font-family: ui-monospace, "SFMono-Regular", Consolas, monospace; } -.status-ok { color: var(--accent-green); font-weight: 600; font-size: 0.94rem; } -.status-warn { color: var(--warning); font-weight: 600; font-size: 0.94rem; } -.status-err { color: var(--error); font-weight: 600; font-size: 0.94rem; } -.status-unknown { color: var(--text-tertiary); font-weight: 600; font-size: 0.94rem; } +.status-ok { color: var(--accent-green); font-weight: 600; font-size: var(--step--1); } +.status-warn { color: var(--warning); font-weight: 600; font-size: var(--step--1); } +.status-err { color: var(--error); font-weight: 600; font-size: var(--step--1); } +.status-unknown { color: var(--text-tertiary); font-weight: 600; font-size: var(--step--1); } .srv-section-title { - font-size: 0.9rem; + font-size: var(--step--1); text-transform: uppercase; letter-spacing: .1em; color: var(--sys-text-dim); border-bottom: 1px solid var(--sys-border); - padding-bottom: .4rem; - margin: 0 0 1rem; + padding-bottom: var(--space-3xs); + margin: 0 0 var(--space-s); font-weight: 500; } /* Compact variant: no border, no margin — used inside sys-status-header */ @@ -126,14 +126,14 @@ padding: 0; } /* Sub-section variant: tighter bottom margin — used for PHP/disk sub-headings */ -.srv-section-title--sub { margin-bottom: .75rem; } +.srv-section-title--sub { margin-bottom: var(--space-xs); } /* ── PHP info grid ─────────────────────────────────────────────────────── */ .php-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); - gap: .5rem .75rem; - margin-bottom: 2.5rem; + gap: var(--space-3xs) var(--space-xs); + margin-bottom: var(--space-l); } /* Flush variant: no bottom margin — used inside sys-status-meta cell */ .php-grid--flush { margin-bottom: 0; } @@ -141,19 +141,19 @@ background: var(--sys-bg-surface); border: 1px solid var(--sys-border); border-radius: 4px; - padding: .5rem .75rem; + padding: var(--space-3xs) var(--space-xs); } .php-item__key { - font-size: 0.83rem; + font-size: var(--step--2); text-transform: uppercase; letter-spacing: .06em; color: var(--sys-text-dim); } .php-item__val { - font-size: 1.01rem; + font-size: var(--step--1); font-family: ui-monospace, "SFMono-Regular", Consolas, monospace; color: var(--sys-text-bright); - margin-top: .15rem; + margin-top: var(--space-3xs); } /* ── Disk bar ──────────────────────────────────────────────────────────── */ @@ -161,13 +161,12 @@ background: var(--sys-border); border-radius: 3px; height: 6px; - margin-top: .5rem; + margin-top: var(--space-2xs); overflow: hidden; } .disk-bar { height: 100%; border-radius: 3px; - /* width and color driven by PHP via --disk-pct and --disk-color inline vars */ width: var(--disk-pct, 0%); background: var(--disk-color, var(--accent-green)); transition: width .3s; @@ -175,14 +174,14 @@ .disk-stats { display: flex; justify-content: space-between; - font-size: 0.86rem; + font-size: var(--step--2); color: var(--sys-text-dim); - margin-top: .25rem; + margin-top: var(--space-3xs); } /* ── Tab panel loading state ───────────────────────────────────────────── */ #sys-tab-panel { - min-height: 8rem; /* prevent layout jump while fetching */ + min-height: 8rem; position: relative; } #sys-tab-panel.sys-panel-loading { @@ -215,11 +214,11 @@ display: flex; flex-wrap: wrap; align-items: center; - gap: .6rem; - margin-bottom: 1.25rem; + gap: var(--space-2xs); + margin-bottom: var(--space-m); } .log-toolbar label { - font-size: 0.92rem; + font-size: var(--step--1); color: var(--text-secondary); } .log-toolbar select { @@ -227,19 +226,19 @@ border: 1px solid var(--sys-border); color: var(--sys-text-bright); border-radius: 4px; - padding: .4rem .7rem; - font-size: 0.94rem; + padding: var(--space-3xs) var(--space-xs); + font-size: var(--step--1); font-family: inherit; } .log-toolbar select:focus { outline: 2px solid var(--accent-primary); } .log-meta { - font-size: 0.86rem; + font-size: var(--step--2); color: var(--sys-text-dim); font-family: ui-monospace, "SFMono-Regular", Consolas, monospace; - margin-bottom: .75rem; + margin-bottom: var(--space-xs); display: flex; - gap: 1.5rem; + gap: var(--space-m); flex-wrap: wrap; } .log-meta span::before { content: attr(data-label) ": "; opacity: .6; } @@ -248,34 +247,34 @@ background: var(--sys-bg-surface); border: 1px solid var(--sys-border); border-radius: 4px; - padding: 1.5rem; + padding: var(--space-m); color: var(--sys-text-dim); - font-size: 0.97rem; + font-size: var(--step--1); } .log-unavail-path { font-family: ui-monospace, "SFMono-Regular", Consolas, monospace; - font-size: 0.88rem; - margin-top: .4rem; + font-size: var(--step--2); + margin-top: var(--space-3xs); opacity: .7; } .log-unavail-dev { - margin-top: .6rem; - font-size: 0.88rem; + margin-top: var(--space-2xs); + font-size: var(--step--2); opacity: .7; } .log-empty { color: var(--sys-text-dim); - font-size: 0.97rem; - padding: 1rem 0; + font-size: var(--step--1); + padding: var(--space-s) 0; } .log-output { background: var(--sys-bg-deep); border: 1px solid var(--sys-border); border-radius: 4px; - padding: 1rem; + padding: var(--space-s); overflow-x: auto; font-family: ui-monospace, "SFMono-Regular", Consolas, "Courier New", monospace; - font-size: 0.84rem; + font-size: var(--step--2); line-height: 1.55; max-height: 62vh; overflow-y: auto; @@ -284,7 +283,7 @@ .log-line { display: block; white-space: pre; - padding: .05rem .1rem; + padding: var(--space-3xs) var(--space-3xs); border-radius: 2px; color: var(--sys-text-body); } @@ -297,7 +296,7 @@ content: attr(data-n); display: inline-block; min-width: 4ch; - margin-right: .75rem; + margin-right: var(--space-xs); opacity: .3; text-align: right; user-select: none; @@ -306,21 +305,21 @@ background: var(--sys-bg-surface); border: 1px solid var(--sys-border); border-radius: 3px; - font-size: 0.84rem; - padding: .15rem .5rem; + font-size: var(--step--2); + padding: var(--space-3xs) var(--space-2xs); color: var(--sys-text-dim); font-family: ui-monospace, monospace; } .log-copy-btn { position: absolute; - top: .6rem; - right: .6rem; + top: var(--space-2xs); + right: var(--space-2xs); background: var(--sys-bg-surface); border: 1px solid var(--sys-border); color: var(--sys-text-dim); border-radius: 4px; - font-size: 0.84rem; - padding: .25rem .6rem; + font-size: var(--step--2); + padding: var(--space-3xs) var(--space-2xs); cursor: pointer; font-family: inherit; transition: color .15s, border-color .15s; @@ -336,9 +335,9 @@ } .sys-refresh-note { - font-size: 0.86rem; + font-size: var(--step--2); color: var(--sys-text-dim); - margin-bottom: 1.25rem; + margin-bottom: var(--space-m); } .sys-refresh-note a { color: var(--accent-primary); @@ -349,12 +348,12 @@ /* ── Cache freshness badges ────────────────────────────────────────────── */ .sys-cache-badge { display: inline-block; - font-size: 0.75rem; + font-size: var(--step--2); font-weight: 400; font-family: ui-monospace, monospace; - padding: .1rem .45rem; + padding: var(--space-3xs) var(--space-3xs); border-radius: 3px; - margin-left: .7rem; + margin-left: var(--space-xs); vertical-align: middle; line-height: 1.6; } @@ -372,11 +371,11 @@ /* ── Nginx config viewer ───────────────────────────────────────────────── */ .nginx-source-badge { display: inline-block; - font-size: 0.79rem; + font-size: var(--step--2); font-family: ui-monospace, monospace; - padding: .15rem .55rem; + padding: var(--space-3xs) var(--space-2xs); border-radius: 3px; - margin-left: .6rem; + margin-left: var(--space-2xs); vertical-align: middle; } .nginx-source-badge--live { diff --git a/public/assets/css/tfe.css b/public/assets/css/tfe.css index 904f46f..3ccb3e2 100644 --- a/public/assets/css/tfe.css +++ b/public/assets/css/tfe.css @@ -13,14 +13,14 @@ .tfe-main { flex: 1; - padding: 2rem 1.5rem 3rem; + padding: var(--space-l) var(--space-m) var(--space-xl); } /* Two-column article layout */ .tfe-layout { display: grid; grid-template-columns: 1fr 1.4fr; - gap: 3rem; + gap: var(--space-xl); width: 100%; max-width: 1200px; align-items: start; @@ -30,13 +30,13 @@ .tfe-left { display: flex; flex-direction: column; - gap: 1.5rem; + gap: var(--space-m); } /* Author (p) — above title */ .tfe-author { font-family: var(--font-display); - font-size: 1.54rem; + font-size: var(--step-1); font-weight: 400; color: var(--text-primary); margin: 0; @@ -46,7 +46,7 @@ /* Title (h1) — primary heading, very large */ .tfe-title { font-family: var(--font-display); - font-size: 2.42rem; + font-size: var(--step-3); font-weight: 400; color: var(--text-primary); margin: 0; @@ -58,8 +58,8 @@ article dl { display: flex; flex-direction: column; - gap: 0.45rem; - font-size: 1.04rem; + gap: var(--space-3xs); + font-size: var(--step--1); line-height: 1.4; margin: 0; } @@ -67,7 +67,7 @@ article dl { /* Each dt/dd pair grouped in a inside */ article dl > div { display: flex; - gap: 0.4rem; + gap: var(--space-3xs); flex-wrap: wrap; } @@ -100,7 +100,7 @@ article dl dd a { /* Synopsis paragraph */ .tfe-synopsis-text { - font-size: 1.04rem; + font-size: var(--step--1); line-height: 1.7; color: var(--text-primary); margin: 0; @@ -110,7 +110,7 @@ article dl dd a { .tfe-right { display: flex; flex-direction: column; - gap: 1.5rem; + gap: var(--space-m); } /* Each file display unit — target directly inside