add rate limiting, CSRF, newsletter, auto-checker, /uses and /projects pages
This commit is contained in:
@@ -1328,6 +1328,157 @@ blockquote {
|
||||
.resume-skills dd { color: #333 !important; }
|
||||
}
|
||||
|
||||
/* === Honeypot field (hidden from humans) === */
|
||||
|
||||
.hp-field {
|
||||
position: absolute;
|
||||
left: -9999px;
|
||||
top: -9999px;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
tab-index: -1;
|
||||
}
|
||||
|
||||
/* === Subscribe widget === */
|
||||
|
||||
.subscribe-section {
|
||||
margin-bottom: 2.5rem;
|
||||
padding-bottom: 2rem;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.subscribe-section h2 { margin-bottom: 0.3em; }
|
||||
|
||||
.subscribe-form {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 0.85rem;
|
||||
max-width: 440px;
|
||||
}
|
||||
|
||||
.subscribe-form input[type="email"] {
|
||||
flex: 1;
|
||||
min-width: 200px;
|
||||
padding: 0.5em 0.75em;
|
||||
background: var(--bg);
|
||||
border: 1px solid var(--border-dark);
|
||||
border-radius: var(--radius);
|
||||
color: var(--text);
|
||||
font-size: 0.95rem;
|
||||
font-family: var(--font-sans);
|
||||
}
|
||||
|
||||
.subscribe-form input[type="email"]:focus {
|
||||
outline: 2px solid var(--accent);
|
||||
outline-offset: 1px;
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
/* === Uses Page === */
|
||||
|
||||
.uses-page { max-width: var(--max-w); }
|
||||
|
||||
.uses-section {
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
.uses-section h2 {
|
||||
font-size: 1.1rem;
|
||||
border-bottom: 1px solid var(--border);
|
||||
padding-bottom: 0.35em;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
.uses-item {
|
||||
margin-bottom: 1.5rem;
|
||||
padding-bottom: 1.5rem;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.uses-item:last-child {
|
||||
border-bottom: none;
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.uses-item-header {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 0.75rem;
|
||||
margin-bottom: 0.4em;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.uses-name {
|
||||
font-family: var(--font-mono);
|
||||
font-weight: 700;
|
||||
font-size: 1rem;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.uses-role {
|
||||
font-size: 0.85rem;
|
||||
color: var(--text-muted);
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
|
||||
.uses-item p { margin: 0; font-size: 0.9rem; line-height: 1.7; }
|
||||
|
||||
.uses-list {
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.7;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uses-list li { margin-bottom: 0.4em; }
|
||||
|
||||
/* === Projects Page === */
|
||||
|
||||
.projects-page { max-width: var(--max-w); }
|
||||
|
||||
.project-list { display: flex; flex-direction: column; gap: 0; }
|
||||
|
||||
.project-item {
|
||||
padding: 1.75rem 0;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.project-item:first-child { padding-top: 0; }
|
||||
.project-item:last-child { border-bottom: none; }
|
||||
|
||||
.project-header {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 0.6em;
|
||||
}
|
||||
|
||||
.project-title {
|
||||
font-size: 1.15rem;
|
||||
margin: 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.project-item p {
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.7;
|
||||
color: var(--text);
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
|
||||
.project-links {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
font-size: 0.85rem;
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
|
||||
/* === Responsive === */
|
||||
|
||||
@media (max-width: 600px) {
|
||||
|
||||
Reference in New Issue
Block a user