← back to Marketing Command Center
public/panels/calendar.html
115 lines
<div class="muted-banner">
Plan campaigns around the moments that matter to the trade. Curated dates are suggestions —
click any day to schedule a campaign. Nothing here sends; it's a planning board.
</div>
<div class="cal-wrap">
<div class="cal-main">
<div class="card">
<div class="cal-head">
<button class="btn ghost" id="cal-prev" aria-label="Previous month">‹</button>
<h2 id="cal-title" style="margin:0;text-align:center;flex:1">—</h2>
<button class="btn ghost" id="cal-next" aria-label="Next month">›</button>
<button class="btn ghost" id="cal-today" title="Jump to current month">Today</button>
</div>
<div class="cal-legend">
<span class="lg"><i class="dotc t-holiday"></i>Holiday</span>
<span class="lg"><i class="dotc t-retail"></i>Retail</span>
<span class="lg"><i class="dotc t-trade"></i>Trade</span>
<span class="lg"><i class="dotc t-awareness"></i>Awareness</span>
<span class="lg"><i class="dotc t-campaign"></i>Your campaign</span>
</div>
<div class="cal-dow">
<span>Sun</span><span>Mon</span><span>Tue</span><span>Wed</span><span>Thu</span><span>Fri</span><span>Sat</span>
</div>
<div class="cal-grid" id="cal-grid"></div>
</div>
</div>
<div class="cal-side">
<div class="card">
<h2>This month's marketing moments</h2>
<p class="muted" style="margin:2px 0 12px;font-size:12.5px">On-brand campaign ideas for the dates ahead.</p>
<div id="cal-moments"></div>
</div>
<div class="card">
<h2>Scheduled this month</h2>
<div id="cal-sched-list"></div>
</div>
</div>
</div>
<!-- inline add/edit form (rendered into a day cell on click) -->
<template id="cal-form-tpl">
<form class="cal-form">
<div class="row" style="gap:8px">
<div style="flex:1;min-width:160px">
<label>Campaign title</label>
<input name="title" placeholder="e.g. Spring grasscloth refresh" required>
</div>
<div style="width:140px">
<label>Channel</label>
<select name="channel">
<option value="email">Email</option>
<option value="instagram">Instagram</option>
<option value="tiktok">TikTok</option>
<option value="other">Other</option>
</select>
</div>
</div>
<div style="margin-top:8px">
<label>Notes</label>
<textarea name="notes" rows="2" placeholder="Angle, audience, assets…"></textarea>
</div>
<div class="row" style="margin-top:10px;align-items:center">
<button type="submit" class="btn gold">Add to plan</button>
<button type="button" class="btn ghost" data-cancel>Cancel</button>
<span class="muted" data-formdate style="font-size:12px;margin-left:auto"></span>
</div>
</form>
</template>
<style>
.cal-wrap{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px;align-items:start}
@media(max-width:1080px){.cal-wrap{grid-template-columns:1fr}}
.cal-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.cal-legend{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:12px;font-size:11.5px;color:var(--mut)}
.cal-legend .lg{display:inline-flex;align-items:center;gap:6px}
.dotc{width:9px;height:9px;border-radius:50%;display:inline-block}
.t-holiday{background:#8a5a44}.t-retail{background:#b8925a}.t-trade{background:#6f7a63}
.t-awareness{background:#7a8aa0}.t-campaign{background:#14110f}
.cal-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
.cal-dow span{font-size:11px;font-weight:700;letter-spacing:.5px;color:var(--mut);text-align:center;text-transform:uppercase}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cal-cell{background:#fff;border:1px solid var(--line);border-radius:10px;min-height:88px;padding:6px 7px;cursor:pointer;
display:flex;flex-direction:column;gap:4px;transition:border-color .12s,box-shadow .12s}
.cal-cell:hover{border-color:var(--gold);box-shadow:0 1px 6px rgba(184,146,90,.18)}
.cal-cell.empty{background:transparent;border:0;cursor:default;box-shadow:none}
.cal-cell.today{border-color:var(--ink);box-shadow:0 0 0 1px var(--ink) inset}
.cal-cell .num{font-size:12px;font-weight:700;color:var(--ink);line-height:1}
.cal-cell.today .num{color:var(--accent)}
.cal-evt{font-size:10.5px;line-height:1.25;display:flex;gap:4px;align-items:flex-start;overflow:hidden}
.cal-evt i{flex:0 0 auto;width:7px;height:7px;border-radius:50%;margin-top:3px}
.cal-evt span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-cell .more{font-size:10px;color:var(--mut)}
.cal-form{background:var(--cream);border:1px solid var(--line);border-radius:12px;padding:14px;margin:6px 0 4px}
.cal-cell.editing{cursor:default}
.cal-cell.editing:hover{box-shadow:none;border-color:var(--ink)}
.moment{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:9px}
.moment .mt{display:flex;align-items:center;gap:8px}
.moment .md{font-size:11px;color:var(--mut);font-weight:700}
.moment b{font-size:13.5px}
.moment p{margin:6px 0 8px;font-size:12.5px;color:#4a443c;line-height:1.45}
.sched-item{display:flex;gap:8px;align-items:flex-start;border-bottom:1px solid var(--line);padding:9px 0}
.sched-item:last-child{border-bottom:0}
.sched-item .sd{font-size:11px;color:var(--mut);font-weight:700;width:46px;flex:0 0 auto}
.sched-item .sx{flex:1;min-width:0}
.sched-item .st{font-size:13px;font-weight:600}
.sched-item .sm{font-size:11px;color:var(--mut)}
.sched-del{background:transparent;border:0;color:var(--mut);cursor:pointer;font-size:14px;padding:0 4px}
.sched-del:hover{color:var(--accent)}
.cal-empty{color:var(--mut);font-size:12.5px;padding:6px 0}
</style>