Files
Rosary/assets/css/public.css
T
pguzman 663fde3909 Initial commit — Rosary Presenter App
Full source for loveandrosary.com: slide-based Rosary/novena/Divine Mercy
Chaplet presentation tool with multi-user roles, SVG bead ring, audio uploads,
donate strip, and public session profiles.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 18:44:08 -07:00

618 lines
12 KiB
CSS

/* public.css — Clean public-facing styles */
*, *::before, *::after { box-sizing: border-box; }
:root {
--navy: #1e3a5f;
--gold: #c9973d;
--text: #111827;
--muted: #6b7280;
--bg: #f9fafb;
--white: #ffffff;
--border:#e5e7eb;
--radius:8px;
--shadow:0 1px 4px rgba(0,0,0,.08);
}
body {
margin: 0;
font-family: system-ui, -apple-system, 'Segoe UI', sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.6;
}
/* ── Nav ── */
.pub-nav {
background: var(--navy);
color: #fff;
padding: 0 24px;
display: flex;
align-items: center;
justify-content: space-between;
height: 56px;
position: sticky;
top: 0;
z-index: 100;
box-shadow: 0 2px 8px rgba(0,0,0,.15);
}
.pub-nav-brand {
font-size: 18px;
font-weight: 700;
color: #fff;
text-decoration: none;
letter-spacing: .01em;
}
.pub-nav-brand span { color: var(--gold); }
.pub-nav-links {
display: flex;
gap: 8px;
align-items: center;
}
.pub-nav-links a {
color: rgba(255,255,255,.85);
text-decoration: none;
font-size: 14px;
padding: 6px 14px;
border-radius: 6px;
transition: background .15s;
}
.pub-nav-links a:hover { background: rgba(255,255,255,.12); }
.pub-nav-links a.btn-nav {
background: var(--gold);
color: #fff;
font-weight: 600;
}
.pub-nav-links a.btn-nav:hover { background: #b8872e; }
/* ── Hero ── */
.pub-hero {
background: linear-gradient(135deg, var(--navy) 0%, #2d5a8e 100%);
color: #fff;
text-align: center;
padding: 64px 24px 56px;
}
.pub-hero h1 {
font-size: clamp(28px, 5vw, 48px);
font-weight: 800;
margin: 0 0 12px;
letter-spacing: -.01em;
}
.pub-hero p {
font-size: 18px;
color: rgba(255,255,255,.8);
margin: 0;
max-width: 480px;
margin: 0 auto;
}
/* ── Section ── */
.pub-section {
max-width: 1100px;
margin: 0 auto;
padding: 48px 24px;
}
.pub-section h2 {
font-size: 22px;
font-weight: 700;
color: var(--navy);
margin: 0 0 24px;
border-bottom: 2px solid var(--gold);
padding-bottom: 10px;
display: inline-block;
}
/* ── Card grid ── */
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 20px;
}
.rosary-card {
background: var(--white);
border-radius: var(--radius);
box-shadow: var(--shadow);
border: 1px solid var(--border);
overflow: hidden;
color: var(--text);
display: flex;
flex-direction: column;
}
.rosary-card-photo {
width: 100%;
height: 160px;
object-fit: cover;
display: block;
background: #e5e7eb;
}
.rosary-card-photo-placeholder {
width: 100%;
height: 160px;
background: linear-gradient(135deg, var(--navy) 0%, #2d5a8e 100%);
display: flex;
align-items: center;
justify-content: center;
font-size: 48px;
color: rgba(255,255,255,.5);
}
.rosary-card-body {
padding: 16px;
flex: 1;
}
.rosary-card-title {
font-size: 16px;
font-weight: 700;
margin: 0 0 4px;
color: var(--navy);
}
.rosary-card-meta {
font-size: 13px;
color: var(--muted);
margin: 0 0 8px;
}
.rosary-card-footer {
display: flex;
align-items: center;
justify-content: space-between;
border-top: 1px solid var(--border);
padding-top: 10px;
margin-top: 10px;
}
.rosary-card-by {
font-size: 12px;
color: var(--muted);
}
.rosary-card-link {
font-size: 13px;
font-weight: 600;
color: var(--navy);
text-decoration: none;
white-space: nowrap;
}
.rosary-card-link:hover {
color: var(--gold);
}
.badge-novena {
display: inline-block;
background: #ede9fe;
color: #5b21b6;
font-size: 11px;
font-weight: 700;
padding: 2px 8px;
border-radius: 99px;
text-transform: uppercase;
letter-spacing: .04em;
}
/* ── Profile header ── */
.profile-header {
background: var(--white);
border-bottom: 1px solid var(--border);
padding: 32px 24px;
}
.profile-header-inner {
max-width: 1100px;
margin: 0 auto;
display: flex;
align-items: center;
gap: 20px;
}
.profile-avatar {
width: 72px;
height: 72px;
border-radius: 50%;
background: var(--navy);
color: #fff;
font-size: 28px;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
text-transform: uppercase;
}
.profile-info h1 {
font-size: 24px;
font-weight: 800;
margin: 0 0 2px;
color: var(--navy);
}
.profile-info p {
font-size: 14px;
color: var(--muted);
margin: 0;
}
/* ── Empty state ── */
.pub-empty {
text-align: center;
padding: 56px 24px;
color: var(--muted);
}
.pub-empty .cross {
font-size: 48px;
display: block;
margin-bottom: 12px;
opacity: .3;
}
.pub-empty p {
font-size: 16px;
margin: 0;
}
/* ── Donate strip ── */
.donate-strip {
text-align: center;
padding: 28px 24px 32px;
background: var(--white);
border-top: 1px solid var(--border);
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
}
.donate-strip-text {
font-size: 14px;
font-weight: 500;
letter-spacing: .03em;
color: var(--muted);
text-transform: uppercase;
font-size: 11px;
}
.donate-strip-link {
display: inline-flex;
align-items: center;
gap: 7px;
font-size: 15px;
font-weight: 700;
letter-spacing: .01em;
color: #fff;
text-decoration: none;
background: linear-gradient(135deg, var(--navy) 0%, #2d5a8e 100%);
padding: 11px 28px;
border-radius: 99px;
box-shadow: 0 2px 10px rgba(30,58,95,.25);
transition: transform .15s, box-shadow .15s, background .15s;
}
.donate-strip-link:hover {
background: linear-gradient(135deg, #c9973d 0%, #b8872e 100%);
box-shadow: 0 4px 16px rgba(201,151,61,.35);
transform: translateY(-1px);
}
/* ── Footer ── */
.pub-footer {
text-align: center;
padding: 24px;
font-size: 13px;
color: var(--muted);
border-top: 1px solid var(--border);
margin-top: 48px;
}
/* ── Novena hero (day-picker page) ── */
.novena-hero {
background: linear-gradient(135deg, var(--navy) 0%, #2d5a8e 100%);
color: #fff;
padding: 48px 24px;
display: flex;
align-items: center;
gap: 40px;
justify-content: center;
flex-wrap: wrap;
}
.novena-hero-photo-wrap {
flex-shrink: 0;
}
.novena-hero-photo {
width: 160px;
height: 160px;
object-fit: cover;
border-radius: 50%;
border: 3px solid rgba(255,255,255,.25);
display: block;
mask-image: radial-gradient(ellipse 90% 90% at center, black 60%, transparent 100%);
-webkit-mask-image: radial-gradient(ellipse 90% 90% at center, black 60%, transparent 100%);
}
.novena-hero-cross {
font-size: 72px;
color: rgba(255,255,255,.3);
line-height: 1;
}
.novena-hero-text {
text-align: center;
}
.novena-hero-label {
font-size: 12px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .12em;
color: var(--gold);
margin: 0 0 8px;
}
.novena-hero-title {
font-size: clamp(24px, 4vw, 40px);
font-weight: 800;
margin: 0 0 8px;
letter-spacing: -.01em;
}
.novena-hero-subject {
font-size: 18px;
margin: 0 0 4px;
color: rgba(255,255,255,.9);
}
.novena-hero-dates {
font-size: 14px;
color: rgba(255,255,255,.6);
margin: 0 0 12px;
}
.novena-hero-by {
font-size: 13px;
color: rgba(255,255,255,.5);
margin: 0;
}
/* ── Novena day grid ── */
.novena-days-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 16px;
}
.novena-day-card {
background: var(--white);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 20px 18px;
box-shadow: var(--shadow);
display: flex;
flex-direction: column;
gap: 6px;
}
.novena-day-missing {
background: #f9fafb;
opacity: .55;
}
.novena-day-number {
font-size: 13px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .08em;
color: var(--navy);
}
.novena-day-mysteries {
font-size: 13px;
color: var(--muted);
flex: 1;
}
.novena-day-link {
display: inline-block;
margin-top: 12px;
font-size: 14px;
font-weight: 700;
color: var(--navy);
text-decoration: none;
border-top: 1px solid var(--border);
padding-top: 10px;
}
.novena-day-link:hover {
color: var(--gold);
}
/* ── Search bar ── */
.search-wrap {
max-width: 1100px;
margin: 0 auto;
padding: 28px 24px 0;
display: flex;
flex-direction: column;
gap: 10px;
}
.home-search-row {
display: flex;
align-items: center;
gap: 10px;
background: var(--white);
border: 1px solid var(--border);
border-radius: 40px;
padding: 0 18px;
box-shadow: var(--shadow);
transition: border-color .15s, box-shadow .15s;
}
.home-search-row:focus-within {
border-color: var(--navy);
box-shadow: 0 0 0 3px rgba(30,58,95,.1);
}
.home-search-icon {
color: var(--muted);
font-size: 15px;
flex-shrink: 0;
pointer-events: none;
}
.home-search-input {
flex: 1;
border: none;
outline: none;
background: transparent;
font-size: 15px;
font-family: inherit;
color: var(--text);
padding: 13px 0;
min-width: 0;
}
.home-search-input::placeholder { color: var(--muted); }
.home-search-clear {
background: none;
border: none;
cursor: pointer;
color: var(--muted);
font-size: 16px;
padding: 4px 6px;
border-radius: 4px;
display: none;
line-height: 1;
transition: color .15s;
}
.home-search-clear:hover { color: var(--text); }
.home-search-clear.visible { display: block; }
/* User profile links that appear when search matches a user */
.search-user-results {
display: flex;
flex-wrap: wrap;
gap: 8px;
padding: 0 4px;
}
.search-user-pill {
display: inline-flex;
align-items: center;
gap: 6px;
background: var(--white);
border: 1px solid var(--border);
border-radius: 99px;
padding: 5px 14px;
font-size: 13px;
font-weight: 600;
color: var(--navy);
text-decoration: none;
box-shadow: var(--shadow);
transition: background .15s, border-color .15s;
}
.search-user-pill:hover {
background: var(--navy);
color: #fff;
border-color: var(--navy);
}
/* No-results message */
.search-no-results {
display: none;
text-align: center;
padding: 40px 24px;
color: var(--muted);
font-size: 15px;
}
/* ── Pinned / Featured section ── */
.pinned-section {
background: linear-gradient(180deg, #fefdf6 0%, var(--bg) 100%);
border-bottom: 1px solid #e8dfc0;
}
.pinned-section .pub-section {
padding-bottom: 32px;
}
.pinned-section .pub-section h2 {
color: #8a6820;
border-bottom-color: var(--gold);
}
/* Gold top-border on pinned cards */
.rosary-card.is-pinned {
border-top: 3px solid var(--gold);
}
/* Pin/unpin toggle button — floats top-right of card, admin-only */
.rosary-card {
position: relative; /* anchor for .pin-btn */
}
.pin-btn {
position: absolute;
top: 8px;
right: 8px;
background: rgba(255,255,255,.88);
border: 1px solid var(--border);
border-radius: 6px;
padding: 3px 7px;
font-size: 13px;
cursor: pointer;
line-height: 1;
color: var(--muted);
transition: background .15s, color .15s, border-color .15s;
z-index: 2;
}
.pin-btn:hover {
background: var(--gold);
border-color: var(--gold);
color: #fff;
}
.pin-btn.is-pinned {
color: #8a6820;
border-color: var(--gold);
background: #fff9e6;
}
/* Badge for Divine Mercy Novena */
.badge-divine-mercy {
display: inline-block;
background: #fce7e7;
color: #9b1c1c;
font-size: 11px;
font-weight: 700;
padding: 2px 8px;
border-radius: 99px;
text-transform: uppercase;
letter-spacing: .04em;
}
/* ── Responsive ── */
@media (max-width: 600px) {
.pub-nav { padding: 0 16px; }
.pub-hero { padding: 40px 16px; }
.pub-section { padding: 32px 16px; }
.card-grid { grid-template-columns: 1fr; }
.search-wrap { padding: 20px 16px 0; }
}