/**
 * TechList — base design tokens.
 *
 * Direction: minimal, premium, editorial, technology (brief §20/§60).
 * No gradients, no glassmorphism, no purple/blue "AI" accent, no heavy
 * rounding or drop shadows. Everything is namespaced under .techlist-* /
 * #techlist-* so it never leaks into the surrounding theme (§46).
 */

:root {
	--tl-color-bg:        #FAFAF8;
	--tl-color-surface:   #FFFFFF;
	--tl-color-ink:       #1A1D1B;
	--tl-color-muted:     #6B7069;
	--tl-color-border:    #E4E1D9;
	--tl-color-border-strong: #948C7C; /* darkened from an earlier draft to clear WCAG 1.4.11's 3:1 non-text contrast requirement against white — this is the border color on every input and button, so it has to be a real UI boundary, not just decoration */
	--tl-color-accent:    #0B6E4F; /* deep emerald — deliberately not the terracotta/purple "AI" tell */
	--tl-color-accent-ink:#FFFFFF;
	--tl-color-accent-soft: #E7F1EC;
	--tl-color-danger:    #B3261E;
	--tl-color-danger-soft: #FBEAE9;

	--tl-font-display: Georgia, 'Iowan Old Style', 'Times New Roman', serif;
	--tl-font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;

	--tl-radius-sm: 3px;
	--tl-radius-md: 6px;

	--tl-space-1: 4px;
	--tl-space-2: 8px;
	--tl-space-3: 12px;
	--tl-space-4: 16px;
	--tl-space-5: 24px;
	--tl-space-6: 32px;
	--tl-space-7: 48px;
	--tl-space-8: 64px;
}

/*
 * Note on typography: the display face is an editorial serif and the UI
 * face is the system sans stack, deliberately avoiding a webfont network
 * request on every TechList page load (§18/§61 performance budget). A
 * self-hosted display face (e.g. Fraunces) can be layered in later via
 * @font-face without touching any of the rules below — they already
 * reference var(--tl-font-display).
 */

.techlist-app-main,
.techlist-auth,
.techlist-app {
	font-family: var(--tl-font-body);
	color: var(--tl-color-ink);
	-webkit-font-smoothing: antialiased;
}

.techlist-app-main h1,
.techlist-app-main h2,
.techlist-app-main h3,
.techlist-auth h1,
.techlist-app h1,
.techlist-app h2 {
	font-family: var(--tl-font-display);
	font-weight: 600;
	letter-spacing: -0.01em;
	line-height: 1.15;
}

.techlist-app-main {
	background: var(--tl-color-bg);
	padding: var(--tl-space-8) var(--tl-space-4);
	min-height: 60vh;
}

.techlist-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--tl-space-2);
	padding: 10px 20px;
	border-radius: var(--tl-radius-sm);
	border: 1px solid var(--tl-color-border-strong);
	background: var(--tl-color-surface);
	color: var(--tl-color-ink);
	font-family: var(--tl-font-body);
	font-size: 14px;
	font-weight: 600;
	cursor: pointer;
	transition: border-color 120ms ease, background 120ms ease;
}

.techlist-btn:hover {
	border-color: var(--tl-color-ink);
}

.techlist-btn:focus-visible {
	outline: 2px solid var(--tl-color-accent);
	outline-offset: 2px;
}

.techlist-btn--primary {
	background: var(--tl-color-accent);
	border-color: var(--tl-color-accent);
	color: var(--tl-color-accent-ink);
}

.techlist-btn--primary:hover {
	background: #095A40;
	border-color: #095A40;
}

.techlist-btn--ghost {
	background: transparent;
	border-color: transparent;
	color: var(--tl-color-muted);
}

.techlist-btn--danger {
	color: var(--tl-color-danger);
	border-color: var(--tl-color-danger);
	background: var(--tl-color-danger-soft);
}

.techlist-badge {
	display: inline-flex;
	align-items: center;
	gap: 4px;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	padding: 3px 8px;
	border-radius: var(--tl-radius-sm);
	border: 1px solid var(--tl-color-border-strong);
	color: var(--tl-color-muted);
}

.techlist-badge--verified {
	color: var(--tl-color-accent);
	border-color: var(--tl-color-accent);
	background: var(--tl-color-accent-soft);
}

.techlist-badge--pending {
	color: #8A6D1F;
	border-color: #D8C079;
	background: #FBF6E7;
}

.techlist-badge--rejected,
.techlist-badge--suspended {
	color: var(--tl-color-danger);
	border-color: var(--tl-color-danger);
	background: var(--tl-color-danger-soft);
}

/*
 * Shared error banner — used anywhere a form or action can fail (dashboard
 * app, auth screens). Previously the dashboard app reused the auth
 * screens' own error class, which meant it had no styling at all outside
 * the login/register pages since that stylesheet isn't loaded there.
 */
.tl-form-error {
	background: var(--tl-color-danger-soft);
	color: var(--tl-color-danger);
	border: 1px solid var(--tl-color-danger);
	border-radius: var(--tl-radius-sm);
	padding: var(--tl-space-3) var(--tl-space-4);
	font-size: 13px;
	line-height: 1.5;
	margin-bottom: var(--tl-space-4);
}

.tl-form-error:focus {
	outline: 2px solid var(--tl-color-danger);
	outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
	.techlist-app-main *,
	.techlist-app * {
		animation-duration: 0.001ms !important;
		transition-duration: 0.001ms !important;
	}
}

/*
 * Screen-reader-only utility — defined locally rather than relying on the
 * active theme's own .screen-reader-text class, since this plugin can't
 * assume any particular theme is active (§46 theme independence).
 */
.tl-sr-only {
	position: absolute !important;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}
