← back to Marketing Command Center
public/panels/social.html
130 lines
<div class="muted-banner">
Checking posting status…
</div>
<div class="soc-wrap">
<div class="soc-main">
<div class="card">
<h2>Add a post</h2>
<form class="soc-form" id="soc-form">
<div class="row" style="gap:10px">
<div style="width:160px">
<label>Channel</label>
<select name="channel">
<option value="instagram">📷 Instagram</option>
<option value="tiktok">🎵 TikTok</option>
<option value="pinterest">📌 Pinterest</option>
<option value="facebook">👍 Facebook</option>
</select>
</div>
<div style="width:150px">
<label>Date</label>
<input type="date" name="date">
</div>
<div style="width:110px">
<label>Time</label>
<input type="time" name="time">
</div>
<div style="width:150px">
<label>Status</label>
<select name="status">
<option value="drafted">Drafted</option>
<option value="idea">Idea</option>
<option value="pending-approval">Pending approval</option>
<option value="approved">Approved</option>
</select>
</div>
</div>
<div style="margin-top:10px">
<label>Caption</label>
<textarea name="caption" rows="3" placeholder="Editorial, tactile, confident — e.g. The light moves and so does the silk…"></textarea>
</div>
<div class="row" style="margin-top:10px;gap:10px">
<div style="flex:1;min-width:200px">
<label>Hashtags</label>
<input name="hashtags" placeholder="#grasscloth #interiordesign #luxuryinteriors">
</div>
<div style="flex:1;min-width:200px">
<label>Image URL</label>
<input name="imageUrl" placeholder="https://…">
</div>
</div>
<div style="margin-top:10px">
<label>Notes</label>
<input name="notes" placeholder="Angle, product line, asset to shoot…">
</div>
<div class="row" style="margin-top:12px;align-items:center;gap:8px">
<button type="submit" class="btn gold" id="soc-save">Add to queue</button>
<button type="button" class="btn gated" id="soc-instant" title="Save + approve + publish in one gated step">⚡ Instant post…</button>
<button type="button" class="btn ghost" id="soc-reset">Clear</button>
<span class="muted" id="soc-editing" style="font-size:12px;margin-left:auto"></span>
</div>
<div class="sc-result" id="soc-instant-result" hidden></div>
</form>
</div>
<div class="soc-board" id="soc-board"></div>
</div>
<div class="soc-side">
<div class="card">
<h2>Best times to post</h2>
<p class="muted" style="margin:2px 0 12px;font-size:12.5px">Curated windows for a luxury-design audience (your local time).</p>
<div id="soc-besttimes"><div class="cal-empty muted">Loading…</div></div>
</div>
</div>
</div>
<!-- card template for one queued post -->
<template id="soc-card-tpl">
<div class="soc-card">
<div class="sc-top">
<span class="sc-chan"></span>
<span class="sc-when muted"></span>
<button class="sc-del" title="Remove" type="button">✕</button>
</div>
<div class="sc-cap"></div>
<div class="sc-tags"></div>
<div class="sc-foot">
<button class="btn ghost sc-edit" type="button">Edit</button>
<button class="btn gated sc-pub" type="button" title="Gated — staged dry-run only">Publish now…</button>
</div>
<div class="sc-result" hidden></div>
</div>
</template>
<style>
.soc-wrap{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:18px;align-items:start}
@media(max-width:1080px){.soc-wrap{grid-template-columns:1fr}}
.soc-form textarea{resize:vertical}
.soc-board{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
@media(max-width:1280px){.soc-board{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.soc-board{grid-template-columns:1fr}}
.soc-col{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px;min-height:120px}
.soc-col h3{margin:0 0 10px;font:600 14px/1.2 "Cormorant Garamond",Georgia,serif;
display:flex;align-items:center;gap:8px}
.soc-col h3 .ct{font:700 11px/1 Inter;background:var(--cream);color:var(--accent);border-radius:999px;padding:3px 8px;margin-left:auto}
.soc-card{border:1px solid var(--line);border-radius:11px;padding:11px 12px;margin-bottom:10px;background:#fff}
.soc-card:last-child{margin-bottom:0}
.sc-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.sc-chan{font-size:12px;font-weight:700}
.sc-when{font-size:11px}
.sc-del{margin-left:auto;background:transparent;border:0;color:var(--mut);cursor:pointer;font-size:13px;padding:0 2px}
.sc-del:hover{color:var(--accent)}
.sc-cap{font-size:12.5px;line-height:1.45;color:#3f3a33;white-space:pre-wrap;word-break:break-word;
display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.sc-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.sc-foot{display:flex;gap:7px;margin-top:10px}
.sc-foot .btn{padding:6px 11px;font-size:12px}
.sc-result{margin-top:9px;font-size:11.5px;line-height:1.4;border-radius:9px;padding:8px 10px;background:var(--cream);
border:1px solid var(--line);color:#4a443c}
.sc-result.staged{background:#fff8ec;border-color:#f0e0c0;color:#7a5a2a}
.soc-empty{color:var(--mut);font-size:12px}
.bt-row{border-bottom:1px solid var(--line);padding:10px 0}
.bt-row:last-child{border-bottom:0}
.bt-row .bh{display:flex;align-items:center;gap:8px;font-weight:600;font-size:13px}
.bt-win{display:flex;flex-wrap:wrap;gap:5px;margin:7px 0}
.bt-note{font-size:11.5px;color:#5a544b;line-height:1.45}
.cal-empty{font-size:12.5px;padding:6px 0}
</style>