fortify-schema
Version:
A modern TypeScript validation library designed around familiar interface syntax and powerful conditional validation. Experience schema validation that feels natural to TypeScript developers while unlocking advanced runtime validation capabilities.
343 lines (290 loc) • 6.04 kB
CSS
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Fira+Code:wght@400;500;600&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', sans-serif;
line-height: 1.6;
}
code, pre {
font-family: 'Fira Code', monospace;
}
/* Gradient Background */
.gradient-bg {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
/* Navigation */
.nav-link {
padding: 0.5rem 1rem;
color: #4b5563;
font-weight: 500;
text-decoration: none;
border-bottom: 2px solid transparent;
transition: all 0.3s ease;
white-space: nowrap;
}
.nav-link:hover {
color: #7c3aed;
border-bottom-color: #7c3aed;
}
.nav-link.active {
color: #7c3aed;
border-bottom-color: #7c3aed;
}
/* Buttons */
.btn-primary {
display: inline-block;
padding: 0.75rem 2rem;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
font-weight: 600;
border-radius: 0.5rem;
text-decoration: none;
transition: all 0.3s ease;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
}
.btn-secondary {
display: inline-block;
padding: 0.75rem 2rem;
background: white;
color: #7c3aed;
font-weight: 600;
border: 2px solid #7c3aed;
border-radius: 0.5rem;
text-decoration: none;
transition: all 0.3s ease;
}
.btn-secondary:hover {
background: #7c3aed;
color: white;
}
/* Code Blocks */
.code-block {
background: #1e1e1e;
border-radius: 0.5rem;
padding: 1.5rem;
overflow-x: auto;
margin: 1rem 0;
}
.code-block code {
color: #d4d4d4;
font-size: 0.875rem;
line-height: 1.7;
}
/* Inline Code */
:not(pre) > code {
background: #f3f4f6;
padding: 0.125rem 0.375rem;
border-radius: 0.25rem;
font-size: 0.875rem;
color: #7c3aed;
}
/* Cards */
.section-card {
background: white;
border-radius: 0.75rem;
padding: 2rem;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
.section-card:hover {
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
}
.feature-card {
background: white;
border-radius: 0.75rem;
padding: 2rem;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
text-align: center;
}
.feature-card:hover {
transform: translateY(-4px);
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
}
.doc-link-card {
display: block;
background: white;
border-radius: 0.75rem;
padding: 1.5rem;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
text-decoration: none;
color: inherit;
border: 2px solid transparent;
}
.doc-link-card:hover {
border-color: #7c3aed;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
transform: translateY(-2px);
}
/* Badges */
.badge {
display: inline-flex;
align-items: center;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.badge-success {
background: #10b981;
color: white;
}
.badge-error {
background: #ef4444;
color: white;
}
.badge-info {
background: #3b82f6;
color: white;
}
.badge-warning {
background: #f59e0b;
color: white;
}
.badge-purple {
background: #7c3aed;
color: white;
}
/* Tables */
table {
width: 100%;
border-collapse: collapse;
margin: 1rem 0;
}
th {
background: #f9fafb;
padding: 0.75rem;
text-align: left;
font-weight: 600;
color: #374151;
border-bottom: 2px solid #e5e7eb;
}
td {
padding: 0.75rem;
border-bottom: 1px solid #e5e7eb;
}
tr:hover {
background: #f9fafb;
}
/* Alerts */
.alert {
padding: 1rem 1.5rem;
border-radius: 0.5rem;
margin: 1rem 0;
border-left: 4px solid;
}
.alert-success {
background: #d1fae5;
border-color: #10b981;
color: #065f46;
}
.alert-error {
background: #fee2e2;
border-color: #ef4444;
color: #991b1b;
}
.alert-info {
background: #dbeafe;
border-color: #3b82f6;
color: #1e40af;
}
.alert-warning {
background: #fef3c7;
border-color: #f59e0b;
color: #92400e;
}
/* Sidebar */
.sidebar {
position: sticky;
top: 5rem;
max-height: calc(100vh - 6rem);
overflow-y: auto;
}
.sidebar-link {
display: block;
padding: 0.5rem 1rem;
color: #6b7280;
text-decoration: none;
border-left: 2px solid transparent;
transition: all 0.2s ease;
}
.sidebar-link:hover {
color: #7c3aed;
border-left-color: #7c3aed;
background: #f9fafb;
}
.sidebar-link.active {
color: #7c3aed;
border-left-color: #7c3aed;
font-weight: 600;
}
/* Scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
}
::-webkit-scrollbar-thumb {
background: #888;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #555;
}
/* Responsive */
@media (max-width: 768px) {
.section-card {
padding: 1.5rem;
}
.feature-card {
padding: 1.5rem;
}
.code-block {
padding: 1rem;
}
}
/* Animations */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.fade-in {
animation: fadeIn 0.5s ease-out;
}
/* Syntax Highlighting Overrides */
.hljs {
background: #1e1e1e ;
padding: 1.5rem ;
border-radius: 0.5rem;
}
/* Utility Classes */
.text-gradient {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hover-lift {
transition: transform 0.3s ease;
}
.hover-lift:hover {
transform: translateY(-4px);
}