/* varlog — style.css */ /* Inter — auto-hébergée */ @font-face { font-family: 'Inter'; font-style: normal; font-weight: 100 900; font-display: swap; src: url('/assets/fonts/inter-normal-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } @font-face { font-family: 'Inter'; font-style: normal; font-weight: 100 900; font-display: swap; src: url('/assets/fonts/inter-normal-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } @font-face { font-family: 'Inter'; font-style: italic; font-weight: 400; font-display: swap; src: url('/assets/fonts/inter-italic-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } @font-face { font-family: 'Inter'; font-style: italic; font-weight: 400; font-display: swap; src: url('/assets/fonts/inter-italic-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } /* ─── Variables ─────────────────────────── */ :root { /* Override Bootstrap link defaults */ --bs-link-color: #4f46e5; --bs-link-color-rgb: 79, 70, 229; --bs-link-hover-color: #4338ca; --bs-link-decoration: none; --vl-accent: #4f46e5; --vl-accent-dark: #4338ca; --vl-accent-soft: #e0e7ff; --vl-bg: #f8fafc; --vl-surface: #ffffff; --vl-border: #e2e8f0; --vl-text: #1e293b; --vl-muted: #64748b; --vl-radius: 0.75rem; --vl-shadow-sm: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04); --vl-shadow-md: 0 4px 16px rgba(0,0,0,.08), 0 2px 4px rgba(0,0,0,.04); } /* ─── Base ──────────────────────────────── */ body { background-color: var(--vl-bg) !important; color: var(--vl-text); font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; font-size: 1rem; line-height: 1.7; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* ─── Navbar ────────────────────────────── */ .navbar { background-color: var(--vl-surface) !important; border-bottom: 1px solid var(--vl-border); box-shadow: var(--vl-shadow-sm); padding: 0.75rem 1rem; } .navbar-brand { font-weight: 700; font-size: 1.15rem; color: var(--vl-text) !important; letter-spacing: -0.3px; transition: color 0.15s; } .navbar-brand:hover { color: var(--vl-accent) !important; } .nav-link { color: var(--vl-muted) !important; font-weight: 500; font-size: 0.9rem; padding: 0.4rem 0.75rem !important; border-radius: 0.5rem; transition: color 0.15s, background 0.15s; } .nav-link:hover { color: var(--vl-accent) !important; background-color: var(--vl-accent-soft); } .navbar-toggler { border-color: var(--vl-border); } .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2830%2C41%2C59%2C0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } /* ─── Main ───────────────────────────────── */ main.container { max-width: 980px; padding-top: 2rem; padding-bottom: 3rem; } /* ─── Headings ───────────────────────────── */ h1 { font-weight: 700; font-size: 1.75rem; letter-spacing: -0.5px; color: var(--vl-text); } h2 { font-weight: 600; letter-spacing: -0.3px; } /* ─── Liens globaux ─────────────────────── */ a { color: var(--vl-accent); text-decoration: none !important; } a:hover { color: var(--vl-accent-dark); } /* ─── Cards ─────────────────────────────── */ .card-cover { height: 120px; border-radius: var(--vl-radius) var(--vl-radius) 0 0; flex-shrink: 0; } .card { border: 1px solid var(--vl-border) !important; border-radius: var(--vl-radius) !important; box-shadow: var(--vl-shadow-sm); background-color: var(--vl-surface); overflow: hidden; transition: box-shadow 0.2s ease, transform 0.2s ease; } .card:hover { box-shadow: var(--vl-shadow-md); transform: translateY(-2px); } .card-body { padding: 1.35rem 1.5rem; } .card-title { font-weight: 600; font-size: 1rem; margin-bottom: 0.5rem; color: var(--vl-text); } /* Override la couleur text-primary Bootstrap sur les card-title */ .card-title.text-primary { color: var(--vl-text) !important; } .card-title a, .card-title a:visited { color: var(--vl-text) !important; transition: color 0.15s; } .card-title a:hover { color: var(--vl-accent) !important; } .card-text { color: var(--vl-muted); font-size: 0.9rem; line-height: 1.65; } /* Neutralise les borders colorées Bootstrap */ .card[class*="border-primary"], .card[class*="border-warning"], .card[class*="border-success"], .card[class*="border-danger"] { border-color: var(--vl-border) !important; } /* ─── Ribbon brouillon ───────────────────── */ .draft-ribbon { position: absolute; top: 26px; right: -34px; width: 130px; text-align: center; background: #f59e0b; color: #fff; font-size: 0.6rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; padding: 5px 0; transform: rotate(45deg); pointer-events: none; z-index: 2; box-shadow: 0 1px 3px rgba(0,0,0,.18); } /* ─── Buttons ─────────────────────────────── */ .btn { font-weight: 500; font-size: 0.875rem; border-radius: 0.5rem; transition: all 0.15s ease; } .btn-outline-primary { --bs-btn-color: var(--vl-accent); --bs-btn-border-color: var(--vl-accent); --bs-btn-hover-bg: var(--vl-accent); --bs-btn-hover-border-color: var(--vl-accent); --bs-btn-active-bg: var(--vl-accent-dark); } .btn-outline-secondary { --bs-btn-color: var(--vl-muted); --bs-btn-border-color: var(--vl-border); --bs-btn-hover-bg: var(--vl-bg); --bs-btn-hover-border-color: var(--vl-border); --bs-btn-hover-color: var(--vl-text); } .btn-success { background-color: var(--vl-accent) !important; border-color: var(--vl-accent) !important; } .btn-success:hover, .btn-success:focus { background-color: var(--vl-accent-dark) !important; border-color: var(--vl-accent-dark) !important; } .btn-secondary { background-color: #f1f5f9 !important; border-color: var(--vl-border) !important; color: var(--vl-text) !important; } .btn-secondary:hover { background-color: #e2e8f0 !important; border-color: var(--vl-border) !important; } .btn-danger { --bs-btn-bg: #ef4444; --bs-btn-border-color: #ef4444; --bs-btn-hover-bg: #dc2626; --bs-btn-hover-border-color: #dc2626; } /* ─── Forms ──────────────────────────────── */ .form-control, .form-select { border-color: var(--vl-border); border-radius: 0.5rem; font-size: 0.9375rem; padding: 0.5rem 0.75rem; transition: border-color 0.15s, box-shadow 0.15s; background-color: var(--vl-surface); } .form-control:focus, .form-select:focus { border-color: var(--vl-accent); box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.12); } .form-label { font-weight: 500; font-size: 0.875rem; color: var(--vl-text); margin-bottom: 0.375rem; } .form-check-input:checked { background-color: var(--vl-accent); border-color: var(--vl-accent); } textarea.form-control { font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; font-size: 0.875rem; line-height: 1.6; min-height: 320px; resize: vertical; } /* ─── Alerts ─────────────────────────────── */ .alert { border-radius: var(--vl-radius); border: none; font-size: 0.9rem; } .alert-danger { background-color: #fef2f2; color: #991b1b; } /* ─── Post content (Markdown rendu) ──────── */ .post-content { font-size: 1rem; line-height: 1.8; color: var(--vl-text); } .post-content h1, .post-content h2, .post-content h3, .post-content h4, .post-content h5, .post-content h6 { font-weight: 600; margin-top: 2rem; margin-bottom: 0.75rem; letter-spacing: -0.3px; line-height: 1.3; } .post-content p { margin-bottom: 1.25rem; } .post-content a { color: var(--vl-accent); text-decoration: underline; text-decoration-color: var(--vl-accent-soft); text-underline-offset: 3px; transition: text-decoration-color 0.15s; } .post-content a:hover { text-decoration-color: var(--vl-accent); } .post-content code { background: #f1f5f9; padding: 0.2em 0.45em; border-radius: 4px; font-size: 0.85em; color: #be185d; font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; } .post-content pre { background: #1e293b; color: #e2e8f0; padding: 1.25rem 1.5rem; border-radius: var(--vl-radius); overflow-x: auto; font-size: 0.875rem; line-height: 1.6; margin: 1.5rem 0; } .post-content pre code { background: none; color: inherit; padding: 0; font-size: inherit; } .post-content blockquote { border-left: 3px solid var(--vl-accent); padding: 0.5rem 0 0.5rem 1.25rem; margin: 1.5rem 0; color: var(--vl-muted); font-style: italic; } .post-content ul, .post-content ol { padding-left: 1.5rem; margin-bottom: 1.25rem; } .post-content li { margin-bottom: 0.375rem; } .post-content img { max-width: 100%; border-radius: var(--vl-radius); margin: 1rem 0; } .post-content table { width: 100%; border-collapse: collapse; margin: 1.5rem 0; font-size: 0.9rem; } .post-content th, .post-content td { padding: 0.625rem 1rem; border: 1px solid var(--vl-border); text-align: left; } .post-content th { background: var(--vl-bg); font-weight: 600; } .post-content hr { border: none; border-top: 1px solid var(--vl-border); margin: 2rem 0; } /* ─── Post list — date / meta ─────────────── */ .post-meta { font-size: 0.8rem; color: var(--vl-muted); } /* ─── Footer ─────────────────────────────── */ footer { border-top: 1px solid var(--vl-border); color: var(--vl-muted) !important; font-size: 0.85rem; } /* ─── Navbar tagline ────────────────────── */ .navbar-tagline { font-size: 0.68rem; font-weight: 400; color: var(--vl-muted); letter-spacing: 0; margin-top: 2px; opacity: 0.85; } /* ─── Liste éditoriale ───────────────────── */ .posts-list { max-width: 720px; margin: 0 auto; } .post-entry { padding: 2rem 0; border-bottom: 1px solid var(--vl-border); } .post-entry:last-child { border-bottom: none; } .post-entry-title { font-size: 1.3rem; font-weight: 600; margin-bottom: 0.6rem; line-height: 1.35; letter-spacing: -0.3px; } .post-entry-title a { color: var(--vl-text); text-decoration: none; transition: color 0.15s; } .post-entry-title a:hover { color: var(--vl-accent); } .post-entry-excerpt { color: var(--vl-muted); font-size: 0.95rem; margin-bottom: 0.85rem; line-height: 1.65; } .post-entry-meta { display: flex; align-items: center; gap: 1.25rem; font-size: 0.82rem; color: var(--vl-muted); } .post-entry-edit { color: var(--vl-muted); text-decoration: none; transition: color 0.15s; } .post-entry-edit:hover { color: var(--vl-text); } .post-entry-read { color: var(--vl-accent); text-decoration: none; font-weight: 600; margin-left: auto; transition: opacity 0.15s; } .post-entry-read:hover { opacity: 0.75; } /* ─── Footer 2 colonnes ──────────────────── */ footer { border-top: 1px solid var(--vl-border); background-color: var(--vl-surface); } .footer-inner { display: flex; justify-content: space-between; align-items: flex-start; gap: 2rem; } .footer-about strong { font-size: 0.9rem; font-weight: 700; color: var(--vl-text); display: block; margin-bottom: 0.4rem; letter-spacing: -0.2px; } .footer-about p { font-size: 0.82rem; color: var(--vl-muted); margin: 0 0 0.5rem; line-height: 1.55; } .footer-about small { font-size: 0.78rem; color: var(--vl-muted); } .footer-about small a { color: var(--vl-muted); text-decoration: underline; text-decoration-color: var(--vl-border); transition: color 0.15s; } .footer-about small a:hover { color: var(--vl-accent); } .footer-nav { display: flex; flex-direction: column; align-items: flex-end; gap: 0.5rem; flex-shrink: 0; } .footer-nav a { font-size: 0.85rem; color: var(--vl-muted); text-decoration: none; transition: color 0.15s; } .footer-nav a:hover { color: var(--vl-accent); } @media (max-width: 576px) { .footer-inner { flex-direction: column; gap: 1.5rem; } .footer-nav { align-items: flex-start; flex-direction: row; gap: 1rem; } } /* ─── Utilitaires ─────────────────────────── */ .text-muted { color: var(--vl-muted) !important; } .text-primary { color: var(--vl-accent) !important; }