Design Specification — Optivora - Paid Ads Agency Template | Framplates
| Field | Value |
| Site / Project | https://framplates.com/optivora |
| Analyzed on | 2026-09-03 |
| Analysis mode | Automated code extraction (no AI) |
Overview
This design system was extracted programmatically from the source page. It is built on a light canvas (#FFFFFF), ink text (#000000), a vivid accent (#2563EB). All type is set in 'Inter'. Detected font weights: 300, 400, 500, 600, 700, 800, 900. Detected style signatures: technical / mono accents.
Logo asset(s): https://framplates.com/apple-touch-icon.png
Color System
Detected palette (by frequency)
| Hex | RGB | HSL | Count |
#000000 | 0, 0, 0 | 0° 0% 0% | 16 |
#FFFFFF | 255, 255, 255 | 0° 0% 100% | 12 |
#111827 | 17, 24, 39 | 221° 39% 11% | 9 |
#6B7280 | 107, 114, 128 | 220° 9% 46% | 6 |
#374151 | 55, 65, 81 | 217° 19% 27% | 6 |
#10B981 | 16, 185, 129 | 160° 84% 39% | 6 |
#E5E7EB | 229, 231, 235 | 220° 13% 91% | 5 |
#9CA3AF | 156, 163, 175 | 218° 11% 65% | 5 |
#2563EB | 37, 99, 235 | 221° 83% 53% | 4 |
#D1D5DB | 209, 213, 219 | 216° 12% 84% | 4 |
#1F2937 | 31, 41, 55 | 215° 28% 17% | 4 |
#4B5563 | 75, 85, 99 | 215° 14% 34% | 3 |
#F3F4F6 | 243, 244, 246 | 220° 14% 96% | 1 |
#D1FAE5 | 209, 250, 229 | 149° 80% 90% | 1 |
#06B6D4 | 6, 182, 212 | 189° 94% 43% | 1 |
#A7F3D0 | 167, 243, 208 | 152° 76% 80% | 1 |
#030712 | 3, 7, 18 | 224° 71% 4% | 1 |
#3B82F6 | 59, 130, 246 | 217° 91% 60% | 1 |
#3E3E30 | 62, 62, 48 | 60° 13% 22% | 1 |
Assigned roles
Roles are taken from the page's own semantic CSS custom properties when present, otherwise inferred from usage frequency + luminance/saturation.
| Token | Hex | RGB | HSL |
--color-primary | #10B981 | 16, 185, 129 | 160° 84% 39% |
--color-accent | #2563EB | 37, 99, 235 | 221° 83% 53% |
--color-background | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
--color-surface | #F3F4F6 | 243, 244, 246 | 220° 14% 96% |
--color-text-primary | #000000 | 0, 0, 0 | 0° 0% 0% |
--color-secondary | #000000 | 0, 0, 0 | 0° 0% 0% |
--color-text-secondary | #6B7280 | 107, 114, 128 | 220° 9% 46% |
--color-border | #374151 | 55, 65, 81 | 217° 19% 27% |
--color-on-primary | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
--color-on-secondary | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
--color-on-accent | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
Surface ramp (derived from detected light neutrals)
| Token | Hex |
--color-surface-container-lowest | #FFFFFF |
--color-surface-container-low | #F3F4F6 |
--color-surface-container | #E5E7EB |
--color-surface-container-high | #D1D5DB |
Gradients
linear-gradient(-45deg,transparent 0%,transparent 25%,black 50%,transparent 75%,transparent 100%)
> 3 additional gradient definitions were framework utility templates (unresolvable var(--tw-gradient-stops)) and were omitted.
Typography
Primary typeface: Inter — stack: 'Inter'
Font stacks (most used first)
'Inter'
inherit
ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"
ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace
Inter,sans-serif
var(--font)
Derived type scale
| Token | Size |
| display | 48px |
| headline-lg | 42.7px |
| headline-md | 30px |
| title-lg | 21.3px |
| body-lg | 18px |
| body-md | 16px |
| label-md | 14.4px |
Font sizes (by frequency)
| Size | Count |
| .875em | 7 |
| .8888889em | 5 |
| 1.125rem | 3 |
| 1.875rem | 3 |
| 1rem | 2 |
| 1.25em | 2 |
| 1.5rem | 2 |
| 1.25rem | 2 |
| 1em | 1 |
| 2.25em | 1 |
| 1.5em | 1 |
| .9em | 1 |
| 1.2222222em | 1 |
| 2.6666667em | 1 |
| 1.6666667em | 1 |
| 1.3333333em | 1 |
| .8666667em | 1 |
| 2.25rem | 1 |
| 3rem | 1 |
| .875rem | 1 |
Weights in use: 300, 400, 500, 600, 700, 800, 900
Line heights (by frequency)
| Value | Count |
| 1.5 | 5 |
| 1 | 4 |
| 1.75rem | 4 |
| 2.25rem | 3 |
| 1.6 | 2 |
| 1.3333333 | 2 |
| 1.7142857 | 2 |
| 1.75 | 2 |
| 2rem | 2 |
| 0 | 1 |
Letter spacing (by frequency)
| Value | Count |
| -.025em | 1 |
| .05em | 1 |
Spacing
Derived spacing scale
| Token | Value |
| unit | 8px |
| xs | 2px |
| sm | 8px |
| md | 16px |
| lg | 32px |
| xl | 96px |
Raw values (by frequency)
| Value | Count |
| 1.5rem | 4 |
| 1rem | 3 |
| 2rem | 3 |
| .5rem | 2 |
| .25rem | 2 |
| 6rem | 2 |
| 3rem | 1 |
| .75rem | 1 |
| .125rem | 1 |
Borders & Radius
Derived radius tokens
| Token | Value |
| sm | 5px |
| md | 8px |
| lg | 16px |
| pill | 100% |
Raw values (resolved, by frequency)
| Radius | Count |
0 | 4 |
.375rem | 3 |
.3125rem | 2 |
100% | 1 |
1rem | 1 |
9999px | 1 |
.5rem | 1 |
.75rem | 1 |
Shadows
Derived elevation
| Token | Value |
| md | 0 0 0 1px ,0 3px 0 |
All detected shadows
Layout
Container max-width: 768px
Grid columns (largest detected grid): 5
Breakpoints
- 420px
- 640px
- 768px
- 1024px
- 1280px
- 1536px
Animation & Motion
Easing curves
cubic-bezier(.4,0,.6,1)
cubic-bezier(.4,0,.2,1)
Keyframes
@keyframes pulse { 50%{opacity:.5} }
@keyframes bp-bar { 0%{transform:translate(-100%)} to{transform:translate(0)} }
Animations
pulse 2s cubic-bezier(.4,0,.6,1) infinite
Components
Extracted from the page's own interactive elements (classes → resolved CSS values).
button-primary — sample text: “Categories”
| Property | Value |
| fontSize | 14px |
| fontWeight | 500 |
| textColor | #D1D5DB |
| transition | color, background-color, border-color 200ms cubic-bezier(0.4, 0, 0.2, 1) |
| textColor (hover) | #FFFFFF |
button-secondary — sample text: “Get Free Template”
| Property | Value |
| textColor | #FFFFFF |
| fontWeight | 700 |
| rounded | 12px |
| padding | 16px 32px |
| transition | all 300ms cubic-bezier(0.4, 0, 0.2, 1) |
navigation-link
| Property | Value |
| fontSize | 14px |
| textColor | #D1D5DB |
| padding | 4px 0 |
| transition | color, background-color, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) |
badge
| Property | Value |
| textColor | #D1D5DB |
| rounded | 9999px |
| fontSize | 14px |
| padding | 6px 16px |
| border | 1px solid currentColor |
| transition | all 300ms cubic-bezier(0.4, 0, 0.2, 1) |
| backgroundColor (hover) | #1F2937 |
Source Design Tokens (CSS custom properties)
:root {
--accent-color: #10b981;
--input-bg: rgb(62, 62, 48);
--blockquote-color: 148, 146, 143;
}
Do's and Don'ts
Do
- Do reserve the accent
#2563EB for interactive highlights and key moments — it is used sparingly on the source page.
- Do keep the canvas at
#FFFFFF; surfaces should stay within the detected neutral ramp.
- Do stick to the detected font weight(s): 300, 400, 500, 600, 700, 800, 900.
- Do align spacing to the 8px base unit derived from the page.
Don't
- Don't introduce colors outside the detected palette — every hue above was found in the source.
Design Tokens (copy-paste)
:root {
--color-primary: #10B981;
--color-accent: #2563EB;
--color-background: #FFFFFF;
--color-surface: #F3F4F6;
--color-text-primary: #000000;
--color-secondary: #000000;
--color-text-secondary: #6B7280;
--color-border: #374151;
--color-on-primary: #FFFFFF;
--color-on-secondary: #FFFFFF;
--color-on-accent: #FFFFFF;
--color-surface-container-lowest: #FFFFFF;
--color-surface-container-low: #F3F4F6;
--color-surface-container: #E5E7EB;
--color-surface-container-high: #D1D5DB;
--font-sans: 'Inter';
--font-size-display: 48px;
--font-size-headline-lg: 42.7px;
--font-size-headline-md: 30px;
--font-size-title-lg: 21.3px;
--font-size-body-lg: 18px;
--font-size-body-md: 16px;
--font-size-label-md: 14.4px;
--radius-sm: 5px;
--radius-md: 8px;
--radius-lg: 16px;
--radius-pill: 100%;
--shadow-md: 0 0 0 1px ,0 3px 0;
--space-xs: 2px;
--space-sm: 8px;
--space-md: 16px;
--space-lg: 32px;
--space-xl: 96px;
--tracking-display: -.025em;
--tracking-label: .05em;
--container-max: 768px;
}