Files
fitme3070.pt/shared/platform-tools/social/publications.css
T
andreandClaude Opus 5 4d40adbf64 Vendor platform-tools: everything this site runs is now in one repo
shared/platform-tools was a git submodule. On this branch it is a plain
directory of tracked files, frozen at ea3616abae30106df283e73a3e2f9e5bb0e6ae90
— the same commit fotografia.andmore.pt pins. Contents are byte-identical to
that tree, verified blob by blob.

The submodule caused every deployment failure this site has had:

  - .gitmodules named no `branch`, so the update fell back to
    refs/remotes/origin/HEAD — a ref a plain server-side clone never writes.
    "Atualizar submódulo" failed with "Unable to find refs/remotes/origin/HEAD
    revision in submodule path".
  - Its URL was http://, which the origin answers with 523.
  - This install is deployed by uploading files, and a submodule is invisible
    to that. The tree moved forward while shared/platform-tools stayed on the
    old pin, config/functions_secrets.php died on a missing compat_secrets.php,
    and the whole site — public pages included — went down.

Each of those was separately fixable. Together they mean a second repository
nobody can see from the deployment path, gating whether the first one boots. A
plain directory deploys like every other file and cannot fall out of step.

The cost is that platform-tools updates no longer arrive by bumping a pin; they
are a copy-over-and-commit. shared/platform-tools/VENDORED.md records the
upstream SHA, the procedure, and which four files differ from upstream in line
endings only (social/*.js, .css, functions_publications.php — CRLF upstream,
normalised to LF here; content otherwise identical).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 23:06:23 +01:00

505 lines
12 KiB
CSS

/* ── Social-post generator (port of fotografia's ig_spots.css) ───────────────
Class names match the proven fotografia builder; the color/font tokens are
driven by the platform's app_branding row via --brand-* vars injected on
.ig-post by the generator page. Fallbacks keep posts legible for platforms
without branding configured. */
/* Local aliases resolved from branding */
.ig-post {
--sp-accent: var(--brand-accent, var(--brand-primary, #C9A96E));
--sp-on-accent: #1a1713;
--sp-font-heading: var(--brand-font-heading, 'Cormorant Garamond', serif);
--sp-font-body: var(--brand-font-body, 'Poppins', system-ui, sans-serif);
--sp-font-sub: var(--brand-font-body, 'Montserrat', sans-serif);
}
/* Dropzone */
.ig-dropzone {
border: 2px dashed #ced4da;
border-radius: 8px;
padding: 1.25rem;
text-align: center;
cursor: pointer;
transition: border-color .15s, background .15s;
}
.ig-dropzone:hover,
.ig-dropzone.dragging {
border-color: var(--am-accent, #0d6efd);
background: rgba(13,110,253,.04);
}
/* Preset swatches */
.ig-preset {
width: 36px;
height: 36px;
border-radius: 8px;
border: 2px solid transparent;
cursor: pointer;
flex-shrink: 0;
transition: transform .15s, outline .15s;
}
.ig-preset:hover { transform: scale(1.12); }
.ig-preset.active { border-color: #fff; outline: 2px solid var(--am-accent, #0d6efd); }
.ig-img-preset {
position: relative;
width: 52px;
height: 52px;
border-radius: 8px;
border: 2px solid transparent;
cursor: pointer;
background-size: cover;
background-position: center;
flex-shrink: 0;
transition: transform .15s, outline .15s;
}
.ig-img-preset:hover { transform: scale(1.1); }
.ig-img-preset.active { border-color: #fff; outline: 2px solid var(--am-accent, #0d6efd); }
.ig-img-preset .ig-img-del {
position: absolute;
top: -7px;
right: -7px;
width: 18px;
height: 18px;
border-radius: 50%;
border: none;
background: #dc3545;
color: #fff;
font-size: 10px;
line-height: 1;
display: none;
align-items: center;
justify-content: center;
cursor: pointer;
}
.ig-img-preset:hover .ig-img-del { display: flex; }
/* Lazy gallery accordion (Fase 4: photo_session content) */
.ig-gal-head {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
gap: .5rem;
background: none;
border: 0;
padding: .45rem .65rem;
font-size: .82rem;
text-align: left;
cursor: pointer;
}
.ig-gal-head:hover { background: rgba(0,0,0,.04); }
.ig-gal-body { border-top: 1px solid rgba(0,0,0,.08); }
/* Photo picker thumbnails (Fase 4: photo_session content) */
.ig-photo-pick {
position: relative;
width: 64px;
height: 64px;
border-radius: 6px;
border: 2px solid transparent;
background-size: cover;
background-position: center;
background-color: #e9ecef;
cursor: pointer;
flex-shrink: 0;
transition: transform .15s, outline .15s;
}
.ig-photo-pick:hover { transform: scale(1.06); }
.ig-photo-pick.active { border-color: #fff; outline: 2px solid var(--am-accent, #0d6efd); }
.ig-photo-pick-num {
position: absolute;
top: -6px;
right: -6px;
min-width: 18px;
height: 18px;
padding: 0 4px;
border-radius: 50%;
background: var(--am-accent, #0d6efd);
color: #fff;
font-size: 10px;
font-weight: 700;
line-height: 18px;
text-align: center;
}
.ig-photo-pick-num:empty { display: none; }
/* Photo-grid template (Fase 4): selected photos tile the whole canvas */
.ig-post .ig-photo-grid {
position: absolute;
inset: 0;
display: none;
gap: 4px;
}
.ig-photo-grid .ig-grid-cell {
background-size: cover;
background-position: center;
background-color: rgba(255,255,255,.06);
}
.ig-photo-grid .ig-grid-empty {
grid-column: 1 / -1;
display: flex;
align-items: center;
justify-content: center;
color: rgba(255,255,255,.4);
font-family: var(--sp-font-body);
font-size: 11px;
text-align: center;
padding: 1rem;
}
/* Preview panel */
.ig-preview-sticky { position: sticky; top: 80px; }
.ig-preview-wrapper {
height: min(72vh, 580px);
display: flex;
justify-content: center;
}
/* The post canvas */
.ig-post {
position: relative;
aspect-ratio: 1 / 1;
height: 100%;
width: auto;
max-width: 100%;
background: linear-gradient(160deg, #1a1a2e, #16213e);
background-size: cover;
background-position: center;
overflow: hidden;
box-shadow: 0 24px 64px rgba(0,0,0,.35);
font-family: var(--sp-font-body);
}
/* Wide/landscape formats fit by width instead of height */
.ig-preview-wrapper.is-wide { height: auto; }
.ig-preview-wrapper.is-wide .ig-post { width: 100%; height: auto; }
.ig-overlay {
position: absolute;
inset: 0;
background: linear-gradient(
to bottom,
rgba(0,0,0,.15) 0%,
rgba(0,0,0,.42) 40%,
rgba(0,0,0,.72) 100%
);
}
.ig-post.is-photo .ig-overlay {
background: linear-gradient(
to bottom,
rgba(0,0,0,.05) 0%,
rgba(0,0,0,.25) 55%,
rgba(0,0,0,.78) 100%
);
}
/* Light/paper rendering (e.g. white solid backgrounds) drops the dark wash */
.ig-post.is-light .ig-overlay { background: none; }
.ig-overlay-custom {
position: absolute;
inset: 0;
pointer-events: none;
opacity: 0;
}
.ig-post .ig-photo-bg {
position: absolute;
inset: 0;
background-size: cover;
background-position: center;
transition: filter .25s, transform .25s;
}
/* Watermark (optional, from app_branding_assets type=watermark) */
.ig-watermark {
position: absolute;
right: 4%;
bottom: 3%;
width: 14%;
opacity: .5;
pointer-events: none;
display: none;
}
.ig-post.has-watermark .ig-watermark { display: block; }
.ig-content {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
gap: clamp(12px, 3.5%, 26px);
padding: clamp(16px,6%,32px) clamp(20px,8%,40px);
}
.ig-content[data-align-v="top"] { justify-content: flex-start; }
.ig-content[data-align-v="middle"] { justify-content: center; }
.ig-content[data-align-v="bottom"] { justify-content: flex-end; }
.ig-content[data-align-h="left"] { align-items: flex-start; text-align: left; }
.ig-content[data-align-h="center"] { align-items: stretch; text-align: center; }
.ig-content[data-align-h="right"] { align-items: flex-end; text-align: right; }
/* Brand logo row */
.ig-logo-row {
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.ig-logo-row img {
max-height: 44px;
max-width: 55%;
object-fit: contain;
}
/* Title block */
.ig-title-block { flex-shrink: 0; }
.ig-tagline {
color: rgba(255,255,255,.7);
font-family: var(--sp-font-sub);
font-size: 9px;
text-transform: uppercase;
letter-spacing: 2.5px;
margin: 0 0 6px;
line-height: 1.4;
}
.ig-heading {
color: #fff;
font-family: var(--sp-font-heading);
font-size: clamp(22px, 6.5%, 34px);
font-weight: 400;
margin: 0 0 12px;
line-height: 1.1;
letter-spacing: .02em;
}
.ig-heading-divider {
width: 48px;
height: 1px;
background: var(--sp-accent);
display: inline-block;
}
.ig-content[data-align-h="center"] .ig-heading-divider { margin: 0 auto; display: block; }
/* Item cards (event-list) */
.ig-sessions {
flex-shrink: 0;
display: flex;
flex-direction: column;
gap: 7px;
}
.ig-empty-msg {
color: rgba(255,255,255,.4);
font-size: 11px;
text-align: center;
margin: 0;
}
.ig-session-card {
background: rgba(255,255,255,.12);
backdrop-filter: blur(14px);
-webkit-backdrop-filter: blur(14px);
border: 1px solid rgba(255,255,255,.2);
border-radius: 10px;
padding: 9px 12px;
display: flex;
align-items: center;
gap: 12px;
text-align: left;
}
.ig-date-block {
flex-shrink: 0;
text-align: center;
min-width: 30px;
}
.ig-date-dayname {
color: rgba(255,255,255,.55);
font-size: 8px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
line-height: 1;
margin-bottom: 2px;
}
.ig-date-num {
color: #fff;
font-family: var(--sp-font-heading);
font-size: 26px;
font-weight: 400;
line-height: 1;
}
.ig-date-month {
color: rgba(255,255,255,.55);
font-size: 8px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: .8px;
margin-top: 2px;
}
.ig-card-divider {
width: 1px;
height: 36px;
flex-shrink: 0;
opacity: .85;
background: var(--sp-accent);
}
.ig-session-info { flex: 1; min-width: 0; }
.ig-session-type {
color: #fff;
font-family: var(--sp-font-heading);
font-size: 15px;
font-weight: 400;
line-height: 1.2;
letter-spacing: .02em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ig-session-avail {
color: var(--sp-accent);
font-family: var(--sp-font-sub);
font-size: 9px;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 1.2px;
margin-top: 3px;
}
/* Single announcement */
.ig-announce {
flex-shrink: 0;
max-width: 100%;
}
.ig-announce-date {
color: var(--sp-accent);
font-family: var(--sp-font-sub);
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 2px;
margin: 0 0 10px;
}
.ig-announce-title {
color: #fff;
font-family: var(--sp-font-heading);
font-size: clamp(26px, 9%, 44px);
font-weight: 400;
line-height: 1.08;
margin: 0 0 8px;
letter-spacing: .02em;
}
.ig-announce-subtitle {
color: rgba(255,255,255,.85);
font-family: var(--sp-font-sub);
font-size: 12px;
text-transform: uppercase;
letter-spacing: 1.8px;
margin: 0 0 14px;
}
.ig-announce-extra {
color: rgba(255,255,255,.75);
font-family: var(--sp-font-body);
font-size: 12px;
line-height: 1.5;
margin: 0;
}
/* CTA row */
.ig-cta-row {
flex-shrink: 0;
padding-top: 10px;
border-top: 1px solid rgba(255,255,255,.18);
text-align: center;
}
.ig-cta {
color: var(--sp-accent);
font-family: var(--sp-font-sub);
font-size: 11px;
font-weight: 600;
letter-spacing: 1.6px;
text-transform: uppercase;
}
/* Light/paper variant: dark text on light backgrounds */
.ig-post.is-light .ig-tagline,
.ig-post.is-light .ig-announce-extra { color: rgba(20,20,20,.6); }
.ig-post.is-light .ig-heading,
.ig-post.is-light .ig-date-num,
.ig-post.is-light .ig-session-type,
.ig-post.is-light .ig-announce-title { color: #141414; }
.ig-post.is-light .ig-announce-subtitle { color: rgba(20,20,20,.75); }
.ig-post.is-light .ig-empty-msg { color: rgba(20,20,20,.4); }
.ig-post.is-light .ig-date-dayname,
.ig-post.is-light .ig-date-month { color: rgba(20,20,20,.55); }
.ig-post.is-light .ig-session-card {
background: rgba(0,0,0,.05);
border-color: rgba(0,0,0,.12);
}
.ig-post.is-light .ig-cta-row { border-top-color: rgba(0,0,0,.15); }
/* Slide navigator */
.ig-slide-nav {
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
}
.ig-slide-dot {
width: 9px;
height: 9px;
border-radius: 50%;
background: #d0d5dc;
border: none;
padding: 0;
cursor: pointer;
transition: background .15s, transform .15s;
}
.ig-slide-dot.active { background: var(--am-accent, #0d6efd); transform: scale(1.25); }
.ig-slide-toolbar {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
flex-wrap: wrap;
}
/* Screenshot overlay */
.ig-screenshot-overlay {
position: fixed;
inset: 0;
background: #000;
z-index: 9999;
display: flex;
align-items: center;
justify-content: center;
}
#screenshotPost { position: relative; overflow: hidden; }
#screenshotPost .ig-post {
width: 100%;
height: 100%;
aspect-ratio: unset;
border-radius: 0;
box-shadow: none;
max-width: unset;
}
.ig-screenshot-close {
position: fixed;
top: 16px;
right: 16px;
z-index: 10000;
background: rgba(255,255,255,.18);
border: none;
color: #fff;
border-radius: 50%;
width: 44px;
height: 44px;
font-size: 20px;
line-height: 1;
display: flex;
align-items: center;
justify-content: center;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
cursor: pointer;
transition: opacity .4s;
}
@keyframes ig-spin { to { transform: rotate(360deg); } }
.ig-spin { display: inline-block; animation: ig-spin .7s linear infinite; }