Download overrides.css from olewave/fa-bench: direct link, hf CLI and curl.
- Browser
- Download file 56.5 kB
-
https://huggingface.co/spaces/olewave/fa-bench/resolve/main/overrides.css
- Command line
-
hf download hf://spaces/olewave/fa-bench/overrides.css
-
curl -L -o overrides.css https://huggingface.co/spaces/olewave/fa-bench/resolve/main/overrides.css
56.5 kB
| /* theme2 overrides — site-wide font scale down. Loaded AFTER style.css/skin-1.css. */ | |
| /* ── Body font: Inter (Google Fonts) ── */ | |
| @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"); | |
| html, body, | |
| input, select, textarea, button, | |
| h1, h2, h3, h4, h5, h6, | |
| .h1, .h2, .h3, .h4, .h5, .h6, | |
| .dlab-title, .dlab-head, .section-head .title, .section-head .sub-title, | |
| .btn, .site-button, .footer, .footer-title { | |
| font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, | |
| 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif ; | |
| font-feature-settings: "cv11", "ss01", "cv02"; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| } | |
| /* Sharper headings — matches OpenAI's tight tracking */ | |
| h1, h2, h3, h4, h5, h6, | |
| .h1, .h2, .h3, .h4, .h5, .h6, | |
| .dlab-title, .section-head .title { | |
| letter-spacing: -0.015em; | |
| } | |
| body { | |
| letter-spacing: -0.003em; | |
| font-weight: 400; /* Inter Regular reads cleaner/less bold than 500 */ | |
| } | |
| p, li, td, th, small, label, input, textarea, select { font-weight: 400; } | |
| /* --- Brand gradient: override skin-1's pink-orange with the style.css purple-blue --- */ | |
| :root { | |
| --gradient: linear-gradient(to right, #7355f7 0%, #5f3bff 51%, #7355f7 100%); | |
| --gradientY: linear-gradient(to top, #7355f7 0%, #5f3bff 100%); | |
| --gradient-sec: linear-gradient(to right, #130065 0%, #2b0ead 51%, #130065 100%); | |
| /* Override skin-1's pink --primary / --primary-dark → purple family | |
| (drives scroll-top button, footer-bottom background, and anywhere else | |
| the theme uses var(--primary)). */ | |
| --primary: #5f3bff; | |
| --primary-dark: #2b0ead; | |
| --primary-hover: #4b24f5; | |
| /* Text greys, matched to OpenAI's two levels. Reading text 15.9:1 on white, | |
| labels, dates and captions 5.9:1. The body stays #1a1a1a, which is | |
| already darker than --olw-text, and no rule was made lighter. */ | |
| --olw-text: #222222; | |
| --olw-text-2: #646464; | |
| } | |
| /* Apply to solid primary buttons too (not just gradient class) */ | |
| .btn-primary { | |
| background: var(--gradient) ; | |
| border-color: transparent ; | |
| color: #fff ; | |
| } | |
| .btn-primary:hover { filter: brightness(0.92); } | |
| /* Colored text helpers that theme2 uses — bring them into the purple family */ | |
| .text-primary { color: #5f3bff ; } | |
| /* Links inside CKEditor content (FAQ, About, Voice Data, etc.) — use purple | |
| instead of theme2's pink. Scoped so nav/button links keep their own color. */ | |
| .page-content .container a, | |
| .blog-article__body a, | |
| .contact-page a, | |
| .customer-voices a { color: #5f3bff; } | |
| .page-content .container a:hover, | |
| .blog-article__body a:hover, | |
| .contact-page a:hover, | |
| .customer-voices a:hover { color: #4b24f5; text-decoration: underline; } | |
| /* Don't touch the visible nav button */ | |
| .page-content .container a.btn, | |
| .page-content .container a.btn:hover { color: inherit; text-decoration: none; } | |
| /* Nav link hover — override pink var(--primary) to the button purple */ | |
| .header-nav .nav > li:hover > a, | |
| .header-nav .nav > li.active > a, | |
| .header-nav .nav > li > a:hover, | |
| .header-nav .nav > li > a:focus { color: #5f3bff ; } | |
| /* Bolder nav link weight */ | |
| .header-nav .nav > li > a, | |
| .header-nav .nav > li > a span { font-weight: 700 ; } | |
| /* Header logo, the ops.olewave.com lockup. The swirl mark sits beside the | |
| "Olewave" wordmark in the ops proportions (mark 30, wordmark 18, gap 8), | |
| scaled up for this taller header and back to the ops size on phones. The | |
| theme sized .logo-header as a fixed box for the old stacked logo and stretched | |
| its img to full width, so the top bar's box shrinks to fit and centers the | |
| lockup instead. The in-menu copy (.header-nav .logo-header) only shows in the | |
| mobile slide-out, where the theme already makes it a padded block. */ | |
| .site-header .main-bar .logo-header.logo-dark { display: flex; align-items: center; width: auto; } | |
| /* The bar's logo and buttons are floats, and without this they share the page's | |
| formatting context. Whenever one hangs below the bar, as the theme's sticky | |
| script resizes it with a one-second height transition, the text beside it | |
| wraps around it. The leaderboard's intro, which starts under the logo, | |
| showed its first line pushed right. flow-root keeps the floats inside the | |
| bar. */ | |
| .site-header .main-bar { display: flow-root; } | |
| /* direction: ltr keeps the swirl left of the wordmark on Arabic pages, where | |
| flex would otherwise mirror the lockup. */ | |
| .site-header .logo-header a.olw-brand { display: inline-flex; align-items: center; gap: 9px; direction: ltr; text-decoration: none; } | |
| .site-header .logo-header a.olw-brand img { display: block; width: auto; max-width: none; } | |
| /* The header's mark for a dark page, from bin/make_header_logo.py, with the | |
| white lines between the swirl's arms clear. dark.css swaps it in at night. */ | |
| .site-header .logo-header a.olw-brand img.olw-brand__mark--night { display: none; } | |
| .site-header .logo-header a.olw-brand .olw-brand__mark { height: 36px; } | |
| .site-header .logo-header a.olw-brand .olw-brand__wordmark { height: 22px; } | |
| @media only screen and (max-width: 575px) { | |
| .site-header .logo-header a.olw-brand { gap: 8px; } | |
| .site-header .logo-header a.olw-brand .olw-brand__mark { height: 30px; } | |
| .site-header .logo-header a.olw-brand .olw-brand__wordmark { height: 18px; } | |
| } | |
| /* 992 to 1199 px. The menu, language picker and button nearly fill the 960 px | |
| container on their own, about 900 px in Japanese, so the menu wrapped to a | |
| second row in English, Japanese and Arabic even with the old logo. Here the | |
| swirl shows alone and the menu links sit closer, which keeps one row in all | |
| six languages. The link keeps its name through aria-label. */ | |
| /* Footer logo, the same lockup in white on the dark footer. The theme caps | |
| footer logo images at 70% of their box, so the images get explicit sizes. */ | |
| .site-footer .footer-logo a.olw-brand { display: inline-flex; align-items: center; gap: 10px; direction: ltr; text-decoration: none; } | |
| .site-footer .footer-logo a.olw-brand img { display: block; width: auto; max-width: none; } | |
| .site-footer .footer-logo a.olw-brand .olw-brand__mark { height: 40px; } | |
| .site-footer .footer-logo a.olw-brand .olw-brand__wordmark { height: 24px; } | |
| @media only screen and (min-width: 992px) and (max-width: 1199px) { | |
| .site-header .main-bar .logo-header.logo-dark .olw-brand__wordmark { display: none; } | |
| .header-nav .nav > li > a, | |
| .is-fixed .header-nav .nav > li > a { padding-left: 8px; padding-right: 8px; } | |
| } | |
| /* Text selection color — match the purple-blue button */ | |
| ::selection { background: #5f3bff; color: #fff; } | |
| ::-moz-selection{ background: #5f3bff; color: #fff; } | |
| /* Page-load spinner — swap the pink SVG for the purple one, and auto-fade | |
| after 500ms so a slow external asset (Google Fonts, tracking pixels) can't | |
| pin the overlay on screen. */ | |
| #loading-area.loading-02 { | |
| background-color: #f4f2ff ; | |
| background-image: url("../images/loading-02-purple.svg") ; | |
| animation: olw-loading-fade 0.45s linear 0.5s forwards; | |
| } | |
| @keyframes olw-loading-fade { | |
| to { opacity: 0; visibility: hidden; pointer-events: none; } | |
| } | |
| html { font-size: 90%; } /* shrinks every rem-based measurement by 10% */ | |
| body { | |
| font-size: 0.95rem; | |
| line-height: 1.55; | |
| letter-spacing: -0.002em; | |
| color: #1a1a1a; /* darker default text (was theme's ~#666) */ | |
| } | |
| /* CKEditor pastes from Google Docs bring inline color:#404040 on almost every | |
| <span>. Override that to the darker body color so prose reads crisper. | |
| Scoped to prose containers; nav/footer/buttons keep their own colors. */ | |
| .page-content [style*="color:#404040"], | |
| .page-content [style*="color: #404040"], | |
| .blog-article__body [style*="color:#404040"], | |
| .blog-article__body [style*="color: #404040"] { | |
| color: #1a1a1a ; | |
| } | |
| /* Same for the light grey used inline on the Voice Data dataset IDs. It is | |
| 3.5:1 on white. Overridden here so the page content, and its translations, | |
| stay untouched. */ | |
| .page-content [style*="color:#8A8A8A" i], | |
| .page-content [style*="color: #8A8A8A" i] { | |
| color: var(--olw-text-2) ; | |
| } | |
| /* The "Human-Sourced, Label-Validated, and Scientist-Verified" subtitle on | |
| Home, Voice Data and In-House Voice AI sets its colors inline, at 3.8, 2.2 | |
| and 3.3:1 on white, where 16px bold text needs 4.5. Each hue is darkened just | |
| enough to pass, 4.6:1. Orange cannot reach that and stay bright, so it reads | |
| as ochre. */ | |
| .page-content [style*="color:#e74c3c" i], .page-content [style*="color: #e74c3c" i] { color: #df2e1b ; } | |
| .page-content [style*="color:#f39c12" i], .page-content [style*="color: #f39c12" i] { color: #a46808 ; } | |
| .page-content [style*="color:#16a085" i], .page-content [style*="color: #16a085" i] { color: #12846e ; } | |
| /* The footer's bottom bar is dark (#1f343b), and the page purple is 2.2:1 on | |
| it, so its links stay light. */ | |
| .site-footer .footer-bottom .copyright-text a { | |
| color: #FFFFFF; | |
| text-decoration: underline; | |
| text-decoration-color: rgba(255, 255, 255, .45); | |
| text-underline-offset: 3px; | |
| } | |
| .site-footer .footer-bottom .copyright-text a:hover { text-decoration-color: #FFFFFF; } | |
| /* Headings — keep hierarchy but dial it back */ | |
| h1, .h1 { font-size: 2rem; line-height: 1.15; } | |
| h2, .h2 { font-size: 1.6rem; line-height: 1.2; } | |
| h3, .h3, .dlab-title { font-size: 1.25rem; line-height: 1.25; } | |
| h4, .h4 { font-size: 1.1rem; } | |
| h5, .h5 { font-size: 1rem; } | |
| h6, .h6, .sub-title { font-size: 0.8rem; } | |
| /* Lead paragraphs and intro text */ | |
| .lead { font-size: 1rem; } | |
| /* Bullet lists often use inline font-size:18px; nudge those down too */ | |
| ul.list-check-2[style*="font-size:18px"], | |
| ul.list-check-3[style*="font-size:18px"] { font-size: 16px ; line-height: 1.5; } | |
| ul.list-check-2 p, ul.list-check-3 p { margin-bottom: 0.4rem; } | |
| /* Inside the 3 home-page boxes specifically */ | |
| .icon-bx-wraper.style-7 ul li p { font-size: 16px; line-height: 1.5; } | |
| .icon-bx-wraper.style-7 ul li { font-size: 16px; line-height: 1.5; } | |
| /* Shrink the purple/gradient checkmark on list-check-2 and align with first line of text */ | |
| ul.list-check-2 li { | |
| padding: 4px 5px 4px 0 ; | |
| display: flex ; | |
| align-items: flex-start ; | |
| gap: 10px; | |
| position: relative; | |
| } | |
| ul.list-check-2 li:before { | |
| content: "\f00c"; | |
| font-family: 'Line Awesome Free'; | |
| font-weight: 900; | |
| font-size: 11px ; | |
| width: 18px ; | |
| height: 18px ; | |
| line-height: 18px ; | |
| border-radius: 18px ; | |
| color: #fff; | |
| background: #000; | |
| background-image: var(--gradient); | |
| background-size: 200%; | |
| text-align: center; | |
| flex: 0 0 18px; | |
| margin-top: 1.18em; /* pulls the icon down to baseline-align with the first line */ | |
| position: static ; /* override theme2's absolute positioning */ | |
| top: auto ; | |
| left: auto ; | |
| } | |
| ul.list-check-2 li > * { margin-bottom: 0; } | |
| /* Buttons stay tappable but trim a bit */ | |
| .btn { font-size: 0.9rem; padding: 0.55rem 1.15rem; } | |
| /* Section heads */ | |
| .section-head.style-1 .title { font-size: 1.6rem; } | |
| .section-head.style-1 .sub-title { font-size: 0.8rem; letter-spacing: 0.08em; } | |
| /* Icon boxes on card grids */ | |
| .icon-bx-wraper .dlab-title { font-size: 1.1rem; } | |
| /* Home 3-box grid: make the box titles larger & tighter */ | |
| .icon-bx-wraper.style-7 .dlab-title, | |
| .icon-bx-wraper.style-7 .dlab-title strong { | |
| font-size: 1.6rem; | |
| line-height: 1.2; | |
| letter-spacing: -0.01em; | |
| margin-bottom: 0.75rem; | |
| } | |
| /* Testimonials: shrink headline */ | |
| .customer-voices .title { font-size: 1.4rem; } | |
| .customer-voices .t13-role { font-size: 1.2rem; } | |
| .customer-voices .t13-org { font-size: 0.85rem; } | |
| .customer-voices .testimonial-4 p { font-size: 1rem; } | |
| /* Footer */ | |
| footer, .footer { font-size: 0.85rem; } | |
| /* Language picker — custom dropdown with flag icons */ | |
| .olw-lang-picker { | |
| position: relative; | |
| display: inline-flex; | |
| align-items: center; | |
| font-family: inherit; | |
| } | |
| .olw-lang-btn { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 8px; | |
| background: transparent; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 999px; | |
| padding: 8px 14px; | |
| font-family: inherit; | |
| font-size: 14px; | |
| font-weight: 600; | |
| color: #0A0A0A; | |
| line-height: 1.2; | |
| cursor: pointer; | |
| transition: border-color .15s, color .15s; | |
| } | |
| .olw-lang-btn:hover, | |
| .olw-lang-btn[aria-expanded="true"] { border-color: #5f3bff; color: #5f3bff; } | |
| .olw-lang-btn .olw-flag { font-size: 16px; line-height: 1; } | |
| .olw-lang-btn svg { margin-left: 2px; } | |
| .olw-lang-menu { | |
| position: absolute; | |
| top: calc(100% + 8px); | |
| right: 0; | |
| min-width: 180px; | |
| background: #FFFFFF; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 14px; | |
| box-shadow: 0 12px 32px rgba(0,0,0,.12); | |
| padding: 6px; | |
| margin: 0; | |
| list-style: none; | |
| z-index: 1000; | |
| max-height: 320px; | |
| overflow-y: auto; | |
| } | |
| .olw-lang-menu li { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| padding: 8px 10px; | |
| border-radius: 8px; | |
| font-size: 14px; | |
| font-weight: 500; | |
| color: #0A0A0A; | |
| cursor: pointer; | |
| transition: background .12s, color .12s; | |
| } | |
| .olw-lang-menu li:hover { background: #F2F2EE; } | |
| .olw-lang-menu li[aria-selected="true"] { | |
| background: #5f3bff; | |
| color: #FFFFFF; | |
| } | |
| .olw-lang-menu li[aria-selected="true"]:hover { background: #4b24f5; } | |
| .olw-lang-menu .olw-flag { font-size: 16px; line-height: 1; } | |
| /* The theme menu, before the language picker: light, dark, or the system's | |
| setting, which is the default. A round button showing the current choice, | |
| in the picker's pill style, and a menu in the picker's list style. | |
| dark.css colours both at night. */ | |
| .olw-theme { position: relative; display: inline-flex; } | |
| .olw-theme__btn { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 38px; | |
| height: 38px; | |
| padding: 0; | |
| background: transparent; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 999px; | |
| color: #0A0A0A; | |
| cursor: pointer; | |
| transition: border-color .15s, color .15s; | |
| } | |
| .olw-theme__btn:hover, | |
| .olw-theme__btn:focus-visible, | |
| .olw-theme__btn[aria-expanded="true"] { border-color: #5f3bff; color: #5f3bff; } | |
| .olw-theme__btn svg { display: none; width: 18px; height: 18px; } | |
| .olw-theme[data-mode="light"] .olw-theme__btn svg[data-for="light"], | |
| .olw-theme[data-mode="dark"] .olw-theme__btn svg[data-for="dark"], | |
| .olw-theme[data-mode="system"] .olw-theme__btn svg[data-for="system"] { display: block; } | |
| .olw-theme__menu { | |
| position: absolute; | |
| top: calc(100% + 8px); | |
| right: 0; | |
| min-width: 200px; | |
| background: #FFFFFF; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 14px; | |
| box-shadow: 0 12px 32px rgba(0,0,0,.12); | |
| padding: 6px; | |
| z-index: 1000; | |
| } | |
| .olw-theme__menu button { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| width: 100%; | |
| padding: 8px 10px; | |
| background: transparent; | |
| border: 0; | |
| border-radius: 8px; | |
| font-family: inherit; | |
| font-size: 14px; | |
| font-weight: 500; | |
| color: #0A0A0A; | |
| text-align: start; | |
| white-space: nowrap; | |
| cursor: pointer; | |
| transition: background .12s, color .12s; | |
| } | |
| .olw-theme__menu button:hover, | |
| .olw-theme__menu button:focus-visible { background: #F2F2EE; outline: none; } | |
| .olw-theme__menu button[aria-pressed="true"] { background: #5f3bff; color: #FFFFFF; } | |
| .olw-theme__menu svg { width: 16px; height: 16px; flex: none; } | |
| /* Japanese menu labels run long, and with the theme button the header was | |
| 13px short of one row. Japanese alone trims each menu link's side padding | |
| by 3px, which gives back 42px at every desktop width. */ | |
| @media only screen and (min-width: 1200px) { | |
| html[lang="ja"] .header-nav .nav > li > a { padding-left: 12px; padding-right: 12px; } | |
| } | |
| @media only screen and (min-width: 992px) and (max-width: 1199px) { | |
| html[lang="ja"] .header-nav .nav > li > a { padding-left: 5px; padding-right: 5px; } | |
| } | |
| /* Below 576px the theme hides the right-hand group, and the language picker | |
| and Contact us with it. The theme button stays, alone, beside the menu toggle. */ | |
| @media only screen and (max-width: 575px) { | |
| .site-header .extra-nav { display: flex; height: 75px; margin-left: 8px; } | |
| .site-header .extra-nav .olw-lang-picker, | |
| .site-header .extra-nav .btn { display: none; } | |
| } | |
| /* Homepage announcement card — anthropic-style banner above the 3-panel row. | |
| Two-line block: headline + subtitle. Whole card is a link. */ | |
| .olw-announce-wrap { | |
| padding: 36px 0 12px; | |
| display: flex; | |
| justify-content: center; | |
| } | |
| /* Second and subsequent banners sit tight under the first rather than | |
| repeating the 36px lead-in. */ | |
| .olw-announce-wrap--stacked { padding-top: 0; } | |
| /* Keep stacked banners the same width so their edges line up. */ | |
| .olw-announce-wrap .olw-announce { width: min(94vw, 880px); } | |
| /* Two banners side by side (Olign left, FA-Bench right). They share the row's | |
| width evenly and wrap to a stack below ~900px. align-items:stretch keeps | |
| them the same height even when one sub-line wraps to two lines. */ | |
| .olw-announce-wrap--row { | |
| gap: 16px; | |
| flex-wrap: wrap; | |
| align-items: stretch; | |
| padding-bottom: 12px; | |
| } | |
| .olw-announce-wrap--row .olw-announce { | |
| width: auto; | |
| flex: 1 1 400px; | |
| max-width: 560px; | |
| } | |
| .olw-announce { | |
| display: flex; | |
| align-items: center; | |
| gap: 20px; | |
| padding: 16px 22px 16px 16px; | |
| background: #FFFFFF; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 18px; | |
| color: #0A0A0A ; | |
| text-decoration: none ; | |
| transition: border-color .15s ease, box-shadow .15s ease, transform .15s ease; | |
| max-width: min(94vw, 880px); | |
| } | |
| .olw-announce:hover, | |
| .olw-announce:focus-visible { | |
| border-color: #5f3bff; | |
| box-shadow: 0 10px 28px -12px rgba(95, 59, 255, .38); | |
| transform: translateY(-1px); | |
| text-decoration: none ; | |
| color: #0A0A0A ; | |
| } | |
| .olw-announce__tag { | |
| display: inline-flex; | |
| align-items: center; | |
| padding: 5px 11px; | |
| background: var(--gradient); | |
| color: #FFFFFF; | |
| border-radius: 999px; | |
| font-size: 11px; | |
| font-weight: 700; | |
| letter-spacing: 0.1em; | |
| text-transform: uppercase; | |
| flex-shrink: 0; | |
| align-self: flex-start; | |
| margin-top: 3px; | |
| } | |
| .olw-announce__body { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| min-width: 0; | |
| flex: 1; | |
| } | |
| .olw-announce__text { | |
| color: #0A0A0A; | |
| font-weight: 600; | |
| font-size: 17px; | |
| line-height: 1.35; | |
| letter-spacing: -0.005em; | |
| } | |
| .olw-announce__text strong { color: #5f3bff; font-weight: 700; } | |
| .olw-announce__sub { | |
| color: var(--olw-text); | |
| font-weight: 400; | |
| font-size: 14.5px; | |
| line-height: 1.4; | |
| } | |
| .olw-announce__arrow { | |
| color: #5f3bff; | |
| font-size: 22px; | |
| line-height: 1; | |
| transition: transform .18s ease; | |
| flex-shrink: 0; | |
| align-self: center; | |
| } | |
| .olw-announce:hover .olw-announce__arrow, | |
| .olw-announce:focus-visible .olw-announce__arrow { transform: translateX(4px); } | |
| @media (max-width: 640px) { | |
| .olw-announce { padding: 12px 14px 12px 12px; gap: 12px; border-radius: 14px; } | |
| .olw-announce__text { font-size: 15px; } | |
| .olw-announce__sub { font-size: 13px; } | |
| .olw-announce__tag { font-size: 10px; padding: 4px 9px; } | |
| .olw-announce__arrow { font-size: 18px; } | |
| } | |
| /* Keep Google Translate's iframe + banner out of the layout */ | |
| body { top: 0 ; } | |
| .goog-te-banner-frame, .skiptranslate { display: none ; } | |
| .goog-text-highlight { background: transparent ; box-shadow: none ; } | |
| .goog-tooltip, .goog-tooltip:hover { background: none ; border: none ; box-shadow: none ; } | |
| /* ──────────────────────────────────────────────────────────────────────── | |
| Olign product page — engineering-report aesthetic. | |
| Thin rules, tabular numbers, dark endpoint card, featured caveats. | |
| ──────────────────────────────────────────────────────────────────────── */ | |
| .olign-page { | |
| max-width: 920px; | |
| margin: 0 auto; | |
| padding: 48px 24px 72px; | |
| color: #1a1a1a; | |
| font-size: 1.02rem; | |
| line-height: 1.68; | |
| } | |
| .olign-page a { color: #5f3bff; text-decoration: none; border-bottom: 1px solid rgba(95,59,255,.25); transition: border-color .15s; } | |
| .olign-page a:hover { border-color: #5f3bff; } | |
| .olign-page code { | |
| font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; | |
| font-size: 0.88em; | |
| background: #F2F2EE; | |
| padding: 1px 6px; | |
| border-radius: 4px; | |
| color: #1a1a1a; | |
| } | |
| .olign-page em { color: #2b0ead; font-style: normal; border-bottom: 1px dotted rgba(43,14,173,.35); } | |
| .olign-hero { border-bottom: 1px solid #E5E5E5; padding-bottom: 22px; margin-bottom: 26px; } | |
| .olign-eyebrow { | |
| font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace; | |
| font-size: 12px; | |
| font-weight: 700; | |
| letter-spacing: 0.08em; | |
| color: #5f3bff; | |
| margin-bottom: 20px; | |
| text-transform: uppercase; | |
| } | |
| /* Product name inside the hero headline, in the Olign purple. */ | |
| .olign-title__brand { color: #5f3bff; } | |
| .olign-title { | |
| font-size: clamp(1.9rem, 3.2vw, 2.6rem); | |
| line-height: 1.12; | |
| letter-spacing: -0.022em; | |
| font-weight: 700; | |
| color: #0A0A0A; | |
| margin: 0 0 14px; | |
| /* Full content width, like the subtitle and the black endpoint bar below. | |
| Was 20ch, which suited the old short headline but wraps the service name | |
| into a narrow column. */ | |
| max-width: none; | |
| } | |
| /* Subtitle runs the full content width, matching the black endpoint bar below | |
| it (.olign-page is 920px less 48px padding = 872px). Was capped at 62ch. */ | |
| .olign-lede { font-size: 1.08rem; line-height: 1.5; color: var(--olw-text); max-width: none; margin: 0; } | |
| /* Dark endpoint card */ | |
| .olign-endpoints { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 12px; | |
| margin: 0 0 32px; | |
| } | |
| .olign-endpoints--single { grid-template-columns: 1fr; } | |
| .olign-endpoint__note { | |
| grid-column: 1 / -1; | |
| margin: 4px 2px 0; | |
| font-size: 0.92rem; | |
| color: var(--olw-text); | |
| } | |
| @media (max-width: 640px) { .olign-endpoints { grid-template-columns: 1fr; } } | |
| .olign-endpoint { | |
| background: #0A0A0A; | |
| color: #E5E5E5; | |
| border-radius: 10px; | |
| padding: 14px 18px; | |
| font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; | |
| font-size: 13.5px; | |
| display: flex; | |
| align-items: center; | |
| gap: 14px; | |
| overflow-x: auto; | |
| } | |
| .olign-endpoint__label { | |
| color: #E5E5E5; | |
| font-size: 10.5px; | |
| font-weight: 700; | |
| letter-spacing: 0.14em; | |
| padding: 2px 8px; | |
| background: #5f3bff; | |
| border: 1px solid #7355f7; | |
| border-radius: 3px; | |
| flex-shrink: 0; | |
| } | |
| .olign-endpoint code { background: transparent; color: #E5E5E5; padding: 0; font-size: inherit; white-space: nowrap; } | |
| /* Links on the two black surfaces, the endpoint card and the CTA box. The page | |
| purple has too little contrast on #0A0A0A, so these stay light. */ | |
| .olign-page .olign-endpoint a, | |
| .olign-page .olign-cta p a { color: #FFFFFF; border-bottom: 1px solid rgba(255,255,255,.4); } | |
| .olign-page .olign-endpoint a:hover, | |
| .olign-page .olign-cta p a:hover { border-bottom-color: #FFFFFF; } | |
| /* Section rhythm */ | |
| .olign-section { margin: 0 0 32px; } | |
| /* Beta-open story: problem statement, then feature blocks in a grid that | |
| folds to one column on narrow screens. */ | |
| .olign-story__lead { | |
| font-size: 1.08rem; | |
| line-height: 1.6; | |
| color: var(--olw-text); | |
| margin: 0 0 14px; | |
| } | |
| .olign-features { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); | |
| gap: 22px 30px; | |
| margin: 26px 0 0; | |
| } | |
| .olign-feature { | |
| padding-top: 14px; | |
| border-top: 2px solid #5f3bff; | |
| } | |
| .olign-feature h3 { | |
| font-size: 1.08rem; | |
| font-weight: 700; | |
| line-height: 1.3; | |
| letter-spacing: -0.01em; | |
| color: #0A0A0A; | |
| margin: 0 0 8px; | |
| } | |
| .olign-feature p { margin: 0; font-size: 0.97rem; line-height: 1.6; color: var(--olw-text); } | |
| .olign-availability p { margin: 0 0 12px; color: var(--olw-text); } | |
| .olign-availability .olign-links { font-weight: 600; margin: 0; } | |
| .olign-section > h2 { | |
| font-size: 1.6rem; | |
| font-weight: 700; | |
| letter-spacing: -0.018em; | |
| color: #0A0A0A; | |
| margin: 0 0 14px; | |
| padding-bottom: 12px; | |
| border-bottom: 2px solid #0A0A0A; | |
| display: inline-block; | |
| padding-right: 24px; | |
| } | |
| .olign-section__intro { font-size: 1rem; color: var(--olw-text); max-width: 68ch; margin: 0 0 24px; } | |
| .olign-note { | |
| font-size: 0.96rem; | |
| color: var(--olw-text); | |
| max-width: 66ch; | |
| margin: 20px 0 0; | |
| padding-left: 18px; | |
| border-left: 3px solid #E5E5E5; | |
| } | |
| /* Table — scientific-paper feel */ | |
| .olign-table-wrap { overflow-x: auto; margin: 8px 0 4px; -webkit-overflow-scrolling: touch; } | |
| .olign-table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| font-size: 0.94rem; | |
| font-variant-numeric: tabular-nums lining-nums; | |
| } | |
| .olign-table caption { text-align: left; font-size: 0.85rem; color: var(--olw-text-2); padding: 0 0 8px; caption-side: top; } | |
| .olign-table th, .olign-table td { padding: 10px 14px; text-align: right; } | |
| .olign-table thead th { | |
| font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace; | |
| font-size: 11px; | |
| font-weight: 700; | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| color: var(--olw-text-2); | |
| border-bottom: 1.5px solid #0A0A0A; | |
| padding-bottom: 8px; | |
| } | |
| .olign-table tbody th { | |
| text-align: left; | |
| font-weight: 500; | |
| color: #0A0A0A; | |
| font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace; | |
| font-size: 0.9rem; | |
| } | |
| .olign-table tbody tr { border-bottom: 1px solid #F0F0EC; } | |
| .olign-table tbody tr:last-child { border-bottom: 1.5px solid #0A0A0A; } | |
| .olign-table td { color: #4a4a4a; } | |
| .olign-table td.best { | |
| color: #0A0A0A; | |
| font-weight: 700; | |
| position: relative; | |
| } | |
| .olign-table td.best::after { | |
| content: ''; | |
| position: absolute; | |
| left: 22%; | |
| right: 22%; | |
| bottom: 6px; | |
| height: 2px; | |
| background: #5f3bff; | |
| opacity: 0.9; | |
| } | |
| /* Bar chart figure — inline SVG, responsive, no JS deps */ | |
| .olign-chart { | |
| margin: 20px 0 8px; | |
| padding: 24px 24px 20px; | |
| background: #FBFAF7; | |
| border: 1px solid #EDEBE4; | |
| border-radius: 12px; | |
| } | |
| /* Chart heading row: title left, FA-Bench mark top-right. */ | |
| .olign-chart__header { | |
| display: flex; | |
| align-items: flex-start; | |
| justify-content: space-between; | |
| gap: 16px; | |
| margin: 0 0 4px; | |
| } | |
| .olign-chart__title-link { | |
| color: #2b0ead; | |
| text-decoration: underline; | |
| text-decoration-thickness: 1px; | |
| text-underline-offset: 3px; | |
| } | |
| .olign-chart__title-link:hover { color: #0A0A0A; } | |
| .olign-chart__brand { flex: 0 0 auto; line-height: 0; margin-top: -2px; } | |
| .olign-chart__brand img { | |
| width: 80px; | |
| height: auto; | |
| border-radius: 8px; | |
| background: #fff; | |
| opacity: 0.95; | |
| transition: opacity .15s ease; | |
| } | |
| .olign-chart__brand:hover img { opacity: 1; } | |
| @media (max-width: 600px) { | |
| .olign-chart__brand img { width: 60px; } | |
| } | |
| .olign-chart__title { | |
| font-family: inherit; | |
| font-size: 1.15rem; | |
| font-weight: 700; | |
| letter-spacing: -0.008em; | |
| color: #0A0A0A; | |
| margin: 0 0 4px; | |
| } | |
| .olign-chart__sub { | |
| font-size: 0.9rem; | |
| color: var(--olw-text-2); | |
| margin: 0 0 20px; | |
| } | |
| .olign-chart__caption { | |
| margin: 18px 0 0; | |
| font-size: 0.82rem; | |
| line-height: 1.55; | |
| color: var(--olw-text-2); | |
| } | |
| .olign-chart__caption em { color: #2b0ead; } | |
| /* FA-Bench attribution under the accuracy chart: logo left, copy right. */ | |
| .olign-fabench { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 22px; | |
| margin: 28px 0 0; | |
| padding: 22px 24px; | |
| background: #F7F7F3; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 16px; | |
| } | |
| .olign-fabench__logo { flex: 0 0 auto; line-height: 0; } | |
| .olign-fabench__logo img { width: 96px; height: auto; border-radius: 10px; background: #fff; } | |
| .olign-fabench__body { min-width: 0; } | |
| .olign-fabench__lede { | |
| margin: 0 0 10px; | |
| font-size: 0.95rem; | |
| line-height: 1.6; | |
| color: var(--olw-text); | |
| } | |
| .olign-fabench__lede strong { color: #2b0ead; font-weight: 700; } | |
| .olign-fabench__links { margin: 0; font-size: 0.9rem; font-weight: 600; } | |
| .olign-fabench__links a { color: #2b0ead; text-decoration: underline; text-underline-offset: 3px; } | |
| .olign-fabench__links a:hover { color: #0A0A0A; } | |
| .olign-fabench__sep { color: var(--olw-text-2); margin: 0 8px; } | |
| @media (max-width: 600px) { | |
| .olign-fabench { flex-direction: column; gap: 14px; padding: 18px; } | |
| .olign-fabench__logo img { width: 72px; } | |
| } | |
| .olign-chart__caption code { font-size: 0.85em; background: #F2F2EE; padding: 1px 5px; border-radius: 3px; } | |
| .olign-chart__caption strong { color: #333; font-weight: 600; } | |
| .olign-chart__legend { | |
| display: flex; | |
| gap: 20px; | |
| margin: 16px 0 0; | |
| font-size: 12.5px; | |
| color: #333; | |
| flex-wrap: wrap; | |
| } | |
| .olign-chart__legend-item { display: inline-flex; align-items: center; gap: 8px; } | |
| .olign-chart__swatch { width: 12px; height: 12px; border-radius: 2px; display: inline-block; } | |
| .olign-chart__svg { | |
| width: 100%; | |
| height: auto; | |
| display: block; | |
| font-family: inherit; | |
| font-variant-numeric: tabular-nums lining-nums; | |
| } | |
| .olign-chart__group-label { | |
| font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace; | |
| font-size: 12px; | |
| font-weight: 700; | |
| letter-spacing: 0.04em; | |
| fill: #333; | |
| } | |
| .olign-chart__bar-label { | |
| font-size: 13px; | |
| font-weight: 700; | |
| fill: #0A0A0A; | |
| } | |
| .olign-chart__system-label { | |
| font-size: 11px; | |
| fill: var(--olw-text-2); | |
| } | |
| /* The y-axis numbers carry an inline fill="#888" and no class. A CSS rule | |
| beats an SVG presentation attribute, so this darkens them. */ | |
| .olign-chart__svg text[fill="#888"] { fill: var(--olw-text-2); } | |
| .olign-chart__grid { stroke: #E5E5E5; stroke-width: 1; } | |
| .olign-chart__axis { stroke: #0A0A0A; stroke-width: 1.5; } | |
| .olign-chart__axis-title { | |
| font-size: 11px; | |
| fill: var(--olw-text-2); | |
| font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace; | |
| letter-spacing: 0.06em; | |
| text-transform: uppercase; | |
| } | |
| /* Featured caveats */ | |
| .olign-caveats { | |
| background: linear-gradient(180deg, #F7F5FF 0%, #FFFFFF 100%); | |
| border: 1px solid #E7E2FF; | |
| border-radius: 16px; | |
| padding: 40px 40px 32px; | |
| margin: 84px 0 68px; | |
| } | |
| @media (max-width: 640px) { .olign-caveats { padding: 28px 22px 22px; } } | |
| .olign-caveats > h2 { border-bottom-color: #5f3bff; } | |
| .olign-caveats__lede { font-size: 1rem; color: var(--olw-text); margin: 0 0 26px; max-width: 60ch; } | |
| .olign-caveats__list { list-style: none; padding: 0; margin: 0; counter-reset: cav; } | |
| .olign-caveats__list li { | |
| counter-increment: cav; | |
| padding: 20px 0 20px 60px; | |
| border-top: 1px solid #E7E2FF; | |
| position: relative; | |
| } | |
| .olign-caveats__list li:first-child { border-top: none; padding-top: 4px; } | |
| .olign-caveats__list li::before { | |
| content: counter(cav, decimal-leading-zero); | |
| position: absolute; | |
| left: 0; | |
| top: 20px; | |
| font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace; | |
| font-size: 13px; | |
| font-weight: 700; | |
| color: #5f3bff; | |
| letter-spacing: 0.05em; | |
| } | |
| .olign-caveats__list li:first-child::before { top: 4px; } | |
| .olign-caveats__list h3 { | |
| font-size: 1.05rem; | |
| font-weight: 700; | |
| color: #0A0A0A; | |
| margin: 0 0 6px; | |
| letter-spacing: -0.008em; | |
| } | |
| .olign-caveats__list p { margin: 0; color: var(--olw-text); font-size: 0.98rem; line-height: 1.62; max-width: 62ch; } | |
| /* References + CTA */ | |
| .olign-refs { margin: 68px 0 48px; } | |
| .olign-refs h3 { | |
| font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace; | |
| font-size: 11px; | |
| font-weight: 700; | |
| letter-spacing: 0.14em; | |
| text-transform: uppercase; | |
| color: var(--olw-text-2); | |
| margin: 0 0 16px; | |
| } | |
| .olign-refs ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 10px; } | |
| .olign-refs li { | |
| display: flex; | |
| gap: 14px; | |
| font-size: 0.95rem; | |
| color: var(--olw-text); | |
| align-items: baseline; | |
| } | |
| .olign-refs li::before { content: '›'; color: #5f3bff; font-weight: 700; } | |
| .olign-cta { | |
| margin: 40px 0 0; | |
| padding: 40px; | |
| background: #0A0A0A; | |
| border-radius: 16px; | |
| color: #FFFFFF; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: flex-start; | |
| gap: 20px; | |
| } | |
| .olign-cta h3 { font-size: 1.35rem; margin: 0; color: #FFFFFF; letter-spacing: -0.012em; } | |
| .olign-cta p { margin: 0; color: #C4C4C4; max-width: 54ch; font-size: 0.98rem; } | |
| .olign-cta a.olign-cta__btn { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 8px; | |
| background: var(--gradient); | |
| color: #FFFFFF; | |
| padding: 12px 24px; | |
| border-radius: 999px; | |
| font-weight: 600; | |
| text-decoration: none; | |
| border-bottom: none; | |
| transition: transform .15s; | |
| } | |
| .olign-cta a.olign-cta__btn:hover { transform: translateY(-1px); border-bottom: none; } | |
| /* Homepage testimonial — more compact */ | |
| .customer-voices { padding: 36px 16px ; } | |
| .customer-voices .title { font-size: 1.1rem; } | |
| .customer-voices .sub-title { font-size: 0.7rem; } | |
| .customer-voices .testimonials-wraper-2 { max-width: 640px; padding: 0 48px; } | |
| .customer-voices .testimonial-4 { max-width: 560px; } | |
| .customer-voices .testimonial-name { | |
| display: block; | |
| font-size: 1.08rem; /* +20% from 0.9rem */ | |
| font-weight: 400 ; | |
| font-style: normal ; | |
| letter-spacing: -0.005em; | |
| color: #9b59b6 ; | |
| margin-bottom: 10px; | |
| } | |
| /* Hide the theme's corner-positioned quote mark */ | |
| .customer-voices .testimonial-4.quote-left:before { content: none ; } | |
| /* Put a small quote glyph inline, right before the title — sits on the same | |
| baseline as the title text, centered with the rest of the card. */ | |
| .customer-voices .testimonial-name:before { | |
| content: "\f121"; /* same flaticon quote char theme2 used */ | |
| font-family: 'Flaticon'; | |
| font-size: 18px; | |
| color: #9b59b6; | |
| margin-right: 8px; | |
| vertical-align: baseline; | |
| display: inline-block; | |
| } | |
| .customer-voices .testimonial-4 p { | |
| font-size: 0.95rem; | |
| line-height: 1.5; | |
| } | |
| .customer-voices .olw-prev, | |
| .customer-voices .olw-next { width: 32px ; height: 32px ; font-size: 14px ; } | |
| /* Contact page — editorial two-column layout */ | |
| .contact-page { padding: 20px 0 64px; } | |
| .contact-page__grid { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 48px; | |
| max-width: 960px; | |
| } | |
| @media (min-width: 768px) { | |
| .contact-page__grid { grid-template-columns: 5fr 7fr; gap: 56px; } | |
| } | |
| .contact-page__title { | |
| font-size: clamp(2rem, 3vw + 0.8rem, 2.8rem); | |
| line-height: 1.1; | |
| letter-spacing: -0.02em; | |
| font-weight: 700; | |
| color: #0A0A0A; | |
| margin: 0 0 16px; | |
| text-wrap: balance; | |
| } | |
| .contact-page__deck { font-size: 1.05rem; line-height: 1.6; color: var(--olw-text); margin: 0 0 24px; } | |
| .contact-page__contacts { list-style: none; padding: 0; margin: 0; font-size: 15px; } | |
| .contact-page__contacts li { | |
| display: flex; align-items: baseline; gap: 12px; | |
| padding: 8px 0; | |
| border-top: 1px solid #E5E5E5; | |
| } | |
| .contact-page__contacts li:last-child { border-bottom: 1px solid #E5E5E5; } | |
| .contact-page__contacts span { | |
| min-width: 72px; | |
| font-size: 11px; | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| color: var(--olw-text-2); | |
| font-weight: 600; | |
| } | |
| .contact-page__contacts a { color: #0A0A0A; text-decoration: none; } | |
| .contact-page__contacts a:hover { text-decoration: underline; } | |
| .contact-page__process { | |
| margin-top: 28px; | |
| padding: 18px 20px; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 12px; | |
| background: #FAFAF7; | |
| } | |
| .contact-page__process-label { | |
| font-size: 11px; | |
| font-weight: 600; | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| color: var(--olw-text-2); | |
| margin-bottom: 6px; | |
| } | |
| .contact-page__process p { margin: 0; color: #1a1a1a; line-height: 1.55; font-size: 14.5px; } | |
| .contact-page__form { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| padding: 24px; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 16px; | |
| background: #FFFFFF; | |
| } | |
| .contact-page__row { display: grid; grid-template-columns: 1fr; gap: 16px; } | |
| @media (min-width: 520px) { .contact-page__row { grid-template-columns: 1fr 1fr; } } | |
| .contact-page__form label { display: flex; flex-direction: column; gap: 4px; } | |
| .contact-page__form label > span { | |
| font-size: 11px; | |
| font-weight: 600; | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| color: var(--olw-text-2); | |
| } | |
| .contact-page__form label > span small { | |
| font-size: 11px; | |
| font-weight: 400; | |
| text-transform: none; | |
| letter-spacing: 0; | |
| color: var(--olw-text-2); | |
| } | |
| .contact-page__form input, | |
| .contact-page__form textarea { | |
| width: 100%; | |
| padding: 10px 14px; | |
| font: inherit; | |
| background: #FAFAF7; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 10px; | |
| color: #0A0A0A; | |
| } | |
| .contact-page__form input:focus, | |
| .contact-page__form textarea:focus { outline: none; border-color: #0A0A0A; background: #FFFFFF; } | |
| .contact-page__form textarea { resize: vertical; min-height: 140px; } | |
| .contact-page__form .btn { align-self: flex-start; margin-top: 6px; } | |
| .contact-page__ok { background: #ECFDF5; color: #065F46; padding: 10px 14px; border-radius: 10px; font-size: 14px; } | |
| .contact-page__err { background: #FEF2F2; color: #991B1B; padding: 10px 14px; border-radius: 10px; font-size: 14px; } | |
| /* Blog list (index.html) — editorial grid */ | |
| .blog-index { padding: 20px 0 64px; } | |
| /* Theme wraps content in .content-inner (padding-top:115px). Zero it out on | |
| editorial pages so they sit flush under the nav like the home page. */ | |
| .content-inner:has(.blog-index), | |
| .content-inner:has(.blog-article), | |
| .content-inner:has(.contact-page) { padding-top: 0 ; padding-bottom: 0 ; } | |
| .content-inner:has(.blog-index) .col-xl-8, | |
| .content-inner:has(.blog-article) .col-xl-8, | |
| .content-inner:has(.contact-page) .col-xl-8, | |
| .content-inner:has(.blog-index) .col-lg-8, | |
| .content-inner:has(.blog-article) .col-lg-8, | |
| .content-inner:has(.contact-page) .col-lg-8 { | |
| margin-bottom: 0 ; | |
| max-width: 100% ; | |
| flex: 0 0 100% ; | |
| width: 100% ; | |
| } | |
| .blog-index__head { max-width: 780px; margin: 0 0 16px; } | |
| .blog-index__eyebrow { | |
| display: inline-block; | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: #9b59b6; | |
| margin-bottom: 10px; | |
| } | |
| .blog-index__title { | |
| font-size: clamp(1.8rem, 3vw + 0.8rem, 2.4rem); | |
| line-height: 1.15; | |
| letter-spacing: -0.02em; | |
| font-weight: 700; | |
| color: #0A0A0A; | |
| margin: 0 0 10px; | |
| text-wrap: balance; | |
| } | |
| .blog-index__deck { color: var(--olw-text); font-size: 1rem; margin: 0; } | |
| .blog-index__grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); | |
| gap: 40px 28px; | |
| } | |
| .blog-card { display: flex; flex-direction: column; text-decoration: none; } | |
| .blog-card__media { | |
| aspect-ratio: 4 / 3; | |
| overflow: hidden; | |
| border-radius: 16px; | |
| background: #F2F2EE; | |
| display: block; | |
| margin-bottom: 16px; | |
| } | |
| /* object-fit: contain shows the entire image (letterboxed if aspect ratio differs) | |
| so text/logos in banners don't get cropped to the center. */ | |
| .blog-card__media img { width: 100%; height: 100%; object-fit: contain; transition: transform .4s ease; display:block; } | |
| .blog-card:hover .blog-card__media img { transform: scale(1.02); } | |
| .blog-card__body { display: flex; flex-direction: column; gap: 6px; } | |
| .blog-card__cat { | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| font-size: 11px; | |
| font-weight: 600; | |
| color: var(--olw-text-2); | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| .blog-card__badge { | |
| display: inline-block; | |
| padding: 2px 8px; | |
| background: #5f3bff; | |
| color: #fff; | |
| border-radius: 999px; | |
| font-size: 10px; | |
| letter-spacing: 0.06em; | |
| } | |
| /* Subnav on /blog/ umbrella (links to sub-type filters like /blog/video/) */ | |
| .blog-index__subnav { | |
| margin-top: 8px; | |
| display: flex; | |
| gap: 18px; | |
| font-size: 14px; | |
| } | |
| .blog-index__subnav a { | |
| color: #5f3bff; | |
| text-decoration: none; | |
| font-weight: 600; | |
| } | |
| .blog-index__subnav a:hover { text-decoration: underline; } | |
| .blog-card__title { | |
| font-size: 1.2rem; | |
| line-height: 1.25; | |
| letter-spacing: -0.015em; | |
| font-weight: 600; | |
| margin: 0; | |
| } | |
| .blog-card__title a { color: #0A0A0A; text-decoration: none; } | |
| .blog-card__title a:hover { color: #525252; } | |
| .blog-card__excerpt { | |
| color: var(--olw-text); | |
| font-size: 14.5px; | |
| line-height: 1.5; | |
| margin: 0; | |
| display: -webkit-box; | |
| -webkit-line-clamp: 2; | |
| -webkit-box-orient: vertical; | |
| overflow: hidden; | |
| } | |
| .blog-card__meta { color: var(--olw-text-2); font-size: 12.5px; display: flex; gap: 8px; align-items: center; margin-top: 6px; } | |
| .blog-card__sep { color: #d0d0d0; } | |
| .blog-index__pagination { | |
| display: flex; justify-content: center; align-items: center; gap: 12px; | |
| margin-top: 56px; font-size: 14px; | |
| } | |
| .blog-index__pag-btn { | |
| padding: 6px 14px; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 999px; | |
| color: #525252; | |
| text-decoration: none; | |
| } | |
| .blog-index__pag-btn:hover { color: #FAFAF7; background: #0A0A0A; border-color: #0A0A0A; } | |
| .blog-index__pag-count { color: var(--olw-text-2); } | |
| .blog-index__empty { padding: 80px 0; text-align: center; color: var(--olw-text-2); } | |
| /* Blog article — editorial layout matching the home page's typographic language */ | |
| /* Watermark graphic behind every article, lifted out of the one post that | |
| carried it inline so all posts share it. */ | |
| .blog-article { | |
| padding: 20px 0 32px; | |
| background-image: url(../images/background/bg15.png); | |
| background-repeat: no-repeat; | |
| background-position: center right; | |
| background-size: contain; | |
| } | |
| .blog-article__inner { max-width: 720px; margin: 0 auto; } | |
| .blog-article__head { margin-bottom: 18px; } | |
| .blog-article__eyebrow { | |
| display: inline-block; | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: #9b59b6; | |
| text-decoration: none; | |
| margin-bottom: 14px; | |
| } | |
| .blog-article__eyebrow:hover { color: #0A0A0A; } | |
| .blog-article__title { | |
| /* 23px at 375px vp → 46.1px at 1440px+ (halved openai.com curve, then +20% | |
| twice; divisor set so the slope keeps the same shape). */ | |
| font-size: clamp(23.04px, calc(23.04px + (100vw - 375px) / 46.22), 46.08px); | |
| line-height: 1.15; | |
| letter-spacing: -0.02em; | |
| font-weight: 700; | |
| color: #0A0A0A; | |
| margin: 0 0 16px; | |
| text-wrap: balance; | |
| } | |
| /* The header block sits in the same 720px column as the body copy — eyebrow, | |
| title, deck and byline all share the body's left edge and width. */ | |
| .blog-article__eyebrow, | |
| .blog-article__title, | |
| .blog-article__deck, | |
| .blog-article__meta { text-align: left; } | |
| .blog-article__deck { max-width: none; } | |
| .blog-article__deck { | |
| font-size: 1.18rem; /* 17px at the 90% root — same as body, as on openai.com */ | |
| line-height: 1.647; | |
| color: var(--olw-text); | |
| margin: 0 0 20px; | |
| text-wrap: pretty; | |
| } | |
| .blog-article__meta { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 8px; | |
| font-size: 14px; | |
| color: #525252; | |
| } | |
| .blog-article__author { color: #0A0A0A; font-weight: 500; text-decoration: none; } | |
| .blog-article__author:hover { text-decoration: underline; } | |
| .blog-article__sep { color: var(--olw-text-2); } | |
| .blog-article__hero { | |
| width: 80%; | |
| margin: 18px auto; | |
| overflow: hidden; | |
| border-radius: 20px; | |
| background: #F2F2EE; | |
| } | |
| .blog-article__hero img { display:block; width: 100%; height: auto; } | |
| /* Lite YouTube facade: thumbnail with big play button; iframe loads only when clicked */ | |
| .blog-article__body .video-lite { | |
| position: relative; | |
| display: block; | |
| width: 100%; | |
| aspect-ratio: 16 / 9; | |
| margin: 1.75em 0; | |
| padding: 0; | |
| border: none; | |
| border-radius: 16px; | |
| overflow: hidden; | |
| background: #000; | |
| cursor: pointer; | |
| } | |
| .blog-article__body .video-lite img { | |
| width: 100%; | |
| height: 100%; | |
| object-fit: cover; | |
| display: block; | |
| transition: opacity .25s ease, transform .35s ease; | |
| } | |
| .blog-article__body .video-lite:hover img, | |
| .blog-article__body .video-lite:focus-visible img { | |
| opacity: .78; | |
| transform: scale(1.02); | |
| } | |
| .blog-article__body .video-lite__play { | |
| position: absolute; | |
| inset: 0; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| pointer-events: none; | |
| } | |
| .blog-article__body .video-lite__play svg { | |
| filter: drop-shadow(0 4px 16px rgba(0,0,0,.55)); | |
| transition: transform .18s ease; | |
| } | |
| .blog-article__body .video-lite:hover .video-lite__play svg, | |
| .blog-article__body .video-lite:focus-visible .video-lite__play svg { | |
| transform: scale(1.12); | |
| } | |
| /* Fullscreen-ish modal player (does not enter native fullscreen — user can close and stay on olewave.com) */ | |
| .olw-video-modal { | |
| position: fixed; | |
| inset: 0; | |
| z-index: 10000; | |
| background: rgba(0, 0, 0, .94); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 60px 40px 40px; | |
| animation: olw-modal-in .18s ease-out; | |
| } | |
| .olw-video-modal[hidden] { display: none; } | |
| @keyframes olw-modal-in { | |
| from { opacity: 0; } | |
| to { opacity: 1; } | |
| } | |
| .olw-video-modal__inner { | |
| position: relative; | |
| width: 100%; | |
| max-width: 1600px; | |
| aspect-ratio: 16 / 9; | |
| max-height: calc(100vh - 100px); | |
| } | |
| .olw-video-modal__player, | |
| .olw-video-modal__player iframe { | |
| width: 100%; | |
| height: 100%; | |
| } | |
| .olw-video-modal__player iframe { | |
| border: 0; | |
| border-radius: 8px; | |
| } | |
| .olw-video-modal__close { | |
| position: absolute; | |
| top: 16px; | |
| right: 20px; | |
| width: 44px; | |
| height: 44px; | |
| background: rgba(255, 255, 255, .08); | |
| border: none; | |
| color: #fff; | |
| font-size: 30px; | |
| line-height: 44px; | |
| cursor: pointer; | |
| padding: 0; | |
| border-radius: 50%; | |
| transition: background .15s, transform .15s; | |
| } | |
| .olw-video-modal__close:hover { | |
| background: rgba(255, 255, 255, .18); | |
| transform: scale(1.06); | |
| } | |
| @media (max-width: 640px) { | |
| .olw-video-modal { padding: 60px 12px 12px; } | |
| .olw-video-modal__close { top: 10px; right: 10px; } | |
| } | |
| /* Contact CTA appended to tutorial posts */ | |
| .blog-article__cta { | |
| margin: 40px 0 24px; | |
| padding: 24px 28px; | |
| background: #F7F7F3; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 16px; | |
| font-size: 1rem; | |
| line-height: 1.55; | |
| } | |
| .blog-article__cta p { margin: 0 0 10px; } | |
| .blog-article__cta p:last-child { margin-bottom: 0; } | |
| .blog-article__cta a { font-weight: 600; } | |
| .blog-article__body { | |
| font-size: 1.18rem; /* 17px / 12.75pt at the 90% root — matches openai.com's --type-p1 */ | |
| line-height: 1.647; /* 28px, as on openai.com */ | |
| color: inherit; | |
| font-weight: 400; | |
| } | |
| .blog-article__body p, | |
| .blog-article__body li { font-weight: 400; } | |
| .blog-article__body p { margin: 0 0 1.15em; } | |
| /* Figure + caption — centred image with caption beneath. | |
| Use <figure><img ...><figcaption>Fig 1. …</figcaption></figure> in a post, | |
| or a bare markdown image, which is centred by the :only-child rule below. */ | |
| .blog-article__body figure { margin: 1.2em 0; } | |
| .blog-article__body figure img { display: block; margin: 0 auto; } | |
| .blog-article__body figcaption { | |
| margin-top: 0.6em; | |
| font-size: 0.875rem; | |
| line-height: 1.5; | |
| color: var(--olw-text-2); | |
| text-align: center; | |
| text-wrap: pretty; | |
| } | |
| .blog-article__body p > img:only-child { display: block; margin: 0.6em auto; } | |
| .blog-article__body h1, | |
| .blog-article__body h2, | |
| .blog-article__body h3, | |
| .blog-article__body h4 { | |
| font-weight: 700; | |
| color: #0A0A0A; | |
| letter-spacing: -0.015em; | |
| margin: 1.35em 0 0.5em; | |
| line-height: 1.25; | |
| } | |
| .blog-article__body h2 { font-size: 1.6rem; } | |
| .blog-article__body h3 { font-size: 1.3rem; } | |
| .blog-article__body h4 { font-size: 1.1rem; } | |
| .blog-article__body img { max-width: 100%; height: auto; border-radius: 12px; margin: 0.6em 0; } | |
| .blog-article__body a { color: #0A0A0A; text-decoration: underline; text-decoration-color: #E5E5E5; text-underline-offset: 3px; } | |
| .blog-article__body a:hover { text-decoration-color: #0A0A0A; } | |
| .blog-article__body blockquote { | |
| border-left: 3px solid #0A0A0A; | |
| padding: 4px 0 4px 20px; | |
| margin: 1.5em 0; | |
| color: var(--olw-text); | |
| font-style: italic; | |
| } | |
| /* Inline code — subtle light chip inside prose */ | |
| .blog-article__body code { | |
| font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Consolas, 'Courier New', monospace; | |
| font-size: 0.9em; | |
| background: #F2F2EE; | |
| color: #0A0A0A; | |
| padding: 1px 6px; | |
| border-radius: 6px; | |
| } | |
| /* Force transparent background on prose (defeats any theme/CKEditor bg tints on <p>/<span>) */ | |
| .blog-article__body p, | |
| .blog-article__body p span, | |
| .blog-article__body li, | |
| .blog-article__body li span { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Modern VSCode-dark code block — applied automatically to any <pre> in blog body, | |
| or explicitly via class="code-block" (or "code-json" for JSON snippets). */ | |
| .blog-article__body pre, | |
| .blog-article__body pre.code-block, | |
| .blog-article__body pre.code-json, | |
| .code-block { | |
| background: #1E1E1E; | |
| border: 1px solid #2A2A2A; | |
| border-radius: 8px; | |
| padding: 18px 20px; | |
| overflow-x: auto; | |
| font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Consolas, 'Courier New', monospace; | |
| font-size: 13px; | |
| line-height: 1.55; | |
| color: #D4D4D4; | |
| white-space: pre; | |
| margin: 1.5em 0; | |
| box-shadow: 0 1px 2px rgba(0,0,0,0.08); | |
| } | |
| .blog-article__body pre code, | |
| .blog-article__body pre.code-block code, | |
| .blog-article__body pre.code-json code, | |
| .code-block code { | |
| background: transparent; | |
| border: none; | |
| padding: 0; | |
| font-size: inherit; | |
| color: inherit; | |
| white-space: pre; | |
| } | |
| /* Prism.js token colors — VSCode "Modern Dark" (matches Google Antigravity default). | |
| Applies wherever Prism has tokenized <code class="language-*"> content. */ | |
| .blog-article__body pre[class*="language-"], | |
| .blog-article__body code[class*="language-"], | |
| .code-block[class*="language-"], | |
| pre[class*="language-"], | |
| code[class*="language-"] { | |
| color: #CCCCCC; | |
| text-shadow: none; | |
| background: #1F1F1F; | |
| } | |
| .token.property, | |
| .token.tag, | |
| .token.symbol, | |
| .token.deleted, | |
| .token.attr-name { color: #9CDCFE; } /* keys — light blue */ | |
| .token.string, | |
| .token.char, | |
| .token.attr-value, | |
| .token.regex, | |
| .token.inserted { color: #CE9178; } /* string values — orange */ | |
| .token.number, | |
| .token.hexcode { color: #B5CEA8; } /* numbers — soft green */ | |
| .token.boolean, | |
| .token.constant, | |
| .token.keyword, | |
| .token.builtin { color: #569CD6; } /* booleans/keywords — blue */ | |
| .token.null { color: #569CD6; font-style: italic; } | |
| .token.operator, | |
| .token.punctuation, | |
| .token.entity { color: #808080; } /* :, {, }, [, ], , */ | |
| .token.comment, | |
| .token.prolog, | |
| .token.doctype, | |
| .token.cdata { color: #6A9955; font-style: italic; } /* comments — green */ | |
| .token.function, | |
| .token.class-name { color: #DCDCAA; } /* function names — yellow */ | |
| .token.variable, | |
| .token.parameter { color: #9CDCFE; } /* variables — light blue */ | |
| .token.important { color: #C586C0; font-weight: bold; } | |
| .blog-article__body ul, | |
| .blog-article__body ol { padding-left: 1.25em; margin: 0 0 1.15em; } | |
| .blog-article__body li { margin: 0.35em 0; } | |
| .blog-article__body table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| margin: 1.25em 0; | |
| font-size: 0.95em; | |
| } | |
| .blog-article__body th, | |
| .blog-article__body td { border: 1px solid #E5E5E5; padding: 8px 10px; text-align: left; } | |
| .blog-article__body th { background: #F7F7F3; font-weight: 600; } | |
| .blog-article__tags { | |
| display: flex; flex-wrap: wrap; gap: 8px; | |
| margin: 40px 0 24px; | |
| padding-top: 24px; | |
| border-top: 1px solid #E5E5E5; | |
| } | |
| .blog-article__tag { | |
| padding: 4px 12px; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 999px; | |
| font-size: 13px; | |
| color: #525252; | |
| text-decoration: none; | |
| } | |
| .blog-article__tag:hover { color: #0A0A0A; border-color: #0A0A0A; } | |
| .blog-article__share { | |
| display: flex; flex-wrap: wrap; align-items: center; gap: 12px; | |
| padding: 16px 0 0 0; | |
| font-size: 14px; | |
| } | |
| .blog-article__share-label { | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| font-size: 11px; | |
| font-weight: 600; | |
| color: var(--olw-text-2); | |
| margin-right: 4px; | |
| } | |
| .blog-article__share a { | |
| padding: 4px 12px; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 999px; | |
| color: #525252; | |
| text-decoration: none; | |
| font-size: 13px; | |
| } | |
| .blog-article__share a:hover { color: #FAFAF7; background: #0A0A0A; border-color: #0A0A0A; } | |
| .blog-article__comments { | |
| margin-top: 56px; | |
| padding-top: 40px; | |
| border-top: 1px solid #E5E5E5; | |
| } | |
| .blog-article__comments h2 { | |
| font-size: 1.3rem; | |
| letter-spacing: -0.01em; | |
| margin: 0 0 20px; | |
| } | |
| .blog-article__comments .comment-list { list-style: none; padding: 0; margin: 0 0 40px; } | |
| .blog-article__comments .comment { margin-bottom: 20px; } | |
| .blog-article__comments .comment-body { | |
| border: 1px solid #E5E5E5; | |
| border-radius: 12px; | |
| padding: 16px 18px; | |
| background: #fff; | |
| } | |
| .blog-article__comments .comment-author { display:flex; align-items:center; gap: 10px; margin-bottom: 6px; } | |
| .blog-article__comments .avatar { width: 32px; height: 32px; border-radius: 32px; } | |
| .blog-article__comments cite { font-style: normal; font-weight: 600; color: #0A0A0A; } | |
| .blog-article__comments .reply { margin-top: 8px; } | |
| .blog-article__comments .reply a { font-size: 13px; color: #525252; } | |
| .blog-article__comments .reply a:hover { color: #0A0A0A; } | |
| .blog-article__comments .comment-respond input[type="text"], | |
| .blog-article__comments .comment-respond input[type="email"], | |
| .blog-article__comments .comment-respond textarea { | |
| width: 100%; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 10px; | |
| padding: 10px 12px; | |
| font: inherit; | |
| background: #fff; | |
| } | |
| .blog-article__comments .comment-respond label { | |
| display: block; | |
| font-size: 13px; | |
| color: #525252; | |
| margin-bottom: 4px; | |
| } | |
| .blog-article__comments .comment-respond p { margin: 0 0 14px; } | |
| /* Floating tooltip for nav items that have a description (uses data-tooltip attr) */ | |
| a[data-tooltip] { position: relative; } | |
| a[data-tooltip]::after { | |
| content: attr(data-tooltip); | |
| position: absolute; | |
| left: 50%; | |
| top: calc(100% + 10px); | |
| transform: translate(-50%, 4px); | |
| background: #0A0A0A; | |
| color: #FAFAF7; | |
| padding: 8px 12px; | |
| border-radius: 8px; | |
| font-size: 12.5px; | |
| font-weight: 500; | |
| line-height: 1.3; | |
| white-space: nowrap; | |
| max-width: 280px; | |
| text-transform: none; | |
| letter-spacing: 0; | |
| box-shadow: 0 8px 24px rgba(0,0,0,0.18); | |
| pointer-events: none; | |
| opacity: 0; | |
| visibility: hidden; | |
| transition: opacity .18s ease, transform .22s cubic-bezier(.2,.9,.3,1.2), visibility 0s linear .2s; | |
| z-index: 100; | |
| } | |
| a[data-tooltip]::before { | |
| content: ""; | |
| position: absolute; | |
| left: 50%; | |
| top: 100%; | |
| transform: translate(-50%, 2px); | |
| border: 6px solid transparent; | |
| border-bottom-color: #0A0A0A; | |
| margin-top: -2px; | |
| opacity: 0; | |
| visibility: hidden; | |
| transition: opacity .18s ease, transform .22s cubic-bezier(.2,.9,.3,1.2), visibility 0s linear .2s; | |
| pointer-events: none; | |
| z-index: 101; | |
| } | |
| a[data-tooltip]:hover::after, | |
| a[data-tooltip]:focus-visible::after, | |
| a[data-tooltip]:hover::before, | |
| a[data-tooltip]:focus-visible::before { | |
| opacity: 1; | |
| visibility: visible; | |
| transform: translate(-50%, 0); | |
| transition-delay: 0s; | |
| } | |
| /* Kill the WOW.js entrance animations entirely — show content instantly */ | |
| .wow, | |
| [data-wow-delay], | |
| [data-wow-duration] { | |
| animation: none ; | |
| -webkit-animation: none ; | |
| animation-delay: 0s ; | |
| -webkit-animation-delay: 0s ; | |
| animation-duration: 0s ; | |
| -webkit-animation-duration: 0s ; | |
| visibility: visible ; | |
| opacity: 1 ; | |
| transform: none ; | |
| } | |
| /* Consulting page, "How we start" (bin/patch_consulting_routine.py). Two | |
| numbered cards side by side, stacked on phones. The numbers come from a CSS | |
| counter, so no translation has to carry them. The home page links to | |
| #how-we-start, and scroll-margin keeps the heading clear of the sticky header. */ | |
| .olw-steps-head { | |
| font-size: 24px; | |
| font-weight: 700; | |
| letter-spacing: -0.015em; | |
| color: #0A0A0A; | |
| margin: 36px 0 16px; | |
| scroll-margin-top: 110px; | |
| } | |
| .olw-steps { | |
| list-style: none; | |
| counter-reset: olw-step; | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 16px; | |
| padding: 0; | |
| margin: 0 0 16px; | |
| } | |
| .olw-steps__item { | |
| counter-increment: olw-step; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: flex-start; | |
| padding: 22px 22px 22px; | |
| border: 1px solid #E5E5E5; | |
| border-radius: 14px; | |
| background: #fff; | |
| } | |
| .olw-steps__item::before { | |
| content: counter(olw-step); | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 28px; | |
| height: 28px; | |
| margin-bottom: 12px; | |
| border-radius: 50%; | |
| background: #5f3bff; | |
| color: #fff; | |
| font-size: 14px; | |
| font-weight: 700; | |
| } | |
| .olw-steps__title { | |
| font-size: 18px; | |
| font-weight: 700; | |
| line-height: 1.3; | |
| color: #0A0A0A; | |
| margin: 0 0 8px; | |
| } | |
| .olw-steps__item p { margin: 0 0 18px; font-size: 16px; line-height: 1.6; color: var(--olw-text); } | |
| .olw-steps__item p.olw-steps__action { margin: auto 0 0; } | |
| .olw-steps__note { margin: 0; font-size: 15px; line-height: 1.6; color: var(--olw-text-2); } | |
| @media only screen and (max-width: 767px) { | |
| .olw-steps { grid-template-columns: 1fr; } | |
| } | |