feat(ultrawork-manifesto-web): create static manifesto site with sisyphuslabs-inspired design
This commit is contained in:
parent
3fb6edb269
commit
d7713ca8be
BIN
ultrawork-manifesto-web/public/images/footer-pattern.png
Normal file
BIN
ultrawork-manifesto-web/public/images/footer-pattern.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 MiB |
BIN
ultrawork-manifesto-web/public/images/hero.png
Normal file
BIN
ultrawork-manifesto-web/public/images/hero.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.5 MiB |
BIN
ultrawork-manifesto-web/public/images/orb-divider.png
Normal file
BIN
ultrawork-manifesto-web/public/images/orb-divider.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 704 KiB |
281
ultrawork-manifesto-web/src/index.html
Normal file
281
ultrawork-manifesto-web/src/index.html
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Ultrawork Manifesto</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;600;700&family=JetBrains+Mono:wght@400&display=swap" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<div class="hero-container">
|
||||||
|
<img src="../public/images/hero.png" alt="Ultrawork Hero" class="hero-image">
|
||||||
|
<h1 class="hero-title">Manifesto</h1>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<!-- Section 1 -->
|
||||||
|
<section id="human-intervention">
|
||||||
|
<h2>Human Intervention is a Failure Signal</h2>
|
||||||
|
|
||||||
|
<div class="gold-gradient-text bottleneck-text">
|
||||||
|
HUMAN IN THE LOOP = BOTTLENECK<br>
|
||||||
|
HUMAN IN THE LOOP = BOTTLENECK<br>
|
||||||
|
HUMAN IN THE LOOP = BOTTLENECK
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>Think about autonomous driving. When a human has to take over the wheel, that's not a feature - it's a failure of the system. The car couldn't handle the situation on its own.</p>
|
||||||
|
|
||||||
|
<h3>Why is coding any different?</h3>
|
||||||
|
|
||||||
|
<p>When you find yourself:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Fixing the AI's half-finished code</li>
|
||||||
|
<li>Manually correcting obvious mistakes</li>
|
||||||
|
<li>Guiding the agent step-by-step through a task</li>
|
||||||
|
<li>Repeatedly clarifying the same requirements</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>...that's not "human-AI collaboration." That's the AI failing to do its job.</p>
|
||||||
|
|
||||||
|
<p><strong>Oh My OpenCode is built on this premise</strong>: Human intervention during agentic work is fundamentally a wrong signal. If the system is designed correctly, the agent should complete the work without requiring you to babysit it.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="divider">
|
||||||
|
<img src="../public/images/orb-divider.png" alt="Divider">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Section 2 -->
|
||||||
|
<section id="indistinguishable-code">
|
||||||
|
<h2>Indistinguishable Code</h2>
|
||||||
|
|
||||||
|
<p class="highlight-box"><strong>Goal: Code written by the agent should be indistinguishable from code written by a senior engineer.</strong></p>
|
||||||
|
|
||||||
|
<p>Not "AI-generated code that needs cleanup." Not "a good starting point." The actual, final, production-ready code.</p>
|
||||||
|
|
||||||
|
<p>This means:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Following existing codebase patterns exactly</li>
|
||||||
|
<li>Proper error handling without being asked</li>
|
||||||
|
<li>Tests that actually test the right things</li>
|
||||||
|
<li>No AI slop (over-engineering, unnecessary abstractions, scope creep)</li>
|
||||||
|
<li>Comments only when they add value</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>If you can tell whether a commit was made by a human or an agent, the agent has failed.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="divider">
|
||||||
|
<img src="../public/images/orb-divider.png" alt="Divider">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Section 3 -->
|
||||||
|
<section id="token-cost">
|
||||||
|
<h2>Token Cost vs. Productivity</h2>
|
||||||
|
|
||||||
|
<p><strong>Higher token usage is acceptable if it significantly increases productivity.</strong></p>
|
||||||
|
|
||||||
|
<p>Using more tokens to:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Have multiple specialized agents research in parallel</li>
|
||||||
|
<li>Get the job done completely without human intervention</li>
|
||||||
|
<li>Verify work thoroughly before completion</li>
|
||||||
|
<li>Accumulate knowledge across tasks</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>...is a worthwhile investment when it means 10x, 20x, or 100x productivity gains.</p>
|
||||||
|
|
||||||
|
<h3>However:</h3>
|
||||||
|
|
||||||
|
<p>Unnecessary token waste is not pursued. The system optimizes for:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Using cheaper models (Haiku, Flash) for simple tasks</li>
|
||||||
|
<li>Avoiding redundant exploration</li>
|
||||||
|
<li>Caching learnings across sessions</li>
|
||||||
|
<li>Stopping research when sufficient context is gathered</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Token efficiency matters. But not at the cost of work quality or human cognitive load.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="divider">
|
||||||
|
<img src="../public/images/orb-divider.png" alt="Divider">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Section 4 -->
|
||||||
|
<section id="cognitive-load">
|
||||||
|
<h2>Minimize Human Cognitive Load</h2>
|
||||||
|
|
||||||
|
<p><strong>The human should only need to say what they want. Everything else is the agent's job.</strong></p>
|
||||||
|
|
||||||
|
<p>Two approaches to achieve this:</p>
|
||||||
|
|
||||||
|
<div class="approach-container">
|
||||||
|
<div class="approach">
|
||||||
|
<h3>Approach 1: Prometheus (Interview Mode)</h3>
|
||||||
|
<p>You say: "I want to add authentication."</p>
|
||||||
|
<p>Prometheus:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Researches your codebase to understand existing patterns</li>
|
||||||
|
<li>Asks clarifying questions based on actual findings</li>
|
||||||
|
<li>Surfaces edge cases you hadn't considered</li>
|
||||||
|
<li>Documents decisions as you make them</li>
|
||||||
|
<li>Generates a complete work plan</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>You provide intent. The agent provides structure.</strong></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="approach">
|
||||||
|
<h3>Approach 2: Ultrawork (Just Do It Mode)</h3>
|
||||||
|
<p>You say: "ulw add authentication"</p>
|
||||||
|
<p>The agent:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Figures out the right approach</li>
|
||||||
|
<li>Researches best practices</li>
|
||||||
|
<li>Implements following conventions</li>
|
||||||
|
<li>Verifies everything works</li>
|
||||||
|
<li>Keeps going until complete</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>You provide intent. The agent handles everything.</strong></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>In both cases, the human's job is to <strong>express what they want</strong>, not to manage how it gets done.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="divider">
|
||||||
|
<img src="../public/images/orb-divider.png" alt="Divider">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Section 5 -->
|
||||||
|
<section id="predictable-continuous">
|
||||||
|
<h2>Predictable, Continuous, Delegatable</h2>
|
||||||
|
|
||||||
|
<p><strong>The ideal agent should work like a compiler</strong>: markdown document goes in, working code comes out.</p>
|
||||||
|
|
||||||
|
<h3>Predictable</h3>
|
||||||
|
<p>Given the same inputs:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Same codebase patterns</li>
|
||||||
|
<li>Same requirements</li>
|
||||||
|
<li>Same constraints</li>
|
||||||
|
</ul>
|
||||||
|
<p>...the output should be consistent. Not random, not surprising, not "creative" in ways you didn't ask for.</p>
|
||||||
|
|
||||||
|
<h3>Continuous</h3>
|
||||||
|
<p>Work should survive interruptions:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Session crashes? Resume with <code>/start-work</code></li>
|
||||||
|
<li>Need to step away? Progress is tracked</li>
|
||||||
|
<li>Multi-day project? Context is preserved</li>
|
||||||
|
</ul>
|
||||||
|
<p>The agent maintains state. You don't have to.</p>
|
||||||
|
|
||||||
|
<h3>Delegatable</h3>
|
||||||
|
<p>Just like you can assign a task to a capable team member and trust them to handle it, you should be able to delegate to the agent.</p>
|
||||||
|
<p>This means:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Clear acceptance criteria, verified independently</li>
|
||||||
|
<li>Self-correcting behavior when something goes wrong</li>
|
||||||
|
<li>Escalation (to Oracle, to user) only when truly needed</li>
|
||||||
|
<li>Complete work, not "mostly done"</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="divider">
|
||||||
|
<img src="../public/images/orb-divider.png" alt="Divider">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Section 6 -->
|
||||||
|
<section id="core-loop">
|
||||||
|
<h2>The Core Loop</h2>
|
||||||
|
|
||||||
|
<div class="ascii-art">
|
||||||
|
Human Intent → Agent Execution → Verified Result
|
||||||
|
↑ ↓
|
||||||
|
└──────── Minimum ─────────────┘
|
||||||
|
(intervention only on true failure)
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>Everything in Oh My OpenCode is designed to make this loop work:</p>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Feature</th>
|
||||||
|
<th>Purpose</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Prometheus</td>
|
||||||
|
<td>Extract intent through intelligent interview</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Metis</td>
|
||||||
|
<td>Catch ambiguities before they become bugs</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Momus</td>
|
||||||
|
<td>Verify plans are complete before execution</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Orchestrator</td>
|
||||||
|
<td>Coordinate work without human micromanagement</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Todo Continuation</td>
|
||||||
|
<td>Force completion, prevent "I'm done" lies</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Category System</td>
|
||||||
|
<td>Route to optimal model without human decision</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Background Agents</td>
|
||||||
|
<td>Parallel research without blocking user</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Wisdom Accumulation</td>
|
||||||
|
<td>Learn from work, don't repeat mistakes</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="divider">
|
||||||
|
<img src="../public/images/orb-divider.png" alt="Divider">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Section 7 -->
|
||||||
|
<section id="future">
|
||||||
|
<h2>The Future We're Building</h2>
|
||||||
|
|
||||||
|
<p>A world where:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Human developers focus on <strong>what</strong> to build, not <strong>how</strong> to get AI to build it</li>
|
||||||
|
<li>Code quality is independent of who (or what) wrote it</li>
|
||||||
|
<li>Complex projects are as easy as simple ones (just take longer)</li>
|
||||||
|
<li>"Prompt engineering" becomes as obsolete as "compiler debugging"</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p><strong>The agent should be invisible.</strong> Not in the sense that it's hidden, but in the sense that it just works - like electricity, like running water, like the internet.</p>
|
||||||
|
|
||||||
|
<p>You flip the switch. The light turns on. You don't think about the power grid.</p>
|
||||||
|
|
||||||
|
<p class="final-statement">That's the goal.</p>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="footer-content">
|
||||||
|
<img src="../public/images/footer-pattern.png" alt="Footer Pattern" class="footer-pattern">
|
||||||
|
<p><strong>just ulw ulw</strong></p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
336
ultrawork-manifesto-web/src/styles.css
Normal file
336
ultrawork-manifesto-web/src/styles.css
Normal file
@ -0,0 +1,336 @@
|
|||||||
|
/* Design System */
|
||||||
|
:root {
|
||||||
|
/* Colors */
|
||||||
|
--bg-primary: #0a0a0a;
|
||||||
|
--bg-secondary: #0E1115;
|
||||||
|
--text-primary: #ffffff;
|
||||||
|
--text-muted: #99A1AF;
|
||||||
|
--text-dim: #6A7282;
|
||||||
|
--accent: #87F0F2;
|
||||||
|
--accent-glow: #ABF5F7;
|
||||||
|
|
||||||
|
/* Gold gradient for emphasis */
|
||||||
|
--gold-gradient: linear-gradient(180deg, #f0daaf 0%, #e4c380 50%, #5d5135 100%);
|
||||||
|
|
||||||
|
/* Typography */
|
||||||
|
--font-primary: 'Inter', system-ui, sans-serif;
|
||||||
|
--font-mono: 'JetBrains Mono', monospace;
|
||||||
|
|
||||||
|
/* Layout */
|
||||||
|
--max-width: 800px;
|
||||||
|
--spacing-section: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset & Base Styles */
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: var(--bg-primary);
|
||||||
|
color: var(--text-primary);
|
||||||
|
font-family: var(--font-primary);
|
||||||
|
line-height: 1.6;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Typography */
|
||||||
|
h1, h2, h3 {
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 3.5rem;
|
||||||
|
letter-spacing: -0.02em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
color: var(--text-primary);
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
color: var(--accent);
|
||||||
|
margin-top: 2rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 1.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
color: var(--text-primary);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style: none;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
padding-left: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li {
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 1.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li::before {
|
||||||
|
content: "→";
|
||||||
|
position: absolute;
|
||||||
|
left: -1.5rem;
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: var(--font-mono);
|
||||||
|
background: var(--bg-secondary);
|
||||||
|
padding: 0.2em 0.4em;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 0.9em;
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Layout */
|
||||||
|
header {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 60vh;
|
||||||
|
min-height: 400px;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: var(--spacing-section);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-container {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-image {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
opacity: 0.6;
|
||||||
|
mask-image: linear-gradient(to bottom, black 50%, transparent 100%);
|
||||||
|
-webkit-mask-image: linear-gradient(to bottom, black 50%, transparent 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-title {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
font-size: 5rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
text-shadow: 0 0 30px rgba(135, 240, 242, 0.3);
|
||||||
|
animation: fadeIn 1.5s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
max-width: var(--max-width);
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section {
|
||||||
|
margin-bottom: var(--spacing-section);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Components */
|
||||||
|
.divider {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin: var(--spacing-section) 0;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider img {
|
||||||
|
width: 100px;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specific Styles */
|
||||||
|
.gold-gradient-text {
|
||||||
|
font-family: var(--font-mono);
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
background: var(--gold-gradient);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
background-clip: text;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
text-align: center;
|
||||||
|
border: 1px solid rgba(240, 218, 175, 0.2);
|
||||||
|
padding: 2rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
background-color: rgba(240, 218, 175, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight-box {
|
||||||
|
background: var(--bg-secondary);
|
||||||
|
border-left: 4px solid var(--accent);
|
||||||
|
padding: 1.5rem;
|
||||||
|
border-radius: 0 8px 8px 0;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
color: var(--text-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.approach-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
gap: 2rem;
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.approach-container {
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.approach {
|
||||||
|
background: var(--bg-secondary);
|
||||||
|
padding: 2rem;
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.05);
|
||||||
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.approach:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
|
||||||
|
border-color: rgba(135, 240, 242, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ascii-art {
|
||||||
|
font-family: var(--font-mono);
|
||||||
|
white-space: pre;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: var(--bg-secondary);
|
||||||
|
padding: 2rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: var(--accent);
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
border: 1px solid rgba(135, 240, 242, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Table */
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 2rem 0;
|
||||||
|
background: var(--bg-secondary);
|
||||||
|
border-radius: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td {
|
||||||
|
padding: 1rem 1.5rem;
|
||||||
|
text-align: left;
|
||||||
|
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background: rgba(135, 240, 242, 0.05);
|
||||||
|
color: var(--accent);
|
||||||
|
font-weight: 600;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:last-child td {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:hover td {
|
||||||
|
background: rgba(255, 255, 255, 0.02);
|
||||||
|
color: var(--text-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Footer */
|
||||||
|
footer {
|
||||||
|
margin-top: var(--spacing-section);
|
||||||
|
padding: 4rem 0;
|
||||||
|
background: linear-gradient(to top, #000 0%, transparent 100%);
|
||||||
|
text-align: center;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-pattern {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 1200px;
|
||||||
|
height: auto;
|
||||||
|
opacity: 0.3;
|
||||||
|
mask-image: linear-gradient(to bottom, transparent, black 20%, black 80%, transparent);
|
||||||
|
-webkit-mask-image: linear-gradient(to bottom, transparent, black 20%, black 80%, transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.final-statement {
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--text-primary);
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 3rem;
|
||||||
|
letter-spacing: -0.02em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Animations */
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from { opacity: 0; transform: translateY(20px); }
|
||||||
|
to { opacity: 1; transform: translateY(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Scrollbar */
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
background: var(--bg-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--bg-secondary);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: var(--text-dim);
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user