/* varlog — style.css */ @import url('https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap'); /* ─── Variables ─────────────────────────── */ :root { --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; } /* ─── Cards ─────────────────────────────── */ .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); 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-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; } /* Indicateur brouillon discret */ .badge.bg-warning { background-color: #fef3c7 !important; color: #92400e !important; font-weight: 500; font-size: 0.7rem; border-radius: 0.375rem; } /* ─── 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; }