512 lines
22 KiB
HTML
512 lines
22 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Petitions — Abigail</title>
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||
<link rel="stylesheet" href="styles.css">
|
||
<style>
|
||
.filter-chips {
|
||
display: flex; flex-wrap: wrap;
|
||
gap: 8px;
|
||
justify-content: center;
|
||
margin-bottom: 40px;
|
||
}
|
||
.chip {
|
||
background: #FFFFFF;
|
||
border: 1px solid var(--rule);
|
||
border-radius: 999px;
|
||
padding: 8px 16px;
|
||
font: inherit;
|
||
font-size: 13px;
|
||
color: var(--mute);
|
||
cursor: pointer;
|
||
transition: all 0.15s;
|
||
}
|
||
.chip:hover { color: var(--ink); border-color: var(--mute-2); }
|
||
.chip.active {
|
||
background: var(--ink);
|
||
color: var(--paper);
|
||
border-color: var(--ink);
|
||
}
|
||
|
||
.petitions-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(2, 1fr);
|
||
gap: 24px;
|
||
}
|
||
.pet-card {
|
||
background: #FFFFFF;
|
||
border: 1px solid var(--rule);
|
||
border-radius: 16px;
|
||
padding: 32px;
|
||
display: flex; flex-direction: column;
|
||
}
|
||
.pet-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 8px; }
|
||
.pet-code {
|
||
font-family: "JetBrains Mono", monospace;
|
||
font-size: 14px;
|
||
font-weight: 700;
|
||
background: var(--paper-2);
|
||
padding: 4px 10px;
|
||
border-radius: 6px;
|
||
}
|
||
.pet-card h3 {
|
||
font-size: 20px; font-weight: 700;
|
||
letter-spacing: -0.01em;
|
||
margin: 0;
|
||
}
|
||
.pet-subtitle {
|
||
font-size: 13px;
|
||
color: var(--mute);
|
||
margin: 0 0 20px;
|
||
}
|
||
.pet-grid-meta {
|
||
display: grid; grid-template-columns: 1fr 1fr;
|
||
gap: 12px;
|
||
padding: 16px 0;
|
||
border-top: 1px solid var(--rule);
|
||
border-bottom: 1px solid var(--rule);
|
||
margin-bottom: 16px;
|
||
font-size: 13px;
|
||
}
|
||
.pet-grid-meta .k {
|
||
font-size: 10px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.08em;
|
||
color: var(--mute);
|
||
margin-bottom: 2px;
|
||
}
|
||
.pet-grid-meta .v { font-weight: 600; }
|
||
.pet-section { font-size: 13px; line-height: 1.55; }
|
||
.pet-section h4 {
|
||
font-size: 11px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.08em;
|
||
color: var(--mute);
|
||
margin: 12px 0 6px;
|
||
font-weight: 600;
|
||
}
|
||
.pet-section ul {
|
||
list-style: none; padding: 0; margin: 0 0 8px;
|
||
}
|
||
.pet-section ul li {
|
||
padding: 3px 0 3px 16px;
|
||
position: relative;
|
||
color: var(--ink);
|
||
}
|
||
.pet-section ul li::before {
|
||
content: "→";
|
||
color: var(--signal);
|
||
position: absolute; left: 0;
|
||
}
|
||
.pet-link {
|
||
margin-top: auto;
|
||
padding-top: 16px;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
color: var(--ink);
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.1em;
|
||
border-top: 1px solid var(--rule);
|
||
}
|
||
.pet-card:hover .pet-link { color: var(--signal); }
|
||
|
||
.anatomy-wrap {
|
||
background: #FFFFFF;
|
||
border: 1px solid var(--rule);
|
||
border-radius: 20px;
|
||
padding: 40px;
|
||
}
|
||
.anatomy-grid {
|
||
display: grid; grid-template-columns: repeat(2, 1fr);
|
||
gap: 24px;
|
||
}
|
||
.anatomy-row {
|
||
display: flex; gap: 16px;
|
||
padding: 16px 0;
|
||
border-top: 1px solid var(--rule);
|
||
}
|
||
.anatomy-row:first-child, .anatomy-row:nth-child(2) { border-top: 0; padding-top: 0; }
|
||
.anatomy-num {
|
||
font-family: "JetBrains Mono", monospace;
|
||
font-size: 14px;
|
||
font-weight: 700;
|
||
color: var(--signal);
|
||
flex-shrink: 0;
|
||
width: 32px;
|
||
}
|
||
.anatomy-row h4 { font-size: 14px; font-weight: 600; margin: 0 0 4px; }
|
||
.anatomy-row p { font-size: 13px; color: var(--mute); margin: 0; line-height: 1.55; }
|
||
|
||
@media (max-width: 880px) {
|
||
.petitions-grid, .anatomy-grid { grid-template-columns: 1fr; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<nav>
|
||
<div class="container">
|
||
<a class="brand" href="index.html">Abigail<span class="brand-dot">.</span></a>
|
||
<div class="nav-links">
|
||
<a href="press.html">Press</a>
|
||
<a href="judging.html">Judging</a>
|
||
<a href="services.html">Services</a>
|
||
<a href="attorneys.html">Attorneys</a>
|
||
<div class="nav-dropdown" id="resourcesDropdown">
|
||
<button class="nav-trigger active" aria-haspopup="true">
|
||
Resources
|
||
<svg width="10" height="10" viewBox="0 0 10 10" fill="none"><path d="M2 3.5l3 3 3-3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
</button>
|
||
<div class="dropdown-menu" role="menu">
|
||
<a href="petitions.html">Petitions</a>
|
||
<a href="#">Articles</a>
|
||
<a href="#">Events</a>
|
||
<a href="#">Careers</a>
|
||
</div>
|
||
</div>
|
||
<a href="login.html" class="nav-login">Log in</a>
|
||
<button class="theme-toggle" id="themeToggle" aria-label="Toggle theme">
|
||
<svg class="icon-moon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg>
|
||
<svg class="icon-sun" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"/></svg>
|
||
</button>
|
||
<a href="login.html#signup" class="nav-cta">Sign up</a>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<section class="hero centered">
|
||
<div class="container">
|
||
<div class="eyebrow">Resources · Petitions</div>
|
||
<h1>Every petition we cover, <em>explained</em> like a builder.</h1>
|
||
<p class="lead">What the criteria actually require, what evidence USCIS credits, and where most filings go wrong. Browse by visa type or by your situation.</p>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section alt">
|
||
<div class="container">
|
||
<div class="filter-chips" id="chips">
|
||
<button class="chip active" data-tag="all">All</button>
|
||
<button class="chip" data-tag="gc">Green card</button>
|
||
<button class="chip" data-tag="work">Work visa</button>
|
||
<button class="chip" data-tag="self">Self-petition</button>
|
||
<button class="chip" data-tag="employer">Employer-sponsored</button>
|
||
</div>
|
||
|
||
<div class="petitions-grid">
|
||
|
||
<!-- O-1A -->
|
||
<div class="pet-card" data-tags="work self">
|
||
<div class="pet-head"><span class="pet-code">O-1A</span></div>
|
||
<h3>Extraordinary Ability</h3>
|
||
<p class="pet-subtitle">Science, business, education, athletics</p>
|
||
<div class="pet-grid-meta">
|
||
<div><div class="k">Sponsorship</div><div class="v">Employer or agent</div></div>
|
||
<div><div class="k">Validity</div><div class="v">Up to 3 years, renewable</div></div>
|
||
<div><div class="k">Cap</div><div class="v">No lottery</div></div>
|
||
<div><div class="k">Family</div><div class="v">O-3 dependents</div></div>
|
||
</div>
|
||
<div class="pet-section">
|
||
<h4>What USCIS wants</h4>
|
||
<p>Sustained acclaim, demonstrated by 3 of 8 evidentiary criteria. Most filings rest on awards, peer review, original contributions, salary, and press.</p>
|
||
<h4>Where filings go wrong</h4>
|
||
<ul>
|
||
<li>Weak Criterion 3 (press): brief quotes, not feature pieces</li>
|
||
<li>Missing Criterion 4 (judging): no documented peer review</li>
|
||
<li>"Critical employment" claim without role-specific evidence</li>
|
||
</ul>
|
||
</div>
|
||
<a class="pet-link" href="../abigail_library.html">Read the O-1A guide →</a>
|
||
</div>
|
||
|
||
<!-- O-1B -->
|
||
<div class="pet-card" data-tags="work">
|
||
<div class="pet-head"><span class="pet-code">O-1B</span></div>
|
||
<h3>Extraordinary Ability — Arts</h3>
|
||
<p class="pet-subtitle">Arts, motion pictures, television</p>
|
||
<div class="pet-grid-meta">
|
||
<div><div class="k">Sponsorship</div><div class="v">Employer or agent</div></div>
|
||
<div><div class="k">Validity</div><div class="v">Up to 3 years, renewable</div></div>
|
||
<div><div class="k">Cap</div><div class="v">No lottery</div></div>
|
||
<div><div class="k">Family</div><div class="v">O-3 dependents</div></div>
|
||
</div>
|
||
<div class="pet-section">
|
||
<h4>What USCIS wants</h4>
|
||
<p>Distinction in the arts (3 of 6 criteria), or extraordinary achievement in motion picture / TV (3 of 6 + lead roles).</p>
|
||
<h4>Where filings go wrong</h4>
|
||
<ul>
|
||
<li>Conflating "arts" criteria with motion picture / TV criteria</li>
|
||
<li>Evidence focused on personal artistic merit, missing distinction</li>
|
||
</ul>
|
||
</div>
|
||
<a class="pet-link" href="../abigail_library.html">Read the O-1B guide →</a>
|
||
</div>
|
||
|
||
<!-- EB-1A -->
|
||
<div class="pet-card" data-tags="gc self">
|
||
<div class="pet-head"><span class="pet-code">EB-1A</span></div>
|
||
<h3>Extraordinary Ability — Green Card</h3>
|
||
<p class="pet-subtitle">Self-petition, no labor cert, no employer required</p>
|
||
<div class="pet-grid-meta">
|
||
<div><div class="k">Sponsorship</div><div class="v">Self</div></div>
|
||
<div><div class="k">Validity</div><div class="v">Permanent residence</div></div>
|
||
<div><div class="k">Premium proc.</div><div class="v">Available</div></div>
|
||
<div><div class="k">Priority date</div><div class="v">Often current</div></div>
|
||
</div>
|
||
<div class="pet-section">
|
||
<h4>What USCIS wants</h4>
|
||
<p>Sustained national or international acclaim, demonstrated by 3 of 10 criteria — plus a final-merits determination that the applicant is at the top of their field.</p>
|
||
<h4>Where filings go wrong</h4>
|
||
<ul>
|
||
<li>Treating it as "O-1A but harder" — the final-merits step is independent</li>
|
||
<li>Heavy criterion stack with weak narrative tying it together</li>
|
||
</ul>
|
||
</div>
|
||
<a class="pet-link" href="../abigail_library.html">Read the EB-1A guide →</a>
|
||
</div>
|
||
|
||
<!-- EB-2 NIW -->
|
||
<div class="pet-card" data-tags="gc self">
|
||
<div class="pet-head"><span class="pet-code">EB-2 NIW</span></div>
|
||
<h3>National Interest Waiver</h3>
|
||
<p class="pet-subtitle">Self-petition, advanced degree or exceptional ability</p>
|
||
<div class="pet-grid-meta">
|
||
<div><div class="k">Sponsorship</div><div class="v">Self</div></div>
|
||
<div><div class="k">Validity</div><div class="v">Permanent residence</div></div>
|
||
<div><div class="k">Premium proc.</div><div class="v">Available</div></div>
|
||
<div><div class="k">Backlog (China/India)</div><div class="v">2–6 years</div></div>
|
||
</div>
|
||
<div class="pet-section">
|
||
<h4>What USCIS wants</h4>
|
||
<p>The three-prong Dhanasar test: substantial merit and national importance · well-positioned to advance the endeavor · waiver of labor cert benefits the US.</p>
|
||
<h4>Where filings go wrong</h4>
|
||
<ul>
|
||
<li>Generic statements of "national importance" with no specifics</li>
|
||
<li>Prong-2 (well-positioned) under-evidenced for early-career applicants</li>
|
||
</ul>
|
||
</div>
|
||
<a class="pet-link" href="../abigail_library.html">Read the NIW guide →</a>
|
||
</div>
|
||
|
||
<!-- H-1B -->
|
||
<div class="pet-card" data-tags="work employer">
|
||
<div class="pet-head"><span class="pet-code">H-1B</span></div>
|
||
<h3>Specialty Occupation</h3>
|
||
<p class="pet-subtitle">The default work visa, subject to annual lottery</p>
|
||
<div class="pet-grid-meta">
|
||
<div><div class="k">Sponsorship</div><div class="v">Employer</div></div>
|
||
<div><div class="k">Validity</div><div class="v">Up to 6 years</div></div>
|
||
<div><div class="k">Cap</div><div class="v">85K annual lottery</div></div>
|
||
<div><div class="k">Family</div><div class="v">H-4 dependents</div></div>
|
||
</div>
|
||
<div class="pet-section">
|
||
<h4>What USCIS wants</h4>
|
||
<p>A specialty occupation (requires a specific bachelor's-level degree), the applicant's qualification for it, and a certified LCA.</p>
|
||
<h4>Where filings go wrong</h4>
|
||
<ul>
|
||
<li>Weak "specialty occupation" argument for ambiguous job titles</li>
|
||
<li>Job description doesn't tie to the required degree field</li>
|
||
<li>LCA wage tier mismatched to actual role seniority</li>
|
||
</ul>
|
||
</div>
|
||
<a class="pet-link" href="../abigail_library.html">Read the H-1B guide →</a>
|
||
</div>
|
||
|
||
<!-- L-1 -->
|
||
<div class="pet-card" data-tags="work employer">
|
||
<div class="pet-head"><span class="pet-code">L-1A / L-1B</span></div>
|
||
<h3>Intracompany Transferee</h3>
|
||
<p class="pet-subtitle">Manager / executive (L-1A) or specialized knowledge (L-1B)</p>
|
||
<div class="pet-grid-meta">
|
||
<div><div class="k">Sponsorship</div><div class="v">Employer</div></div>
|
||
<div><div class="k">Validity</div><div class="v">7 years (L-1A) / 5 (L-1B)</div></div>
|
||
<div><div class="k">Cap</div><div class="v">None</div></div>
|
||
<div><div class="k">Family</div><div class="v">L-2 (work auth)</div></div>
|
||
</div>
|
||
<div class="pet-section">
|
||
<h4>What USCIS wants</h4>
|
||
<p>One year of qualifying employment at a related foreign entity in the prior three years, transferring to a US office in the same managerial or specialized-knowledge role.</p>
|
||
<h4>Where filings go wrong</h4>
|
||
<ul>
|
||
<li>"Manager" claim without genuine subordinates or budget authority</li>
|
||
<li>"Specialized knowledge" defined too broadly to be credible</li>
|
||
</ul>
|
||
</div>
|
||
<a class="pet-link" href="../abigail_library.html">Read the L-1 guide →</a>
|
||
</div>
|
||
|
||
<!-- EB-1B -->
|
||
<div class="pet-card" data-tags="gc employer">
|
||
<div class="pet-head"><span class="pet-code">EB-1B</span></div>
|
||
<h3>Outstanding Researcher</h3>
|
||
<p class="pet-subtitle">For academic and industry researchers</p>
|
||
<div class="pet-grid-meta">
|
||
<div><div class="k">Sponsorship</div><div class="v">Employer</div></div>
|
||
<div><div class="k">Validity</div><div class="v">Permanent residence</div></div>
|
||
<div><div class="k">Premium proc.</div><div class="v">Available</div></div>
|
||
<div><div class="k">Experience</div><div class="v">3+ years required</div></div>
|
||
</div>
|
||
<div class="pet-section">
|
||
<h4>What USCIS wants</h4>
|
||
<p>International recognition for outstanding achievement in a specific academic field. 2 of 6 criteria, plus a permanent research position.</p>
|
||
<h4>Where filings go wrong</h4>
|
||
<ul>
|
||
<li>"Outstanding" claim relies on citation count alone — without field context</li>
|
||
<li>Recommender letters too generic to establish international recognition</li>
|
||
</ul>
|
||
</div>
|
||
<a class="pet-link" href="../abigail_library.html">Read the EB-1B guide →</a>
|
||
</div>
|
||
|
||
<!-- TN -->
|
||
<div class="pet-card" data-tags="work employer">
|
||
<div class="pet-head"><span class="pet-code">TN</span></div>
|
||
<h3>USMCA Professional</h3>
|
||
<p class="pet-subtitle">Canadian and Mexican citizens only</p>
|
||
<div class="pet-grid-meta">
|
||
<div><div class="k">Sponsorship</div><div class="v">Employer</div></div>
|
||
<div><div class="k">Validity</div><div class="v">3 years, indefinitely renewable</div></div>
|
||
<div><div class="k">Cap</div><div class="v">None</div></div>
|
||
<div><div class="k">Adjudication</div><div class="v">Often same-day (border)</div></div>
|
||
</div>
|
||
<div class="pet-section">
|
||
<h4>What USCIS wants</h4>
|
||
<p>Treaty-based work authorization in one of the listed USMCA professional occupations, with the degree credentials each occupation requires.</p>
|
||
<h4>Where filings go wrong</h4>
|
||
<ul>
|
||
<li>Trying to fit a non-listed occupation by analogy</li>
|
||
<li>"Management Consultant" use without sufficient justification</li>
|
||
</ul>
|
||
</div>
|
||
<a class="pet-link" href="../abigail_library.html">Read the TN guide →</a>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<div class="container">
|
||
<div class="section-head">
|
||
<h2>The anatomy of any petition.</h2>
|
||
<p>What every winning filing contains, regardless of visa type. Skip any of these and USCIS will notice.</p>
|
||
</div>
|
||
|
||
<div class="anatomy-wrap">
|
||
<div class="anatomy-grid">
|
||
<div class="anatomy-row">
|
||
<span class="anatomy-num">01</span>
|
||
<div><h4>Form package</h4><p>Properly completed USCIS forms (I-129, I-140, G-28 where applicable) with consistent dates and identifiers across every line.</p></div>
|
||
</div>
|
||
<div class="anatomy-row">
|
||
<span class="anatomy-num">02</span>
|
||
<div><h4>Petition narrative</h4><p>A structured argument tying the applicant's facts to each statutory criterion, with cross-references to exhibits.</p></div>
|
||
</div>
|
||
<div class="anatomy-row">
|
||
<span class="anatomy-num">03</span>
|
||
<div><h4>Evidence exhibits</h4><p>Tabbed, indexed supporting documents — degrees, awards, publications, contracts, media — each mapped to a specific criterion.</p></div>
|
||
</div>
|
||
<div class="anatomy-row">
|
||
<span class="anatomy-num">04</span>
|
||
<div><h4>Recommendation letters</h4><p>Specific, signed letters from credible experts in the field, addressing the applicant's particular contributions — not generic endorsements.</p></div>
|
||
</div>
|
||
<div class="anatomy-row">
|
||
<span class="anatomy-num">05</span>
|
||
<div><h4>Cover letter</h4><p>The roadmap. A clear summary of the petition, the legal standard, and where each piece of evidence lands.</p></div>
|
||
</div>
|
||
<div class="anatomy-row">
|
||
<span class="anatomy-num">06</span>
|
||
<div><h4>Filing fees</h4><p>Correct fee amounts (they change). Premium processing if elected. Wrong fees = rejection without review.</p></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<div class="container">
|
||
<div class="cta-band">
|
||
<h2>Not sure which petition fits?</h2>
|
||
<p>The free AI screener analyzes all major visa types simultaneously and outputs candidate pathways with evidence gap analysis.</p>
|
||
<div class="cta-buttons">
|
||
<a href="../abigail_individuals.html#hero" class="btn btn-primary">Run the screener</a>
|
||
<a href="../abigail_library.html" class="btn btn-secondary">Browse the library</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<footer>
|
||
<div class="container">
|
||
<div>
|
||
<div class="brand" style="color:var(--ink); margin-bottom:8px;">Abigail<span class="brand-dot">.</span></div>
|
||
<div>AI-native immigration platform</div>
|
||
</div>
|
||
<div class="footer-links">
|
||
<div>
|
||
<div style="color:var(--ink); font-weight:600; margin-bottom:8px;">Services</div>
|
||
<div><a href="services.html">All services</a></div>
|
||
<div><a href="press.html">Press support</a></div>
|
||
<div><a href="judging.html">Peer-review intros</a></div>
|
||
<div><a href="attorneys.html">Attorney network</a></div>
|
||
</div>
|
||
<div>
|
||
<div style="color:var(--ink); font-weight:600; margin-bottom:8px;">Resources</div>
|
||
<div><a href="../abigail_library.html">Library</a></div>
|
||
<div><a href="petitions.html">Petitions</a></div>
|
||
<div><a href="../abigail_pricing.html">Pricing</a></div>
|
||
</div>
|
||
<div>
|
||
<div style="color:var(--ink); font-weight:600; margin-bottom:8px;">Legal</div>
|
||
<div><a href="#">Terms</a></div>
|
||
<div><a href="#">Privacy</a></div>
|
||
<div><a href="login.html">Log in</a></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="container">
|
||
<div class="disclaimer">
|
||
Content on this page is general informational summary and is not legal advice. Immigration law and USCIS practice change; verify specifics against current USCIS policy or consult a licensed attorney. Reading this page does not create an attorney-client relationship.
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
<script>
|
||
const dd = document.getElementById("resourcesDropdown");
|
||
if (dd) {
|
||
const trigger = dd.querySelector(".nav-trigger");
|
||
trigger.addEventListener("click", (e) => {
|
||
e.stopPropagation();
|
||
dd.classList.toggle("open");
|
||
});
|
||
document.addEventListener("click", () => dd.classList.remove("open"));
|
||
dd.querySelector(".dropdown-menu").addEventListener("click", (e) => e.stopPropagation());
|
||
}
|
||
|
||
const chips = document.querySelectorAll("#chips .chip");
|
||
const cards = document.querySelectorAll(".pet-card");
|
||
chips.forEach(c => c.addEventListener("click", () => {
|
||
chips.forEach(x => x.classList.toggle("active", x === c));
|
||
const tag = c.dataset.tag;
|
||
cards.forEach(card => {
|
||
const tags = (card.dataset.tags || "").split(/\s+/);
|
||
card.style.display = (tag === "all" || tags.includes(tag)) ? "" : "none";
|
||
});
|
||
}));
|
||
const THEME_KEY = "abigail-theme";
|
||
const root = document.documentElement;
|
||
if (localStorage.getItem(THEME_KEY) === "dark") root.classList.add("dark");
|
||
const toggle = document.getElementById("themeToggle");
|
||
if (toggle) toggle.addEventListener("click", () => {
|
||
root.classList.toggle("dark");
|
||
localStorage.setItem(THEME_KEY, root.classList.contains("dark") ? "dark" : "light");
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|