feat: add minimal, dark, and editorial theme variants
Co-authored-by: aider (openrouter/thinkingmachines/inkling-small:free) <aider@aider.chat>
This commit is contained in:
1 parent
1d548b434b
commit
66668b3209
4 files changed
+451
-222
No files matched your search
+44
-222
@@ -6,232 +6,48 @@
|
||||
<title>Golf Score Card — Prototype</title>
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;800&family=Playfair+Display:wght@700&display=swap');
|
||||
|
||||
:root {
|
||||
--bg: #f4f6f0;
|
||||
--surface: #ffffff;
|
||||
--ink: #1a2e1a;
|
||||
--ink-secondary: #556b55;
|
||||
--accent: #2d6a4f;
|
||||
--accent-light: #d8e8dc;
|
||||
--accent-dark: #1b4332;
|
||||
--border: #dde5d8;
|
||||
--shadow: 0 10px 30px rgba(26,46,26,0.08);
|
||||
--radius: 16px;
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
font-family: 'Inter', system-ui, sans-serif;
|
||||
background: var(--bg);
|
||||
color: var(--ink);
|
||||
margin: 0;
|
||||
padding: 2rem 1rem;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 720px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
header {
|
||||
text-align: center;
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-family: 'Playfair Display', Georgia, serif;
|
||||
font-size: 2.6rem;
|
||||
margin: 0 0 0.25rem;
|
||||
color: var(--accent-dark);
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
header p {
|
||||
margin: 0;
|
||||
color: var(--ink-secondary);
|
||||
font-size: 1.05rem;
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius);
|
||||
padding: 1.5rem 1.75rem;
|
||||
margin-bottom: 1.25rem;
|
||||
box-shadow: var(--shadow);
|
||||
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
||||
}
|
||||
|
||||
.card:hover { box-shadow: 0 14px 40px rgba(26,46,26,0.12); }
|
||||
|
||||
h2 {
|
||||
font-size: 1.15rem;
|
||||
margin: 0 0 1rem;
|
||||
color: var(--accent-dark);
|
||||
font-weight: 700;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
margin: 0.75rem 0 0.35rem;
|
||||
color: var(--ink-secondary);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
input[type="text"],
|
||||
input[type="number"],
|
||||
select {
|
||||
width: 100%;
|
||||
padding: 0.65rem 0.75rem;
|
||||
border: 1.5px solid var(--border);
|
||||
border-radius: 10px;
|
||||
font-size: 1rem;
|
||||
background: #fafcf8;
|
||||
color: var(--ink);
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
|
||||
input:focus, select:focus {
|
||||
outline: none;
|
||||
border-color: var(--accent);
|
||||
box-shadow: 0 0 0 3px rgba(45,106,79,0.12);
|
||||
}
|
||||
|
||||
button {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.35rem;
|
||||
padding: 0.65rem 1.1rem;
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
font-weight: 600;
|
||||
font-size: 0.95rem;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s, transform 0.1s;
|
||||
}
|
||||
|
||||
button:active { transform: translateY(1px); }
|
||||
|
||||
.btn-primary {
|
||||
background: var(--accent);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.btn-primary:hover { background: var(--accent-dark); }
|
||||
|
||||
.btn-secondary {
|
||||
background: #e8ede8;
|
||||
color: var(--ink);
|
||||
}
|
||||
|
||||
.btn-secondary:hover { background: #dde5d8; }
|
||||
|
||||
.btn-danger {
|
||||
background: #c0392b;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.btn-danger:hover { background: #922b21; }
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
gap: 0.75rem;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.row > * { flex: 1 1 auto; }
|
||||
|
||||
.hole-nav {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.hole-nav strong {
|
||||
font-family: 'Playfair Display', Georgia, serif;
|
||||
font-size: 1.3rem;
|
||||
color: var(--accent-dark);
|
||||
min-width: 6rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.hole-info {
|
||||
background: var(--accent-light);
|
||||
color: var(--accent-dark);
|
||||
padding: 0.6rem 0.9rem;
|
||||
border-radius: 10px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 500;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.form-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 0.75rem 1rem;
|
||||
}
|
||||
|
||||
.form-grid label { margin-top: 0.25rem; }
|
||||
|
||||
.form-grid input[type="number"] { width: 100%; }
|
||||
|
||||
.stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
||||
gap: 0.75rem;
|
||||
}
|
||||
|
||||
.stat-card {
|
||||
background: var(--bg);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
padding: 1rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-card .label {
|
||||
font-size: 0.75rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
color: var(--ink-secondary);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.stat-card .value {
|
||||
font-family: 'Playfair Display', Georgia, serif;
|
||||
font-size: 1.6rem;
|
||||
color: var(--accent-dark);
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.gir-badge {
|
||||
display: inline-block;
|
||||
padding: 0.25rem 0.6rem;
|
||||
border-radius: 999px;
|
||||
font-weight: 700;
|
||||
font-size: 0.85rem;
|
||||
background: var(--accent-light);
|
||||
color: var(--accent-dark);
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.form-grid { grid-template-columns: 1fr; }
|
||||
header h1 { font-size: 2rem; }
|
||||
}
|
||||
:root { --bg:#f4f6f0; --surface:#fff; --ink:#1a2e1a; --ink-secondary:#556b55; --accent:#2d6a4f; --accent-light:#d8e8dc; --accent-dark:#1b4332; --border:#dde5d8; --shadow:0 10px 30px rgba(26,46,26,0.08); --radius:16px; }
|
||||
*{box-sizing:border-box;}
|
||||
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--ink);margin:0;padding:2rem 1rem;line-height:1.45;}
|
||||
.container{max-width:720px;margin:0 auto;}
|
||||
header{text-align:center;margin-bottom:2.5rem;}
|
||||
header h1{font-family:'Playfair Display',Georgia,serif;font-size:2.6rem;margin:0 0 .25rem;color:var(--accent-dark);letter-spacing:-.02em;}
|
||||
header p{margin:0;color:var(--ink-secondary);font-size:1.05rem;}
|
||||
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem 1.75rem;margin-bottom:1.25rem;box-shadow:var(--shadow);transition:transform .15s ease,box-shadow .15s ease;}
|
||||
.card:hover{box-shadow:0 14px 40px rgba(26,46,26,0.12);}
|
||||
h2{font-size:1.15rem;margin:0 0 1rem;color:var(--accent-dark);font-weight:700;letter-spacing:-.01em;}
|
||||
label{display:block;font-weight:600;font-size:.85rem;margin:.75rem 0 .35rem;color:var(--ink-secondary);text-transform:uppercase;letter-spacing:.04em;}
|
||||
input[type="text"],input[type="number"],select{width:100%;padding:.65rem .75rem;border:1.5px solid var(--border);border-radius:10px;font-size:1rem;background:#fafcf8;color:var(--ink);transition:border-color .2s,box-shadow .2s;}
|
||||
input:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(45,106,79,0.12);}
|
||||
button{display:inline-flex;align-items:center;gap:.35rem;padding:.65rem 1.1rem;border:none;border-radius:10px;font-weight:600;font-size:.95rem;cursor:pointer;transition:background .2s,transform .1s;}
|
||||
button:active{transform:translateY(1px);}
|
||||
.btn-primary{background:var(--accent);color:#fff;}
|
||||
.btn-primary:hover{background:var(--accent-dark);}
|
||||
.btn-secondary{background:#e8ede8;color:var(--ink);}
|
||||
.btn-secondary:hover{background:#dde5d8;}
|
||||
.btn-danger{background:#c0392b;color:#fff;}
|
||||
.btn-danger:hover{background:#922b21;}
|
||||
.row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center;}
|
||||
.row>*{flex:1 1 auto;}
|
||||
.hole-nav{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem;}
|
||||
.hole-nav strong{font-family:'Playfair Display',Georgia,serif;font-size:1.3rem;color:var(--accent-dark);min-width:6rem;text-align:center;}
|
||||
.hole-info{background:var(--accent-light);color:var(--accent-dark);padding:.6rem .9rem;border-radius:10px;font-size:.9rem;font-weight:500;margin-bottom:1rem;}
|
||||
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:.75rem 1rem;}
|
||||
.form-grid label{margin-top:.25rem;}
|
||||
.form-grid input[type="number"]{width:100%;}
|
||||
.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.75rem;}
|
||||
.stat-card{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:1rem;text-align:center;}
|
||||
.stat-card .label{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-secondary);font-weight:600;}
|
||||
.stat-card .value{font-family:'Playfair Display',Georgia,serif;font-size:1.6rem;color:var(--accent-dark);margin-top:.25rem;}
|
||||
.gir-badge{display:inline-block;padding:.25rem .6rem;border-radius:999px;font-weight:700;font-size:.85rem;background:var(--accent-light);color:var(--accent-dark);}
|
||||
.theme-switch{display:flex;gap:.5rem;justify-content:center;margin-top:1rem;}
|
||||
.theme-switch a{padding:.35rem .7rem;border-radius:8px;background:#e8ede8;color:var(--ink);text-decoration:none;font-weight:600;font-size:.85rem;}
|
||||
.theme-switch a:hover{background:#dde5d8;}
|
||||
@media(max-width:640px){.form-grid{grid-template-columns:1fr;}header h1{font-size:2rem;}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
|
||||
<header>
|
||||
<h1>Golf Score Card</h1>
|
||||
<p>Track your round with precision</p>
|
||||
@@ -323,6 +139,12 @@ button:active { transform: translateY(1px); }
|
||||
<div id="stats-display" class="stats-grid"></div>
|
||||
</section>
|
||||
|
||||
<div class="theme-switch">
|
||||
<a href="theme-minimal.html">Minimal</a>
|
||||
<a href="theme-dark.html">Dark</a>
|
||||
<a href="theme-editorial.html">Editorial</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script src="app.js"></script>
|
||||
</body>
|
||||
|
||||
@@ -0,0 +1,139 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Golf Score Card — Dark</title>
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;500&family=Inter:wght@300;600&display=swap');
|
||||
:root{--bg:#0b0f14;--surface:#121620;--ink:#e8e8e8;--ink-secondary:#8892a0;--accent:#c8f560;--accent-dark:#a3c44a;--border:#1f2530;--shadow:0 10px 30px rgba(0,0,0,0.4);}
|
||||
*{box-sizing:border-box;}
|
||||
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--ink);margin:0;padding:2rem 1rem;line-height:1.4;}
|
||||
.container{max-width:720px;margin:0 auto;}
|
||||
header{text-align:center;margin-bottom:2.5rem;}
|
||||
header h1{font-family:'JetBrains Mono',monospace;font-size:2.2rem;font-weight:300;color:var(--accent);letter-spacing:-.03em;margin:0 0 .25rem;}
|
||||
header p{margin:0;color:var(--ink-secondary);font-size:.95rem;}
|
||||
.card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:1.5rem 1.75rem;margin-bottom:1.25rem;box-shadow:var(--shadow);}
|
||||
h2{font-size:.9rem;text-transform:uppercase;letter-spacing:.08em;color:var(--accent);font-weight:600;margin:0 0 1rem;}
|
||||
label{display:block;font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-secondary);margin:.75rem 0 .25rem;font-weight:500;}
|
||||
input,select{width:100%;padding:.65rem .75rem;border:1px solid var(--border);border-radius:8px;background:#0f1318;color:var(--ink);font-family:inherit;font-size:.95rem;outline:none;}
|
||||
input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(200,245,96,0.15);}
|
||||
button{display:inline-flex;align-items:center;gap:.35rem;padding:.6rem 1rem;border:1px solid var(--border);background:#1a1f2a;color:var(--ink);font-family:inherit;font-weight:600;font-size:.85rem;border-radius:8px;cursor:pointer;transition:background .2s;}
|
||||
button:hover{background:#22283a;}
|
||||
button.accent{background:var(--accent);color:#0b0f14;border-color:var(--accent);font-weight:700;}
|
||||
button.accent:hover{background:var(--accent-dark);}
|
||||
button.danger{border-color:#ff6b6b;color:#ff6b6b;}
|
||||
button.danger:hover{background:#ff6b6b;color:#0b0f14;}
|
||||
.hole-nav{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem;}
|
||||
.hole-nav strong{font-family:'JetBrains Mono',monospace;font-size:1.2rem;color:var(--accent);min-width:6rem;text-align:center;}
|
||||
.hole-info{font-family:'JetBrains Mono',monospace;font-size:.85rem;color:var(--ink-secondary);margin-bottom:1rem;}
|
||||
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:.75rem 1rem;}
|
||||
.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.75rem;}
|
||||
.stat-card{background:#0f1318;border:1px solid var(--border);border-radius:10px;padding:1rem;text-align:center;}
|
||||
.stat-card .label{font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-secondary);font-weight:600;}
|
||||
.stat-card .value{font-family:'JetBrains Mono',monospace;font-size:1.5rem;color:var(--accent);margin-top:.25rem;}
|
||||
.gir-badge{display:inline-block;padding:.25rem .6rem;border-radius:999px;font-weight:700;font-size:.8rem;background:#1a1f2a;color:var(--accent);border:1px solid var(--border);}
|
||||
.theme-switch{display:flex;gap:.5rem;justify-content:center;margin-top:1rem;}
|
||||
.theme-switch a{padding:.35rem .7rem;border-radius:8px;background:#1a1f2a;color:var(--ink-secondary);text-decoration:none;font-weight:600;font-size:.85rem;border:1px solid var(--border);}
|
||||
.theme-switch a:hover{color:var(--ink);border-color:var(--accent);}
|
||||
@media(max-width:640px){.form-grid{grid-template-columns:1fr;}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1>GOLF // SCORE</h1>
|
||||
<p>Dark mode tracking</p>
|
||||
</header>
|
||||
|
||||
<section id="signup-section" class="card">
|
||||
<h2>Sign Up</h2>
|
||||
<label for="name">Name</label>
|
||||
<input id="name" type="text" placeholder="Your name" />
|
||||
<label for="hcp">Handicap</label>
|
||||
<input id="hcp" type="number" value="0" />
|
||||
<button class="accent" onclick="signup()">Enter</button>
|
||||
</section>
|
||||
|
||||
<section id="start-section" class="card" style="display:none;">
|
||||
<h2>Start Round</h2>
|
||||
<p id="course-info" style="margin:0 0 1rem; color: var(--ink-secondary);"></p>
|
||||
<label for="tee-select">Tee Box</label>
|
||||
<select id="tee-select"><option>White</option><option>Yellow</option><option>Blue</option><option>Red</option></select>
|
||||
<button class="accent" onclick="startRound()" style="margin-top:1rem;">Launch</button>
|
||||
</section>
|
||||
|
||||
<section id="round-section" class="card" style="display:none;">
|
||||
<h2>Round</h2>
|
||||
<div class="hole-nav">
|
||||
<button onclick="prevHole()">Prev</button>
|
||||
<strong id="hole-label">Hole 1</strong>
|
||||
<button onclick="nextHole()">Next</button>
|
||||
<button class="danger" onclick="skipHole()">Skip</button>
|
||||
</div>
|
||||
<div id="hole-info" class="hole-info"></div>
|
||||
<form id="hole-form" onsubmit="event.preventDefault();">
|
||||
<input type="hidden" id="hole-score-id" />
|
||||
<div class="form-grid">
|
||||
<div>
|
||||
<label for="strokes">Strokes</label>
|
||||
<input id="strokes" type="number" value="1" min="1" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="unfinished">Unfinished (X)</label>
|
||||
<input id="unfinished" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="fairway">Fairway</label>
|
||||
<input id="fairway" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="putts-green">Putts Green</label>
|
||||
<input id="putts-green" type="number" value="0" min="0" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="putts-off-green">Putts Off</label>
|
||||
<input id="putts-off-green" type="number" value="0" min="0" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="pen-water">Water</label>
|
||||
<input id="pen-water" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="pen-ob">OB</label>
|
||||
<input id="pen-ob" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="pen-lost">Lost</label>
|
||||
<input id="pen-lost" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="bunker-greenside">Greenside</label>
|
||||
<input id="bunker-greenside" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="bunker-fairway">Fairway Bunker</label>
|
||||
<input id="bunker-fairway" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div style="margin-top:1rem;">
|
||||
<span class="gir-badge">GIR: <strong id="gir-display">No</strong></span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="stats-section" class="card" style="display:none;">
|
||||
<h2>Stats</h2>
|
||||
<div id="stats-display" class="stats-grid"></div>
|
||||
</section>
|
||||
|
||||
<div class="theme-switch">
|
||||
<a href="index.html">Forest</a>
|
||||
<a href="theme-minimal.html">Minimal</a>
|
||||
<a href="theme-editorial.html">Editorial</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script src="app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,137 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Golf Score Card — Editorial</title>
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,600;1,400&family=Inter:wght@300;400;600&display=swap');
|
||||
:root{--bg:#f7f5f0;--ink:#2a2a2a;--ink-secondary:#6e6e6e;--accent:#8b5e3c;--accent-light:#efe8dc;--border:#e2ddd4;--shadow:0 4px 20px rgba(42,42,42,0.06);}
|
||||
*{box-sizing:border-box;}
|
||||
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--ink);margin:0;padding:3rem 1rem;line-height:1.5;}
|
||||
.container{max-width:720px;margin:0 auto;}
|
||||
header{text-align:center;margin-bottom:3rem;}
|
||||
header h1{font-family:'Cormorant Garamond',Georgia,serif;font-size:3rem;font-weight:300;color:var(--ink);letter-spacing:-.02em;margin:0 0 .25rem;}
|
||||
header p{font-family:'Cormorant Garamond',Georgia,serif;font-style:italic;color:var(--ink-secondary);font-size:1.15rem;margin:0;}
|
||||
.card{background:#fff;border:1px solid var(--border);border-radius:4px;padding:2rem 2.25rem;margin-bottom:1.5rem;box-shadow:var(--shadow);position:relative;}
|
||||
.card::before{content:"";position:absolute;top:0;left:0;width:4px;height:100%;background:var(--accent);border-radius:4px 0 0 4px;}
|
||||
h2{font-family:'Cormorant Garamond',Georgia,serif;font-size:1.4rem;font-weight:600;color:var(--ink);margin:0 0 1.25rem;}
|
||||
label{display:block;font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-secondary);margin:1rem 0 .35rem;font-weight:600;}
|
||||
input,select{width:100%;padding:.7rem .8rem;border:1px solid var(--border);border-radius:6px;background:#fdfcf9;font-family:inherit;font-size:.95rem;color:var(--ink);outline:none;}
|
||||
input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(139,94,60,0.1);}
|
||||
button{padding:.65rem 1.2rem;border:1px solid var(--ink);background:var(--ink);color:#fff;font-family:inherit;font-weight:600;font-size:.9rem;border-radius:4px;cursor:pointer;transition:background .2s;}
|
||||
button:hover{background:#333;}
|
||||
button.secondary{background:#fff;color:var(--ink);border-color:var(--border);}
|
||||
button.accent{background:var(--accent);color:#fff;border-color:var(--accent);}
|
||||
button.accent:hover{background:#6e4a2e;}
|
||||
.hole-nav{display:flex;align-items:center;gap:1rem;margin-bottom:1.25rem;padding-bottom:1rem;border-bottom:1px solid var(--border);}
|
||||
.hole-nav strong{font-family:'Cormorant Garamond',Georgia,serif;font-size:1.5rem;color:var(--ink);min-width:6rem;text-align:center;}
|
||||
.hole-info{font-family:'Cormorant Garamond',Georgia,serif;font-style:italic;color:var(--ink-secondary);font-size:1rem;margin-bottom:1.25rem;}
|
||||
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem 1.5rem;}
|
||||
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:1.5rem;}
|
||||
.stat{border-top:2px solid var(--accent);padding-top:.75rem;}
|
||||
.stat .label{font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-secondary);font-weight:600;}
|
||||
.stat .value{font-family:'Cormorant Garamond',Georgia,serif;font-size:1.8rem;color:var(--ink);margin-top:.25rem;}
|
||||
.gir{font-family:'Cormorant Garamond',Georgia,serif;font-style:italic;font-size:1.1rem;color:var(--accent);margin-top:1rem;}
|
||||
.theme-switch{display:flex;gap:.75rem;justify-content:center;margin-top:2rem;}
|
||||
.theme-switch a{font-family:'Cormorant Garamond',Georgia,serif;font-size:1rem;color:var(--ink-secondary);text-decoration:none;border-bottom:1px solid var(--border);padding-bottom:.15rem;}
|
||||
.theme-switch a:hover{color:var(--ink);border-color:var(--accent);}
|
||||
@media(max-width:640px){.form-grid{grid-template-columns:1fr;}.stats{grid-template-columns:repeat(2,1fr);}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1>The Score Card</h1>
|
||||
<p>A refined record of the round</p>
|
||||
</header>
|
||||
|
||||
<section id="signup-section" class="card">
|
||||
<h2>Sign Up</h2>
|
||||
<label for="name">Name</label>
|
||||
<input id="name" type="text" placeholder="Your name" />
|
||||
<label for="hcp">Handicap</label>
|
||||
<input id="hcp" type="number" value="0" />
|
||||
<button onclick="signup()">Begin</button>
|
||||
</section>
|
||||
|
||||
<section id="start-section" class="card" style="display:none;">
|
||||
<h2>Start Round</h2>
|
||||
<p id="course-info" style="margin:0 0 1rem; color: var(--ink-secondary); font-family:'Cormorant Garamond',Georgia,serif; font-style:italic;"></p>
|
||||
<label for="tee-select">Tee Box</label>
|
||||
<select id="tee-select"><option>White</option><option>Yellow</option><option>Blue</option><option>Red</option></select>
|
||||
<button class="accent" onclick="startRound()" style="margin-top:1rem;">Commence</button>
|
||||
</section>
|
||||
|
||||
<section id="round-section" class="card" style="display:none;">
|
||||
<h2>Round</h2>
|
||||
<div class="hole-nav">
|
||||
<button class="secondary" onclick="prevHole()">Previous</button>
|
||||
<strong id="hole-label">Hole 1</strong>
|
||||
<button onclick="nextHole()">Next</button>
|
||||
<button onclick="skipHole()" style="border-color:#c0392b;color:#c0392b;">Skip</button>
|
||||
</div>
|
||||
<div id="hole-info" class="hole-info"></div>
|
||||
<form id="hole-form" onsubmit="event.preventDefault();">
|
||||
<input type="hidden" id="hole-score-id" />
|
||||
<div class="form-grid">
|
||||
<div>
|
||||
<label for="strokes">Strokes</label>
|
||||
<input id="strokes" type="number" value="1" min="1" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="unfinished">Unfinished (X)</label>
|
||||
<input id="unfinished" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="fairway">Fairway</label>
|
||||
<input id="fairway" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="putts-green">Putts on Green</label>
|
||||
<input id="putts-green" type="number" value="0" min="0" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="putts-off-green">Putts Off Green</label>
|
||||
<input id="putts-off-green" type="number" value="0" min="0" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="pen-water">Water</label>
|
||||
<input id="pen-water" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="pen-ob">OB</label>
|
||||
<input id="pen-ob" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="pen-lost">Lost Ball</label>
|
||||
<input id="pen-lost" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="bunker-greenside">Greenside</label>
|
||||
<input id="bunker-greenside" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="bunker-fairway">Fairway Bunker</label>
|
||||
<input id="bunker-fairway" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="gir">GIR: <strong id="gir-display">No</strong></div>
|
||||
</section>
|
||||
|
||||
<section id="stats-section" class="card" style="display:none;">
|
||||
<h2>Summary</h2>
|
||||
<div id="stats-display" class="stats"></div>
|
||||
</section>
|
||||
|
||||
<div class="theme-switch">
|
||||
<a href="index.html">Forest</a>
|
||||
<a href="theme-minimal.html">Minimal</a>
|
||||
<a href="theme-dark.html">Dark</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script src="app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,131 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Golf Score Card — Minimal</title>
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;500;700&display=swap');
|
||||
:root{--bg:#faf9f6;--ink:#111;--line:#ddd;--accent:#bfa15f;}
|
||||
*{box-sizing:border-box;}
|
||||
body{font-family:'Space Grotesk',system-ui,sans-serif;background:var(--bg);color:var(--ink);margin:0;padding:3rem 1rem;line-height:1.35;}
|
||||
.container{max-width:640px;margin:0 auto;}
|
||||
h1{font-size:2.2rem;font-weight:700;letter-spacing:-.03em;margin:0 0 .25rem;}
|
||||
.subtitle{color:#777;font-size:.95rem;margin-bottom:2.5rem;}
|
||||
.card{border-top:1px solid var(--line);padding:1.5rem 0;margin-bottom:1.5rem;}
|
||||
h2{font-size:.75rem;text-transform:uppercase;letter-spacing:.12em;color:#777;font-weight:700;margin:0 0 1rem;}
|
||||
label{display:block;font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:#777;margin:1rem 0 .25rem;font-weight:500;}
|
||||
input,select{width:100%;padding:.6rem .5rem;border:none;border-bottom:1.5px solid var(--line);background:transparent;font-family:inherit;font-size:1rem;color:var(--ink);outline:none;}
|
||||
input:focus,select:focus{border-bottom-color:var(--accent);}
|
||||
button{padding:.55rem 1rem;border:1px solid var(--ink);background:var(--ink);color:#fff;font-family:inherit;font-weight:500;font-size:.85rem;border-radius:0;cursor:pointer;transition:background .2s;}
|
||||
button:hover{background:#333;}
|
||||
button.secondary{background:#fff;color:var(--ink);border-color:var(--line);}
|
||||
button.danger{background:#fff;color:#c0392b;border-color:#c0392b;}
|
||||
.hole-nav{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem;}
|
||||
.hole-nav strong{font-size:1.1rem;font-weight:700;}
|
||||
.hole-info{font-size:.85rem;color:#555;margin-bottom:1rem;}
|
||||
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:.5rem 1rem;}
|
||||
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;}
|
||||
.stat{border-top:1px solid var(--line);padding-top:.75rem;}
|
||||
.stat .label{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:#777;}
|
||||
.stat .value{font-size:1.4rem;font-weight:700;}
|
||||
.gir{font-size:.85rem;color:var(--accent);font-weight:700;}
|
||||
.theme-switch{display:flex;gap:.5rem;margin-top:2rem;}
|
||||
.theme-switch a{font-size:.75rem;color:#777;text-decoration:none;border-bottom:1px solid var(--line);padding-bottom:.1rem;}
|
||||
@media(max-width:640px){.form-grid{grid-template-columns:1fr;}.stats{grid-template-columns:repeat(2,1fr);}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Score Card</h1>
|
||||
<p class="subtitle">Minimal tracking</p>
|
||||
|
||||
<section id="signup-section" class="card">
|
||||
<h2>Sign Up</h2>
|
||||
<label for="name">Name</label>
|
||||
<input id="name" type="text" placeholder="Your name" />
|
||||
<label for="hcp">Handicap</label>
|
||||
<input id="hcp" type="number" value="0" />
|
||||
<button onclick="signup()">Continue</button>
|
||||
</section>
|
||||
|
||||
<section id="start-section" class="card" style="display:none;">
|
||||
<h2>Start Round</h2>
|
||||
<p id="course-info" style="margin:0 0 1rem; color:#777;"></p>
|
||||
<label for="tee-select">Tee</label>
|
||||
<select id="tee-select"><option>White</option><option>Yellow</option><option>Blue</option><option>Red</option></select>
|
||||
<button onclick="startRound()" style="margin-top:1rem;">Start</button>
|
||||
</section>
|
||||
|
||||
<section id="round-section" class="card" style="display:none;">
|
||||
<h2>Round</h2>
|
||||
<div class="hole-nav">
|
||||
<button class="secondary" onclick="prevHole()">Back</button>
|
||||
<strong id="hole-label">Hole 1</strong>
|
||||
<button onclick="nextHole()">Next</button>
|
||||
<button class="danger" onclick="skipHole()">Skip</button>
|
||||
</div>
|
||||
<div id="hole-info" class="hole-info"></div>
|
||||
<form id="hole-form" onsubmit="event.preventDefault();">
|
||||
<input type="hidden" id="hole-score-id" />
|
||||
<div class="form-grid">
|
||||
<div>
|
||||
<label for="strokes">Strokes</label>
|
||||
<input id="strokes" type="number" value="1" min="1" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="unfinished">Unfinished (X)</label>
|
||||
<input id="unfinished" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="fairway">Fairway</label>
|
||||
<input id="fairway" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="putts-green">Putts Green</label>
|
||||
<input id="putts-green" type="number" value="0" min="0" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="putts-off-green">Putts Off</label>
|
||||
<input id="putts-off-green" type="number" value="0" min="0" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="pen-water">Water</label>
|
||||
<input id="pen-water" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="pen-ob">OB</label>
|
||||
<input id="pen-ob" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="pen-lost">Lost</label>
|
||||
<input id="pen-lost" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="bunker-greenside">Greenside</label>
|
||||
<input id="bunker-greenside" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="bunker-fairway">Fairway Bunker</label>
|
||||
<input id="bunker-fairway" type="checkbox" oninput="saveDraft()" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="gir" style="margin-top:.75rem;">GIR: <strong id="gir-display">No</strong></div>
|
||||
</section>
|
||||
|
||||
<section id="stats-section" class="card" style="display:none;">
|
||||
<h2>Stats</h2>
|
||||
<div id="stats-display" class="stats"></div>
|
||||
</section>
|
||||
|
||||
<div class="theme-switch">
|
||||
<a href="index.html">Forest</a>
|
||||
<a href="theme-dark.html">Dark</a>
|
||||
<a href="theme-editorial.html">Editorial</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script src="app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user