- upstream sinmb79/blog-writer v3.2.1 코드 베이스 적용 - config_resolver, CLI, writer_bot, shorts pipeline 등 신규 기능 포함 - load_dotenv Windows 경로 → Docker 호환 load_dotenv() 변경 (25개 파일) - runtime_guard.py Docker 환경 bypass 추가 - config/blogs.json: eli-ai 블로그 정체성 (8개 카테고리) - config/sources.json: 38개 RSS 소스 유지 - config/engine.json: writing provider → gemini (2.5-flash) - config/safety_keywords.json: 모든 글 수동 승인 (score 101) - bots/scheduler.py: 시스템 프롬프트 eli 블로그 기준으로 업데이트 - bots/publisher_bot.py: .env refresh token OAuth 폴백 로직 추가 - requirements.txt: google-generativeai, groq 활성화 - Dockerfile + docker-compose.yml: NAS Docker 배포 설정 - CLAUDE.md: 프로젝트 메타데이터 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
173 lines
5.0 KiB
CSS
173 lines
5.0 KiB
CSS
/* ── eli blog 커스텀 CSS ── */
|
|
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700&display=swap');
|
|
|
|
:root {
|
|
--ai: #7C3AED;
|
|
--travel: #EA580C;
|
|
--startup: #2563EB;
|
|
--review: #0891B2;
|
|
--tips: #16A34A;
|
|
--app: #DB2777;
|
|
--finance: #CA8A04;
|
|
--fact: #DC2626;
|
|
}
|
|
|
|
body, .body-fauxcolumn-outer {
|
|
font-family: 'Noto Sans KR', sans-serif !important;
|
|
background: #F4F6F9 !important;
|
|
}
|
|
|
|
/* 헤더 */
|
|
.header-bar, .header-outer, #header {
|
|
background: #fff !important;
|
|
border-bottom: 1px solid #E5E7EB !important;
|
|
box-shadow: 0 2px 8px rgba(0,0,0,.06) !important;
|
|
}
|
|
.header-inner h1, .header-inner h1 a,
|
|
.Header h1, .Header h1 a {
|
|
font-family: 'Noto Sans KR', sans-serif !important;
|
|
font-size: 22px !important;
|
|
font-weight: 700 !important;
|
|
color: #1A1A1A !important;
|
|
}
|
|
|
|
/* 포스트 카드 */
|
|
.post-outer, .post {
|
|
background: #fff !important;
|
|
border-radius: 12px !important;
|
|
box-shadow: 0 2px 8px rgba(0,0,0,.07) !important;
|
|
margin-bottom: 24px !important;
|
|
overflow: hidden !important;
|
|
transition: transform .2s, box-shadow .2s !important;
|
|
}
|
|
.post-outer:hover, .post:hover {
|
|
transform: translateY(-3px) !important;
|
|
box-shadow: 0 8px 24px rgba(0,0,0,.12) !important;
|
|
}
|
|
|
|
/* 포스트 제목 */
|
|
.post-title a, h3.post-title a {
|
|
font-size: 18px !important;
|
|
font-weight: 700 !important;
|
|
color: #1A1A1A !important;
|
|
line-height: 1.45 !important;
|
|
}
|
|
.post-title a:hover { color: var(--ai) !important; }
|
|
|
|
/* 포스트 본문 */
|
|
.post-body {
|
|
font-size: 16px !important;
|
|
line-height: 1.85 !important;
|
|
color: #374151 !important;
|
|
}
|
|
.post-body h2 { font-size: 20px !important; margin: 28px 0 12px !important; font-weight: 700 !important; }
|
|
.post-body h3 { font-size: 17px !important; margin: 20px 0 10px !important; font-weight: 700 !important; }
|
|
.post-body p { margin-bottom: 14px !important; }
|
|
.post-body ul, .post-body ol { margin: 12px 0 12px 22px !important; }
|
|
.post-body blockquote {
|
|
border-left: 4px solid var(--ai) !important;
|
|
background: #f5f3ff !important;
|
|
padding: 12px 18px !important;
|
|
border-radius: 0 8px 8px 0 !important;
|
|
margin: 16px 0 !important;
|
|
color: #4B5563 !important;
|
|
}
|
|
.post-body a { color: var(--ai) !important; }
|
|
.post-body code {
|
|
background: #f3f0ff !important;
|
|
color: var(--ai) !important;
|
|
padding: 2px 6px !important;
|
|
border-radius: 4px !important;
|
|
font-size: 14px !important;
|
|
}
|
|
.post-body pre {
|
|
background: #1e1e2e !important;
|
|
color: #cdd6f4 !important;
|
|
padding: 20px !important;
|
|
border-radius: 8px !important;
|
|
overflow-x: auto !important;
|
|
}
|
|
.post-body img {
|
|
border-radius: 8px !important;
|
|
max-width: 100% !important;
|
|
}
|
|
.post-body table { width: 100% !important; border-collapse: collapse !important; }
|
|
.post-body th, .post-body td {
|
|
padding: 10px 14px !important;
|
|
border: 1px solid #E5E7EB !important;
|
|
font-size: 14px !important;
|
|
}
|
|
.post-body th { background: #f9fafb !important; font-weight: 700 !important; }
|
|
|
|
/* 라벨(카테고리) 배지 */
|
|
.label-size-1, .label-size-2, .label-size-3,
|
|
.label-size-4, .label-size-5,
|
|
.post-labels a, .widget.Label li a {
|
|
display: inline-block !important;
|
|
padding: 3px 10px !important;
|
|
border-radius: 20px !important;
|
|
font-size: 11px !important;
|
|
font-weight: 700 !important;
|
|
color: #fff !important;
|
|
background: var(--ai) !important;
|
|
text-decoration: none !important;
|
|
margin-right: 4px !important;
|
|
}
|
|
|
|
/* 메타 정보 */
|
|
.post-footer, .post-header { color: #6B7280 !important; font-size: 12px !important; }
|
|
|
|
/* 사이드바 */
|
|
.sidebar-outer, .sidebar .widget {
|
|
background: #fff !important;
|
|
border-radius: 12px !important;
|
|
box-shadow: 0 2px 8px rgba(0,0,0,.07) !important;
|
|
margin-bottom: 20px !important;
|
|
overflow: hidden !important;
|
|
}
|
|
.widget-title, h2.title {
|
|
font-size: 14px !important;
|
|
font-weight: 700 !important;
|
|
padding: 16px 20px 12px !important;
|
|
margin: 0 !important;
|
|
border-bottom: 2px solid var(--ai) !important;
|
|
color: #1A1A1A !important;
|
|
}
|
|
.sidebar .widget ul { list-style: none !important; padding: 0 !important; margin: 0 !important; }
|
|
.sidebar .widget ul li { border-bottom: 1px solid #F3F4F6 !important; }
|
|
.sidebar .widget ul li a {
|
|
display: block !important;
|
|
padding: 10px 20px !important;
|
|
font-size: 13px !important;
|
|
color: #374151 !important;
|
|
}
|
|
.sidebar .widget ul li a:hover { color: var(--ai) !important; background: #faf5ff !important; }
|
|
|
|
/* 페이지네이션 */
|
|
.blog-pager, #blog-pager {
|
|
display: flex !important;
|
|
justify-content: center !important;
|
|
gap: 12px !important;
|
|
margin: 32px 0 !important;
|
|
}
|
|
.blog-pager a, #blog-pager a {
|
|
padding: 8px 20px !important;
|
|
background: #fff !important;
|
|
border-radius: 8px !important;
|
|
font-size: 13px !important;
|
|
font-weight: 600 !important;
|
|
color: #374151 !important;
|
|
box-shadow: 0 2px 6px rgba(0,0,0,.08) !important;
|
|
transition: all .2s !important;
|
|
}
|
|
.blog-pager a:hover, #blog-pager a:hover {
|
|
background: var(--ai) !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
/* 반응형 */
|
|
@media (max-width: 640px) {
|
|
.post-title a { font-size: 16px !important; }
|
|
.post-body { font-size: 15px !important; }
|
|
}
|