Files
Jiří Stachandaider 66668b3209 feat: add minimal, dark, and editorial theme variants
Co-authored-by: aider (openrouter/thinkingmachines/inkling-small:free) <aider@aider.chat>
2026-10-09 23:21:10 +02:00

152 lines
7.4 KiB
HTML

<!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 — 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:#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>
</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="btn-primary" onclick="signup()">Sign Up</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="btn-primary" onclick="startRound()" style="margin-top:1rem;">Start Round</button>
</section>
<section id="round-section" class="card" style="display:none;">
<h2>Round</h2>
<div class="hole-nav">
<button class="btn-secondary" id="prev-btn" onclick="prevHole()">Prev</button>
<strong id="hole-label">Hole 1</strong>
<button class="btn-secondary" id="next-btn" onclick="nextHole()">Next</button>
<button class="btn-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 (1+)</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 Hit</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">Penalty — Water</label>
<input id="pen-water" type="checkbox" oninput="saveDraft()" />
</div>
<div>
<label for="pen-ob">Penalty — OB</label>
<input id="pen-ob" type="checkbox" oninput="saveDraft()" />
</div>
<div>
<label for="pen-lost">Penalty — Lost Ball</label>
<input id="pen-lost" type="checkbox" oninput="saveDraft()" />
</div>
<div>
<label for="bunker-greenside">Bunker — Greenside</label>
<input id="bunker-greenside" type="checkbox" oninput="saveDraft()" />
</div>
<div>
<label for="bunker-fairway">Bunker — Fairway</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>Basic Stats</h2>
<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>
</html>