Files
ducky.creative-crafter.de/index.html
2026-06-09 19:17:49 +02:00

1436 lines
48 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ducky — Command Interface for Windows</title>
<meta name="description" content="Ducky is a terminal-style command app for Windows 10/11 with custom commands and CMD fallback." />
<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=Share+Tech&family=Share+Tech+Mono&display=swap" rel="stylesheet" />
<style>
/* ─────────────────────────────────────────
RESET & BASE
───────────────────────────────────────── */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
:root {
--black: #000000;
--white: #ffffff;
--green: #00ff41;
--green-dim: #00c832;
--green-glow: rgba(0, 255, 65, 0.18);
--green-faint: rgba(0, 255, 65, 0.06);
--red: #ff2244;
--grey-1: #111111;
--grey-2: #1a1a1a;
--grey-3: #2a2a2a;
--grey-text: #666666;
--border: rgba(255,255,255,0.07);
--font-ui: 'Share Tech', monospace;
--font-mono: 'Share Tech Mono', monospace;
--sp: 8px;
--sp2: 16px;
--sp3: 24px;
--sp4: 32px;
--sp5: 40px;
--sp6: 48px;
--sp8: 64px;
--sp10: 80px;
--sp16: 128px;
--max-w: 1100px;
--radius: 2px;
--transition: 200ms cubic-bezier(0.4, 0, 0.2, 1);
}
html {
scroll-behavior: smooth;
}
body {
background-color: var(--black);
color: var(--white);
font-family: var(--font-ui);
font-size: 16px;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
}
::selection {
background: var(--green);
color: var(--black);
}
/* ─────────────────────────────────────────
SCROLLBAR
───────────────────────────────────────── */
::-webkit-scrollbar { width: 4px; }
::-webkit-scrollbar-track { background: var(--black); }
::-webkit-scrollbar-thumb { background: var(--grey-3); border-radius: 2px; }
::-webkit-scrollbar-thumb:hover { background: var(--green); }
/* ─────────────────────────────────────────
NAV
───────────────────────────────────────── */
nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--sp2) var(--sp4);
border-bottom: 1px solid var(--border);
background: rgba(0,0,0,0.85);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
.nav-brand {
display: flex;
align-items: center;
gap: var(--sp);
text-decoration: none;
color: var(--white);
font-family: var(--font-ui);
font-size: 17px;
letter-spacing: 0.08em;
}
.nav-brand-logo {
width: 28px;
height: 28px;
object-fit: contain;
}
.nav-brand-dot {
display: inline-block;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--green);
margin-left: 2px;
animation: blink 1.8s step-end infinite;
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
.nav-links {
display: flex;
align-items: center;
gap: var(--sp4);
list-style: none;
}
.nav-links a {
color: var(--grey-text);
text-decoration: none;
font-size: 13px;
letter-spacing: 0.06em;
text-transform: uppercase;
transition: color var(--transition);
}
.nav-links a:hover { color: var(--white); }
.nav-cta {
font-family: var(--font-ui);
font-size: 13px;
letter-spacing: 0.06em;
text-transform: uppercase;
padding: 7px 18px;
background: transparent;
border: 1px solid var(--green);
color: var(--green);
cursor: pointer;
text-decoration: none;
transition: background var(--transition), color var(--transition);
border-radius: var(--radius);
}
.nav-cta:hover {
background: var(--green);
color: var(--black);
}
/* ─────────────────────────────────────────
GRID BACKGROUND
───────────────────────────────────────── */
.grid-bg {
position: fixed;
inset: 0;
z-index: 0;
pointer-events: none;
background-image:
linear-gradient(var(--border) 1px, transparent 1px),
linear-gradient(90deg, var(--border) 1px, transparent 1px);
background-size: 48px 48px;
mask-image: radial-gradient(ellipse 80% 60% at 50% 0%, black 30%, transparent 100%);
-webkit-mask-image: radial-gradient(ellipse 80% 60% at 50% 0%, black 30%, transparent 100%);
opacity: 0.5;
}
/* ─────────────────────────────────────────
LAYOUT UTILS
───────────────────────────────────────── */
.container {
max-width: var(--max-w);
margin: 0 auto;
padding: 0 var(--sp4);
}
section { position: relative; z-index: 1; }
/* ─────────────────────────────────────────
HERO
───────────────────────────────────────── */
#hero {
min-height: 100vh;
display: flex;
align-items: center;
padding-top: 80px;
}
.hero-inner {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--sp8);
align-items: center;
width: 100%;
}
.hero-left {
display: flex;
flex-direction: column;
gap: var(--sp3);
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: var(--sp);
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--green);
border: 1px solid rgba(0,255,65,0.3);
padding: 5px 12px;
border-radius: var(--radius);
width: fit-content;
background: var(--green-faint);
}
.hero-badge::before {
content: '';
display: block;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--green);
animation: blink 1.8s step-end infinite;
}
.hero-logo-wrap {
display: flex;
align-items: center;
gap: var(--sp2);
}
.hero-logo {
width: 56px;
height: 56px;
object-fit: contain;
}
.hero-title {
font-family: var(--font-ui);
font-size: clamp(56px, 7vw, 88px);
font-weight: 400;
letter-spacing: -0.01em;
line-height: 1;
color: var(--white);
}
.hero-title span {
color: var(--green);
}
.hero-subtitle {
font-family: var(--font-mono);
font-size: 15px;
color: var(--grey-text);
line-height: 1.7;
max-width: 460px;
border-left: 2px solid var(--green);
padding-left: var(--sp2);
}
.hero-actions {
display: flex;
align-items: center;
gap: var(--sp2);
flex-wrap: wrap;
margin-top: var(--sp);
}
.btn-primary {
display: inline-flex;
align-items: center;
gap: var(--sp);
font-family: var(--font-ui);
font-size: 14px;
letter-spacing: 0.07em;
text-transform: uppercase;
padding: 14px 28px;
background: var(--green);
color: var(--black);
border: none;
cursor: pointer;
text-decoration: none;
border-radius: var(--radius);
transition: background var(--transition), box-shadow var(--transition), transform var(--transition);
font-weight: 700;
}
.btn-primary:hover {
background: var(--green-dim);
box-shadow: 0 0 32px var(--green-glow);
transform: translateY(-1px);
}
.btn-primary:active { transform: translateY(0); }
.btn-secondary {
display: inline-flex;
align-items: center;
gap: var(--sp);
font-family: var(--font-ui);
font-size: 14px;
letter-spacing: 0.07em;
text-transform: uppercase;
padding: 13px 28px;
background: transparent;
color: var(--grey-text);
border: 1px solid var(--grey-3);
cursor: pointer;
text-decoration: none;
border-radius: var(--radius);
transition: border-color var(--transition), color var(--transition);
}
.btn-secondary:hover {
border-color: var(--white);
color: var(--white);
}
.hero-meta {
display: flex;
align-items: center;
gap: var(--sp3);
font-family: var(--font-mono);
font-size: 11px;
color: var(--grey-text);
letter-spacing: 0.06em;
margin-top: var(--sp);
}
.hero-meta-item {
display: flex;
align-items: center;
gap: 6px;
}
.hero-meta-item svg { opacity: 0.5; }
/* ─── Hero Right: System Info Card ─── */
.hero-right {
position: relative;
}
.sys-card {
border: 1px solid var(--border);
background: var(--grey-1);
border-radius: var(--radius);
overflow: hidden;
position: relative;
}
.sys-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, var(--green), transparent);
}
.sys-card-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--sp2) var(--sp3);
border-bottom: 1px solid var(--border);
background: rgba(0,255,65,0.03);
}
.sys-card-title {
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--grey-text);
}
.sys-card-dots {
display: flex;
gap: 6px;
}
.sys-card-dots span {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--grey-3);
}
.sys-card-body {
padding: var(--sp3);
display: flex;
flex-direction: column;
gap: var(--sp2);
}
.sys-row {
display: flex;
align-items: flex-start;
gap: var(--sp2);
padding: var(--sp2);
border: 1px solid var(--border);
border-radius: var(--radius);
transition: border-color var(--transition), background var(--transition);
}
.sys-row:hover {
border-color: rgba(0,255,65,0.2);
background: var(--green-faint);
}
.sys-row-icon {
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
background: var(--green-faint);
border: 1px solid rgba(0,255,65,0.15);
border-radius: var(--radius);
flex-shrink: 0;
}
.sys-row-icon svg { color: var(--green); }
.sys-row-text {}
.sys-row-label {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--grey-text);
margin-bottom: 2px;
}
.sys-row-val {
font-family: var(--font-mono);
font-size: 13px;
color: var(--white);
}
.sys-row-val .accent { color: var(--green); }
.sys-card-footer {
padding: var(--sp2) var(--sp3);
border-top: 1px solid var(--border);
display: flex;
align-items: center;
gap: var(--sp);
font-family: var(--font-mono);
font-size: 11px;
color: var(--grey-text);
}
.status-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--green);
animation: blink 1.8s step-end infinite;
}
/* ─────────────────────────────────────────
SECTION HEADERS
───────────────────────────────────────── */
.section-label {
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--green);
margin-bottom: var(--sp2);
}
.section-title {
font-family: var(--font-ui);
font-size: clamp(28px, 3.5vw, 44px);
font-weight: 400;
letter-spacing: -0.01em;
line-height: 1.1;
color: var(--white);
margin-bottom: var(--sp2);
}
.section-desc {
font-family: var(--font-mono);
font-size: 14px;
color: var(--grey-text);
max-width: 560px;
line-height: 1.75;
}
/* ─────────────────────────────────────────
DIVIDER
───────────────────────────────────────── */
.divider {
height: 1px;
background: var(--border);
margin: 0;
}
/* ─────────────────────────────────────────
COMMANDS STRIP
───────────────────────────────────────── */
#commands {
padding: var(--sp6) 0;
border-top: 1px solid var(--border);
border-bottom: 1px solid var(--border);
overflow: hidden;
}
.commands-inner {
display: flex;
gap: var(--sp3);
animation: scrollx 22s linear infinite;
width: max-content;
}
@keyframes scrollx {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
.cmd-pill {
display: inline-flex;
align-items: center;
gap: var(--sp);
font-family: var(--font-mono);
font-size: 12px;
letter-spacing: 0.06em;
padding: 6px 14px;
border: 1px solid var(--border);
border-radius: 999px;
color: var(--grey-text);
white-space: nowrap;
background: var(--grey-1);
}
.cmd-pill .cmd-prefix {
color: var(--green);
font-size: 11px;
}
/* ─────────────────────────────────────────
FEATURES
───────────────────────────────────────── */
#features {
padding: var(--sp16) 0;
}
.features-head {
margin-bottom: var(--sp8);
}
.features-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--sp2);
}
.feat-card {
border: 1px solid var(--border);
background: var(--grey-1);
border-radius: var(--radius);
padding: var(--sp4);
position: relative;
overflow: hidden;
transition: border-color var(--transition), background var(--transition);
cursor: default;
}
.feat-card::after {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 2px;
background: var(--green);
transform: scaleX(0);
transform-origin: left;
transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
}
.feat-card:hover::after { transform: scaleX(1); }
.feat-card:hover {
border-color: rgba(0,255,65,0.2);
background: var(--grey-2);
}
.feat-card.featured {
grid-column: span 2;
}
.feat-num {
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.1em;
color: var(--grey-text);
margin-bottom: var(--sp2);
}
.feat-icon {
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
background: var(--green-faint);
border: 1px solid rgba(0,255,65,0.15);
border-radius: var(--radius);
margin-bottom: var(--sp3);
color: var(--green);
}
.feat-name {
font-family: var(--font-ui);
font-size: 18px;
color: var(--white);
margin-bottom: var(--sp);
letter-spacing: 0.01em;
}
.feat-desc {
font-family: var(--font-mono);
font-size: 13px;
color: var(--grey-text);
line-height: 1.7;
}
.feat-tag {
display: inline-flex;
align-items: center;
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--green);
border: 1px solid rgba(0,255,65,0.25);
padding: 3px 8px;
border-radius: var(--radius);
margin-top: var(--sp3);
background: var(--green-faint);
}
/* ─────────────────────────────────────────
COMMANDS REFERENCE
───────────────────────────────────────── */
#cmd-ref {
padding: var(--sp16) 0;
border-top: 1px solid var(--border);
}
.cmd-table-wrap {
margin-top: var(--sp6);
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
}
.cmd-table {
width: 100%;
border-collapse: collapse;
}
.cmd-table thead tr {
border-bottom: 1px solid var(--border);
background: var(--grey-1);
}
.cmd-table th {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--grey-text);
text-align: left;
padding: var(--sp2) var(--sp3);
}
.cmd-table tbody tr {
border-bottom: 1px solid var(--border);
transition: background var(--transition);
}
.cmd-table tbody tr:last-child { border-bottom: none; }
.cmd-table tbody tr:hover { background: var(--grey-1); }
.cmd-table td {
font-family: var(--font-mono);
font-size: 13px;
padding: var(--sp2) var(--sp3);
vertical-align: top;
}
.cmd-name {
color: var(--green);
}
.cmd-syntax {
color: var(--white);
opacity: 0.85;
}
.cmd-note {
color: var(--grey-text);
font-size: 12px;
}
.cmd-badge {
display: inline-flex;
font-family: var(--font-mono);
font-size: 9px;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 2px 6px;
border-radius: var(--radius);
}
.cmd-badge.fallback {
background: rgba(255,34,68,0.12);
border: 1px solid rgba(255,34,68,0.3);
color: var(--red);
}
.cmd-badge.core {
background: var(--green-faint);
border: 1px solid rgba(0,255,65,0.25);
color: var(--green);
}
/* ─────────────────────────────────────────
DOWNLOAD
───────────────────────────────────────── */
#download {
padding: var(--sp16) 0;
border-top: 1px solid var(--border);
}
.dl-wrap {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--sp8);
align-items: center;
}
.dl-left {}
.dl-right {
display: flex;
flex-direction: column;
gap: var(--sp3);
}
.dl-card {
border: 1px solid rgba(0,255,65,0.2);
background: var(--grey-1);
border-radius: var(--radius);
overflow: hidden;
position: relative;
}
.dl-card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 2px;
background: linear-gradient(90deg, var(--green), var(--green-dim));
}
.dl-card-body {
padding: var(--sp4);
}
.dl-card-title {
font-family: var(--font-ui);
font-size: 22px;
color: var(--white);
margin-bottom: var(--sp);
}
.dl-card-sub {
font-family: var(--font-mono);
font-size: 12px;
color: var(--grey-text);
margin-bottom: var(--sp4);
}
.dl-specs {
display: flex;
flex-direction: column;
gap: var(--sp);
margin-bottom: var(--sp4);
}
.dl-spec {
display: flex;
align-items: center;
gap: var(--sp);
font-family: var(--font-mono);
font-size: 12px;
color: var(--grey-text);
}
.dl-spec::before {
content: '';
display: block;
width: 4px;
height: 4px;
border-radius: 50%;
background: var(--green);
flex-shrink: 0;
}
.dl-btn-wrap {
display: flex;
flex-direction: column;
gap: var(--sp);
}
.btn-download {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--sp);
font-family: var(--font-ui);
font-size: 15px;
letter-spacing: 0.07em;
text-transform: uppercase;
padding: 16px 32px;
background: var(--green);
color: var(--black);
border: none;
cursor: pointer;
text-decoration: none;
border-radius: var(--radius);
transition: background var(--transition), box-shadow var(--transition), transform var(--transition);
font-weight: 700;
width: 100%;
}
.btn-download:hover {
background: var(--green-dim);
box-shadow: 0 0 48px rgba(0,255,65,0.25);
transform: translateY(-1px);
}
.dl-notice {
font-family: var(--font-mono);
font-size: 11px;
color: var(--grey-text);
text-align: center;
letter-spacing: 0.04em;
}
.dl-notice span { color: var(--red); }
.dl-stats {
display: flex;
flex-direction: column;
gap: var(--sp2);
}
.dl-stat {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--sp2) var(--sp3);
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--grey-1);
}
.dl-stat-label {
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--grey-text);
}
.dl-stat-val {
font-family: var(--font-mono);
font-size: 12px;
color: var(--white);
}
.dl-stat-val.ok { color: var(--green); }
/* ─────────────────────────────────────────
FOOTER
───────────────────────────────────────── */
footer {
border-top: 1px solid var(--border);
padding: var(--sp6) var(--sp4);
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
z-index: 1;
}
.footer-brand {
font-family: var(--font-mono);
font-size: 12px;
color: var(--grey-text);
letter-spacing: 0.06em;
}
.footer-brand strong {
color: var(--white);
}
.footer-links {
display: flex;
gap: var(--sp3);
list-style: none;
}
.footer-links a {
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--grey-text);
text-decoration: none;
transition: color var(--transition);
}
.footer-links a:hover { color: var(--green); }
.footer-copy {
font-family: var(--font-mono);
font-size: 11px;
color: var(--grey-text);
letter-spacing: 0.04em;
}
/* ─────────────────────────────────────────
SCROLL REVEAL
───────────────────────────────────────── */
.reveal {
opacity: 0;
transform: translateY(20px);
transition: opacity 500ms ease, transform 500ms ease;
}
.reveal.visible {
opacity: 1;
transform: translateY(0);
}
/* ─────────────────────────────────────────
RESPONSIVE
───────────────────────────────────────── */
@media (max-width: 900px) {
nav { padding: var(--sp2); }
.nav-links { display: none; }
.hero-inner { grid-template-columns: 1fr; gap: var(--sp6); }
.hero-right { display: none; }
.features-grid { grid-template-columns: 1fr; }
.feat-card.featured { grid-column: span 1; }
.dl-wrap { grid-template-columns: 1fr; }
.dl-stats { display: none; }
footer { flex-direction: column; gap: var(--sp2); text-align: center; }
.footer-links { display: none; }
}
@media (max-width: 640px) {
.hero-title { font-size: 48px; }
.container { padding: 0 var(--sp2); }
}
</style>
</head>
<body>
<!-- GRID BG -->
<div class="grid-bg" aria-hidden="true"></div>
<!-- ── NAV ── -->
<nav role="navigation" aria-label="Primary">
<a href="#" class="nav-brand" aria-label="Ducky home">
<img src="logo.png" alt="Ducky logo" class="nav-brand-logo" onerror="this.style.display='none'" />
DUCKY<span class="nav-brand-dot" aria-hidden="true"></span>
</a>
<ul class="nav-links" role="list">
<li><a href="#features">Features</a></li>
<li><a href="#cmd-ref">Commands</a></li>
<li><a href="#download">Download</a></li>
</ul>
<a href="ducky-installer.exe" download class="nav-cta">
Download .exe
</a>
</nav>
<!-- ── HERO ── -->
<section id="hero" aria-label="Hero">
<div class="container">
<div class="hero-inner">
<div class="hero-left">
<span class="hero-badge">Windows 10 / 11</span>
<div class="hero-logo-wrap">
<img src="logo.png" alt="" class="hero-logo" onerror="this.style.display='none'" aria-hidden="true" />
<h1 class="hero-title">Duck<span>y</span></h1>
</div>
<p class="hero-subtitle">
A tool with custom commands and CMD fallback.<br />
Built for developers who live in the terminal.
</p>
<div class="hero-actions">
<a href="ducky-installer.exe" download class="btn-primary" aria-label="Download Ducky installer">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
Download for Windows
</a>
<a href="#features" class="btn-secondary" aria-label="View features">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
See Features
</a>
</div>
<div class="hero-meta" aria-label="System requirements">
<span class="hero-meta-item">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>
Windows 10/11
</span>
<span class="hero-meta-item">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>
CMD Compatible
</span>
<span class="hero-meta-item">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
Lightweight
</span>
</div>
</div>
<div class="hero-right" aria-hidden="true">
<div class="sys-card">
<div class="sys-card-header">
<span class="sys-card-title">System Overview</span>
<div class="sys-card-dots">
<span></span><span></span><span></span>
</div>
</div>
<div class="sys-card-body">
<div class="sys-row">
<div class="sys-row-icon">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>
</div>
<div class="sys-row-text">
<div class="sys-row-label">Runtime</div>
<div class="sys-row-val">Ducky v1.0 — <span class="accent">ACTIVE</span></div>
</div>
</div>
<div class="sys-row">
<div class="sys-row-icon">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>
</div>
<div class="sys-row-text">
<div class="sys-row-label">Platform</div>
<div class="sys-row-val">Windows <span class="accent">10 / 11</span></div>
</div>
</div>
<div class="sys-row">
<div class="sys-row-icon">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
</div>
<div class="sys-row-text">
<div class="sys-row-label">Web Search</div>
<div class="sys-row-val">DuckDuckGo — <span class="accent">TOP 5</span></div>
</div>
</div>
<div class="sys-row">
<div class="sys-row-icon">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
</div>
<div class="sys-row-text">
<div class="sys-row-label">Fallback</div>
<div class="sys-row-val">CMD — <span class="accent">ENABLED</span></div>
</div>
</div>
<div class="sys-row">
<div class="sys-row-icon">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>
</div>
<div class="sys-row-text">
<div class="sys-row-label">File Resume</div>
<div class="sys-row-val">Media / Docs — <span class="accent">READY</span></div>
</div>
</div>
</div>
<div class="sys-card-footer">
<div class="status-dot"></div>
All systems operational
</div>
</div>
</div>
</div>
</div>
</section>
<!-- ── COMMAND STRIP ── -->
<div id="commands" aria-hidden="true">
<div class="commands-inner">
<!-- duplicated for seamless loop -->
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> help</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> cd Documents</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> show report.pdf</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> searchweb "dark matter"</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> open https://example.com</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> exit</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> ---forcecmd</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> show video.mp4</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> cd Downloads</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> searchweb "black holes"</span>
<!-- loop clone -->
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> help</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> cd Documents</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> show report.pdf</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> searchweb "dark matter"</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> open https://example.com</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> exit</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> ---forcecmd</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> show video.mp4</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> cd Downloads</span>
<span class="cmd-pill"><span class="cmd-prefix">&gt;</span> searchweb "black holes"</span>
</div>
</div>
<!-- ── FEATURES ── -->
<section id="features" aria-label="Features">
<div class="container">
<div class="features-head reveal">
<p class="section-label">/ Features</p>
<h2 class="section-title">Everything you need.<br />Nothing you don't.</h2>
<p class="section-desc">Ducky extends your command-line workflow with powerful built-in commands while staying fully compatible with the Windows CMD ecosystem.</p>
</div>
<div class="features-grid">
<div class="feat-card featured reveal" style="transition-delay:80ms" aria-label="Custom command system">
<div class="feat-num">01</div>
<div class="feat-icon" aria-hidden="true">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>
</div>
<h3 class="feat-name">Custom Command System</h3>
<p class="feat-desc">Ducky ships with its own command layer — purpose-built, fast, and intuitive. Every command is designed for real developer workflows: navigate directories, open files, search the web, and handle URLs without ever leaving your terminal context. Compose commands naturally with clean, readable syntax.</p>
<span class="feat-tag">Core Engine</span>
</div>
<div class="feat-card reveal" style="transition-delay:160ms" aria-label="CMD fallback">
<div class="feat-num">02</div>
<div class="feat-icon" aria-hidden="true">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
</div>
<h3 class="feat-name">CMD Fallback</h3>
<p class="feat-desc">Unknown command? Ducky forwards it to Windows CMD automatically — or use <code>---forcecmd</code> to route any input directly.</p>
<span class="feat-tag">Compatibility</span>
</div>
<div class="feat-card reveal" style="transition-delay:240ms" aria-label="Web search">
<div class="feat-num">03</div>
<div class="feat-icon" aria-hidden="true">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
</div>
<h3 class="feat-name">Web Search</h3>
<p class="feat-desc">Run <code>searchweb &lt;query&gt;</code> to fetch the top 5 DuckDuckGo results inline, without leaving Ducky.</p>
<span class="feat-tag">DuckDuckGo</span>
</div>
<div class="feat-card reveal" style="transition-delay:320ms" aria-label="File and media handling">
<div class="feat-num">04</div>
<div class="feat-icon" aria-hidden="true">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>
</div>
<h3 class="feat-name">File &amp; Media Handling</h3>
<p class="feat-desc">Open any file or media with <code>show</code>. Ducky tracks playback position and resumes exactly where you left off.</p>
<span class="feat-tag">Resume Support</span>
</div>
<div class="feat-card reveal" style="transition-delay:400ms" aria-label="URL handling">
<div class="feat-num">05</div>
<div class="feat-icon" aria-hidden="true">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>
</div>
<h3 class="feat-name">URL Handling</h3>
<p class="feat-desc">Use <code>open &lt;url&gt;</code> to launch a URL in your default browser, or inspect it directly in terminal mode for raw output.</p>
<span class="feat-tag">Browser + Terminal</span>
</div>
</div>
</div>
</section>
<!-- ── COMMAND REFERENCE ── -->
<section id="cmd-ref" aria-label="Command reference">
<div class="container">
<div class="reveal">
<p class="section-label">/ Commands</p>
<h2 class="section-title">Command reference.</h2>
<p class="section-desc">Ducky's full built-in command set. Any unrecognized input is forwarded to CMD automatically.</p>
</div>
<div class="cmd-table-wrap reveal" style="transition-delay:100ms">
<table class="cmd-table" role="table" aria-label="Ducky command reference">
<thead>
<tr>
<th scope="col">Command</th>
<th scope="col">Syntax</th>
<th scope="col">Description</th>
<th scope="col">Type</th>
</tr>
</thead>
<tbody>
<tr>
<td class="cmd-name">help</td>
<td class="cmd-syntax">help</td>
<td class="cmd-note">List all available Ducky commands with descriptions</td>
<td><span class="cmd-badge core">core</span></td>
</tr>
<tr>
<td class="cmd-name">cd</td>
<td class="cmd-syntax">cd &lt;path&gt;</td>
<td class="cmd-note">Change the current working directory</td>
<td><span class="cmd-badge core">core</span></td>
</tr>
<tr>
<td class="cmd-name">show</td>
<td class="cmd-syntax">show &lt;file&gt;</td>
<td class="cmd-note">Open a file or media file; resumes from last position</td>
<td><span class="cmd-badge core">core</span></td>
</tr>
<tr>
<td class="cmd-name">searchweb</td>
<td class="cmd-syntax">searchweb &lt;query&gt;</td>
<td class="cmd-note">Fetch top 5 DuckDuckGo results inline in Ducky</td>
<td><span class="cmd-badge core">core</span></td>
</tr>
<tr>
<td class="cmd-name">open</td>
<td class="cmd-syntax">open &lt;url&gt;</td>
<td class="cmd-note">Open a URL in the default browser or terminal mode</td>
<td><span class="cmd-badge core">core</span></td>
</tr>
<tr>
<td class="cmd-name">exit</td>
<td class="cmd-syntax">exit</td>
<td class="cmd-note">Close Ducky and terminate the current session</td>
<td><span class="cmd-badge core">core</span></td>
</tr>
<tr>
<td class="cmd-name">---forcecmd</td>
<td class="cmd-syntax">---forcecmd &lt;cmd&gt;</td>
<td class="cmd-note">Force any input to be routed directly to Windows CMD</td>
<td><span class="cmd-badge fallback">fallback</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- ── DOWNLOAD ── -->
<section id="download" aria-label="Download Ducky">
<div class="container">
<div class="dl-wrap">
<div class="dl-left reveal">
<p class="section-label">/ Download</p>
<h2 class="section-title">Ready to run.<br />One installer.</h2>
<p class="section-desc">
Download the Ducky installer for Windows. Double-click to install, launch from your start menu or taskbar, and get to work immediately.
</p>
</div>
<div class="dl-right reveal" style="transition-delay:100ms">
<div class="dl-card">
<div class="dl-card-body">
<h3 class="dl-card-title">Ducky for Windows</h3>
<p class="dl-card-sub">Stable release — Windows 10 / 11 (x64)</p>
<div class="dl-specs" role="list" aria-label="System requirements">
<div class="dl-spec" role="listitem">Windows 10 version 1903 or later</div>
<div class="dl-spec" role="listitem">Windows 11 — fully supported</div>
<div class="dl-spec" role="listitem">x64 architecture required</div>
<div class="dl-spec" role="listitem">No runtime dependencies</div>
<div class="dl-spec" role="listitem">Standard CMD access required</div>
</div>
<div class="dl-btn-wrap">
<a href="ducky-installer.exe" download class="btn-download" aria-label="Download Ducky installer (.exe)">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
Download ducky-installer.exe
</a>
<p class="dl-notice">
Windows may show a SmartScreen prompt — click <span>"Run anyway"</span> to proceed.
</p>
</div>
</div>
</div>
<div class="dl-stats" aria-label="Build information">
<div class="dl-stat">
<span class="dl-stat-label">Platform</span>
<span class="dl-stat-val">Win 10 / 11</span>
</div>
<div class="dl-stat">
<span class="dl-stat-label">Architecture</span>
<span class="dl-stat-val">x64</span>
</div>
<div class="dl-stat">
<span class="dl-stat-label">Installer</span>
<span class="dl-stat-val">.exe</span>
</div>
<div class="dl-stat">
<span class="dl-stat-label">CMD Fallback</span>
<span class="dl-stat-val ok">Enabled</span>
</div>
<div class="dl-stat">
<span class="dl-stat-label">Status</span>
<span class="dl-stat-val ok">Stable</span>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- ── FOOTER ── -->
<footer role="contentinfo">
<p class="footer-brand">
<strong>Ducky</strong> — Terminal command interface for Windows
</p>
<ul class="footer-links" role="list" aria-label="Footer navigation">
<li><a href="#features">Features</a></li>
<li><a href="#cmd-ref">Commands</a></li>
<li><a href="#download">Download</a></li>
</ul>
<p class="footer-copy">
&copy; <span id="year"></span> Ducky. Built for Windows 10/11.
</p>
</footer>
<script>
'use strict';
/* ─────────────────────────────────────────
INIT
───────────────────────────────────────── */
(function init() {
setYear();
initScrollReveal();
})();
/* ─────────────────────────────────────────
YEAR
───────────────────────────────────────── */
function setYear() {
var el = document.getElementById('year');
if (el) el.textContent = new Date().getFullYear();
}
/* ─────────────────────────────────────────
SCROLL REVEAL
───────────────────────────────────────── */
function initScrollReveal() {
var elements = document.querySelectorAll('.reveal');
if (!elements.length) return;
if (!('IntersectionObserver' in window)) {
elements.forEach(function(el) { el.classList.add('visible'); });
return;
}
var observer = new IntersectionObserver(
function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
observer.unobserve(entry.target);
}
});
},
{ threshold: 0.12, rootMargin: '0px 0px -40px 0px' }
);
elements.forEach(function(el) { observer.observe(el); });
}
/* ─────────────────────────────────────────
SMOOTH NAV SCROLL
───────────────────────────────────────── */
document.querySelectorAll('a[href^="#"]').forEach(function(anchor) {
anchor.addEventListener('click', function(e) {
var target = document.querySelector(this.getAttribute('href'));
if (!target) return;
e.preventDefault();
var offset = 72;
var top = target.getBoundingClientRect().top + window.pageYOffset - offset;
window.scrollTo({ top: top, behavior: 'smooth' });
});
});
</script>
</body>
</html>