/*!
 * 微光 (Aura) — 主样式表
 * Theme: Aura (微光)
 * Author: back
 * Version: 1.0.21
 */

/* ================================================================
   CSS Variables (Tailwind Slate Palette)
   ================================================================ */
:root {
    --color-white:    #ffffff;
    --color-slate-50: #f8fafc;
    --color-slate-100:#f1f5f9;
    --color-slate-200:#e2e8f0;
    --color-slate-300:#cbd5e1;
    --color-slate-400:#94a3b8;
    --color-slate-500:#64748b;
    --color-slate-600:#475569;
    --color-slate-700:#334155;
    --color-slate-800:#1e293b;
    --color-slate-900:#0f172a;
    --color-blue-50:  #eff6ff;
    --color-blue-100: #dbeafe;
    --color-blue-500: #3b82f6;
    --color-blue-600: #2563eb;
    --color-blue-700: #1d4ed8;
    --color-indigo-600:#4f46e5;
    --color-indigo-700:#4338ca;
    --color-purple-50: #faf5ff;
    --color-purple-100:#f3e8ff;
    --color-purple-500:#a855f7;
    --color-purple-600:#9333ea;
    --color-amber-50: #fffbeb;
    --color-amber-100:#fef3c7;
    --color-amber-200:#fde68a;
    --color-amber-400:#fbbf24;
    --color-amber-500:#f59e0b;
    --color-amber-600:#d97706;
    --color-amber-700:#b45309;
    --color-amber-800:#92400e;
    --color-amber-900:#78350f;
    --color-emerald-50:#ecfdf5;
    --color-emerald-100:#d1fae5;
    --color-emerald-400:#34d399;
    --color-emerald-500:#10b981;
    --color-emerald-600:#059669;
    --color-emerald-700:#047857;
    --color-rose-50:  #fff1f2;
    --color-rose-100: #ffe4e6;
    --color-rose-500: #f43f5e;
    --color-rose-600: #e11d48;
    --color-rose-700: #be123c;
    --color-orange-50:#fff7ed;
    --color-indigo-400: #818cf8;
    --color-indigo-500: #6366f1;
    --shadow-xs: 0 1px 2px rgba(0,0,0,0.04);
    --shadow-sm: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
    --shadow-md: 0 4px 6px rgba(0,0,0,0.06), 0 2px 4px rgba(0,0,0,0.04);
    --shadow-lg: 0 10px 15px rgba(0,0,0,0.08), 0 4px 6px rgba(0,0,0,0.04);
    --shadow-2xl: 0 25px 50px rgba(0,0,0,0.12);
    --radius-sm: 6px;
    --radius: 8px;
    --radius-lg: 12px;
    --radius-xl: 16px;
    --radius-2xl: 20px;
    --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", Arial, sans-serif;
    --font-mono: "JetBrains Mono", "Fira Code", "SF Mono", Monaco, "Cascadia Code", monospace;
    /* Aura Spectrum Index — semantic design system */
    --aura-bg: #f6f8fc;
    --aura-surface: #ffffff;
    --aura-surface-muted: #eef3fa;
    --aura-ink: #182033;
    --aura-ink-muted: #526078;
    --aura-ink-subtle: #6f7d94;
    --aura-line: #d9e2ef;
    --aura-primary: #3155d9;
    --aura-primary-hover: #2647c2;
    --aura-primary-active: #203ba4;
    --aura-violet: #7657f6;
    --aura-teal: #128b7d;
    --aura-gold: #b86b08;
    --aura-danger: #c72c4a;
    --aura-focus: #3155d9;
    --aura-spectrum: linear-gradient(90deg, #3155d9 0%, #7657f6 58%, #18b8a4 100%);
    --aura-radius-sm: 8px;
    --aura-radius-md: 12px;
    --aura-radius-lg: 18px;
    --aura-shadow-sm: 0 1px 2px rgba(24,32,51,.05), 0 5px 18px rgba(49,85,217,.05);
    --aura-shadow-md: 0 16px 38px rgba(24,32,51,.10);
    --aura-shadow-focus: 0 0 0 3px rgba(49,85,217,.22);
    --aura-duration-fast: 140ms;
    --aura-duration-normal: 240ms;
    --aura-duration-slow: 360ms;
    --aura-ease-out: cubic-bezier(.16,1,.3,1);
    --aura-ease-in: cubic-bezier(.4,0,1,1);
    --aura-ease-standard: cubic-bezier(.2,.8,.2,1);
}

/* ================================================================
   Aura Spectrum Index — accessibility, identity & motion layer
   ================================================================ */
html { scroll-padding-top: 80px; }
body {
    background: var(--aura-bg);
    color: var(--aura-ink);
    font-size: 15px;
    line-height: 1.65;
    text-rendering: optimizeLegibility;
}

/* Aura 全站消息弹窗 */
html.aura-dialog-lock, html.aura-dialog-lock body { overflow: hidden; }
.aura-dialog { position:fixed; inset:0; z-index:1000000; display:grid; place-items:center; padding:24px; opacity:0; visibility:hidden; transition:opacity 180ms var(--aura-ease-in), visibility 180ms; }
.aura-dialog.is-open { opacity:1; visibility:visible; }
.aura-dialog.is-closing { opacity:0; }
.aura-dialog__backdrop { position:absolute; inset:0; background:rgba(15,23,42,.54); backdrop-filter:blur(7px); -webkit-backdrop-filter:blur(7px); }
.aura-dialog__panel { --dialog-accent:var(--aura-primary); position:relative; display:grid; grid-template-columns:44px minmax(0,1fr); column-gap:14px; width:min(100%, 440px); overflow:hidden; padding:24px; border:1px solid rgba(255,255,255,.75); border-radius:20px; background:var(--aura-surface); color:var(--aura-ink); box-shadow:0 24px 64px rgba(15,23,42,.22), 0 3px 12px rgba(49,85,217,.08); transform:translateY(14px) scale(.975); opacity:0; transition:transform 240ms var(--aura-ease-out), opacity 200ms var(--aura-ease-out); outline:none; }
.aura-dialog.is-open .aura-dialog__panel { transform:translateY(0) scale(1); opacity:1; }
.aura-dialog.is-closing .aura-dialog__panel { transform:translateY(8px) scale(.985); opacity:0; transition-duration:160ms; transition-timing-function:var(--aura-ease-in); }
.aura-dialog__panel::before { content:""; position:absolute; inset:0 0 auto; height:4px; background:linear-gradient(90deg,var(--dialog-accent),var(--aura-violet),#18b8a4); }
.aura-dialog--success .aura-dialog__panel { --dialog-accent:#059669; }
.aura-dialog--warning .aura-dialog__panel { --dialog-accent:#d97706; }
.aura-dialog--error .aura-dialog__panel { --dialog-accent:#d92d4f; }
.aura-dialog__close { position:absolute; top:12px; right:12px; display:grid; place-items:center; width:36px; height:36px; border:0; border-radius:50%; color:var(--aura-ink-subtle); background:transparent; cursor:pointer; transition:color 150ms,background 150ms,transform 150ms; }
.aura-dialog__close:hover { color:var(--aura-ink); background:var(--aura-surface-muted); transform:rotate(4deg); }
.aura-dialog__mark { grid-column:1; display:grid; place-items:center; width:44px; height:44px; margin:2px 0 0; border-radius:13px; color:var(--dialog-accent); background:var(--aura-surface-muted); background:color-mix(in srgb,var(--dialog-accent) 11%,white); box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--dialog-accent) 18%,transparent); font-size:18px; }
.aura-dialog__content { grid-column:2; min-width:0; padding:0 34px 0 0; }
.aura-dialog__eyebrow { margin:0 0 3px; color:var(--dialog-accent); font-size:10px; font-weight:800; letter-spacing:.12em; text-transform:uppercase; }
.aura-dialog__title { margin:0; color:var(--aura-ink); font-size:21px; line-height:1.3; font-weight:800; letter-spacing:-.02em; }
.aura-dialog__message { margin:8px 0 0; color:var(--aura-ink-muted); font-size:14px; line-height:1.65; white-space:pre-line; overflow-wrap:anywhere; }
.aura-dialog__field { grid-column:1/-1; display:grid; gap:8px; margin-top:18px; color:var(--aura-ink); font-size:14px; font-weight:700; }
.aura-dialog__field input { width:100%; min-height:48px; padding:0 14px; border:1px solid var(--aura-line); border-radius:12px; background:var(--aura-surface); color:var(--aura-ink); font:inherit; font-weight:500; outline:none; }
.aura-dialog__field input:focus { border-color:var(--aura-focus); box-shadow:var(--aura-shadow-focus); }
.aura-dialog__actions { grid-column:1/-1; display:flex; justify-content:flex-end; gap:10px; margin-top:22px; }
.aura-dialog__button { min-width:96px; min-height:42px; padding:0 18px; border:1px solid transparent; border-radius:11px; font:inherit; font-size:14px; font-weight:800; cursor:pointer; transition:transform 150ms,box-shadow 150ms,background 150ms,border-color 150ms; }
.aura-dialog__button:hover { transform:translateY(-1px); }
.aura-dialog__button:focus-visible,.aura-dialog__close:focus-visible { outline:3px solid color-mix(in srgb,var(--aura-focus) 28%,transparent); outline-offset:2px; }
.aura-dialog__button--primary { color:#fff; background:linear-gradient(135deg,var(--aura-primary),var(--aura-violet)); box-shadow:0 9px 22px rgba(49,85,217,.22); }
.aura-dialog__button--primary:hover { box-shadow:0 12px 26px rgba(49,85,217,.28); }
.aura-dialog__button--secondary { color:var(--aura-ink-muted); border-color:var(--aura-line); background:var(--aura-surface); }
.aura-dialog__button--secondary:hover { color:var(--aura-ink); background:var(--aura-surface-muted); }
[data-theme="dark"] .aura-dialog__backdrop { background:rgba(2,6,23,.72); }
[data-theme="dark"] .aura-dialog__panel { border-color:rgba(148,163,184,.18); background:#111827; }
[data-theme="dark"] .aura-dialog__mark { background:color-mix(in srgb,var(--dialog-accent) 18%,#111827); }
[data-theme="dark"] .aura-dialog__field input,[data-theme="dark"] .aura-dialog__button--secondary { background:#182235; }
@media (max-width:600px) { .aura-dialog { align-items:end; padding:12px 12px max(12px,env(safe-area-inset-bottom)); } .aura-dialog__panel { width:100%; grid-template-columns:40px minmax(0,1fr); column-gap:12px; padding:22px 18px 18px; border-radius:22px 22px 16px 16px; } .aura-dialog__mark { width:40px; height:40px; border-radius:12px; } .aura-dialog__content { padding-right:28px; } .aura-dialog__title { font-size:20px; } .aura-dialog__actions { display:grid; grid-template-columns:1fr; } .aura-dialog__button { width:100%; min-height:48px; } .aura-dialog__button--primary { grid-row:1; } }
@media (prefers-reduced-motion:reduce) { .aura-dialog,.aura-dialog__panel,.aura-dialog__button,.aura-dialog__close { transition:none !important; transform:none !important; } }
button, a, input, select, textarea { touch-action: manipulation; }
button, [role="button"], a { -webkit-tap-highlight-color: rgba(49,85,217,.12); }
h1, h2, h3 { text-wrap: balance; }
p, li { text-wrap: pretty; }
.aura-portal-stat > strong,
.aura-user-card-assets strong,
.aura-software-meta { font-variant-numeric: tabular-nums; }

.aura-portal-section,
.aura-article-list,
.aura-portal-rankings {
    content-visibility: auto;
    contain-intrinsic-size: auto 640px;
}

.aura-skip-link {
    position: fixed;
    top: 12px;
    left: 12px;
    z-index: 100000;
    padding: 10px 16px;
    border-radius: var(--aura-radius-sm);
    background: var(--aura-ink);
    color: #fff;
    font-size: 14px;
    font-weight: 700;
    text-decoration: none;
    transform: translateY(-160%);
    transition: transform var(--aura-duration-fast) var(--aura-ease-out);
}
.aura-skip-link:focus { transform: translateY(0); }

.aura-brand-mark,
.aura-footer-brand-mark {
    display: block;
    flex: 0 0 auto;
    border-radius: 10px;
}
.aura-brand-name {
    color: var(--aura-ink);
    font-weight: 780;
    letter-spacing: -.025em;
}
.aura-footer-brand-mark { border-radius: 7px; }

:where(a, button, input, select, textarea, [tabindex]):focus-visible {
    outline: 2px solid var(--aura-focus) !important;
    outline-offset: 3px;
    box-shadow: var(--aura-shadow-focus);
}
:where(input, select, textarea):focus-visible { outline-offset: 1px; }
.outline-none:focus-visible,
.outline-hidden:focus-visible { outline: 2px solid var(--aura-focus) !important; }

.transition { transition-property: color, background-color, border-color, opacity, box-shadow, transform; }
input[type="text"], input[type="search"], input[type="email"], input[type="password"],
input[type="url"], input[type="number"], input[type="tel"], select, textarea {
    font-size: max(14px, 1em);
}

header.sticky {
    border-color: var(--aura-line);
    box-shadow: 0 1px 0 rgba(24,32,51,.04), 0 8px 26px rgba(24,32,51,.035);
}
.aura-primary-menu > li > a { position: relative; }
.aura-primary-menu > li > a::after {
    content: "";
    position: absolute;
    left: 50%;
    right: 50%;
    bottom: -11px;
    height: 2px;
    border-radius: 999px;
    background: var(--aura-spectrum);
    transition: left var(--aura-duration-normal) var(--aura-ease-out), right var(--aura-duration-normal) var(--aura-ease-out);
}
.aura-primary-menu > li > a:hover::after,
.aura-primary-menu > li > a:focus-visible::after,
.aura-primary-menu > li.current-menu-item > a::after,
.aura-primary-menu > li.current-menu-ancestor > a::after,
.aura-primary-menu > li > a.is-current-route::after { left: 8%; right: 8%; }

.aura-search-wrapper,
.aura-portal-search {
    position: relative;
    isolation: isolate;
    transition: border-color var(--aura-duration-fast) ease, box-shadow var(--aura-duration-fast) ease;
}
.aura-search-wrapper:focus-within { box-shadow: inset 0 0 0 1px rgba(49,85,217,.34); }
.aura-portal-search:focus-within { box-shadow: 0 20px 42px rgba(15,23,42,.20), 0 0 0 2px rgba(255,255,255,.72); }
.aura-search-wrapper .aura-search-input:focus-visible,
.aura-portal-search input:focus-visible,
.aura-portal-search select:focus-visible {
    outline: 0 !important;
    box-shadow: none !important;
}

.aura-software-card,
.aura-portal-resource-card,
.aura-portal-category-card,
.aura-home-post-card {
    border-color: var(--aura-line);
    box-shadow: var(--aura-shadow-sm);
    transition: transform var(--aura-duration-normal) var(--aura-ease-out), border-color var(--aura-duration-fast) ease, box-shadow var(--aura-duration-normal) ease;
}
.aura-software-card:hover,
.aura-portal-resource-card:hover,
.aura-portal-category-card:hover,
.aura-home-post-card:hover { transform: translateY(-2px); box-shadow: var(--aura-shadow-md); }
:where(button, .aura-btn, .aura-icon-btn, .aura-software-card, .aura-portal-resource-card):active { transform: scale(.98); }

.aura-portal-hero { background: #264bc9; }
.aura-portal-hero::after {
    content: "";
    position: absolute;
    z-index: 3;
    left: 50%;
    bottom: 0;
    width: min(780px, 72vw);
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(255,255,255,.86), transparent);
    transform: translateX(-50%);
    opacity: .76;
    pointer-events: none;
}
.aura-portal-slide {
    transform: scale(1.012);
    transition: opacity var(--aura-duration-slow) ease, visibility var(--aura-duration-slow) ease, transform 480ms var(--aura-ease-out);
}
.aura-portal-slider-arrow,
.aura-portal-slider-dots button { min-width: 44px; min-height: 44px; }
.aura-portal-slider-dots { gap: 0; }
.aura-portal-slider-dots button {
    position: relative;
    width: 44px;
    height: 44px;
    background: transparent;
}
.aura-portal-slider-dots button::after {
    content: "";
    position: absolute;
    left: 50%; top: 50%;
    width: 7px; height: 7px;
    border-radius: 999px;
    background: rgba(255,255,255,.48);
    transform: translate(-50%,-50%);
    transition: width var(--aura-duration-fast) var(--aura-ease-out), background-color var(--aura-duration-fast) ease;
}
.aura-portal-slider-dots button.is-active { width: 44px; background: transparent; }
.aura-portal-slider-dots button.is-active::after { width: 22px; background: #fff; }

.aura-home-modal {
    display: flex;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 170ms var(--aura-ease-in), visibility 170ms;
}
.aura-home-modal.is-open { opacity: 1; visibility: visible; pointer-events: auto; }
.aura-home-modal-backdrop { opacity: 0; transition: opacity 170ms var(--aura-ease-in); }
.aura-home-modal-card {
    opacity: 0;
    transform: translateY(12px) scale(.975);
    transition: opacity 170ms var(--aura-ease-in), transform 170ms var(--aura-ease-in);
}
.aura-home-modal.is-open .aura-home-modal-backdrop { opacity: 1; transition-duration: 240ms; transition-timing-function: var(--aura-ease-out); }
.aura-home-modal.is-open .aura-home-modal-card { opacity: 1; transform: none; transition-duration: 260ms; transition-timing-function: var(--aura-ease-out); }

.aura-auth-overlay {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 170ms var(--aura-ease-in), visibility 170ms;
}
.aura-auth-overlay.is-open { opacity: 1; visibility: visible; pointer-events: auto; }
.aura-auth-box { transform: translateY(12px) scale(.98); opacity: 0; transition: transform 170ms var(--aura-ease-in), opacity 170ms var(--aura-ease-in); }
.aura-auth-overlay.is-open .aura-auth-box:not(.hidden) { transform: none; opacity: 1; transition-duration: 250ms; transition-timing-function: var(--aura-ease-out); }
.aura-auth-close, .aura-home-modal-close, .aura-icon-btn-sm { min-width: 44px; min-height: 44px; }

.aura-mobile-nav-toggle {
    width: 44px;
    height: 44px;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--aura-line);
    border-radius: var(--aura-radius-md);
    background: var(--aura-surface);
    color: var(--aura-ink);
    cursor: pointer;
}
.aura-mobile-nav {
    position: fixed;
    inset: 0;
    z-index: 9998;
    visibility: hidden;
    pointer-events: none;
}
.aura-mobile-nav.is-open { visibility: visible; pointer-events: auto; }
.aura-mobile-nav-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(15,23,42,.58);
    opacity: 0;
    transition: opacity 170ms var(--aura-ease-in);
}
.aura-mobile-nav-panel {
    position: absolute;
    top: 0; right: 0; bottom: 0;
    width: min(88vw, 360px);
    padding: max(20px, env(safe-area-inset-top)) 20px max(24px, env(safe-area-inset-bottom));
    overflow-y: auto;
    overscroll-behavior: contain;
    background: var(--aura-surface);
    transform: translateX(100%);
    transition: transform 180ms var(--aura-ease-in);
}
.aura-mobile-nav.is-open .aura-mobile-nav-backdrop { opacity: 1; transition-duration: 240ms; transition-timing-function: var(--aura-ease-out); }
.aura-mobile-nav.is-open .aura-mobile-nav-panel { transform: none; transition-duration: 260ms; transition-timing-function: var(--aura-ease-out); }
.aura-mobile-nav-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; font-size: 17px; }
.aura-mobile-nav-head::before { content: ""; width: 28px; height: 3px; border-radius: 999px; background: var(--aura-spectrum); position: absolute; margin-top: 29px; }
.aura-mobile-nav-head button { width: 44px; height: 44px; border: 0; border-radius: 12px; background: var(--aura-surface-muted); color: var(--aura-ink); cursor: pointer; }
.aura-mobile-search { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 0 14px; border: 1px solid var(--aura-line); border-radius: 14px; background: var(--aura-surface-muted); }
.aura-mobile-search input { min-width: 0; width: 100%; border: 0; outline: 0; background: transparent; color: var(--aura-ink); }
.aura-mobile-nav-links { margin-top: 18px; }
.aura-mobile-nav-links ul { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.aura-mobile-nav-links a { display: flex; align-items: center; min-height: 48px; padding: 0 14px; border-radius: 12px; color: var(--aura-ink); font-size: 15px; font-weight: 650; text-decoration: none; }
.aura-mobile-nav-links a:hover, .aura-mobile-nav-links a:focus-visible { background: var(--aura-surface-muted); color: var(--aura-primary); }

.aura-reveal { opacity: 0; transform: translateY(10px); }
.aura-reveal.is-visible { opacity: 1; transform: none; transition: opacity var(--aura-duration-slow) var(--aura-ease-out), transform var(--aura-duration-slow) var(--aura-ease-out); }

[data-theme="dark"] {
    --aura-bg: #0d1422;
    --aura-surface: #151e2f;
    --aura-surface-muted: #1b273b;
    --aura-ink: #e8edf6;
    --aura-ink-muted: #b2bfd2;
    --aura-ink-subtle: #93a2b9;
    --aura-line: #2b3a51;
    --aura-primary: #7898ff;
    --aura-primary-hover: #91aaff;
    --aura-focus: #8ca8ff;
    --aura-shadow-focus: 0 0 0 3px rgba(120,152,255,.28);
}
[data-theme="dark"] body { background: var(--aura-bg); color: var(--aura-ink); color-scheme: dark; }
[data-theme="dark"] .aura-mobile-nav-panel,
[data-theme="dark"] .aura-mobile-nav-toggle { background: var(--aura-surface); color: var(--aura-ink); border-color: var(--aura-line); }

@media (max-width: 767px) {
    .aura-mobile-nav-toggle { display: inline-flex; }
    body { font-size: 16px; }
    .aura-home-shell { padding-left: 16px !important; padding-right: 16px !important; }
    .aura-portal-hero { min-height: 410px; }
    .aura-portal-hero h1 { font-size: clamp(28px, 9vw, 38px); }
    .aura-portal-search { height: auto; min-height: 54px; }
}
@media (min-width: 768px) { .aura-mobile-nav-toggle { display: none; } }

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto !important; }
    *, *::before, *::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        scroll-behavior: auto !important;
        transition-duration: .01ms !important;
        transition-delay: 0ms !important;
    }
    .aura-portal-slide,
    .aura-reveal,
    .aura-home-modal-card,
    .aura-auth-box { transform: none !important; }
}
