Files
blog-writer/assets/blogger-custom.css
JOUNGWOOK KWON 3e2405dff9 feat: upstream v3.2.1 기반으로 업그레이드 + eli 블로그 커스터마이징
- 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>
2026-03-30 09:21:14 +09:00

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; }
}