Add episode transcripts, expand chatbot Q&A database to 28 entries, and build scripts

This commit is contained in:
nmemmert
2026-04-13 10:29:06 -04:00
parent 6e8b360398
commit 063f5d2a0e
31 changed files with 2779 additions and 134 deletions
+778 -1
View File
@@ -511,6 +511,92 @@
}
/* ── Contact ── */
.section-chatbot-feature {
padding: 5rem 0;
background:
radial-gradient(circle at top left, rgba(200, 134, 10, 0.14), transparent 38%),
linear-gradient(180deg, rgba(22, 18, 10, 0.96), rgba(11, 11, 11, 0.98));
border-top: 1px solid rgba(200, 134, 10, 0.18);
border-bottom: 1px solid rgba(200, 134, 10, 0.18);
}
.chatbot-feature-inner {
display: grid;
grid-template-columns: minmax(0, 1.15fr) minmax(300px, 0.85fr);
gap: 2rem;
align-items: stretch;
}
.chatbot-feature-copy,
.chatbot-feature-card {
background: rgba(18, 18, 18, 0.84);
border: 1px solid rgba(200, 134, 10, 0.2);
border-radius: 18px;
padding: 1.7rem;
box-shadow: 0 18px 48px rgba(0, 0, 0, 0.28);
}
.chatbot-feature-copy .section-heading {
text-align: left;
margin-bottom: 1rem;
}
.chatbot-feature-lead,
.chatbot-feature-sub,
.chatbot-feature-kicker {
font-family: 'Barlow Condensed', sans-serif;
margin: 0;
color: #d9c9a0;
}
.chatbot-feature-lead {
font-size: clamp(1.2rem, 2vw, 1.55rem);
line-height: 1.45;
color: #f0e6d0;
text-wrap: balance;
}
.chatbot-feature-sub {
margin-top: 0.85rem;
font-size: 1.02rem;
line-height: 1.65;
color: #ab9568;
}
.chatbot-feature-actions {
margin-top: 1.35rem;
display: flex;
flex-wrap: wrap;
gap: 0.85rem;
}
.chatbot-feature-card {
display: flex;
flex-direction: column;
justify-content: center;
}
.chatbot-feature-kicker {
font-size: 0.82rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: #c8860a;
margin-bottom: 1rem;
}
.chatbot-feature-prompts {
display: flex;
flex-wrap: wrap;
gap: 0.65rem;
}
.chatbot-prompt-btn--feature {
font-size: 0.86rem;
padding: 0.55rem 0.9rem;
text-align: left;
color: #efd8a1;
}
.section-contact {
background: #090909;
border-top: 1px solid rgba(200, 134, 10, 0.18);
@@ -1083,11 +1169,21 @@
.admin-top-tabs {
display: flex;
gap: 0.65rem;
flex-wrap: wrap;
gap: 0.65rem;
margin-bottom: 1.1rem;
}
.admin-top-tabs .admin-tab {
flex: 1 1 180px;
min-width: 180px;
max-width: 100%;
text-align: center;
white-space: normal;
line-height: 1.2;
overflow-wrap: anywhere;
}
.admin-stats {
background: #0d0d0d;
border: 1px solid rgba(200, 134, 10, 0.22);
@@ -1679,6 +1775,19 @@
text-align: center;
}
.chatbot-feature-inner {
grid-template-columns: 1fr;
}
.chatbot-feature-copy .section-heading {
text-align: center;
}
.chatbot-feature-actions,
.chatbot-feature-prompts {
justify-content: center;
}
.contact-copy .section-heading {
text-align: center;
}
@@ -1703,6 +1812,7 @@
.section-series,
.section-guide,
.section-qr,
.section-chatbot-feature,
.section-contact {
padding: 3.5rem 0;
}
@@ -1722,4 +1832,671 @@
.header-nav a:not(.header-cta) {
display: none;
}
.admin-top-tabs .admin-tab {
flex-basis: 100%;
min-width: 0;
}
}
/* ── Q&A Section ── */
.section-qa {
background: rgba(200, 134, 10, 0.05);
border-top: 1px solid rgba(200, 134, 10, 0.15);
}
.qa-search {
margin-bottom: 2.5rem;
display: flex;
gap: 1rem;
align-items: flex-end;
}
.qa-search label {
flex: 1;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.qa-search label span {
font-size: 0.95rem;
font-weight: 600;
color: #c8860a;
}
.qa-search input {
padding: 0.75rem 1rem;
background: rgba(30, 30, 30, 0.8);
border: 1px solid rgba(200, 134, 10, 0.3);
color: #f0e6d0;
font-family: 'Barlow', sans-serif;
border-radius: 0.375rem;
transition: border-color 0.2s ease;
}
.qa-search input:focus {
outline: none;
border-color: #c8860a;
}
.qa-cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 1.75rem;
}
/* ── 3D flip card ── */
.qa-card-scene {
perspective: 1000px;
height: 260px;
}
.qa-card-inner {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d;
transition: transform 0.6s cubic-bezier(0.45, 0, 0.55, 1);
cursor: pointer;
border-radius: 0.5rem;
}
.qa-card-inner.flipped {
transform: rotateY(180deg);
}
.qa-card-face {
position: absolute;
inset: 0;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
border-radius: 0.5rem;
padding: 1.75rem;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
gap: 0.75rem;
border: 1px solid rgba(200, 134, 10, 0.25);
transition: border-color 0.2s ease;
}
.qa-card-inner:hover .qa-card-face {
border-color: rgba(200, 134, 10, 0.55);
}
.qa-card-front {
background: rgba(35, 30, 20, 0.85);
}
.qa-card-back {
background: rgba(20, 30, 20, 0.92);
transform: rotateY(180deg);
overflow-y: auto;
}
.qa-face-label {
font-size: 2rem;
font-weight: 700;
color: #c8860a;
line-height: 1;
flex-shrink: 0;
}
.qa-question-text {
margin: 0;
font-size: 1rem;
line-height: 1.55;
color: #e8d8b0;
flex: 1;
}
.qa-answer-text {
margin: 0;
font-size: 0.95rem;
line-height: 1.6;
color: #c8d8b0;
flex: 1;
overflow-y: auto;
}
.qa-flip-hint {
font-size: 0.75rem;
color: #a89060;
margin-top: auto;
opacity: 0.75;
font-style: italic;
}
.qa-no-results {
text-align: center;
padding: 2rem;
color: #a89060;
}
.qa-pagination {
display: flex;
align-items: center;
justify-content: center;
gap: 1.25rem;
margin-top: 2rem;
}
.qa-page-btn {
background: none;
border: 1px solid rgba(200, 134, 10, 0.4);
color: #c8860a;
padding: 0.45rem 1.1rem;
border-radius: 0.35rem;
cursor: pointer;
font-size: 0.95rem;
transition: background 0.2s, border-color 0.2s, color 0.2s;
}
.qa-page-btn:hover:not(:disabled) {
background: rgba(200, 134, 10, 0.12);
border-color: #c8860a;
}
.qa-page-btn:disabled {
opacity: 0.3;
cursor: default;
}
.qa-page-info {
font-size: 0.9rem;
color: #a89060;
min-width: 4rem;
text-align: center;
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* ── Admin Q&A Styles ── */
.admin-questions {
padding: 2rem;
}
.admin-questions-list {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.admin-question-card {
background: rgba(50, 50, 50, 0.5);
border: 1px solid var(--border-color, #444);
border-radius: 0.375rem;
padding: 1.5rem;
transition: background 0.2s ease;
}
.admin-question-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 1rem;
margin-bottom: 1rem;
}
.admin-question-meta {
font-size: 0.85rem;
color: #999;
margin: 0 0 0.5rem 0;
}
.admin-question-text {
margin: 0;
line-height: 1.5;
color: #f0e6d0;
}
.admin-question-status {
display: flex;
gap: 0.5rem;
flex-wrap: wrap;
justify-content: flex-end;
}
.admin-badge {
display: inline-block;
font-size: 0.75rem;
font-weight: 600;
padding: 0.35rem 0.75rem;
border-radius: 0.25rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.admin-badge--pending {
background: rgba(255, 152, 0, 0.15);
color: #gf8c00;
}
.admin-badge--approved {
background: rgba(76, 175, 80, 0.15);
color: #4caf50;
}
.admin-badge--answered {
background: rgba(200, 134, 10, 0.15);
color: #c8860a;
}
.admin-question-answer {
background: rgba(30, 30, 30, 0.8);
padding: 1rem;
border-radius: 0.25rem;
margin-bottom: 1rem;
border-left: 3px solid #c8860a;
}
.admin-question-answer p {
margin: 0;
line-height: 1.6;
color: #e8d4c0;
}
.admin-question-editor {
margin-top: 1rem;
padding: 1rem;
background: rgba(30, 30, 30, 0.6);
border-radius: 0.25rem;
}
.admin-question-editor textarea {
width: 100%;
padding: 0.75rem;
background: rgba(10, 10, 10, 0.8);
border: 1px solid rgba(200, 134, 10, 0.3);
color: #f0e6d0;
font-family: 'Barlow', monospace;
border-radius: 0.25rem;
resize: vertical;
}
.admin-question-editor textarea:focus {
outline: none;
border-color: #c8860a;
}
.admin-question-editor-actions {
display: flex;
gap: 0.75rem;
margin-top: 1rem;
}
.admin-question-actions {
display: flex;
gap: 0.75rem;
flex-wrap: wrap;
}
.admin-question-actions button {
padding: 0.5rem 1rem;
font-size: 0.85rem;
border-radius: 0.25rem;
border: none;
cursor: pointer;
transition: all 0.2s ease;
}
/* ══════════════════════════════════════════════════════════
FLOATING CHATBOT
══════════════════════════════════════════════════════════ */
/* Bubble trigger */
.chatbot-bubble {
position: fixed;
bottom: 1.5rem;
right: 1.5rem;
z-index: 1000;
width: 3.5rem;
height: 3.5rem;
border-radius: 50%;
background: #c8860a;
color: #fff;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 18px rgba(0, 0, 0, 0.45);
transition: background 0.2s, transform 0.2s;
}
.chatbot-bubble:hover {
background: #e8a91a;
transform: scale(1.08);
}
.chatbot-bubble--open {
background: #555;
}
/* Panel */
.chatbot-panel {
position: fixed;
bottom: 5.5rem;
right: 1.5rem;
z-index: 999;
width: min(360px, calc(100vw - 2rem));
max-height: min(520px, calc(100vh - 8rem));
display: flex;
flex-direction: column;
background: #1a1a1a;
border: 1px solid rgba(200, 134, 10, 0.35);
border-radius: 0.75rem;
box-shadow: 0 8px 40px rgba(0, 0, 0, 0.6);
overflow: hidden;
animation: chatSlideUp 0.22s ease;
}
@keyframes chatSlideUp {
from { opacity: 0; transform: translateY(12px); }
to { opacity: 1; transform: translateY(0); }
}
/* Header */
.chatbot-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.85rem 1rem;
background: rgba(200, 134, 10, 0.12);
border-bottom: 1px solid rgba(200, 134, 10, 0.25);
font-size: 0.9rem;
font-weight: 600;
color: #e8c87a;
}
.chatbot-close {
background: none;
border: none;
color: #a89060;
font-size: 1rem;
cursor: pointer;
line-height: 1;
padding: 0 0.25rem;
transition: color 0.15s;
}
.chatbot-close:hover { color: #e8c87a; }
/* Message list */
.chatbot-messages {
flex: 1;
overflow-y: auto;
padding: 0.75rem 1rem;
display: flex;
flex-direction: column;
gap: 0.6rem;
}
.chatbot-msg {
max-width: 85%;
padding: 0.6rem 0.85rem;
border-radius: 0.65rem;
font-size: 0.88rem;
line-height: 1.5;
}
.chatbot-msg p {
margin: 0;
}
.chatbot-msg p + p {
margin-top: 0.4rem;
}
.chatbot-msg--bot {
background: rgba(200, 134, 10, 0.12);
border: 1px solid rgba(200, 134, 10, 0.2);
color: #e8d8b0;
align-self: flex-start;
border-bottom-left-radius: 0.15rem;
}
.chatbot-msg--user {
background: rgba(80, 80, 80, 0.45);
color: #ddd;
align-self: flex-end;
border-bottom-right-radius: 0.15rem;
}
/* Typing dots */
.chatbot-msg--typing {
display: flex;
gap: 0.3rem;
align-items: center;
padding: 0.75rem 1rem;
}
.chatbot-msg--typing span {
width: 7px;
height: 7px;
border-radius: 50%;
background: #c8860a;
animation: typingDot 1.2s infinite;
}
.chatbot-msg--typing span:nth-child(2) { animation-delay: 0.2s; }
.chatbot-msg--typing span:nth-child(3) { animation-delay: 0.4s; }
@keyframes typingDot {
0%, 80%, 100% { opacity: 0.2; transform: scale(0.85); }
40% { opacity: 1; transform: scale(1.1); }
}
/* Suggested prompts */
.chatbot-prompts {
padding: 0 0.75rem 0.5rem;
display: flex;
flex-wrap: wrap;
gap: 0.4rem;
}
.chatbot-prompt-btn {
background: rgba(200, 134, 10, 0.1);
border: 1px solid rgba(200, 134, 10, 0.3);
color: #c8860a;
border-radius: 1rem;
padding: 0.3rem 0.75rem;
font-size: 0.78rem;
cursor: pointer;
transition: background 0.15s, border-color 0.15s;
}
.chatbot-prompt-btn:hover {
background: rgba(200, 134, 10, 0.22);
border-color: #c8860a;
}
/* Input row */
.chatbot-form {
display: flex;
align-items: center;
border-top: 1px solid rgba(200, 134, 10, 0.2);
padding: 0.6rem 0.75rem;
gap: 0.5rem;
}
.chatbot-input {
flex: 1;
background: rgba(255, 255, 255, 0.06);
border: 1px solid rgba(200, 134, 10, 0.25);
border-radius: 0.4rem;
color: #e8d8b0;
padding: 0.45rem 0.75rem;
font-size: 0.88rem;
outline: none;
transition: border-color 0.2s;
}
.chatbot-input::placeholder { color: #7a6a50; }
.chatbot-input:focus { border-color: #c8860a; }
.chatbot-send {
background: #c8860a;
border: none;
border-radius: 0.4rem;
color: #fff;
width: 2.2rem;
height: 2.2rem;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
flex-shrink: 0;
transition: background 0.15s;
}
.chatbot-send:hover:not(:disabled) { background: #e8a91a; }
.chatbot-send:disabled { opacity: 0.35; cursor: default; }
/* ══════════════════════════════════════════════════════════
ADMIN — CHATBOT TAB
══════════════════════════════════════════════════════════ */
.admin-chatbot {
padding: 2rem;
}
.admin-chatbot-actions {
margin: 1.25rem 0;
}
.btn-admin-primary {
background: #c8860a;
color: #fff;
border: none;
border-radius: 0.35rem;
padding: 0.55rem 1.25rem;
font-size: 0.9rem;
cursor: pointer;
transition: background 0.2s;
}
.btn-admin-primary:hover:not(:disabled) { background: #e8a91a; }
.btn-admin-primary:disabled { opacity: 0.4; cursor: default; }
.admin-chatbot-editor {
background: rgba(50, 50, 50, 0.5);
border: 1px solid rgba(200, 134, 10, 0.25);
border-radius: 0.5rem;
padding: 1.5rem;
margin-bottom: 1.5rem;
display: flex;
flex-direction: column;
gap: 1rem;
}
.admin-chatbot-editor h3 {
margin: 0 0 0.5rem;
color: #c8860a;
font-size: 1rem;
}
.admin-chatbot-editor label {
display: flex;
flex-direction: column;
gap: 0.35rem;
font-size: 0.88rem;
color: #b0a080;
}
.admin-chatbot-editor input,
.admin-chatbot-editor select,
.admin-chatbot-editor textarea {
background: rgba(255,255,255,0.06);
border: 1px solid rgba(200, 134, 10, 0.3);
border-radius: 0.35rem;
color: #e8d8b0;
padding: 0.5rem 0.75rem;
font-size: 0.9rem;
outline: none;
transition: border-color 0.2s;
font-family: inherit;
}
.admin-chatbot-editor input:focus,
.admin-chatbot-editor select:focus,
.admin-chatbot-editor textarea:focus {
border-color: #c8860a;
}
.admin-chatbot-editor textarea {
resize: vertical;
min-height: 100px;
}
.admin-field-hint {
font-size: 0.78rem;
color: #7a6a50;
}
.admin-chatbot-editor-btns {
display: flex;
gap: 0.75rem;
flex-wrap: wrap;
}
.admin-chatbot-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.admin-chatbot-card {
background: rgba(50, 50, 50, 0.45);
border: 1px solid rgba(200, 134, 10, 0.18);
border-radius: 0.45rem;
padding: 1rem 1.25rem;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.admin-chatbot-card-head {
display: flex;
align-items: center;
gap: 0.65rem;
flex-wrap: wrap;
}
.admin-chatbot-title {
font-size: 0.95rem;
color: #e8d8b0;
font-weight: 500;
}
.admin-badge--topic { background: rgba(30,100,180,0.3); color: #88aaff; border: 1px solid rgba(100,160,255,0.3); }
.admin-badge--episode { background: rgba(100,60,180,0.3); color: #cc99ff; border: 1px solid rgba(160,100,255,0.3); }
.admin-chatbot-preview {
font-size: 0.85rem;
color: #9a8a6a;
margin: 0;
line-height: 1.5;
}
.admin-chatbot-keywords {
font-size: 0.78rem;
color: #7a6a50;
margin: 0;
}
.admin-empty-msg {
color: #7a6a50;
font-style: italic;
padding: 1rem 0;
}