﻿:root {
--glass-bg: rgba(255,255,255,0.82);
--glass-border: rgba(255,255,255,0.6);
--sidebar-bg: rgba(248,248,249,0.85);
--accent: #007AFF;
--accent-hover: #0056b3;
--text-primary: #1d1d1f;
--text-secondary: #6e6e73;
--danger: #FF3B30;
--success: #34C759;
--warning: #FF9500;
--purple: #AF52DE;
--card-shadow: 0 8px 30px rgba(0,0,0,0.04);
--safe-area-bottom: env(safe-area-inset-bottom);
}
* { box-sizing: border-box; }
body {
font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, sans-serif;
background: linear-gradient(135deg, #0f0c29, #302b63, #24243e);
height: 100vh; height: 100dvh; overflow: hidden;
display: flex; align-items: center; justify-content: center;
margin: 0; color: var(--text-primary); -webkit-font-smoothing: antialiased;
}
.macos-window {
width: calc(100vw - 40px); height: calc(100vh - 40px); max-width: 1440px;
background: var(--glass-bg); backdrop-filter: blur(50px) saturate(200%);
-webkit-backdrop-filter: blur(50px) saturate(200%); border-radius: 24px;
box-shadow: 0 40px 100px -20px rgba(0,0,0,0.35), 0 0 0 1px var(--glass-border);
display: flex; overflow: hidden; position: relative;
}
.sidebar {
width: 240px; background: var(--sidebar-bg); border-right: 1px solid rgba(0,0,0,0.08);
display: flex; flex-direction: column; padding: 24px 0; flex-shrink: 0; z-index: 20;
}
.window-controls { padding: 0; display: flex; gap: 8px; }
.control-dot { width: 12px; height: 12px; border-radius: 50%; cursor: default; }
.nav-item {
display: flex; align-items: center; gap: 12px; padding: 10px 18px; margin: 2px 12px;
border-radius: 10px; cursor: pointer; transition: all 0.2s; color: var(--text-secondary);
font-weight: 500; font-size: 13px; user-select: none;
}
.nav-item:hover:not(.disabled) { background: rgba(0,0,0,0.05); color: var(--text-primary); }
.nav-item.active { background: var(--accent); color: white !important; box-shadow: 0 6px 16px rgba(0,122,255,0.25); }
.nav-item.disabled { opacity: 0.3; cursor: not-allowed; pointer-events: none; }
.nav-item .nav-icon { font-size: 16px; width: 22px; text-align: center; }
.main-content { flex: 1; padding: 40px; overflow-y: auto; position: relative; background: rgba(255,255,255,0.2); scroll-behavior: smooth; }
/* ─── Button System ─── */
.btn { display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 18px;border-radius:10px;font-weight:600;font-size:13px;border:none;cursor:pointer;transition:all 0.2s cubic-bezier(0.25,0.46,0.45,0.94);white-space:nowrap;letter-spacing:0.01em;font-family:inherit;position:relative;overflow:hidden; }
.btn:disabled { opacity:0.4;cursor:not-allowed;transform:none !important;box-shadow:none !important; }
.btn .ms { font-size:16px; }
.btn-primary { background:var(--accent);color:white; }
.btn-primary:hover:not(:disabled) { background:var(--accent-hover);transform:translateY(-1px);box-shadow:0 6px 16px rgba(0,122,255,0.25); }
.btn-ghost { background:rgba(0,0,0,0.04);color:var(--text-primary);border:1px solid rgba(0,0,0,0.08); }
.btn-ghost:hover:not(:disabled) { background:rgba(0,0,0,0.08);border-color:rgba(0,0,0,0.15); }
.btn-danger { background:var(--danger);color:white; }
.btn-danger:hover:not(:disabled) { background:#E0342D;transform:translateY(-1px);box-shadow:0 6px 16px rgba(255,59,48,0.25); }
.btn-accent2 { background:var(--purple);color:white; }
.btn-accent2:hover:not(:disabled) { background:#9B3DC7;transform:translateY(-1px);box-shadow:0 6px 16px rgba(175,82,222,0.25); }
.btn-sm { padding:6px 14px;font-size:12px;border-radius:8px; }
.btn-sm .ms { font-size:14px; }
.btn-xs { padding:4px 10px;font-size:11px;border-radius:6px; }
.btn-lg { padding:12px 24px;font-size:14px; }
.btn-icon { padding:6px;width:32px;height:32px;border-radius:8px; }
.btn-icon .ms { font-size:17px; }
/* Legacy aliases */
.macos-btn { background:var(--accent);color:white;padding:9px 18px;border-radius:10px;font-weight:600;font-size:13px;transition:all 0.2s;border:none;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;font-family:inherit; }
.macos-btn:disabled { opacity:0.4;cursor:not-allowed; }
.macos-btn:hover:not(:disabled) { background:var(--accent-hover);transform:translateY(-1px);box-shadow:0 6px 16px rgba(0,122,255,0.25); }
.macos-btn-secondary { background:rgba(0,0,0,0.04);color:var(--text-primary);padding:9px 18px;border-radius:10px;font-weight:500;font-size:13px;transition:all 0.2s;border:1px solid rgba(0,0,0,0.08);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;font-family:inherit; }
.macos-btn-secondary:hover { background:rgba(0,0,0,0.08);border-color:rgba(0,0,0,0.15); }
.macos-btn-secondary:disabled { opacity:0.4;cursor:not-allowed; }
.macos-btn-danger { background:var(--danger);color:white; }
.macos-btn-danger:hover:not(:disabled) { background:#E0342D; }
.macos-btn-purple { background:var(--purple);color:white;padding:9px 18px;border-radius:10px;font-weight:600;font-size:13px;transition:all 0.2s;border:none;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;font-family:inherit; }
.macos-btn-purple:hover:not(:disabled) { background:#9B3DC7;box-shadow:0 6px 16px rgba(175,82,222,0.25); }
.macos-input, .macos-select, .macos-textarea {
width: 100%; background: rgba(255,255,255,0.9); border: 1px solid rgba(0,0,0,0.08);
border-radius: 10px; padding: 10px 14px; font-size: 14px; transition: all 0.2s;
outline: none; color: var(--text-primary); font-family: inherit;
}
.macos-input:focus, .macos-select:focus, .macos-textarea:focus { border-color: var(--accent); background: #fff; box-shadow: 0 0 0 3px rgba(0,122,255,0.1); }
.macos-textarea { resize: vertical; min-height: 70px; line-height: 1.7; }
.input-group label { display: block; font-size: 11px; font-weight: 700; color: var(--text-secondary); margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.06em; }
.project-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; }
.project-card {
background: rgba(255,255,255,0.9); padding: 24px; border-radius: 16px;
border: 1px solid rgba(0,0,0,0.04); box-shadow: var(--card-shadow); cursor: pointer;
transition: all 0.3s cubic-bezier(0.16,1,0.3,1); position: relative;
}
.project-card:hover { transform: translateY(-4px); box-shadow: 0 16px 40px rgba(0,0,0,0.1); border-color: var(--accent); }
.project-card .card-meta { display: flex; gap: 6px; margin-top: 10px; flex-wrap: wrap; }
.project-card .card-tag { font-size: 10px; font-weight: 600; padding: 2px 8px; border-radius: 20px; background: rgba(0,122,255,0.08); color: var(--accent); }
.tier-toggle-container { display: flex; background: rgba(0,0,0,0.05); padding: 3px; border-radius: 8px; margin: 8px 12px; }
.tier-btn { flex: 1; padding: 5px; font-size: 10px; font-weight: 800; border-radius: 6px; text-align: center; cursor: pointer; transition: all 0.2s; }
.tier-btn.active { background: white; box-shadow: 0 2px 6px rgba(0,0,0,0.1); color: var(--accent); }
.tier-btn.pro-active { background: linear-gradient(135deg,#FF3B30,#FF9500); color: white !important; box-shadow: 0 3px 12px rgba(255,59,48,0.4); transform: scale(1.03); }
.ch-nav-item { padding: 8px 10px; border-radius: 8px; cursor: pointer; font-size: 11px; transition: all 0.2s; display: flex; align-items: center; gap: 6px; }
.ch-nav-item:hover { background: rgba(0,122,255,0.05); }
.ch-nav-item.active { background: var(--accent); color: white; }
.ch-nav-item .status-dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
.ch-nav-item .status-dot.done { background: var(--success); }
.ch-nav-item .status-dot.pending { background: rgba(0,0,0,0.12); }
.ch-nav-item .status-dot.writing { background: var(--warning); animation: pulse 1.5s infinite; }
@keyframes pulse { 0%,100% { opacity:1; } 50% { opacity:0.4; } }

/* Feature Cards */
.feature-pill { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; border-radius: 20px; font-size: 11px; font-weight: 600; cursor: pointer; transition: all 0.2s; border: 1px solid rgba(0,0,0,0.06); background: white; }
.feature-pill:hover { border-color: var(--accent); color: var(--accent); }
.feature-pill.active { background: var(--accent); color: white; border-color: var(--accent); }
.style-card { padding: 14px; border-radius: 12px; border: 2px solid transparent; cursor: pointer; transition: all 0.25s; background: rgba(255,255,255,0.8); }
.style-card:hover { border-color: rgba(0,122,255,0.3); transform: translateY(-2px); }
.style-card.selected { border-color: var(--accent); background: rgba(0,122,255,0.04); box-shadow: 0 4px 16px rgba(0,122,255,0.15); }
.mood-tag { display: inline-block; padding: 3px 10px; border-radius: 20px; font-size: 11px; font-weight: 500; cursor: pointer; transition: all 0.2s; border: 1px solid rgba(0,0,0,0.08); margin: 3px; }
.mood-tag:hover { border-color: var(--accent); }
.mood-tag.active { background: var(--accent); color: white; border-color: var(--accent); }
.ch-mood-pill { display:inline-block; padding:1px 7px; border-radius:10px; font-size:9px; font-weight:600; background:rgba(175,82,222,0.1); color:var(--purple); border:1px solid rgba(175,82,222,0.2); cursor:pointer; transition:all 0.15s; }
.ch-mood-pill:hover { background:rgba(255,59,48,0.12); color:#FF3B30; border-color:rgba(255,59,48,0.3); text-decoration:line-through; }
.ch-mood-add-btn { background:none; border:1px dashed rgba(175,82,222,0.3); border-radius:8px; cursor:pointer; padding:1px 5px; color:var(--purple); opacity:0.5; transition:all 0.15s; flex-shrink:0; }
.ch-mood-add-btn:hover { opacity:1; background:rgba(175,82,222,0.06); }
.thread-item { padding: 12px; border-radius: 10px; background: rgba(255,255,255,0.7); border: 1px solid rgba(0,0,0,0.06); transition: all 0.2s; }
.thread-item:hover { border-color: rgba(0,122,255,0.2); }

/* Preview Mode */
.preview-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: #faf8f5; z-index: 3000; overflow-y: auto; display: none; }
.preview-overlay.active { display: block; }
.preview-content { max-width: 680px; margin: 0 auto; padding: 80px 40px; font-family: 'Noto Serif TC', 'LXGW WenKai TC', serif; font-size: 18px; line-height: 2; color: #2c2c2c; letter-spacing: 0.03em; }
.preview-content h1 { font-size: 28px; font-weight: 900; text-align: center; margin-bottom: 48px; letter-spacing: 0.1em; }
.preview-close { position: fixed; top: 24px; right: 24px; z-index: 3001; background: rgba(0,0,0,0.06); border: none; border-radius: 50%; width: 44px; height: 44px; cursor: pointer; font-size: 20px; transition: all 0.2s; }
.preview-close:hover { background: rgba(0,0,0,0.12); }

/* Editor */
#novel-content-editor { font-family: 'Noto Serif TC', 'LXGW WenKai TC', serif; font-size: 17px; line-height: 2; letter-spacing: 0.02em; }

/* Mobile */
@media (max-width: 768px) {
body { background: #f2f2f7; }
.macos-window { width: 100%; height: 100dvh; border-radius: 0; flex-direction: column; box-shadow: none; }
.sidebar { width: 100% !important; height: auto !important; flex-direction: row !important; padding: 6px 8px calc(6px + var(--safe-area-bottom)) !important; position: fixed !important; bottom: 0 !important; left: 0 !important; background: rgba(255,255,255,0.92) !important; backdrop-filter: blur(25px) !important; border-top: 1px solid rgba(0,0,0,0.08) !important; border-right: none !important; justify-content: space-around !important; order: 2; z-index: 100; }
.sidebar-header, .sidebar-footer-info, .tier-toggle-container, .nav-divider { display: none !important; }
nav { display: flex !important; flex-direction: row !important; width: 100% !important; justify-content: space-around !important; }
.nav-item { flex-direction: column !important; gap: 2px !important; margin: 0 !important; padding: 6px 2px !important; font-size: 9px !important; flex: 1 !important; text-align: center !important; }
.nav-item .nav-icon { font-size: 18px; }
.nav-item.nav-tools-item { background:rgba(175,82,222,0.06) !important;border-radius:10px; }
.nav-item.nav-tools-item.active { background:var(--purple) !important; }
.main-content { padding: 20px 16px 110px !important; order: 1; display: flex; flex-direction: column; overflow: hidden; height: 100%; }
.main-content:has(#step-writing.active) { padding: 10px 10px calc(56px + env(safe-area-inset-bottom)) !important; }
.step-content { width: 100%; display: none; overflow-y: auto; height: 100%; padding-bottom: 16px; }
.step-content.active { display: block; }
.step-content#step-writing { padding-bottom: 0; overflow: hidden; }
.step-content#step-writing.active { display: flex; flex-direction: column; }
}

/* Modals */
.modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); backdrop-filter: blur(10px); z-index: 1000; display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: all 0.3s cubic-bezier(0.16,1,0.3,1); }
.modal-overlay.active { opacity: 1; pointer-events: auto; }
#confirm-modal { z-index: 1010; }
.modal-box { background: rgba(255,255,255,0.97); width: 92%; max-width: 560px; border-radius: 24px; box-shadow: 0 40px 100px rgba(0,0,0,0.35); transform: scale(0.92) translateY(20px); transition: all 0.3s cubic-bezier(0.16,1,0.3,1); overflow: hidden; max-height: 85vh; display: flex; flex-direction: column; }
.modal-overlay.active .modal-box { transform: scale(1) translateY(0); }
.modal-box-wide { max-width: 720px; }

/* Loading */
.loading-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(255,255,255,0.85); backdrop-filter: blur(20px); z-index: 2100; display: flex; flex-direction: column; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity 0.3s; }
.loading-overlay.active { opacity: 1; pointer-events: auto; }
.spinner { width: 48px; height: 48px; border: 4px solid rgba(0,122,255,0.1); border-top-color: var(--accent); border-radius: 50%; animation: spin 0.8s infinite cubic-bezier(0.5,0.1,0.4,0.9); }
@keyframes spin { to { transform: rotate(360deg); } }

.step-content { display: none; animation: slideUp 0.4s cubic-bezier(0.16,1,0.3,1); }
.step-content.active { display: block; }
#step-outline.active { display: flex !important; flex-direction: column; }
#step-settings.active { display: block; }
@keyframes slideUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } }

input[type=range] { -webkit-appearance: none; width: 100%; background: transparent; }
input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 5px; background: rgba(0,0,0,0.1); border-radius: 3px; }
input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; height: 18px; width: 18px; border-radius: 50%; background: var(--accent); cursor: pointer; margin-top: -7px; box-shadow: 0 2px 6px rgba(0,0,0,0.2); }


.ms { font-family:'Material Symbols Rounded';font-weight:normal;font-style:normal;font-size:18px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 1,'wght' 500,'GRAD' 0,'opsz' 20; }
.modal-header-bar { display:flex;justify-content:space-between;align-items:center;padding:20px 24px 12px;flex-shrink:0; }
.modal-close-btn { width:32px;height:32px;border-radius:50%;background:rgba(0,0,0,0.05);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all 0.15s;flex-shrink:0; }
.modal-close-btn:hover { background:rgba(0,0,0,0.1); }
.modal-close-btn .ms { font-size:18px;color:var(--text-secondary); }
.editor-toolbar { display:flex;align-items:center;justify-content:space-between;padding:6px 12px;border-bottom:1px solid rgba(0,0,0,0.06);background:rgba(250,250,252,0.8);flex-shrink:0;gap:4px;flex-wrap:nowrap;overflow-x:auto; }
.etb-group { display:flex;align-items:center;gap:2px;padding:2px;background:rgba(0,0,0,0.03);border-radius:8px; }
.etb-btn { display:inline-flex;align-items:center;gap:4px;padding:5px 10px;border-radius:6px;font-size:11px;font-weight:600;color:var(--text-secondary);background:transparent;border:none;cursor:pointer;transition:all 0.15s;white-space:nowrap; }
.etb-btn:hover { background:rgba(0,0,0,0.06);color:var(--text-primary); }
.etb-btn .ms { font-size:15px; }
.etb-btn-primary { color:var(--accent); }
.etb-btn-primary:hover { background:rgba(0,122,255,0.08); }
.etb-sep { width:1px;height:20px;background:rgba(0,0,0,0.08);margin:0 4px;flex-shrink:0; }
.etb-stat { padding:3px 10px;border-radius:6px;font-size:10px;font-weight:700;color:var(--text-secondary);background:rgba(0,0,0,0.04);white-space:nowrap; }
.tool-card { background:rgba(255,255,255,0.9);padding:20px;border-radius:14px;border:1px solid rgba(0,0,0,0.04);box-shadow:var(--card-shadow);cursor:pointer;transition:all 0.3s cubic-bezier(0.16,1,0.3,1);position:relative; }
.tool-card:hover { transform:translateY(-3px);box-shadow:0 12px 32px rgba(0,0,0,0.08);border-color:var(--accent); }
.tool-card .tool-icon { width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;margin-bottom:10px; }
.tool-card .tool-stage { position:absolute;top:12px;right:12px;font-size:9px;font-weight:700;padding:2px 8px;border-radius:10px;letter-spacing:0.03em; }
.nav-item.nav-tools-item { background:rgba(175,82,222,0.04); }
.nav-item.nav-tools-item.active { background:var(--purple);box-shadow:0 6px 16px rgba(175,82,222,0.25); }
.char-card { padding:10px 12px;border-radius:10px;border:1px solid rgba(0,0,0,0.06);background:rgba(255,255,255,0.8);position:relative;margin-bottom:6px;cursor:pointer;transition:all 0.2s; }
.char-card:hover { border-color:rgba(0,122,255,0.2);box-shadow:0 2px 8px rgba(0,0,0,0.04); }
.char-card .char-name { font-weight:700;font-size:13px; }
.char-card .char-role { font-size:10px;padding:1px 6px;border-radius:8px;font-weight:600; }
.char-card .char-detail { font-size:10px;color:#888;margin-top:4px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden; }
.char-card-add { padding:10px 12px;border-radius:10px;border:2px dashed rgba(0,0,0,0.08);text-align:center;cursor:pointer;transition:all 0.2s;color:#bbb;font-size:12px; }
.char-card-add:hover { border-color:var(--accent);color:var(--accent); }
.char-card-list { min-height:20px; }
/* ═══ Character Card AI Chat Button ═══ */
.char-card-chat-btn { display:flex;align-items:center;justify-content:center;gap:5px;margin-top:8px;padding:6px 0;border-radius:8px;border:none;cursor:pointer;font-size:12px;font-weight:700;width:100%;background:linear-gradient(135deg,var(--purple),#7C3AED);color:white;transition:all 0.3s;position:relative;overflow:hidden;box-shadow:0 2px 8px rgba(175,82,222,0.25); }
.char-card-chat-btn:hover { transform:translateY(-1px);box-shadow:0 4px 16px rgba(175,82,222,0.4); }
.char-card-chat-btn:active { transform:translateY(0);box-shadow:0 2px 6px rgba(175,82,222,0.3); }
.char-card-chat-btn .ms { font-size:16px; }
.char-card-chat-btn::after { content:'';position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(45deg,transparent 40%,rgba(255,255,255,0.15) 50%,transparent 60%);animation:char-btn-shimmer 3s infinite; }
@keyframes char-btn-shimmer { 0%{transform:translateX(-100%);}100%{transform:translateX(100%);} }
/* ═══ AI Error Ticker ═══ */
.error-ticker-box { position:fixed;bottom:20px;right:20px;z-index:100000;display:flex;flex-direction:column;gap:8px;pointer-events:none;max-width:380px; }
.error-ticker { display:flex;align-items:center;gap:8px;background:rgba(40,40,40,0.95);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);color:white;padding:10px 14px;border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,0.25);cursor:pointer;pointer-events:auto;transform:translateX(110%);opacity:0;transition:all 0.4s cubic-bezier(0.22,1,0.36,1);border-left:3px solid var(--danger);max-width:380px; }
.error-ticker.show { transform:translateX(0);opacity:1; }
.error-ticker .ticker-icon { flex-shrink:0;width:28px;height:28px;border-radius:8px;background:rgba(255,59,48,0.15);display:flex;align-items:center;justify-content:center; }
.error-ticker .ticker-icon .ms { font-size:16px;color:var(--danger); }
.error-ticker .ticker-body { flex:1;min-width:0; }
.error-ticker .ticker-title { font-size:10px;font-weight:700;color:rgba(255,255,255,0.5);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:2px; }
.error-ticker .ticker-msg { font-size:12px;color:rgba(255,255,255,0.9);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4; }
.error-ticker .ticker-hint { font-size:9px;color:rgba(255,255,255,0.35);margin-top:2px; }
.error-ticker .ticker-close { flex-shrink:0;width:20px;height:20px;border-radius:6px;background:rgba(255,255,255,0.08);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background 0.2s; }
.error-ticker .ticker-close:hover { background:rgba(255,255,255,0.2); }
.error-ticker .ticker-close .ms { font-size:12px;color:rgba(255,255,255,0.5); }
.nav-divider { height: 1px; background: rgba(0,0,0,0.06); margin: 6px 20px; }

/* ═══ Pipeline Button ═══ */
.pipeline-start-btn { display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px;border:none;border-radius:10px;background:linear-gradient(135deg,#FF9500,#FF6B00);color:white;font-size:14px;font-weight:800;cursor:pointer;transition:all 0.3s;position:relative;overflow:hidden;box-shadow:0 4px 16px rgba(255,107,0,0.3);letter-spacing:0.03em; }
.pipeline-start-btn:hover { transform:translateY(-1px);box-shadow:0 6px 24px rgba(255,107,0,0.45); }
.pipeline-start-btn:active { transform:translateY(0); }
.pipeline-start-btn::after { content:'';position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(45deg,transparent 40%,rgba(255,255,255,0.15) 50%,transparent 60%);animation:pipeline-shimmer 2.5s infinite; }
@keyframes pipeline-shimmer { 0%{transform:translateX(-100%);}100%{transform:translateX(100%);} }
.pipeline-topic-card { padding:12px 14px;border-radius:10px;border:2px solid rgba(0,0,0,0.06);background:white;cursor:pointer;transition:all 0.25s;position:relative; }
.pipeline-topic-card:hover { border-color:var(--accent);box-shadow:0 4px 16px rgba(0,122,255,0.1);transform:translateY(-1px); }
.pipeline-topic-card.selected { border-color:var(--accent);background:rgba(0,122,255,0.04);box-shadow:0 0 0 3px rgba(0,122,255,0.12); }
.pipeline-topic-card.selected::after { content:'✓';position:absolute;top:8px;right:10px;font-size:14px;font-weight:900;color:var(--accent); }

/* ═══ LLM Cost Badge ═══ */
.llm-cost-badge { display:inline-flex;align-items:center;font-size:9px;font-weight:700;color:#FF9500;background:rgba(255,149,0,0.1);padding:1px 5px;border-radius:4px;margin-left:3px;white-space:nowrap;transition:all 0.25s ease;letter-spacing:0.02em; }
.llm-cost-badge.badge-flash { color:#34C759;background:rgba(52,199,89,0.1); }
.llm-cost-badge.badge-pro { color:#FF9500;background:rgba(255,149,0,0.1); }
.llm-cost-badge.badge-premium { color:#FF3B30;background:rgba(255,59,48,0.1); }
.etb-btn .llm-cost-badge { font-size:8px;padding:0 4px;margin-left:2px; }
.btn-ghost .llm-cost-badge { font-size:8px; }
.tool-card .llm-cost-badge { font-size:10px;font-weight:600; }

/* ═══ Translation Tier Toggle ═══ */
.tr-tier-toggle { display:flex;background:rgba(0,0,0,0.06);border-radius:10px;padding:3px;position:relative;overflow:hidden; }
.tr-tier-btn { flex:1;text-align:center;padding:7px 16px;border-radius:8px;font-size:12px;font-weight:700;cursor:pointer;border:none;background:none;color:#888;transition:all 0.35s cubic-bezier(0.22,1,0.36,1);position:relative;z-index:1; }
.tr-tier-btn.active[data-tier="flash"] { color:#fff;text-shadow:0 1px 2px rgba(0,0,0,0.15); }
.tr-tier-btn.active[data-tier="pro"] { color:#fff;text-shadow:0 1px 2px rgba(0,0,0,0.15); }
.tr-tier-slider { position:absolute;top:3px;left:3px;width:calc(50% - 3px);height:calc(100% - 6px);border-radius:8px;transition:all 0.35s cubic-bezier(0.22,1,0.36,1);z-index:0; }
.tr-tier-slider.flash { background:linear-gradient(135deg,var(--accent),#5856D6);box-shadow:0 2px 10px rgba(0,122,255,0.35); }
.tr-tier-slider.pro { left:calc(50%);background:linear-gradient(135deg,#FF9500,#FF6B00);box-shadow:0 2px 10px rgba(255,107,0,0.35); }

/* ═══ Character AI Chat ═══ */
.char-chat-panel { display:flex;flex-direction:column;height:70vh;max-height:520px; }
.char-chat-messages { flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px;background:rgba(0,0,0,0.02);border-radius:10px;margin:0 0 12px; }
.char-chat-msg { display:flex;max-width:85%; }
.char-chat-msg.user { align-self:flex-end;flex-direction:row-reverse; }
.char-chat-msg.ai { align-self:flex-start; }
.char-chat-bubble { padding:10px 14px;border-radius:14px;font-size:13px;line-height:1.7;white-space:pre-wrap; }
.char-chat-msg.user .char-chat-bubble { background:var(--accent);color:white;border-bottom-right-radius:4px; }
.char-chat-msg.ai .char-chat-bubble { background:white;color:#333;border:1px solid rgba(0,0,0,0.06);border-bottom-left-radius:4px; }
.char-chat-msg .chat-sender { font-size:10px;font-weight:700;margin-bottom:3px;padding:0 4px; }
.char-chat-msg.user .chat-sender { color:rgba(255,255,255,0.7);text-align:right; }
.char-chat-msg.ai .chat-sender { color:var(--purple); }
.char-chat-input-bar { display:flex;gap:8px;align-items:center; }
.char-chat-input-bar input { flex:1;padding:10px 14px;border-radius:10px;border:1px solid rgba(0,0,0,0.08);font-size:13px;outline:none;transition:border 0.2s; }
.char-chat-input-bar input:focus { border-color:var(--accent); }
.char-chat-mode-toggle { display:flex;background:rgba(0,0,0,0.04);border-radius:8px;padding:3px;margin-bottom:10px; }
.char-chat-mode-btn { flex:1;text-align:center;padding:6px 12px;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;transition:all 0.2s;border:none;background:none;color:#888; }
.char-chat-mode-btn.active { background:white;color:var(--accent);box-shadow:0 1px 4px rgba(0,0,0,0.08); }
.char-chat-dual-select { display:flex;gap:8px;align-items:center;margin-bottom:10px;font-size:12px; }

/* ═══ Health Dashboard ═══ */
.health-tabs { display:flex;gap:4px;background:rgba(0,0,0,0.04);border-radius:8px;padding:3px;margin-bottom:14px;overflow-x:auto; }
.health-tab { padding:6px 12px;border-radius:6px;font-size:11px;font-weight:600;cursor:pointer;transition:all 0.2s;border:none;background:none;color:#888;white-space:nowrap; }
.health-tab.active { background:white;color:var(--accent);box-shadow:0 1px 4px rgba(0,0,0,0.08); }
.health-panel { display:none; }
.health-panel.active { display:block; }

/* ═══ Cloud Publish ═══ */
.publish-btn-glow { background:linear-gradient(135deg,#FF9500,#FF6B00);color:white;border:none;border-radius:8px;cursor:pointer;font-weight:700;font-size:11px;padding:6px 10px;box-shadow:0 4px 16px rgba(255,149,0,0.3);animation:publish-pulse 2s infinite;transition:transform 0.2s; }
.publish-btn-glow:hover { transform:scale(1.05); }
@keyframes publish-pulse { 0%,100%{box-shadow:0 4px 16px rgba(255,149,0,0.3);}50%{box-shadow:0 4px 24px rgba(255,149,0,0.5),0 0 0 4px rgba(255,149,0,0.1);} }
/* Vibrant info icon buttons */
.info-icon-vibrant { background:none;border:none;cursor:pointer;padding:0;margin-left:6px;display:inline-flex;align-items:center;justify-content:center;position:relative;width:26px;height:26px;border-radius:50%;transition:all 0.3s cubic-bezier(.4,0,.2,1); }
.info-icon-vibrant .ms { font-size:20px;position:relative;z-index:1;transition:transform 0.3s,text-shadow 0.3s; }
.info-icon-vibrant::before { content:'';position:absolute;inset:-2px;border-radius:50%;background:conic-gradient(from 0deg,#007AFF,#AF52DE,#FF375F,#FF9500,#34C759,#007AFF);opacity:0;transition:opacity 0.3s;animation:info-icon-spin 3s linear infinite; }
.info-icon-vibrant::after { content:'';position:absolute;inset:0;border-radius:50%;background:var(--bg-primary,#fff);z-index:0;transition:opacity 0.3s; }
.info-icon-vibrant:hover::before { opacity:0.7; }
.info-icon-vibrant:hover::after { opacity:0.9; }
.info-icon-vibrant:hover .ms { transform:scale(1.2);text-shadow:0 0 12px currentColor; }
.info-icon-vibrant.blue-variant .ms { color:#007AFF; }
.info-icon-vibrant.blue-variant { animation:info-glow-blue 2.5s ease-in-out infinite; }
.info-icon-vibrant.orange-variant .ms { color:#FF9500; }
.info-icon-vibrant.orange-variant { animation:info-glow-orange 2.5s ease-in-out infinite; }
@keyframes info-icon-spin { 0%{transform:rotate(0deg);}100%{transform:rotate(360deg);} }
@keyframes info-glow-blue { 0%,100%{box-shadow:0 0 4px rgba(0,122,255,0.2),0 0 8px rgba(0,122,255,0.1);}50%{box-shadow:0 0 8px rgba(0,122,255,0.4),0 0 16px rgba(0,122,255,0.2),0 0 24px rgba(175,82,222,0.1);} }
@keyframes info-glow-orange { 0%,100%{box-shadow:0 0 4px rgba(255,149,0,0.2),0 0 8px rgba(255,149,0,0.1);}50%{box-shadow:0 0 8px rgba(255,149,0,0.4),0 0 16px rgba(255,149,0,0.2),0 0 24px rgba(255,59,48,0.1);} }
.info-icon-vibrant.green-variant .ms { color:#34C759; }
.info-icon-vibrant.green-variant { animation:info-glow-green 2.5s ease-in-out infinite; }
@keyframes info-glow-green { 0%,100%{box-shadow:0 0 4px rgba(52,199,89,0.2),0 0 8px rgba(52,199,89,0.1);}50%{box-shadow:0 0 8px rgba(52,199,89,0.4),0 0 16px rgba(52,199,89,0.2),0 0 24px rgba(0,122,255,0.1);} }
.publish-share-btns { display:flex;gap:8px;margin-top:10px;flex-wrap:wrap; }
.publish-share-btns a { padding:6px 14px;border-radius:8px;font-size:12px;font-weight:600;text-decoration:none;color:white;display:inline-flex;align-items:center;gap:4px;transition:opacity 0.2s; }
.publish-share-btns a:hover { opacity:0.85; }

/* ═══ Feature 4: Chapter Drag-and-Drop ═══ */
.ch-drag-over { border-top:3px solid var(--accent) !important; margin-top:-3px; }
[draggable="true"] { cursor:grab; }
[draggable="true"]:active { cursor:grabbing; }

/* ═══ Feature 7: Dark Mode ═══ */
[data-theme="dark"] {
    --glass-bg: rgba(30,30,32,0.95);
    --glass-border: rgba(60,60,65,0.6);
    --sidebar-bg: rgba(28,28,30,0.92);
    --accent: #0A84FF;
    --accent-hover: #409CFF;
    --text-primary: #f5f5f7;
    --text-secondary: #98989d;
    --danger: #FF453A;
    --success: #30D158;
    --warning: #FF9F0A;
    --purple: #BF5AF2;
    --card-shadow: 0 8px 30px rgba(0,0,0,0.25);
}
[data-theme="dark"] body { background: linear-gradient(135deg, #0a0a0f, #1a1a2e, #16162a); }
[data-theme="dark"] .macos-window { background: var(--glass-bg); box-shadow: 0 40px 100px -20px rgba(0,0,0,0.6), 0 0 0 1px var(--glass-border); }
[data-theme="dark"] .sidebar { background: var(--sidebar-bg); border-right-color: rgba(60,60,65,0.4); }
[data-theme="dark"] .nav-item { color: var(--text-secondary); }
[data-theme="dark"] .nav-item:hover, [data-theme="dark"] .nav-item.active { background: rgba(255,255,255,0.08); color: var(--text-primary); }
[data-theme="dark"] .modal-box { background: rgba(44,44,46,0.98); }
[data-theme="dark"] .modal-header-bar { border-bottom-color: rgba(255,255,255,0.08); }
[data-theme="dark"] .macos-input, [data-theme="dark"] .macos-textarea, [data-theme="dark"] .macos-select {
    background: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.1); color: var(--text-primary);
}
[data-theme="dark"] .macos-input:focus, [data-theme="dark"] .macos-textarea:focus { border-color: var(--accent); }
[data-theme="dark"] .macos-btn-secondary { background: rgba(255,255,255,0.08); color: var(--text-primary); border-color: rgba(255,255,255,0.12); }
[data-theme="dark"] .macos-btn-secondary:hover { background: rgba(255,255,255,0.14); }
[data-theme="dark"] .project-card { background: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.08); }
[data-theme="dark"] .project-card:hover { background: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.15); }
[data-theme="dark"] .style-card { background: rgba(255,255,255,0.05); border-color: rgba(255,255,255,0.08); }
[data-theme="dark"] .style-card.selected { background: rgba(0,122,255,0.15); }
[data-theme="dark"] .tool-card { background: rgba(255,255,255,0.05); border-color: rgba(255,255,255,0.08); }
[data-theme="dark"] .tool-card:hover { background: rgba(255,255,255,0.1); }
[data-theme="dark"] .editor-toolbar { background: rgba(40,40,44,0.95); border-bottom-color: rgba(255,255,255,0.06); }
[data-theme="dark"] .etb-btn { color: var(--text-secondary); }
[data-theme="dark"] .etb-btn:hover { background: rgba(255,255,255,0.1); color: var(--text-primary); }
[data-theme="dark"] #novel-content-editor { color: #e5e5e7; }
[data-theme="dark"] .ch-nav-item { color: var(--text-secondary); }
[data-theme="dark"] .ch-nav-item.active { background: rgba(0,122,255,0.15); color: var(--text-primary); }
[data-theme="dark"] .bg-white { background: rgba(255,255,255,0.05) !important; }
[data-theme="dark"] .border-gray-100 { border-color: rgba(255,255,255,0.08) !important; }
[data-theme="dark"] .text-gray-800 { color: #e5e5e7 !important; }
[data-theme="dark"] .mood-tag { background: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.12); color: var(--text-secondary); }
[data-theme="dark"] .mood-tag.active { background: var(--accent); color: white; }
[data-theme="dark"] .char-card { background: rgba(255,255,255,0.05); border-color: rgba(255,255,255,0.08); }
[data-theme="dark"] .loading-overlay { background: rgba(0,0,0,0.6); }
[data-theme="dark"] .loading-overlay .spinner { border-color: rgba(255,255,255,0.1); border-top-color: var(--accent); }
[data-theme="dark"] #loading-text { color: #e5e5e7; }
[data-theme="dark"] #loading-sub { color: #888; }
[data-theme="dark"] .card-tag { background: rgba(255,255,255,0.06); color: var(--text-secondary); }