PRODUCTS

start writing your journal….

https://claude.ai/public/artifacts/7580fc20-f6cf-4dd0-a96b-17b250c14c6e: PRODUCTS 100 Days · Creating My Reality :root { –ink: #1A1A2E; –parchment: #F5EFE0; –gold: #C9922A; –sage: #8AAF8E; –blush: #D4967A; –muted: #7A7469; –line: rgba(26,26,46,0.12); } * { box-sizing: border-box; margin: 0; padding: 0; } @media print { body { background: white; } .no-print { display: none; } .page { page-break-after: always; box-shadow: none; border: none; margin: 0; border-radius: 0; } } body { background: #EDE8DC; font-family: ‘Inter’, sans-serif; color: var(–ink); min-height: 100vh; padding: 40px 20px 60px; } /* ── CONTROLS ── */ .controls { max-width: 680px; margin: 0 auto 32px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .controls label { font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(–muted); font-weight: 500; } .controls input[type=”number”] { width: 72px; padding: 8px 12px; border: 1.5px solid var(–gold); border-radius: 6px; background: var(–parchment); font-family: ‘Playfair Display’, serif; font-size: 16px; color: var(–ink); text-align: center; } .controls input[type=”date”] { padding: 8px 12px; border: 1.5px solid var(–line); border-radius: 6px; background: var(–parchment); font-family: ‘Inter’, sans-serif; font-size: 13px; color: var(–ink); } .btn { padding: 9px 20px; border-radius: 6px; border: none; cursor: pointer; font-size: 13px; font-weight: 500; letter-spacing: .04em; transition: opacity .15s; } .btn:hover { opacity: .82; } .btn-gold { background: var(–gold); color: white; } .btn-ink { background: var(–ink); color: var(–parchment); } .btn-sage { background: var(–sage); color: white; } .btn-outline { background: transparent; border: 1.5px solid var(–ink); color: var(–ink); } /* ── PAGE ── */ .page { max-width: 680px; margin: 0 auto 48px; background: var(–parchment); border-radius: 3px; box-shadow: 0 2px 24px rgba(0,0,0,.10), 0 0 0 1px rgba(0,0,0,.04); overflow: hidden; } /* ── HEADER ── */ .page-header { background: var(–ink); color: var(–parchment); padding: 36px 44px 28px; position: relative; overflow: hidden; } .page-header::after { content: ”; position: absolute; right: -20px; top: -20px; width: 160px; height: 160px; border-radius: 50%; background: rgba(201,146,42,.13); } .day-eyebrow { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(–gold); font-weight: 500; margin-bottom: 8px; } .day-number { font-family: ‘Playfair Display’, serif; font-size: clamp(52px, 12vw, 80px); font-weight: 700; line-height: .95; color: var(–parchment); letter-spacing: -.02em; } .day-number span { font-size: .38em; font-weight: 400; color: rgba(245,239,224,.45); letter-spacing: .04em; } .header-meta { display: flex; justify-content: space-between; align-items: flex-end; margin-top: 18px; gap: 16px; flex-wrap: wrap; } .header-date { font-size: 13px; color: rgba(245,239,224,.6); font-weight: 300; } .header-roles { font-size: 10.5px; letter-spacing: .10em; text-transform: uppercase; color: rgba(245,239,224,.38); font-weight: 400; text-align: right; line-height: 1.7; } /* ── BODY ── */ .page-body { padding: 36px 44px 40px; } /* ── SECTION ── */ .section { margin-bottom: 28px; } .section-label { font-size: 10px; letter-spacing: .14em; text-transform: uppercase; font-weight: 600; color: var(–gold); margin-bottom: 6px; display: flex; align-items: center; gap: 8px; } .section-label::after { content: ”; flex: 1; height: 1px; background: var(–line); } .section-prompt { font-family: ‘Playfair Display’, serif; font-size: 14.5px; font-style: italic; color: var(–muted); margin-bottom: 10px; line-height: 1.5; } .write-lines { display: flex; flex-direction: column; gap: 0; } .write-line { border: none; border-bottom: 1px solid var(–line); background: transparent; padding: 10px 2px; font-family: ‘Inter’, sans-serif; font-size: 13.5px; color: var(–ink); width: 100%; resize: none; line-height: 1.6; outline: none; transition: border-color .2s; } .write-line:focus { border-bottom-color: var(–gold); } /* ── DIVIDER ── */ .ornament-divider { text-align: center; margin: 28px 0; color: var(–gold); font-size: 18px; letter-spacing: .4em; opacity: .55; } /* ── INTENTIONS GRID ── */ .intentions-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; margin-top: 10px; } .intention-card { background: rgba(26,26,46,.04); border-radius: 6px; padding: 12px 14px; } .intention-role { font-size: 9px; letter-spacing: .12em; text-transform: uppercase; color: var(–blush); font-weight: 600; margin-bottom: 6px; } .intention-role-input { border: none; border-bottom: 1px dashed var(–blush); background: transparent; width: 100%; font-family: ‘Inter’, sans-serif; font-size: 9px; letter-spacing: .12em; text-transform: uppercase; font-weight: 600; color: var(–blush); padding: 2px 0 4px; margin-bottom: 6px; outline: none; transition: border-color .2s; } .intention-role-input:focus { border-bottom-color: var(–gold); color: var(–ink); } .intention-role-input::placeholder { color: rgba(212,150,122,.45); } .intention-input { border: none; border-bottom: 1px solid var(–line); background: transparent; width: 100%; font-family: ‘Inter’, sans-serif; font-size: 12.5px; color: var(–ink); padding: 4px 0; outline: none; transition: border-color .2s; } .intention-input:focus { border-bottom-color: var(–gold); } /* ── GRATITUDE ── */ .gratitude-row { display: flex; align-items: baseline; gap: 10px; margin-bottom: 6px; } .g-num { font-family: ‘Playfair Display’, serif; font-size: 18px; color: var(–sage); font-style: italic; min-width: 18px; } /* ── AFFIRMATION ── */ .affirmation-box { background: linear-gradient(135deg, rgba(201,146,42,.08), rgba(138,175,142,.08)); border-left: 3px solid var(–gold); border-radius: 0 6px 6px 0; padding: 14px 18px; margin-top: 10px; } .affirmation-input { width: 100%; border: none; background: transparent; font-family: ‘Playfair Display’, serif; font-size: 15px; font-style: italic; color: var(–ink); outline: none; line-height: 1.6; resize: none; min-height: 52px; } /* ── REALITY CHECK ── */ .reality-block { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 10px; } .reality-col label { font-size: 10px; letter-spacing: .10em; text-transform: uppercase; color: var(–muted); font-weight: 500; display: block; margin-bottom: 8px; } /* ── EVENING CLOSE ── */ .close-meter { display: flex; align-items: center; gap: 10px; margin-top: 10px; margin-bottom: 6px; } .meter-label { font-size: 12px; color: var(–muted); min-width: 110px; } .meter-dots { display: flex; gap: 6px; } .meter-dot { width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid var(–line); background: transparent; cursor: pointer; transition: background .15s, border-color .15s; } .meter-dot.filled { background: var(–gold); border-color: var(–gold); } /* ── FOOTER ── */ .page-footer { border-top: 1px solid var(–line); padding: 16px 44px; display: flex; justify-content: space-between; align-items: center; font-size: 10.5px; letter-spacing: .08em; color: rgba(26,26,46,.3); } .page-footer .progress-bar-wrap { flex: 1; max-width: 120px; height: 3px; background: var(–line); border-radius: 2px; margin: 0 16px; overflow: hidden; } .progress-bar-fill { height: 100%; background: var(–gold); border-radius: 2px; transition: width .4s ease; } /* ── SECTION HEADER alt ── */ .alt-section-header { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; } .alt-section-icon { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 13px; flex-shrink: 0; } .icon-gold { background: rgba(201,146,42,.15); } .icon-sage { background: rgba(138,175,142,.18); } .icon-blush { background: rgba(212,150,122,.15); } .alt-section-title { font-size: 10px; letter-spacing: .14em; text-transform: uppercase; font-weight: 600; color: var(–gold); } .spacer { height: 8px; }
Day Date
One word that will define how I show up today.
Three things I am grateful for, right now, in this life I am building.
1.
2.
3.
· · ·
I write as if it is already true. I describe the life I am stepping into.
One meaningful action for each part of me.
· · ·
My identity declaration for today. I write it, I feel it, I become it.
My #1 Priority Today
What I’m Releasing
· · ·
One small or large thing I did today that moved me closer to the life I am creating here.
Before I close this day — what showed up for me?
Alignment today
1 — 5
Energy level
1 — 5
What I want to carry into tomorrow:
// Set today’s date as default const today = new Date(); const yyyy = today.getFullYear(); const mm = String(today.getMonth()+1).padStart(2,’0′); const dd = String(today.getDate()).padStart(2,’0′); document.getElementById(‘dateInput’).value = `${yyyy}-${mm}-${dd}`; updatePage(); function updatePage() { const day = parseInt(document.getElementById(‘dayInput’).value) || 1; const dateVal = document.getElementById(‘dateInput’).value; // Day display const padded = String(day).padStart(3,’0′); document.getElementById(‘dayDisplay’).innerHTML = `${padded} / 100`; document.getElementById(‘footerDay’).textContent = `Day ${day}`; // Progress bar const pct = Math.max(1, (day/100)*100); document.getElementById(‘progressFill’).style.width = pct + ‘%’; // Date display if (dateVal) { const d = new Date(dateVal + ‘T00:00:00′); const opts = { weekday:’long’, year:’numeric’, month:’long’, day:’numeric’ }; document.getElementById(‘dateDisplay’).textContent = d.toLocaleDateString(‘en-GB’, opts); } } function clearPage() { if (!confirm(‘Clear all written content on this page?’)) return; document.querySelectorAll(‘input[type=”text”], textarea’).forEach(el => el.value = ”); document.querySelectorAll(‘.meter-dot’).forEach(d => d.classList.remove(‘filled’)); } function toggleDot(groupId, index) { const dots = document.querySelectorAll(`#${groupId} .meter-dot`); dots.forEach((d, i) => { d.classList.toggle(‘filled’, i { const cl = cloneInputs[i]; if (!cl) return; if (el.type === ‘checkbox’ || el.type === ‘radio’) { cl.checked = el.checked; } else { cl.setAttribute(‘value’, el.value); if (el.tagName === ‘TEXTAREA’) cl.textContent = el.value; } }); // Bake in filled meter dots const liveDots = document.querySelectorAll(‘.meter-dot’); const cloneDots = clone.querySelectorAll(‘.meter-dot’); liveDots.forEach((d, i) => { if (d.classList.contains(‘filled’)) cloneDots[i].classList.add(‘filled’); }); // Bake in progress bar width const fillPct = document.getElementById(‘progressFill’).style.width; clone.querySelector(‘#progressFill’).style.width = fillPct; // Bake in displayed day and date text clone.querySelector(‘#dayDisplay’).innerHTML = `${padded} / 100`; clone.querySelector(‘#footerDay’).textContent = `Day ${day}`; const dateEl = document.getElementById(‘dateDisplay’); clone.querySelector(‘#dateDisplay’).textContent = dateEl.textContent; // Hide controls in the saved file const controlsEl = clone.querySelector(‘.controls’); if (controlsEl) controlsEl.style.display = ‘none’; // Remove the save/print script block so saved file is static clone.querySelectorAll(‘script’).forEach(s => s.remove()); const html = ‘\n’ + clone.outerHTML; const blob = new Blob([html], { type: ‘text/html’ }); const url = URL.createObjectURL(blob); const a = document.createElement(‘a’); a.href = url; a.download = `journal-day-${padded}.html`; a.click(); URL.revokeObjectURL(url); }
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>100 Days · Creating My Reality</title>
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400;1,600&family=Inter:wght@300;400;500&display=swap" rel="stylesheet">
<style>
:root {
--ink: #1A1A2E;
--parchment: #F5EFE0;
--gold: #C9922A;
--sage: #8AAF8E;
--blush: #D4967A;
--muted: #7A7469;
--line: rgba(26,26,46,0.12);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
@media print {
body { background: white; }
.no-print { display: none; }
.page { page-break-after: always; box-shadow: none; border: none; margin: 0; border-radius: 0; }
}
body {
background: #EDE8DC;
font-family: 'Inter', sans-serif;
color: var(--ink);
min-height: 100vh;
padding: 40px 20px 60px;
}
/* ── CONTROLS ── */
.controls {
max-width: 680px;
margin: 0 auto 32px;
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
}
.controls label {
font-size: 12px;
letter-spacing: .08em;
text-transform: uppercase;
color: var(--muted);
font-weight: 500;
}
.controls input[type="number"] {
width: 72px;
padding: 8px 12px;
border: 1.5px solid var(--gold);
border-radius: 6px;
background: var(--parchment);
font-family: 'Playfair Display', serif;
font-size: 16px;
color: var(--ink);
text-align: center;
}
.controls input[type="date"] {
padding: 8px 12px;
border: 1.5px solid var(--line);
border-radius: 6px;
background: var(--parchment);
font-family: 'Inter', sans-serif;
font-size: 13px;
color: var(--ink);
}
.btn {
padding: 9px 20px;
border-radius: 6px;
border: none;
cursor: pointer;
font-size: 13px;
font-weight: 500;
letter-spacing: .04em;
transition: opacity .15s;
}
.btn:hover { opacity: .82; }
.btn-gold { background: var(--gold); color: white; }
.btn-ink { background: var(--ink); color: var(--parchment); }
.btn-sage { background: var(--sage); color: white; }
.btn-outline { background: transparent; border: 1.5px solid var(--ink); color: var(--ink); }
/* ── PAGE ── */
.page {
max-width: 680px;
margin: 0 auto 48px;
background: var(--parchment);
border-radius: 3px;
box-shadow: 0 2px 24px rgba(0,0,0,.10), 0 0 0 1px rgba(0,0,0,.04);
overflow: hidden;
}
/* ── HEADER ── */
.page-header {
background: var(--ink);
color: var(--parchment);
padding: 36px 44px 28px;
position: relative;
overflow: hidden;
}
.page-header::after {
content: '';
position: absolute;
right: -20px; top: -20px;
width: 160px; height: 160px;
border-radius: 50%;
background: rgba(201,146,42,.13);
}
.day-eyebrow {
font-size: 11px;
letter-spacing: .14em;
text-transform: uppercase;
color: var(--gold);
font-weight: 500;
margin-bottom: 8px;
}
.day-number {
font-family: 'Playfair Display', serif;
font-size: clamp(52px, 12vw, 80px);
font-weight: 700;
line-height: .95;
color: var(--parchment);
letter-spacing: -.02em;
}
.day-number span {
font-size: .38em;
font-weight: 400;
color: rgba(245,239,224,.45);
letter-spacing: .04em;
}
.header-meta {
display: flex;
justify-content: space-between;
align-items: flex-end;
margin-top: 18px;
gap: 16px;
flex-wrap: wrap;
}
.header-date {
font-size: 13px;
color: rgba(245,239,224,.6);
font-weight: 300;
}
.header-roles {
font-size: 10.5px;
letter-spacing: .10em;
text-transform: uppercase;
color: rgba(245,239,224,.38);
font-weight: 400;
text-align: right;
line-height: 1.7;
}
/* ── BODY ── */
.page-body {
padding: 36px 44px 40px;
}
/* ── SECTION ── */
.section {
margin-bottom: 28px;
}
.section-label {
font-size: 10px;
letter-spacing: .14em;
text-transform: uppercase;
font-weight: 600;
color: var(--gold);
margin-bottom: 6px;
display: flex;
align-items: center;
gap: 8px;
}
.section-label::after {
content: '';
flex: 1;
height: 1px;
background: var(--line);
}
.section-prompt {
font-family: 'Playfair Display', serif;
font-size: 14.5px;
font-style: italic;
color: var(--muted);
margin-bottom: 10px;
line-height: 1.5;
}
.write-lines {
display: flex;
flex-direction: column;
gap: 0;
}
.write-line {
border: none;
border-bottom: 1px solid var(--line);
background: transparent;
padding: 10px 2px;
font-family: 'Inter', sans-serif;
font-size: 13.5px;
color: var(--ink);
width: 100%;
resize: none;
line-height: 1.6;
outline: none;
transition: border-color .2s;
}
.write-line:focus { border-bottom-color: var(--gold); }
/* ── DIVIDER ── */
.ornament-divider {
text-align: center;
margin: 28px 0;
color: var(--gold);
font-size: 18px;
letter-spacing: .4em;
opacity: .55;
}
/* ── INTENTIONS GRID ── */
.intentions-grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 12px;
margin-top: 10px;
}
.intention-card {
background: rgba(26,26,46,.04);
border-radius: 6px;
padding: 12px 14px;
}
.intention-role {
font-size: 9px;
letter-spacing: .12em;
text-transform: uppercase;
color: var(--blush);
font-weight: 600;
margin-bottom: 6px;
}
.intention-role-input {
border: none;
border-bottom: 1px dashed var(--blush);
background: transparent;
width: 100%;
font-family: 'Inter', sans-serif;
font-size: 9px;
letter-spacing: .12em;
text-transform: uppercase;
font-weight: 600;
color: var(--blush);
padding: 2px 0 4px;
margin-bottom: 6px;
outline: none;
transition: border-color .2s;
}
.intention-role-input:focus { border-bottom-color: var(--gold); color: var(--ink); }
.intention-role-input::placeholder { color: rgba(212,150,122,.45); }
.intention-input {
border: none;
border-bottom: 1px solid var(--line);
background: transparent;
width: 100%;
font-family: 'Inter', sans-serif;
font-size: 12.5px;
color: var(--ink);
padding: 4px 0;
outline: none;
transition: border-color .2s;
}
.intention-input:focus { border-bottom-color: var(--gold); }
/* ── GRATITUDE ── */
.gratitude-row {
display: flex;
align-items: baseline;
gap: 10px;
margin-bottom: 6px;
}
.g-num {
font-family: 'Playfair Display', serif;
font-size: 18px;
color: var(--sage);
font-style: italic;
min-width: 18px;
}
/* ── AFFIRMATION ── */
.affirmation-box {
background: linear-gradient(135deg, rgba(201,146,42,.08), rgba(138,175,142,.08));
border-left: 3px solid var(--gold);
border-radius: 0 6px 6px 0;
padding: 14px 18px;
margin-top: 10px;
}
.affirmation-input {
width: 100%;
border: none;
background: transparent;
font-family: 'Playfair Display', serif;
font-size: 15px;
font-style: italic;
color: var(--ink);
outline: none;
line-height: 1.6;
resize: none;
min-height: 52px;
}
/* ── REALITY CHECK ── */
.reality-block {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
margin-top: 10px;
}
.reality-col label {
font-size: 10px;
letter-spacing: .10em;
text-transform: uppercase;
color: var(--muted);
font-weight: 500;
display: block;
margin-bottom: 8px;
}
/* ── EVENING CLOSE ── */
.close-meter {
display: flex;
align-items: center;
gap: 10px;
margin-top: 10px;
margin-bottom: 6px;
}
.meter-label { font-size: 12px; color: var(--muted); min-width: 110px; }
.meter-dots {
display: flex;
gap: 6px;
}
.meter-dot {
width: 20px; height: 20px;
border-radius: 50%;
border: 1.5px solid var(--line);
background: transparent;
cursor: pointer;
transition: background .15s, border-color .15s;
}
.meter-dot.filled { background: var(--gold); border-color: var(--gold); }
/* ── FOOTER ── */
.page-footer {
border-top: 1px solid var(--line);
padding: 16px 44px;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 10.5px;
letter-spacing: .08em;
color: rgba(26,26,46,.3);
}
.page-footer .progress-bar-wrap {
flex: 1;
max-width: 120px;
height: 3px;
background: var(--line);
border-radius: 2px;
margin: 0 16px;
overflow: hidden;
}
.progress-bar-fill {
height: 100%;
background: var(--gold);
border-radius: 2px;
transition: width .4s ease;
}
/* ── SECTION HEADER alt ── */
.alt-section-header {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 10px;
}
.alt-section-icon {
width: 28px; height: 28px;
border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-size: 13px;
flex-shrink: 0;
}
.icon-gold { background: rgba(201,146,42,.15); }
.icon-sage { background: rgba(138,175,142,.18); }
.icon-blush { background: rgba(212,150,122,.15); }
.alt-section-title {
font-size: 10px;
letter-spacing: .14em;
text-transform: uppercase;
font-weight: 600;
color: var(--gold);
}
.spacer { height: 8px; }
</style>
</head>
<body>
<!-- CONTROLS -->
<div class="controls no-print">
<label>Day</label>
<input type="number" id="dayInput" min="1" max="100" value="1">
<label>Date</label>
<input type="date" id="dateInput">
<button class="btn btn-gold" onclick="updatePage()">Update</button>
<button class="btn btn-ink" onclick="window.print()">🖨 Print</button>
<button class="btn btn-sage" onclick="saveFile()">💾 Save File</button>
<button class="btn btn-outline" onclick="clearPage()">Clear</button>
</div>
<!-- PAGE -->
<div class="page" id="journalPage">
<!-- HEADER -->
<div class="page-header">
<div class="day-eyebrow">Creating My Reality · 100 Days</div>
<div class="day-number" id="dayDisplay">
001 <span>/ 100</span>
</div>
<div class="header-meta">
<div class="header-date" id="dateDisplay">— — —</div>
<div class="header-roles">Creating My Reality · One Day at a Time<br>Germany · 2026</div>
</div>
</div>
<!-- BODY -->
<div class="page-body">
<!-- MORNING INTENTION -->
<div class="section">
<div class="section-label">Morning Word</div>
<div class="section-prompt">One word that will define how I show up today.</div>
<input class="write-line" type="text" placeholder="e.g. Focused · Bold · Grounded · Expansive">
</div>
<!-- GRATITUDE -->
<div class="section">
<div class="section-label">Gratitude</div>
<div class="section-prompt">Three things I am grateful for, right now, in this life I am building.</div>
<div class="gratitude-row"><span class="g-num">1.</span><input class="write-line" type="text" style="flex:1"></div>
<div class="gratitude-row"><span class="g-num">2.</span><input class="write-line" type="text" style="flex:1"></div>
<div class="gratitude-row"><span class="g-num">3.</span><input class="write-line" type="text" style="flex:1"></div>
</div>
<div class="ornament-divider">· · ·</div>
<!-- VISION -->
<div class="section">
<div class="section-label">My Reality — Present Tense</div>
<div class="section-prompt">I write as if it is already true. I describe the life I am stepping into.</div>
<textarea class="write-line" rows="4" placeholder="I am living in Germany with ease and joy. My work creates real impact. I write and people are moved. My investments grow steadily. My marriage is a sanctuary..."></textarea>
</div>
<!-- INTENTIONS BY ROLE -->
<div class="section">
<div class="section-label">Today's Intentions by Role</div>
<div class="section-prompt">One meaningful action for each part of me.</div>
<div class="intentions-grid">
<div class="intention-card">
<input class="intention-role-input" type="text" placeholder="My role…">
<input class="intention-input" type="text" placeholder="Today I will...">
</div>
<div class="intention-card">
<input class="intention-role-input" type="text" placeholder="My role…">
<input class="intention-input" type="text" placeholder="Today I will...">
</div>
<div class="intention-card">
<input class="intention-role-input" type="text" placeholder="My role…">
<input class="intention-input" type="text" placeholder="Today I will...">
</div>
<div class="intention-card">
<input class="intention-role-input" type="text" placeholder="My role…">
<input class="intention-input" type="text" placeholder="Today I will...">
</div>
<div class="intention-card">
<input class="intention-role-input" type="text" placeholder="My role…">
<input class="intention-input" type="text" placeholder="Today I will...">
</div>
<div class="intention-card">
<input class="intention-role-input" type="text" placeholder="My role…">
<input class="intention-input" type="text" placeholder="Today I will...">
</div>
<div class="intention-card">
<input class="intention-role-input" type="text" placeholder="My role…">
<input class="intention-input" type="text" placeholder="Today I will...">
</div>
</div>
</div>
<div class="ornament-divider">· · ·</div>
<!-- AFFIRMATION -->
<div class="section">
<div class="section-label">I Am Statement</div>
<div class="section-prompt">My identity declaration for today. I write it, I feel it, I become it.</div>
<div class="affirmation-box">
<textarea class="affirmation-input" rows="2" placeholder="I am a woman who creates with intention. I belong in every room I enter. I am building something that lasts..."></textarea>
</div>
</div>
<!-- FOCUS -->
<div class="section">
<div class="reality-block">
<div class="reality-col">
<label>My #1 Priority Today</label>
<textarea class="write-line" rows="3" placeholder="The one thing that, if done, makes today a success..."></textarea>
</div>
<div class="reality-col">
<label>What I'm Releasing</label>
<textarea class="write-line" rows="3" placeholder="A belief, fear, or habit I no longer need to carry..."></textarea>
</div>
</div>
</div>
<div class="ornament-divider">· · ·</div>
<!-- GERMANY / LIFE CHAPTER -->
<div class="section">
<div class="section-label">My Chapter in Germany</div>
<div class="section-prompt">One small or large thing I did today that moved me closer to the life I am creating here.</div>
<textarea class="write-line" rows="3" placeholder="Language practice, a connection made, a boundary held, a dream written down..."></textarea>
</div>
<!-- EVENING REFLECTION -->
<div class="section">
<div class="section-label">Evening Reflection</div>
<div class="section-prompt">Before I close this day — what showed up for me?</div>
<div class="close-meter">
<div class="meter-label">Alignment today</div>
<div class="meter-dots" id="alignDots">
<div class="meter-dot" onclick="toggleDot('alignDots',0)" title="1"></div>
<div class="meter-dot" onclick="toggleDot('alignDots',1)" title="2"></div>
<div class="meter-dot" onclick="toggleDot('alignDots',2)" title="3"></div>
<div class="meter-dot" onclick="toggleDot('alignDots',3)" title="4"></div>
<div class="meter-dot" onclick="toggleDot('alignDots',4)" title="5"></div>
</div>
<span style="font-size:11px;color:var(--muted)">1 — 5</span>
</div>
<div class="close-meter">
<div class="meter-label">Energy level</div>
<div class="meter-dots" id="energyDots">
<div class="meter-dot" onclick="toggleDot('energyDots',0)"></div>
<div class="meter-dot" onclick="toggleDot('energyDots',1)"></div>
<div class="meter-dot" onclick="toggleDot('energyDots',2)"></div>
<div class="meter-dot" onclick="toggleDot('energyDots',3)"></div>
<div class="meter-dot" onclick="toggleDot('energyDots',4)"></div>
</div>
<span style="font-size:11px;color:var(--muted)">1 — 5</span>
</div>
<div class="spacer"></div>
<div class="section-prompt" style="margin-bottom:6px;">What I want to carry into tomorrow:</div>
<textarea class="write-line" rows="2" placeholder="A lesson, a feeling, a moment I want to remember..."></textarea>
</div>
<!-- CLOSING WORD -->
<div class="section">
<div class="section-label">I Close This Day By Saying</div>
<div class="affirmation-box" style="border-left-color: var(--sage)">
<textarea class="affirmation-input" rows="2" placeholder="Thank you for this day. I trust the process. I am becoming..."></textarea>
</div>
</div>
</div><!-- /page-body -->
<!-- FOOTER -->
<div class="page-footer">
<span id="footerDay">Day 1</span>
<div class="progress-bar-wrap">
<div class="progress-bar-fill" id="progressFill" style="width:1%"></div>
</div>
<span>100 Days · Creating My Reality</span>
</div>
</div><!-- /page -->
<script>
// Set today's date as default
const today = new Date();
const yyyy = today.getFullYear();
const mm = String(today.getMonth()+1).padStart(2,'0');
const dd = String(today.getDate()).padStart(2,'0');
document.getElementById('dateInput').value = `${yyyy}-${mm}-${dd}`;
updatePage();
function updatePage() {
const day = parseInt(document.getElementById('dayInput').value) || 1;
const dateVal = document.getElementById('dateInput').value;
// Day display
const padded = String(day).padStart(3,'0');
document.getElementById('dayDisplay').innerHTML = `${padded} <span>/ 100</span>`;
document.getElementById('footerDay').textContent = `Day ${day}`;
// Progress bar
const pct = Math.max(1, (day/100)*100);
document.getElementById('progressFill').style.width = pct + '%';
// Date display
if (dateVal) {
const d = new Date(dateVal + 'T00:00:00');
const opts = { weekday:'long', year:'numeric', month:'long', day:'numeric' };
document.getElementById('dateDisplay').textContent = d.toLocaleDateString('en-GB', opts);
}
}
function clearPage() {
if (!confirm('Clear all written content on this page?')) return;
document.querySelectorAll('input[type="text"], textarea').forEach(el => el.value = '');
document.querySelectorAll('.meter-dot').forEach(d => d.classList.remove('filled'));
}
function toggleDot(groupId, index) {
const dots = document.querySelectorAll(`#${groupId} .meter-dot`);
dots.forEach((d, i) => {
d.classList.toggle('filled', i <= index);
});
}
function saveFile() {
const day = parseInt(document.getElementById('dayInput').value) || 1;
const dateVal = document.getElementById('dateInput').value;
const padded = String(day).padStart(3, '0');
// Clone the full document HTML
const clone = document.documentElement.cloneNode(true);
// Bake in current input values
const liveInputs = document.querySelectorAll('input, textarea');
const cloneInputs = clone.querySelectorAll('input, textarea');
liveInputs.forEach((el, i) => {
const cl = cloneInputs[i];
if (!cl) return;
if (el.type === 'checkbox' || el.type === 'radio') {
cl.checked = el.checked;
} else {
cl.setAttribute('value', el.value);
if (el.tagName === 'TEXTAREA') cl.textContent = el.value;
}
});
// Bake in filled meter dots
const liveDots = document.querySelectorAll('.meter-dot');
const cloneDots = clone.querySelectorAll('.meter-dot');
liveDots.forEach((d, i) => {
if (d.classList.contains('filled')) cloneDots[i].classList.add('filled');
});
// Bake in progress bar width
const fillPct = document.getElementById('progressFill').style.width;
clone.querySelector('#progressFill').style.width = fillPct;
// Bake in displayed day and date text
clone.querySelector('#dayDisplay').innerHTML = `${padded} <span>/ 100</span>`;
clone.querySelector('#footerDay').textContent = `Day ${day}`;
const dateEl = document.getElementById('dateDisplay');
clone.querySelector('#dateDisplay').textContent = dateEl.textContent;
// Hide controls in the saved file
const controlsEl = clone.querySelector('.controls');
if (controlsEl) controlsEl.style.display = 'none';
// Remove the save/print script block so saved file is static
clone.querySelectorAll('script').forEach(s => s.remove());
const html = '<!DOCTYPE html>\n' + clone.outerHTML;
const blob = new Blob([html], { type: 'text/html' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `journal-day-${padded}.html`;
a.click();
URL.revokeObjectURL(url);
}
</script>
</body>
</html>