Help
RSS
API
Feed
Maltego
Contact
Domain > bossgpt.com
×
Welcome!
Right click nodes and scroll the mouse to navigate the graph.
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-03-08
104.21.39.63
(
ClassC
)
2026-02-26
172.67.169.183
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Thu, 26 Feb 2026 13:30:28 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: keep-aliveServer: cloudflareLast-Modified: Sat, 03 Jan 2026 22:35:19 GMTNel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}vary: accept-encodingCache-Control: no-cacheReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?sA%2FwEjpDwTNDIHS3HY%2FN%2BqQXPae%2FzFPN50mZKXZzZhkx%2Fe%2BPwU8BdOevDIcKOVyYPUzN3j2g%2FLvTQhI03dSVsfAw2ZUuZAWhUW%2BqO}}cf-cache-status: DYNAMICCF-RAY: 9d3fcc145ae8a096-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langen>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>bossgpt.com/title> link hrefhttps://fonts.googleapis.com/css2?familyFraunces:ital,wght@0,400;0,700;1,400&familyDM+Sans:wght@400;500;600;700&displayswap relstylesheet> style> * { margin: 0; padding: 0; box-sizing: border-box; } :root { --cream: #faf8f3; --dark: #1c1c1c; --accent: #2563eb; --accent-light: #dbeafe; --warm: #f59e0b; --green: #10b981; --green-light: #d1fae5; --red: #ef4444; --red-light: #fee2e2; --purple: #8b5cf6; --purple-light: #ede9fe; } body { background: var(--cream); color: var(--dark); font-family: DM Sans, sans-serif; line-height: 1.6; } /* Navigation */ nav { display: flex; justify-content: space-between; align-items: center; padding: 1.5rem 4rem; position: sticky; top: 0; background: var(--cream); z-index: 100; border-bottom: 1px solid rgba(0,0,0,0.05); } .logo { font-family: Fraunces, serif; font-size: 1.6rem; font-weight: 700; } .nav-links { display: flex; gap: 2rem; align-items: center; } .nav-links a { color: var(--dark); text-decoration: none; font-size: 0.95rem; font-weight: 500; opacity: 0.7; transition: opacity 0.3s; } .nav-links a:hover { opacity: 1; } .nav-cta { background: var(--dark); color: var(--cream) !important; padding: 0.75rem 1.5rem; border-radius: 8px; opacity: 1 !important; text-decoration: none; font-weight: 600; display: inline-flex; align-items: center; gap: 0.5rem; transition: transform 0.2s ease, background 0.2s ease; } .nav-cta:hover { background: #333; transform: translateY(-2px); } /* Hero Section */ .hero { padding: 4rem 4rem 6rem; } .hero-top { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 2rem; } .hero-badge { display: inline-flex; align-items: center; gap: 0.5rem; background: var(--accent-light); color: var(--accent); padding: 0.6rem 1.2rem; border-radius: 50px; font-size: 0.85rem; font-weight: 600; } .hero-meta { text-align: right; font-size: 0.85rem; color: #888; } .hero-content { text-align: center; max-width: 700px; margin: 0 auto 3rem; } .hero-content h1 { font-family: Fraunces, serif; font-size: 4rem; font-weight: 400; line-height: 1.15; margin-bottom: 1.5rem; } .hero-content h1 em { font-style: italic; color: var(--accent); } .hero-content p { font-size: 1.2rem; color: #666; margin-bottom: 2rem; line-height: 1.8; } .btn { padding: 1rem 2rem; font-family: DM Sans, sans-serif; font-size: 1rem; font-weight: 600; border-radius: 8px; cursor: pointer; transition: all 0.3s; text-decoration: none; display: inline-flex; align-items: center; gap: 0.5rem; border: none; } .btn-primary { background: var(--dark); color: var(--cream); } .btn-primary:hover { background: #333; transform: translateY(-2px); } .btn-text { background: transparent; color: var(--dark); text-decoration: underline; text-underline-offset: 4px; } .cta-group { display: flex; gap: 1.5rem; align-items: center; justify-content: center; } /* Editor Card */ .editor-card { background: #fff; border-radius: 24px; box-shadow: 0 0 0 1px rgba(0,0,0,0.03), 0 20px 50px rgba(0,0,0,0.08); overflow: hidden; max-width: 950px; margin: 0 auto; } .editor-nav { background: var(--dark); padding: 1rem 1.5rem; display: flex; align-items: center; justify-content: space-between; } .editor-nav-left { display: flex; align-items: center; gap: 1rem; } .dots { display: flex; gap: 6px; } .dot { width: 10px; height: 10px; border-radius: 50%; } .dot.red { background: #ff5f57; } .dot.yellow { background: #febc2e; } .dot.green { background: #28c840; } .doc-title { color: rgba(255,255,255,0.7); font-size: 0.85rem; } /* AI Toolbar */ .ai-toolbar { background: #f8f8f8; border-bottom: 1px solid #eee; } .ai-row { padding: 0.75rem 1.5rem; display: flex; gap: 0.5rem; overflow-x: auto; align-items: center; border-bottom: 1px solid #eee; } .ai-row:last-child { border-bottom: none; } .ai-row-label { font-size: 0.7rem; font-weight: 600; color: #888; text-transform: uppercase; letter-spacing: 1px; margin-right: 0.5rem; white-space: nowrap; min-width: 70px; } .ai-chip { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.5rem 1rem; background: #fff; border: 1px solid #e5e5e5; border-radius: 20px; font-size: 0.8rem; font-weight: 500; cursor: pointer; transition: all 0.2s; white-space: nowrap; font-family: DM Sans, sans-serif; } .ai-chip:hover { border-color: var(--accent); background: var(--accent-light); color: var(--accent); transform: translateY(-1px); } .ai-chip.analyze { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); border-color: #f59e0b; } .ai-chip.analyze:hover { background: linear-gradient(135deg, #fde68a 0%, #fbbf24 100%); border-color: #d97706; color: #92400e; } /* EXIT POINTS - Danger meter on side */ .exit-point-indicator { position: absolute; left: -60px; top: 0; width: 50px; display: flex; flex-direction: column; align-items: center; gap: 4px; } .exit-meter { width: 8px; height: 40px; background: #e5e5e5; border-radius: 4px; overflow: hidden; position: relative; } .exit-meter-fill { position: absolute; bottom: 0; width: 100%; background: linear-gradient(to top, #22c55e, #eab308, #ef4444); border-radius: 4px; transition: height 0.5s ease; } .exit-percent { font-size: 0.65rem; font-weight: 700; color: #ef4444; } .exit-label { font-size: 0.5rem; color: #888; text-transform: uppercase; } .para-with-indicator { position: relative; margin-left: 60px !important; } /* PLOT HOLES - Question bubbles with lines */ .plot-hole-bubble { position: absolute; right: -180px; background: #8b5cf6; color: white; padding: 8px 12px; border-radius: 12px; font-size: 0.7rem; max-width: 160px; box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3); animation: bubblePop 0.3s ease; } .plot-hole-bubble::before { content: ; position: absolute; left: -30px; top: 50%; width: 30px; height: 2px; background: repeating-linear-gradient(90deg, #8b5cf6 0, #8b5cf6 4px, transparent 4px, transparent 8px); } .plot-hole-bubble .bubble-icon { font-size: 1rem; margin-right: 4px; } @keyframes bubblePop { 0% { transform: scale(0); opacity: 0; } 100% { transform: scale(1); opacity: 1; } } .plot-hole-highlight { background: #ede9fe; border: 2px dashed #8b5cf6; border-radius: 4px; padding: 0 4px; } /* SHOW DONT TELL - Transform cards */ .show-tell-card { display: inline-flex; align-items: center; gap: 8px; background: linear-gradient(135deg, #fff7ed, #ffedd5); border: 1px solid #f97316; border-radius: 8px; padding: 6px 10px; margin: 4px 0; font-size: 0.75rem; } .show-tell-original { color: #9a3412; text-decoration: line-through; opacity: 0.7; } .show-tell-arrow { color: #f97316; font-weight: bold; font-size: 1.1rem; } .show-tell-better { color: #16a34a; font-weight: 600; font-style: italic; } .show-tell-tag { background: #f97316; color: white; font-size: 0.55rem; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: 700; letter-spacing: 0.5px; } /* PACING - Timeline on left */ .pacing-timeline { position: absolute; left: -50px; top: 0; bottom: 0; width: 40px; display: flex; flex-direction: column; gap: 8px; } .pacing-segment { flex: 1; display: flex; align-items: center; justify-content: center; border-radius: 6px; font-size: 1.2rem; position: relative; transition: all 0.3s; } .pacing-segment.slow { background: linear-gradient(135deg, #cffafe, #a5f3fc); border: 2px solid #06b6d4; } .pacing-segment.medium { background: linear-gradient(135deg, #fef3c7, #fde68a); border: 2px solid #f59e0b; } .pacing-segment.fast { background: linear-gradient(135deg, #fee2e2, #fecaca); border: 2px solid #ef4444; } .pacing-label { position: absolute; left: 100%; margin-left: 8px; font-size: 0.6rem; color: #666; white-space: nowrap; opacity: 0; transition: opacity 0.2s; } .pacing-segment:hover .pacing-label { opacity: 1; } .editor-text.has-pacing { margin-left: 50px; } /* SENSES - Floating icons */ .senses-check { display: inline-flex; gap: 4px; margin-left: 8px; vertical-align: middle; } .sense-icon { width: 22px; height: 22px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; transition: all 0.2s; cursor: help; } .sense-icon.present { background: #dcfce7; border: 2px solid #22c55e; } .sense-icon.missing { background: #fee2e2; border: 2px solid #ef4444; animation: pulse 2s infinite; } .sense-icon.missing::after { content: !; position: absolute; top: -4px; right: -4px; width: 12px; height: 12px; background: #ef4444; color: white; border-radius: 50%; font-size: 0.5rem; font-weight: bold; display: flex; align-items: center; justify-content: center; } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } .senses-legend { display: flex; gap: 12px; padding: 8px 12px; background: #f8f8f8; border-radius: 8px; margin-bottom: 12px; font-size: 0.7rem; } .senses-legend span { display: flex; align-items: center; gap: 4px; } /* CLICHÉS - Stamp overlays */ .cliche-stamp { position: relative; display: inline-block; } .cliche-stamp::after { content: CLICHÉ; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotate(-12deg); background: rgba(234, 179, 8, 0.9); color: #713f12; font-size: 0.55rem; font-weight: 900; padding: 2px 8px; border: 2px solid #713f12; border-radius: 4px; letter-spacing: 1px; pointer-events: none; } .cliche-text { background: #fef9c3; padding: 0 4px; border-radius: 2px; text-decoration: wavy underline #eab308; } .cliche-freshness { display: inline-flex; align-items: center; gap: 4px; margin-left: 8px; font-size: 0.65rem; color: #92400e; } .freshness-bar { width: 50px; height: 6px; background: #e5e5e5; border-radius: 3px; overflow: hidden; } .freshness-fill { height: 100%; background: linear-gradient(90deg, #ef4444, #f59e0b); border-radius: 3px; } .cliche-suggestion { display: block; font-size: 0.7rem; color: #16a34a; margin-top: 4px; padding-left: 12px; border-left: 2px solid #22c55e; } /* WRITERS ROOM */ .writers-room { display: flex; align-items: center; gap: 1rem; padding: 0.75rem 1.5rem; background: linear-gradient(135deg, #1c1c1c 0%, #2d2d2d 100%); border-bottom: 1px solid #333; } .writers-label { font-size: 0.7rem; font-weight: 600; color: #888; text-transform: uppercase; letter-spacing: 1px; white-space: nowrap; } .writer-avatars { display: flex; gap: 0.5rem; } .writer-btn { display: flex; flex-direction: column; align-items: center; gap: 4px; background: none; border: none; cursor: pointer; padding: 6px; border-radius: 8px; transition: all 0.2s; } .writer-btn:hover { background: rgba(255,255,255,0.1); transform: translateY(-2px); } .writer-btn.active .writer-avatar { box-shadow: 0 0 0 3px #f59e0b; } .writer-avatar { width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.75rem; color: white; transition: all 0.2s; } .writer-avatar.hemingway { background: linear-gradient(135deg, #78350f, #a16207); } .writer-avatar.king { background: linear-gradient(135deg, #450a0a, #7f1d1d); } .writer-avatar.austen { background: linear-gradient(135deg, #831843, #be185d); } .writer-avatar.poe { background: linear-gradient(135deg, #1e1b4b, #3730a3); } .writer-avatar.twain { background: linear-gradient(135deg, #14532d, #166534); } .writer-name { font-size: 0.6rem; color: #aaa; font-family: DM Sans, sans-serif; } /* Writer Review Panel */ .writer-review-panel { position: absolute; top: 0; right: -320px; width: 300px; height: 100%; background: #faf8f3; border-left: 3px solid; padding: 1.5rem; overflow-y: auto; animation: slideIn 0.3s ease; box-shadow: -4px 0 20px rgba(0,0,0,0.1); } @keyframes slideIn { from { right: -320px; opacity: 0; } to { right: 0; opacity: 1; } } @keyframes slideOut { from { right: 0; opacity: 1; } to { right: -320px; opacity: 0; } } .writer-review-panel.hemingway { border-color: #a16207; } .writer-review-panel.king { border-color: #7f1d1d; } .writer-review-panel.austen { border-color: #be185d; } .writer-review-panel.poe { border-color: #3730a3; } .writer-review-panel.twain { border-color: #166534; } .review-header { display: flex; align-items: center; gap: 12px; margin-bottom: 1rem; padding-bottom: 1rem; border-bottom: 1px solid #e5e5e5; } .review-header .writer-avatar { width: 50px; height: 50px; font-size: 1rem; } .review-header-text h4 { font-family: Fraunces, serif; font-size: 1.1rem; margin-bottom: 2px; } .review-header-text span { font-size: 0.75rem; color: #666; } .review-quote { font-family: Fraunces, serif; font-style: italic; font-size: 0.95rem; line-height: 1.7; color: #333; margin-bottom: 1.5rem; padding: 1rem; background: white; border-radius: 8px; position: relative; } .review-quote::before { content: ; font-size: 3rem; position: absolute; top: -10px; left: 10px; color: #ddd; font-family: Georgia, serif; } .review-suggestions { font-size: 0.85rem; } .review-suggestions h5 { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 1px; color: #888; margin-bottom: 0.75rem; } .suggestion-item { display: flex; gap: 8px; margin-bottom: 0.75rem; padding: 0.5rem; background: white; border-radius: 6px; font-size: 0.8rem; } .suggestion-item .icon { font-size: 1rem; } .close-review { position: absolute; top: 1rem; right: 1rem; background: none; border: none; font-size: 1.2rem; cursor: pointer; color: #888; padding: 4px 8px; border-radius: 4px; } .close-review:hover { background: #eee; color: #333; } .editor-body.has-review { margin-right: 300px; transition: margin-right 0.3s; } .ai-chip.active { background: var(--accent); color: #fff; border-color: var(--accent); } .ai-chip.purple:hover { border-color: var(--purple); background: var(--purple-light); color: var(--purple); } .ai-chip.purple.active { background: var(--purple); border-color: var(--purple); } .ai-chip.green:hover { border-color: var(--green); background: var(--green-light); color: var(--green); } .ai-chip.green.active { background: var(--green); border-color: var(--green); } .ai-chip.warm:hover { border-color: var(--warm); background: #fef3c7; color: #b45309; } .ai-chip.warm.active { background: var(--warm); border-color: var(--warm); color: #fff; } /* Editor Body */ .editor-body { padding: 2rem 2.5rem; min-height: 400px; } .editor-chapter { font-size: 0.75rem; font-weight: 600; letter-spacing: 2px; text-transform: uppercase; color: #aaa; margin-bottom: 1rem; } .editor-title { font-family: Fraunces, serif; font-size: 1.8rem; margin-bottom: 1.5rem; } .editor-text { font-size: 1.05rem; line-height: 2; color: #333; } .editor-text p { margin-bottom: 1.2rem; } /* Inline Edit Styles */ .edit-wrapper { display: inline; position: relative; } .edit-deleted { background: var(--red-light); color: var(--red); text-decoration: line-through; padding: 2px 4px; border-radius: 3px; margin-right: 4px; } .edit-added { background: var(--green-light); color: #065f46; padding: 2px 4px; border-radius: 3px; position: relative; } .edit-actions { display: inline-flex; gap: 4px; margin-left: 6px; vertical-align: middle; } .edit-btn { width: 22px; height: 22px; border-radius: 50%; border: none; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; transition: all 0.2s; vertical-align: middle; } .edit-btn.accept { background: var(--green); color: #fff; } .edit-btn.accept:hover { background: #059669; transform: scale(1.1); } .edit-btn.reject { background: #e5e5e5; color: #666; } .edit-btn.reject:hover { background: var(--red); color: #fff; transform: scale(1.1); } /* AI Generated Block (for new content) */ .ai-new-block { background: var(--purple-light); border-left: 3px solid var(--purple); padding: 1rem 1.5rem; margin: 1.2rem 0; border-radius: 0 12px 12px 0; animation: slideIn 0.4s ease; } .ai-new-block.dialog { background: #fef3c7; border-left-color: var(--warm); } .ai-new-block.continue { background: var(--green-light); border-left-color: var(--green); } @keyframes slideIn { from { opacity: 0; transform: translateX(-10px); } to { opacity: 1; transform: translateX(0); } } .ai-new-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.75rem; } .ai-new-tag { background: var(--purple); color: #fff; padding: 3px 10px; border-radius: 4px; font-size: 0.7rem; font-weight: 600; } .ai-new-block.dialog .ai-new-tag { background: var(--warm); } .ai-new-block.continue .ai-new-tag { background: var(--green); } .ai-new-content { font-style: italic; color: #333; line-height: 1.8; } .ai-new-content .dialog-line { margin-bottom: 0.5rem; } /* Cursor */ .cursor { display: inline-block; width: 2px; height: 1.1em; background: var(--accent); animation: blink 1s infinite; vertical-align: text-bottom; margin-left: 2px; } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } /* Editor Status Bar */ .editor-status { padding: 0.75rem 1.5rem; background: #fafafa; border-top: 1px solid #eee; display: flex; justify-content: space-between; font-size: 0.8rem; color: #888; } .status-left { display: flex; gap: 1.5rem; } .status-ai { color: var(--accent); font-weight: 500; } /* Accept/Reject All Bar */ .bulk-actions { display: none; padding: 0.75rem 1.5rem; background: var(--accent-light); border-bottom: 1px solid #bfdbfe; justify-content: space-between; align-items: center; } .bulk-actions.visible { display: flex; } .bulk-actions span { font-size: 0.85rem; color: var(--accent); font-weight: 500; } .bulk-btns { display: flex; gap: 0.5rem; } .bulk-btn { padding: 0.4rem 1rem; border-radius: 6px; font-size: 0.8rem; font-weight: 500; cursor: pointer; border: none; font-family: DM Sans, sans-serif; } .bulk-btn.accept-all { background: var(--green); color: #fff; } .bulk-btn.reject-all { background: #fff; color: #666; border: 1px solid #ddd; } /* Typing indicator */ .typing-indicator { display: none; align-items: center; gap: 0.5rem; padding: 1rem; color: #888; font-size: 0.9rem; } .typing-indicator.visible { display: flex; } .typing-dots { display: flex; gap: 4px; } .typing-dots span { width: 8px; height: 8px; background: var(--accent); border-radius: 50%; animation: typingBounce 1.4s infinite ease-in-out; } .typing-dots span:nth-child(1) { animation-delay: 0s; } .typing-dots span:nth-child(2) { animation-delay: 0.2s; } .typing-dots span:nth-child(3) { animation-delay: 0.4s; } @keyframes typingBounce { 0%, 80%, 100% { transform: translateY(0); } 40% { transform: translateY(-6px); } } /* SVG ICON STYLES */ .suggestion-icon { width: 16px; height: 16px; color: var(--accent); flex-shrink: 0; } .pacing-indicator { display: flex; align-items: center; justify-content: center; } .pacing-indicator svg { width: 18px; height: 18px; } .pacing-bar.slow .pacing-indicator { color: #0891b2; } .pacing-bar.fast .pacing-indicator { color: #dc2626; } .pacing-bar.medium .pacing-indicator { color: #d97706; } .insight-icon-svg { width: 20px; height: 20px; color: var(--accent); flex-shrink: 0; } .list-icon { width: 14px; height: 14px; color: var(--accent); flex-shrink: 0; margin-right: 6px; } .marker-icon-svg { width: 16px; height: 16px; margin-right: 6px; } .reader-marker.pause .marker-icon-svg { color: #f59e0b; } .reader-marker.stop .marker-icon-svg { color: #ef4444; } .analytics-icon-svg { width: 18px; height: 18px; color: var(--purple); flex-shrink: 0; } .hotspot-icon { width: 12px; height: 12px; margin-right: 4px; vertical-align: middle; } .share-icon { width: 16px; height: 16px; margin-right: 6px; vertical-align: middle; } .btn-icon { width: 16px; height: 16px; margin-right: 6px; vertical-align: middle; } .collab-feature-icon-svg { width: 28px; height: 28px; color: var(--green); margin-bottom: 0.75rem; } .stat-icon-svg { width: 32px; height: 32px; color: #666; } .stat-icon-svg.flame { color: white; } .trend-arrow { width: 14px; height: 14px; color: #22c55e; vertical-align: middle; } .badge-icon-svg { width: 24px; height: 24px; margin-bottom: 6px; } .badge.earned .badge-icon-svg { color: #f59e0b; } .badge.locked .badge-icon-svg { color: #999; } .bento-icon-svg { width: 40px; height: 40px; color: var(--accent); margin-bottom: 1rem; } /* Logos Section */ .logos-section { padding: 3rem 4rem; border-top: 1px solid rgba(0,0,0,0.05); border-bottom: 1px solid rgba(0,0,0,0.05); } .logos-label { text-align: center; font-size: 0.8rem; font-weight: 500; letter-spacing: 2px; text-transform: uppercase; color: #aaa; margin-bottom: 2rem; } .logos-row { display: flex; justify-content: center; gap: 4rem; opacity: 0.4; } .logo-item { font-family: Fraunces, serif; font-size: 1.5rem; font-weight: 700; } /* Features Section */ .features { padding: 6rem 4rem; } .section-label { font-size: 0.8rem; font-weight: 600; letter-spacing: 2px; text-transform: uppercase; color: var(--accent); margin-bottom: 1rem; } .section-header { max-width: 600px; margin-bottom: 4rem; } .section-header h2 { font-family: Fraunces, serif; font-size: 3rem; font-weight: 400; margin-bottom: 1rem; } .section-header p { color: #666; font-size: 1.1rem; } .features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; } .feature-card { background: #fff; padding: 2rem; border-radius: 16px; border: 1px solid #eee; transition: all 0.3s; } .feature-card:hover { transform: translateY(-4px); box-shadow: 0 20px 40px rgba(0,0,0,0.06); border-color: var(--accent); } .feature-icon { width: 50px; height: 50px; background: var(--accent-light); border-radius: 12px; display: flex; align-items: center; justify-content: center; margin-bottom: 1.5rem; font-size: 1.4rem; } .feature-card h3 { font-size: 1.15rem; margin-bottom: 0.75rem; } .feature-card p { color: #666; font-size: 0.95rem; line-height: 1.7; } /* Writers Room Section */ .writers-room-section { padding: 6rem 4rem; background: linear-gradient(180deg, #1c1c1c 0%, #2d2d2d 100%); color: white; } .writers-room-section .section-label { color: #f59e0b; } .writers-room-section .section-header h2 { color: white; } .writers-room-section .section-header p { color: #aaa; } /* Writers Window Editor Styles */ .writers-window { margin-top: 3rem; max-width: 1000px; margin-left: auto; margin-right: auto; } .writers-window-body { display: grid; grid-template-columns: 280px 1fr; } .writers-sidebar { background: rgba(0,0,0,0.3); border-right: 1px solid rgba(255,255,255,0.08); padding: 20px; } .writers-sidebar .sidebar-header { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 1px; color: rgba(255,255,255,0.4); margin-bottom: 16px; font-weight: 600; } .writers-main { padding: 24px; background: rgba(0,0,0,0.15); } .writer-avatars-large { display: flex; flex-direction: column; gap: 0.75rem; } .writer-btn-large { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.25rem; background: rgba(255,255,255,0.05); border: 2px solid transparent; border-radius: 12px; cursor: pointer; transition: all 0.3s; text-align: left; } .writer-btn-large:hover { background: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.2); } .writer-btn-large.active { background: rgba(255,255,255,0.15); border-color: #f59e0b; } .writer-avatar-lg { width: 50px; height: 50px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.9rem; color: white; flex-shrink: 0; } .writer-avatar-lg.hemingway { background: linear-gradient(135deg, #78350f, #a16207); } .writer-avatar-lg.king { background: linear-gradient(135deg, #450a0a, #7f1d1d); } .writer-avatar-lg.austen { background: linear-gradient(135deg, #831843, #be185d); } .writer-avatar-lg.poe { background: linear-gradient(135deg, #1e1b4b, #3730a3); } .writer-avatar-lg.twain { background: linear-gradient(135deg, #14532d, #166534); } .writer-info { display: flex; flex-direction: column; } .writer-name-lg { color: white; font-weight: 600; font-size: 0.95rem; } .writer-style { color: #888; font-size: 0.75rem; } .demo-review-card { background: #faf8f3; border-radius: 16px; padding: 2rem; color: #1c1c1c; box-shadow: 0 20px 60px rgba(0,0,0,0.3); } .demo-review-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid #eee; } .demo-review-header h4 { font-family: Fraunces, serif; font-size: 1.2rem; margin: 0; } .demo-review-header span { font-size: 0.8rem; color: #666; } .demo-review-quote { font-family: Fraunces, serif; font-style: italic; font-size: 1.1rem; line-height: 1.8; color: #333; margin-bottom: 1.5rem; padding: 1.25rem; background: white; border-radius: 8px; border-left: 4px solid #f59e0b; } .demo-suggestions { display: flex; flex-direction: column; gap: 0.75rem; } .demo-suggestion { display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; background: white; border-radius: 8px; font-size: 0.9rem; } .demo-suggestion span { font-size: 1.1rem; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Pacing Analysis Section */ .pacing-section { padding: 6rem 4rem; background: linear-gradient(180deg, #faf8f3 0%, #f5f0e8 100%); } .pacing-demo { display: grid; grid-template-columns: 1.4fr 1fr; gap: 2rem; margin-top: 3rem; align-items: start; } .pacing-overview { max-width: 700px; margin: 3rem auto 0; } .pacing-main-card { background: white; border-radius: 20px; box-shadow: 0 10px 50px rgba(0,0,0,0.1); overflow: hidden; } .pacing-card-header { display: flex; justify-content: space-between; align-items: center; padding: 1.25rem 1.75rem; background: linear-gradient(135deg, #1e293b 0%, #334155 100%); color: white; } .pacing-card-title { display: flex; flex-direction: column; gap: 0.25rem; } .book-title { font-family: Fraunces, serif; font-size: 1.2rem; font-weight: 600; } .book-stats { font-size: 0.8rem; opacity: 0.7; } .pacing-score-pill { display: flex; align-items: baseline; gap: 2px; background: rgba(255,255,255,0.15); padding: 0.5rem 1rem; border-radius: 30px; } .score-num { font-size: 1.5rem; font-weight: 700; } .score-max { font-size: 0.85rem; opacity: 0.7; } .pacing-viz-container { padding: 2rem 1.75rem; position: relative; } .rhythm-map { display: flex; align-items: flex-end; justify-content: space-between; height: 140px; gap: 6px; } .rhythm-bar { flex: 1; height: var(--height); background: linear-gradient(180deg, #3b82f6 0%, #60a5fa 100%); border-radius: 4px 4px 0 0; position: relative; transition: all 0.3s ease; } .rhythm-bar.peak { background: linear-gradient(180deg, #f59e0b 0%, #fbbf24 100%); } .rhythm-bar:hover { filter: brightness(1.1); transform: scaleY(1.05); transform-origin: bottom; } .rhythm-bardata-label:not(data-label)::after { content: attr(data-label); position: absolute; bottom: -24px; left: 50%; transform: translateX(-50%); font-size: 0.7rem; color: #64748b; white-space: nowrap; } .pacing-insights-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: #e5e7eb; border-top: 1px solid #e5e7eb; } .insight-box { display: flex; align-items: center; gap: 0.75rem; padding: 1rem 1.25rem; background: #f8fafc; } .insight-icon { width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; border-radius: 10px; font-size: 1.1rem; } .insight-icon.slow { background: #fef2f2; } .insight-icon.good { background: #f0fdf4; color: #16a34a; font-weight: 700; } .insight-icon.peak { background: #fffbeb; } .insight-text { display: flex; flex-direction: column; gap: 2px; } .insight-text strong { font-size: 0.85rem; font-weight: 600; color: #1e293b; } .insight-text span { font-size: 0.75rem; color: #64748b; } .pacing-window-body { padding: 22px; background: #fff; display: grid; gap: 18px; } .pacing-chart { background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%); border: 1px solid rgba(0,0,0,0.06); border-radius: 16px; padding: 18px 18px 14px; } .pacing-chart-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; } .pacing-chart-title { font-size: 0.95rem; font-weight: 600; color: #111827; } .pacing-chart-legend { display: flex; align-items: center; gap: 14px; font-size: 0.75rem; color: #6b7280; } .pacing-legend-item { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; } .pacing-legend-swatch { width: 28px; height: 3px; border-radius: 999px; background: rgba(148, 163, 184, 0.8); } .pacing-legend-swatch.pace { background: #2563eb; } .pacing-chart-svg { width: 100%; aspect-ratio: 6 / 1; display: block; } .pacing-chart-svg .baseline { stroke: rgba(148, 163, 184, 0.6); stroke-width: 2; stroke-dasharray: 4 6; } .pacing-chart-svg .pacing-line { stroke: #2563eb; stroke-width: 4; fill: none; stroke-linecap: round; stroke-linejoin: round; } .pacing-chart-svg .pacing-area { fill: url(#pacingFill); } .pacing-chart-svg .pacing-point-glow { fill: rgba(37, 99, 235, 0.18); } .pacing-chart-svg .pacing-point { fill: #fff; stroke: #2563eb; stroke-width: 4; } .pacing-chart-labels { display: flex; justify-content: space-between; gap: 12px; margin-top: 10px; font-size: 0.75rem; color: #9ca3af; } .pacing-passages { display: flex; flex-direction: column; gap: 12px; } /* GENERIC EDITOR WINDOW STYLES */ .editor-window { background: #0f172a; border-radius: 24px; overflow: hidden; box-shadow: 0 0 0 1px rgba(255,255,255,0.06), 0 30px 90px rgba(0,0,0,0.45); } .editor-window.light { background: #fff; box-shadow: 0 0 0 1px rgba(0,0,0,0.06), 0 30px 80px rgba(0,0,0,0.14); } .editor-window .window-titlebar { background: var(--dark); padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(255,255,255,0.08); } .editor-window.light .window-titlebar { background: var(--dark); border-bottom: 1px solid rgba(255,255,255,0.08); } .window-titlebar .window-title-left { display: flex; align-items: center; gap: 12px; min-width: 0; } .window-titlebar .window-dots { display: flex; gap: 8px; } .window-titlebar .window-dot { width: 12px; height: 12px; border-radius: 50%; } .window-dot.red { background: #ff5f57; } .window-dot.yellow { background: #ffbd2e; } .window-dot.green { background: #28c840; } .window-titlebar .window-title { font-size: 0.85rem; color: rgba(255,255,255,0.75); font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; } .editor-window.light .window-titlebar .window-title { color: rgba(255,255,255,0.75); } .window-titlebar .window-actions { display: flex; align-items: center; gap: 12px; } .window-action-btn { padding: 6px 12px; background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.12); border-radius: 6px; color: rgba(255,255,255,0.85); font-size: 0.75rem; font-weight: 500; cursor: pointer; display: flex; align-items: center; gap: 6px; transition: transform 0.15s ease, background 0.15s ease, border-color 0.15s ease; } .editor-window.light .window-action-btn { background: rgba(255,255,255,0.12); color: rgba(255,255,255,0.85); } .window-action-btn:hover { transform: translateY(-1px); background: rgba(255,255,255,0.16); border-color: rgba(255,255,255,0.18); } .window-action-btn svg { width: 14px; height: 14px; } .window-status { display: flex; align-items: center; gap: 8px; font-size: 0.75rem; color: rgba(255,255,255,0.65); } .editor-window.light .window-status { color: rgba(255,255,255,0.65); } .window-status .status-indicator { width: 8px; height: 8px; background: #28c840; border-radius: 50%; animation: statusPulse 2s infinite; } .editor-window .window-body { padding: 24px; } .editor-window .window-sidebar { background: rgba(0,0,0,0.2); border-left: 1px solid rgba(255,255,255,0.06); padding: 20px; min-width: 200px; } .editor-window.light .window-sidebar { background: #f8f9fa; border-left: 1px solid rgba(0,0,0,0.06); } .pacing-demo-text { background: #1a1a2e; border-radius: 16px; overflow: hidden; box-shadow: 0 25px 50px -12px rgba(0,0,0,0.4); } /* Editor title bar */ .editor-titlebar { background: linear-gradient(180deg, #252542 0%, #1e1e36 100%); padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(255,255,255,0.06); } .editor-dots { display: flex; gap: 8px; } .editor-dot { width: 12px; height: 12px; border-radius: 50%; } .editor-dot.red { background: #ff5f57; } .editor-dot.yellow { background: #ffbd2e; } .editor-dot.green { background: #28c840; } .editor-filename { font-size: 0.8rem; color: rgba(255,255,255,0.5); font-family: SF Mono, Fira Code, monospace; } .editor-titlebar .editor-status { display: flex; align-items: center; gap: 8px; font-size: 0.7rem; color: rgba(255,255,255,0.4); } .status-dot { width: 6px; height: 6px; background: #28c840; border-radius: 50%; animation: statusPulse 2s infinite; } @keyframes statusPulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* Pacing visualization strip */ .pacing-strip { height: 4px; display: flex; background: rgba(255,255,255,0.05); } .strip-segment { height: 100%; transition: all 0.5s ease; } .strip-segment.s1 { flex: 3; background: var(--accent); opacity: 0.3; } .strip-segment.s2 { flex: 2; background: var(--accent); opacity: 0.4; } .strip-segment.s3 { flex: 1; background: var(--accent); opacity: 0.6; } .strip-segment.s4 { flex: 2; background: var(--accent); opacity: 1; } .strip-segment.s5 { flex: 1; background: var(--accent); opacity: 0.8; } .strip-segment.s6 { flex: 2; background: var(--accent); opacity: 0.5; } /* Main editor area */ .editor-main { display: flex; } /* Line numbers */ .line-numbers { padding: 24px 0; background: rgba(0,0,0,0.2); border-right: 1px solid rgba(255,255,255,0.06); min-width: 50px; text-align: right; } .line-num { padding: 0 16px; font-family: SF Mono, Fira Code, monospace; font-size: 0.75rem; color: rgba(255,255,255,0.2); line-height: 1.9rem; display: block; } .line-num.active { color: var(--accent); } /* Text content */ .editor-content { flex: 1; padding: 24px; font-family: Fraunces, Georgia, serif; font-size: 1rem; line-height: 1.9rem; color: rgba(255,255,255,0.85); position: relative; } .editor-line { position: relative; padding: 0 12px; margin: 0 -12px; border-radius: 4px; transition: background 0.3s; } .editor-line:hover { background: rgba(255,255,255,0.03); } .editor-line.slow { color: rgba(255,255,255,0.5); } .editor-line.medium { color: rgba(255,255,255,0.7); } .editor-line.fast { color: rgba(255,255,255,0.95); text-shadow: 0 0 30px rgba(37,99,235,0.3); } /* Pace indicator on hover */ .editor-line::after { content: attr(data-pace); position: absolute; right: 12px; top: 50%; transform: translateY(-50%); font-size: 0.6rem; font-family: DM Sans, sans-serif; text-transform: uppercase; letter-spacing: 1px; padding: 3px 8px; border-radius: 4px; opacity: 0; transition: opacity 0.2s; } .editor-line:hover::after { opacity: 1; } .editor-line.slow::after { background: rgba(148,163,184,0.2); color: #94a3b8; } .editor-line.medium::after { background: rgba(59,130,246,0.2); color: #60a5fa; } .editor-line.fast::after { background: rgba(37,99,235,0.3); color: #93c5fd; } /* Right sidebar analysis */ .editor-sidebar { width: 200px; background: rgba(0,0,0,0.3); border-left: 1px solid rgba(255,255,255,0.06); padding: 20px; } .sidebar-title { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 1.5px; color: rgba(255,255,255,0.4); margin-bottom: 16px; } .pace-score { text-align: center; margin-bottom: 24px; } .score-ring { width: 80px; height: 80px; margin: 0 auto 12px; position: relative; } .score-ring svg { transform: rotate(-90deg); } .score-ring circle { fill: none; stroke-width: 6; } .score-ring .bg { stroke: rgba(255,255,255,0.1); } .score-ring .progress { stroke: var(--accent); stroke-dasharray: 220; stroke-dashoffset: 66; stroke-linecap: round; } .score-value { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 1.5rem; font-weight: 700; color: white; } .score-label { font-size: 0.75rem; color: rgba(255,255,255,0.5); } .pace-breakdown { display: flex; flex-direction: column; gap: 12px; } .breakdown-item { display: flex; justify-content: space-between; align-items: center; } .breakdown-label { font-size: 0.75rem; color: rgba(255,255,255,0.5); display: flex; align-items: center; gap: 8px; } .breakdown-dot { width: 8px; height: 8px; border-radius: 50%; } .breakdown-dot.slow { background: #06b6d4; } .breakdown-dot.medium { background: #f59e0b; } .breakdown-dot.fast { background: #ef4444; box-shadow: 0 0 10px rgba(239,68,68,0.25); } .breakdown-value { font-size: 0.8rem; color: rgba(255,255,255,0.8); font-weight: 600; } .pacing-para { font-family: Fraunces, serif; font-size: 0.95rem; line-height: 1.8; margin: 0; padding: 0.95rem 1rem; border-radius: 14px; transition: all 0.3s; } .pacing-para.slow-text { background: rgba(6, 182, 212, 0.1); border-left: 3px solid #06b6d4; } .pacing-para.fast-text { background: rgba(239, 68, 68, 0.1); border-left: 3px solid #ef4444; } .pacing-para.medium-text { background: rgba(245, 158, 11, 0.1); border-left: 3px solid #f59e0b; } .pacing-insights { display: flex; flex-direction: column; gap: 1.25rem; } .insight-card { background: white; border-radius: 12px; padding: 1.25rem; box-shadow: 0 4px 20px rgba(0,0,0,0.06); } .insight-header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; } .insight-icon { font-size: 1.3rem; } .insight-header h4 { font-size: 0.95rem; margin: 0; } .pacing-score { text-align: center; } .score-circle { width: 90px; height: 90px; border-radius: 50%; background: linear-gradient(135deg, #dbeafe, #bfdbfe); border: 4px solid #2563eb; display: flex; align-items: center; justify-content: center; margin: 0 auto 0.75rem; position: relative; } .pacing-score .score-circle .score-value { position: static; transform: none; top: auto; left: auto; font-size: 1.75rem; font-weight: 700; color: #1e40af; line-height: 1; } .pacing-score .score-circle .score-label { font-size: 0.85rem; color: #6b7280; font-weight: 500; } .pacing-score p { font-size: 0.85rem; color: #666; } .insight-list { list-style: none; padding: 0; margin: 0; } .insight-list li { display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 0; font-size: 0.85rem; border-bottom: 1px solid #f0f0f0; } .insight-list li:last-child { border-bottom: none; } .insight-list li span { font-size: 1rem; } .benchmark-bars { display: flex; flex-direction: column; gap: 0.75rem; } .benchmark-row { display: flex; align-items: center; gap: 1rem; } .benchmark-row span { font-size: 0.75rem; width: 80px; color: #666; } .benchmark-bar { flex: 1; height: 12px; background: #e5e5e5; border-radius: 6px; overflow: hidden; } .benchmark-fill { height: 100%; border-radius: 6px; transition: width 1s ease; } .benchmark-fill.yours { background: linear-gradient(90deg, #06b6d4, #0891b2); } .benchmark-fill.genre { background: linear-gradient(90deg, #f59e0b, #d97706); } .benchmark-note { font-size: 0.75rem; color: #888; margin-top: 0.75rem; font-style: italic; } /* Reader Insights Section */ .reader-insights-section { padding: 6rem 4rem; background: linear-gradient(180deg, #1e1b4b 0%, #312e81 100%); color: white; } .reader-insights-section .section-label { color: #a5b4fc; } .reader-insights-section .section-header h2 { color: white; } .reader-insights-section .section-header p { color: #c7d2fe; } /* Reader Window Editor Styles */ .reader-window { margin-top: 3rem; max-width: 1100px; margin-left: auto; margin-right: auto; color: #111827; } .reader-window-body { display: grid; grid-template-columns: 1.2fr 280px; align-items: start; } .reader-story-preview { background: white; overflow: hidden; } .reader-analytics-sidebar { background: #f8f9fa; border-left: 1px solid rgba(0,0,0,0.06); padding: 16px; display: flex; flex-direction: column; gap: 12px; color: #111827; } .story-scroll-container { /* Content fits naturally, no scroll needed for this demo */ } .story-header-mini { padding: 1rem 1.5rem; background: #f8f8f8; border-bottom: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; position: sticky; top: 0; } .story-title-mini { font-family: Fraunces, serif; font-weight: 600; color: #1c1c1c; } .story-stats { font-size: 0.75rem; color: #888; } .story-content-mini { padding: 1rem; } .story-paragraph { position: relative; padding: 0.75rem 1rem 0.75rem 2.5rem; margin-bottom: 0.5rem; border-radius: 8px; transition: all 0.3s; cursor: pointer; } .story-paragraph:hover { background: rgba(37, 99, 235, 0.04); } .story-paragraph p { font-family: Fraunces, serif; font-size: 0.85rem; line-height: 1.7; color: #333; margin: 0; } .para-heat { position: absolute; left: 0; top: 0; bottom: 0; width: 6px; border-radius: 3px; background: linear-gradient(180deg, #22c55e calc(var(--read-percent)), #e5e5e5 calc(var(--read-percent)) ); } .story-paragraph.read .para-heat { background: #22c55e; } .story-paragraph.read.slow .para-heat { background: #f59e0b; } .story-paragraph.dropoff .para-heat { background: linear-gradient(180deg, #f59e0b 0%, #ef4444 100%); } .story-paragraph.unread .para-heat { background: #e5e5e5; } .story-paragraph.dropoff { background: rgba(239, 68, 68, 0.08); } .story-paragraph.is-active { box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.25); background: rgba(37, 99, 235, 0.06); } .story-paragraph.dropoff.is-active { box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.25); } .reader-marker { display: inline-flex; align-items: center; gap: 6px; margin-top: 8px; padding: 4px 10px; border-radius: 12px; font-size: 0.7rem; font-weight: 500; } .reader-marker.pause { background: #fef3c7; color: #92400e; } .reader-marker.stop { background: #fee2e2; color: #991b1b; } .marker-icon { font-size: 0.85rem; } .scroll-legend { display: flex; gap: 1.5rem; padding: 1rem 1.5rem; background: #f8f8f8; border-top: 1px solid #eee; } .legend-item { display: flex; align-items: center; gap: 6px; font-size: 0.7rem; color: #666; } .legend-color { width: 12px; height: 12px; border-radius: 3px; } .legend-color.hot { background: #22c55e; } .legend-color.warm { background: #f59e0b; } .legend-color.cold { background: #e5e5e5; } .reader-analytics { display: flex; flex-direction: column; gap: 1rem; } .analytics-card { background: #fff; border-radius: 12px; padding: 1.25rem; border: 1px solid rgba(0,0,0,0.06); box-shadow: 0 10px 30px rgba(0,0,0,0.06); } .analytics-card.main-stat { text-align: center; padding: 1.5rem; } .reader-avatars-row { display: flex; justify-content: center; margin-bottom: 0.75rem; } .reader-avatar-small { width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; font-weight: 600; color: white; margin-left: -8px; border: 2px solid #1e1b4b; } .reader-avatar-small:first-child { margin-left: 0; } .analytics-card h3 { font-size: 2rem; font-weight: 700; margin: 0; } .analytics-card.main-stat p { color: #6b7280; font-size: 0.9rem; margin: 0; } .analytics-header { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; } .analytics-icon { font-size: 1.1rem; } .analytics-header h4 { font-size: 0.85rem; margin: 0; font-weight: 600; } .completion-bar-container { display: flex; align-items: center; gap: 1rem; } .completion-bar { flex: 1; height: 10px; background: rgba(0,0,0,0.08); border-radius: 5px; overflow: hidden; } .completion-fill { height: 100%; background: linear-gradient(90deg, #22c55e, #16a34a); border-radius: 5px; } .completion-percent { font-size: 1.25rem; font-weight: 700; } .analytics-note { font-size: 0.75rem; color: #6b7280; margin: 0.5rem 0 0; } .analytics-note.speed-indicator.fast { color: #166534; } .time-display { display: flex; align-items: baseline; gap: 0.5rem; } .time-value { font-size: 1.75rem; font-weight: 700; } .time-expected { font-size: 0.85rem; color: #6b7280; } .hotspot-list { list-style: none; padding: 0; margin: 0; } .hotspot-item { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0.5rem; border-bottom: 1px solid rgba(0,0,0,0.06); font-size: 0.85rem; border-radius: 10px; cursor: pointer; transition: background 0.15s ease, box-shadow 0.15s ease; } .hotspot-item:hover { background: rgba(0,0,0,0.04); } .hotspot-item.is-active { background: rgba(37, 99, 235, 0.08); box-shadow: 0 0 0 1px rgba(37, 99, 235, 0.12); } .hotspot-item:last-child { border-bottom: none; } .hotspot-detail { font-size: 0.75rem; padding: 3px 8px; border-radius: 8px; } .hotspot-item.positive .hotspot-detail { background: rgba(34, 197, 94, 0.2); color: #166534; } .hotspot-item.negative .hotspot-detail { background: rgba(239, 68, 68, 0.2); color: #991b1b; } .analytics-card.share-card { text-align: center; background: linear-gradient(135deg, #4f46e5, #6366f1); border: none; color: white; box-shadow: 0 14px 40px rgba(79,70,229,0.35); } .share-btn { width: 100%; padding: 0.875rem; background: white; border: none; border-radius: 8px; font-size: 0.95rem; font-weight: 600; color: #4f46e5; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 0.5rem; transition: all 0.2s; } .share-btn:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.2); } .share-note { font-size: 0.75rem; color: rgba(255,255,255,0.8); margin: 0.75rem 0 0; } /* Version History Section */ .version-history-section { padding: 6rem 4rem; background: linear-gradient(180deg, #faf8f3 0%, #f0ebe3 100%); } /* Version Window Editor Styles */ .version-window { margin-top: 3rem; max-width: 1100px; margin-left: auto; margin-right: auto; } .version-window-body { display: grid; grid-template-columns: 240px 1fr; } .version-sidebar { background: #f8f9fa; border-right: 1px solid rgba(0,0,0,0.06); padding: 20px; } .version-sidebar .sidebar-header { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 1px; color: rgba(0,0,0,0.4); margin-bottom: 16px; font-weight: 600; } .version-compare-area { background: #fff; padding: 20px; } .compare-tabs { display: flex; gap: 8px; margin-bottom: 16px; } .compare-tab { padding: 8px 16px; background: rgba(0,0,0,0.04); border: 1px solid rgba(0,0,0,0.06); border-radius: 6px; color: rgba(0,0,0,0.6); font-size: 0.8rem; cursor: pointer; transition: all 0.2s; } .compare-tab:hover { background: rgba(0,0,0,0.06); } .compare-tab.active { background: var(--accent); border-color: var(--accent); color: white; } .timeline-track { display: flex; flex-direction: column; gap: 4px; position: relative; } .timeline-track::before { content: ; position: absolute; top: 12px; left: 2rem; right: 2rem; height: 4px; background: #e5e5e5; border-radius: 2px; } .timeline-marker { display: flex; flex-direction: column; align-items: center; position: relative; cursor: pointer; } .marker-dot { width: 24px; height: 24px; background: white; border: 4px solid #d4d4d4; border-radius: 50%; transition: all 0.3s; z-index: 1; } .timeline-marker:hover .marker-dot, .timeline-marker.current .marker-dot, .timeline-marker.selected .marker-dot { border-color: #2563eb; background: #2563eb; } .timeline-marker.selected .marker-info { font-weight: 600; } .timeline-marker.selected .marker-time { color: #2563eb; } .marker-info { margin-top: 0.75rem; text-align: center; } .marker-time { display: block; font-size: 0.75rem; font-weight: 600; color: #333; } .marker-label { display: block; font-size: 0.7rem; color: #888; max-width: 100px; } .version-compare { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; margin-bottom: 1.5rem; } .version-compare.unified-view { grid-template-columns: 1fr; } .version-compare.unified-view .compare-panel.old { display: none; } .version-compare.unified-view .compare-panel.new .compare-badge.new { display: none; } .version-compare.unified-view .compare-panel.new .compare-header span:last-child { display: none; } .version-compare.unified-view .compare-panel.new .compare-header::after { content: Unified diff view; color: #666; } .compare-panel { background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 20px rgba(0,0,0,0.08); } .compare-header { padding: 1rem 1.5rem; background: #f8f8f8; border-bottom: 1px solid #eee; display: flex; align-items: center; gap: 0.75rem; font-size: 0.85rem; color: #666; } .compare-badge { padding: 4px 10px; border-radius: 12px; font-size: 0.7rem; font-weight: 600; } .compare-badge.old { background: #fee2e2; color: #991b1b; } .compare-badge.new { background: #dcfce7; color: #166534; } .compare-content { padding: 1.5rem; font-family: Fraunces, serif; font-size: 0.9rem; line-height: 1.8; } .compare-content p { margin-bottom: 0.75rem; } .diff-removed { background: #fee2e2; color: #991b1b; text-decoration: line-through; padding: 0 4px; border-radius: 3px; } .diff-added { background: #dcfce7; color: #166534; padding: 0 4px; border-radius: 3px; } .version-actions { display: flex; gap: 1rem; justify-content: center; } .version-btn { display: flex; align-items: center; gap: 0.5rem; padding: 0.875rem 1.5rem; border-radius: 8px; font-size: 0.9rem; font-weight: 600; cursor: pointer; transition: all 0.2s; border: none; background: #2563eb; color: white; } .version-btn:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3); } .version-btn.secondary { background: white; color: #333; border: 1px solid #ddd; } .version-btn.secondary:hover { border-color: #2563eb; color: #2563eb; box-shadow: 0 4px 12px rgba(0,0,0,0.1); } /* Collaboration Section */ .collab-section { padding: 6rem 4rem; background: linear-gradient(180deg, #ecfdf5 0%, #d1fae5 100%); } .collab-section .section-label { color: #059669; } /* Collaboration Window Editor Styles */ .collab-window { margin-top: 3rem; max-width: 1100px; margin-left: auto; margin-right: auto; } .collab-window-body { display: grid; grid-template-columns: 1fr 260px; } .collab-window .collab-content { padding: 24px; background: #fff; } .collab-sidebar { background: #f8f9fa; border-left: 1px solid rgba(0,0,0,0.06); padding: 20px; } .collab-sidebar .sidebar-header { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 1px; color: rgba(0,0,0,0.4); margin-bottom: 16px; font-weight: 600; } .collab-feature-list { display: flex; flex-direction: column; gap: 16px; } .collab-feature-item { display: flex; gap: 12px; align-items: flex-start; } .collab-feature-item svg { width: 20px; height: 20px; color: var(--accent); flex-shrink: 0; margin-top: 2px; } .collab-feature-item strong { display: block; font-size: 0.85rem; color: var(--dark); margin-bottom: 2px; } .collab-feature-item span { font-size: 0.75rem; color: #666; } .collab-toolbar { padding: 1rem 1.5rem; background: #f8f8f8; border-bottom: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; } .collab-doc-name { font-weight: 600; font-size: 0.9rem; } .collab-users { display: flex; gap: 0.5rem; } .collab-avatar { position: relative; padding: 6px 12px; border-radius: 16px; font-size: 0.75rem; font-weight: 600; color: white; } .collab-avatar.you { border: 2px solid #4f46e5; } .typing-badge { position: absolute; bottom: -8px; left: 50%; transform: translateX(-50%); background: #1c1c1c; color: white; padding: 2px 6px; border-radius: 8px; font-size: 0.6rem; white-space: nowrap; } .collab-content { padding: 1.5rem; font-family: Fraunces, serif; font-size: 0.95rem; line-height: 1.9; } .collab-content p { margin-bottom: 1rem; } .has-cursor { position: relative; } .remote-cursor { display: inline-block; width: 2px; height: 1.2em; background: #ec4899; margin-left: 1px; animation: blink 1s infinite; position: relative; vertical-align: text-bottom; } .remote-cursor::before { content: Sarah; position: absolute; top: -20px; left: -2px; background: #ec4899; color: white; padding: 2px 6px; border-radius: 4px; font-size: 0.65rem; font-family: DM Sans, sans-serif; white-space: nowrap; animation: none; opacity: 1; } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } .collab-comment { display: flex; gap: 0.75rem; padding: 1rem; background: #fffbeb; border-left: 3px solid #f59e0b; border-radius: 0 8px 8px 0; margin: 1rem 0; } .comment-avatar { width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-size: 0.75rem; font-weight: 600; font-family: DM Sans, sans-serif; flex-shrink: 0; } .comment-body { font-family: DM Sans, sans-serif; } .comment-author { font-weight: 600; font-size: 0.8rem; margin-bottom: 4px; } .comment-time { font-weight: 400; color: #888; font-size: 0.7rem; } .comment-text { font-size: 0.85rem; color: #555; } .collab-features { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } .collab-feature-card { background: white; padding: 1.25rem; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.06); } .collab-feature-icon { font-size: 1.5rem; margin-bottom: 0.5rem; display: block; } .collab-feature-card h4 { font-size: 0.95rem; margin: 0 0 0.25rem; } .collab-feature-card p { font-size: 0.8rem; color: #666; margin: 0; } /* Writing Goals Section */ .goals-section { padding: 6rem 4rem; background: linear-gradient(180deg, #fef3c7 0%, #fde68a 100%); } .goals-section .section-label { color: #b45309; } /* Goals Window Editor Styles */ .goals-window { margin-top: 3rem; max-width: 1100px; margin-left: auto; margin-right: auto; } .goals-window-body { display: grid; grid-template-columns: 1fr 220px; } .goals-main { padding: 24px; background: #fff; display: grid; grid-template-columns: 280px 1fr; gap: 24px; } .goals-sidebar { background: #f8f9fa; border-left: 1px solid rgba(0,0,0,0.06); padding: 20px; } .goals-sidebar .sidebar-header { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 1px; color: rgba(0,0,0,0.4); margin-bottom: 16px; font-weight: 600; } .goals-sidebar .badges-grid { display: flex; flex-direction: column; gap: 12px; } .goals-sidebar .badge { display: flex; align-items: center; gap: 10px; padding: 10px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .goals-sidebar .badge svg { width: 24px; height: 24px; } .goals-stats { display: flex; flex-direction: column; gap: 1rem; } .stat-card { background: white; border-radius: 16px; padding: 1.5rem; display: flex; align-items: center; gap: 1rem; box-shadow: 0 4px 20px rgba(0,0,0,0.08); position: relative; } .stat-card.streak { background: linear-gradient(135deg, #7c3aed, #a855f7); color: white; } .stat-icon { font-size: 2rem; } .stat-value { font-size: 2rem; font-weight: 700; } .stat-label { font-size: 0.8rem; color: #666; } .stat-card.streak .stat-label { color: rgba(255,255,255,0.8); } .streak-badge { position: absolute; top: -8px; right: -8px; background: #fef08a; color: #713f12; padding: 4px 10px; border-radius: 12px; font-size: 0.7rem; font-weight: 600; } .goal-progress { margin-top: 0.5rem; width: 100%; } .goal-bar { height: 8px; background: #e5e5e5; border-radius: 4px; overflow: hidden; margin-bottom: 4px; } .goal-fill { height: 100%; background: linear-gradient(90deg, #22c55e, #16a34a); border-radius: 4px; } .goal-progress span { font-size: 0.75rem; color: #888; } .word-trend { font-size: 0.8rem; color: #22c55e; font-weight: 600; margin-top: 0.5rem; } .goals-calendar { background: white; border-radius: 16px; padding: 1.5rem; box-shadow: 0 4px 20px rgba(0,0,0,0.08); } .calendar-header h4 { margin: 0 0 1rem; font-size: 1rem; text-align: center; } .calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; } .cal-day { aspect-ratio: 1; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; border-radius: 6px; } .cal-day.header { font-weight: 600; color: #888; font-size: 0.65rem; } .cal-day.empty { background: transparent; } .cal-day.hit.low { background: #dcfce7; color: #166534; } .cal-day.hit.medium { background: #86efac; color: #166534; } .cal-day.hit.high { background: #22c55e; color: white; } .cal-day.miss { background: #fee2e2; color: #991b1b; } .cal-day.today { background: #2563eb; color: white; font-weight: 700; box-shadow: 0 0 0 2px #2563eb, 0 0 0 4px white; } .cal-day.future { color: #ccc; } .calendar-legend { display: flex; justify-content: center; gap: 1rem; margin-top: 1rem; font-size: 0.7rem; color: #888; } .legend-dot { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 4px; } .legend-dot.miss { background: #fee2e2; } .legend-dot.low { background: #dcfce7; } .legend-dot.medium { background: #86efac; } .legend-dot.high { background: #22c55e; } .goals-badges { background: white; border-radius: 16px; padding: 1.5rem; box-shadow: 0 4px 20px rgba(0,0,0,0.08); } .goals-badges h4 { margin: 0 0 1rem; font-size: 1rem; } .badges-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.75rem; } .badge { display: flex; flex-direction: column; align-items: center; padding: 1rem 0.5rem; border-radius: 12px; text-align: center; } .badge.earned { background: linear-gradient(135deg, #fef3c7, #fde68a); } .badge.locked { background: #f5f5f5; opacity: 0.6; } .badge-icon { font-size: 1.5rem; margin-bottom: 0.25rem; } .badge.locked .badge-icon { filter: grayscale(1); } .badge-name { font-size: 0.7rem; color: #666; } /* Bento Grid */ .bento { padding: 6rem 4rem; background: var(--dark); color: #fff; } .bento .section-label { color: var(--warm); } .bento .section-header { color: #fff; } .bento .section-header p { color: rgba(255,255,255,0.6); } .bento-grid { display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: repeat(2, 250px); gap: 1.5rem; } .bento-card { background: rgba(255,255,255,0.05); border-radius: 16px; border: 1px solid rgba(255,255,255,0.1); display: flex; flex-direction: column; overflow: hidden; transition: all 0.3s; cursor: pointer; } .bento-card:hover { background: rgba(255,255,255,0.08); transform: translateY(-4px); } .bento-titlebar { padding: 10px 14px; background: rgba(0,0,0,0.2); border-bottom: 1px solid rgba(255,255,255,0.06); } .bento-dots { display: flex; gap: 6px; } .bento-dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,0.2); } .bento-body { padding: 1.5rem; flex: 1; display: flex; flex-direction: column; justify-content: flex-end; } .bento-card.large { grid-column: span 2; } .bento-card.tall { grid-row: span 2; } .bento-card h3 { font-size: 1.2rem; margin-bottom: 0.5rem; } .bento-card p { color: rgba(255,255,255,0.6); font-size: 0.9rem; } .bento-icon { font-size: 2.5rem; margin-bottom: 1rem; } /* Pricing */ .pricing { padding: 6rem 4rem; } .pricing .section-header { text-align: center; margin: 0 auto 4rem; } .pricing-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; max-width: 1000px; margin: 0 auto; } .pricing-card { background: #fff; padding: 2.5rem; border-radius: 20px; border: 2px solid #eee; text-align: center; } .pricing-card.featured { background: var(--dark); color: #fff; border-color: var(--dark); transform: scale(1.05); } .pricing-card h3 { font-size: 1.2rem; margin-bottom: 1rem; } .pricing-card .price { font-family: Fraunces, serif; font-size: 3.5rem; font-weight: 700; } .pricing-card .price span { font-size: 1rem; font-weight: 400; opacity: 0.6; } .pricing-card ul { list-style: none; margin: 2rem 0; text-align: left; } .pricing-card li { padding: 0.5rem 0; font-size: 0.9rem; color: #666; display: flex; align-items: center; gap: 0.5rem; } .pricing-card.featured li { color: rgba(255,255,255,0.7); } .pricing-card li::before { content: ✓; color: var(--accent); font-weight: bold; } .pricing-card.featured li::before { color: var(--warm); } .pricing-card .btn { width: 100%; justify-content: center; } .pricing-card.featured .btn-primary { background: #fff; color: var(--dark); } /* Testimonials */ .testimonials { padding: 6rem 4rem; background: #f5f5f0; } .testimonials .section-header { text-align: center; margin: 0 auto 4rem; } .testimonials-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; max-width: 1100px; margin: 0 auto; } .testimonial-card { background: #fff; padding: 2rem; border-radius: 16px; } .testimonial-stars { color: var(--warm); margin-bottom: 1rem; } .testimonial-card blockquote { font-family: Fraunces, serif; font-size: 1.1rem; font-style: italic; line-height: 1.7; margin-bottom: 1.5rem; } .testimonial-author { display: flex; align-items: center; gap: 1rem; } .author-avatar { width: 48px; height: 48px; background: var(--accent-light); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--accent); font-weight: 600; } .author-info h4 { font-size: 0.95rem; } .author-info span { font-size: 0.8rem; color: #888; } /* CTA */ .cta-section { padding: 8rem 4rem; text-align: center; position: relative; overflow: hidden; } .cta-section::before { content: ; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 600px; height: 600px; background: radial-gradient(circle, var(--accent-light) 0%, transparent 70%); opacity: 0.5; } .cta-section h2 { font-family: Fraunces, serif; font-size: 3.5rem; margin-bottom: 1rem; position: relative; } .cta-section p { font-size: 1.2rem; color: #666; margin-bottom: 2.5rem; position: relative; } /* Footer */ footer { background: var(--dark); color: #fff; padding: 4rem; } .footer-content { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 3rem; max-width: 1200px; margin: 0 auto; } .footer-brand h3 { font-family: Fraunces, serif; font-size: 1.5rem; margin-bottom: 1rem; } .footer-brand p { color: rgba(255,255,255,0.6); font-size: 0.9rem; line-height: 1.7; } .footer-links h4 { font-size: 0.8rem; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; margin-bottom: 1.5rem; color: rgba(255,255,255,0.4); } .footer-links a { display: block; color: rgba(255,255,255,0.7); text-decoration: none; font-size: 0.9rem; margin-bottom: 0.75rem; transition: color 0.3s; } .footer-links a:hover { color: #fff; } .footer-bottom { border-top: 1px solid rgba(255,255,255,0.1); margin-top: 3rem; padding-top: 2rem; text-align: center; color: rgba(255,255,255,0.4); font-size: 0.85rem; } /* Responsive */ @media (max-width: 1024px) { .features-grid, .testimonials-grid { grid-template-columns: repeat(2, 1fr); } .bento-grid { grid-template-columns: repeat(2, 1fr); } .pricing-grid { grid-template-columns: 1fr; } .footer-content { grid-template-columns: 1fr 1fr; } .pacing-demo { grid-template-columns: 1fr; gap: 1.5rem; } .writers-window-body, .reader-window-body, .version-window-body, .collab-window-body, .goals-window-body { grid-template-columns: 1fr; } .writers-sidebar { border-right: none; border-bottom: 1px solid rgba(255,255,255,0.08); } .reader-analytics-sidebar, .collab-sidebar, .goals-sidebar { border-left: none; border-top: 1px solid rgba(0,0,0,0.06); } .version-sidebar { border-right: none; border-bottom: 1px solid rgba(0,0,0,0.06); } .goals-main { grid-template-columns: 1fr; } .pacing-overview { max-width: 100%; margin-left: 1rem; margin-right: 1rem; } /* Editor card */ .editor-card { max-width: 100%; } .ai-row { flex-wrap: wrap; } /* Version history */ .version-window-body { flex-direction: column; } .version-sidebar { width: 100%; border-right: none; border-bottom: 1px solid rgba(0,0,0,0.06); } .timeline-track { flex-direction: row; overflow-x: auto; padding-bottom: 1rem; } .timeline-marker { flex-direction: column; min-width: 100px; } } @media (max-width: 768px) { /* Global section padding */ nav, .hero, .logos-section, .writers-room-section, .pacing-section, .reader-insights-section, .version-history-section, .collab-section, .goals-section, .features, .bento, .pricing, .testimonials, .cta-section, footer { padding-left: 1.5rem; padding-right: 1.5rem; } /* Navigation */ .nav-links { display: none; } nav { padding: 1rem 1.5rem; } /* Hero */ .hero { padding-top: 4rem; padding-bottom: 3rem; } .hero-content h1 { font-size: 2.2rem; line-height: 1.2; } .hero-content p { font-size: 1rem; } .hero-top { flex-direction: column; gap: 1rem; } .hero-meta { flex-direction: row; gap: 1.5rem; } /* Editor card in hero */ .editor-card { margin: 2rem auto 0; border-radius: 12px; } .editor-nav { padding: 0.75rem 1rem; } .ai-row { padding: 0.75rem; gap: 0.5rem; } .ai-chip { font-size: 0.75rem; padding: 0.4rem 0.75rem; } .editor-body { padding: 1.25rem; min-height: 200px; } .editor-title { font-size: 1.4rem; } .editor-text { font-size: 0.95rem; line-height: 1.8; } /* Section headers */ .section-header h2 { font-size: 1.75rem; } .section-header p { font-size: 0.95rem; } /* Writers room */ .writers-window { margin-top: 2rem; } .window-titlebar { padding: 0.75rem 1rem; flex-wrap: wrap; gap: 0.5rem; } .window-title { font-size: 0.8rem; } .writers-sidebar { padding: 1rem; } .writers-content { padding: 1rem; } /* Reader insights */ .reader-window { margin-top: 2rem; } .reader-window-body { gap: 0; } .reader-story-preview { padding: 0; } .story-header-mini { padding: 0.75rem 1rem; } .story-content-mini { padding: 1rem; } .scroll-legend { flex-wrap: wrap; gap: 1rem; padding: 0.75rem 1rem; } .reader-analytics-sidebar { padding: 1rem; } .analytics-card { padding: 0.875rem; } /* Version history */ .version-window { margin-top: 2rem; } .version-compare-area { padding: 1rem; } .compare-tabs { justify-content: center; } .version-compare { grid-template-columns: 1fr; gap: 1rem; } .compare-panel { border-radius: 8px; } .compare-header { padding: 0.75rem 1rem; } .compare-content { padding: 1rem; font-size: 0.85rem; } /* Collaboration */ .collab-window { margin-top: 2rem; } .collab-users { gap: 0.25rem; } .collab-avatar span { font-size: 0.65rem; } .collab-content { padding: 1rem; } .collab-content p { font-size: 0.9rem; } .collab-comment { padding: 0.75rem; margin: 0.75rem 0; } .collab-sidebar { padding: 1rem; } /* Goals */ .goals-window { margin-top: 2rem; } .goals-header { padding: 1rem; flex-direction: column; align-items: flex-start; gap: 1rem; } .goals-main { padding: 1rem; gap: 1rem; } .goal-card { padding: 1rem; } .goals-sidebar { padding: 1rem; } /* Pacing Overview */ .pacing-overview { margin-left: 0; margin-right: 0; } .pacing-card-header { flex-direction: column; align-items: flex-start; gap: 1rem; padding: 1rem 1.25rem; } .pacing-score-pill { align-self: flex-start; } .pacing-viz-container { padding: 1.5rem 1rem; } .rhythm-map { height: 100px; gap: 4px; } .rhythm-bardata-label:not(data-label)::after { font-size: 0.6rem; bottom: -20px; } .pacing-insights-row { grid-template-columns: 1fr; } .insight-box { padding: 0.875rem 1rem; } /* Pricing */ .pricing-grid { gap: 1.5rem; } .pricing-card { padding: 1.5rem; } /* Testimonials */ .testimonials-grid { grid-template-columns: 1fr; gap: 1.5rem; } /* CTA */ .cta-section h2 { font-size: 2rem; } /* Footer */ .footer-content { grid-template-columns: 1fr; gap: 2rem; text-align: center; } .footer-links { justify-content: center; } } /* MOBILE OPTIMIZED STYLES (480px and below) Each section carefully optimized for mobile */ @media (max-width: 480px) { /* --- GLOBAL MOBILE SETTINGS --- */ nav, .hero, .logos-section, .writers-room-section, .pacing-section, .reader-insights-section, .version-history-section, .collab-section, .goals-section, .features, .bento, .pricing, .testimonials, .cta-section, footer { padding-left: 1rem; padding-right: 1rem; } .section-label { font-size: 0.65rem; margin-bottom: 0.5rem; } .section-header { margin-bottom: 1.5rem; } .section-header h2 { font-size: 1.4rem; line-height: 1.3; } .section-header p { font-size: 0.85rem; margin-top: 0.5rem; } /* --- 1. HERO SECTION --- */ .hero { padding-top: 3rem; padding-bottom: 2rem; } .hero-top { flex-direction: column; gap: 0.75rem; margin-bottom: 1.5rem; } .hero-badge { font-size: 0.7rem; padding: 0.35rem 0.7rem; } .hero-meta { font-size: 0.75rem; gap: 1rem; } .hero-content h1 { font-size: 1.6rem; line-height: 1.25; } .hero-content p { font-size: 0.9rem; line-height: 1.6; } /* Hero Editor Card - Make it compact and touch-friendly */ .editor-card { margin-top: 1.5rem; border-radius: 12px; } .editor-nav { padding: 0.6rem 0.75rem; } .dots { gap: 5px; } .dot { width: 8px; height: 8px; } .doc-title { font-size: 0.7rem; } /* AI chips - horizontal scroll */ .ai-row { padding: 0.6rem; gap: 0.4rem; overflow-x: auto; flex-wrap: nowrap; -webkit-overflow-scrolling: touch; scrollbar-width: none; } .ai-row::-webkit-scrollbar { display: none; } .ai-chip { font-size: 0.7rem; padding: 0.4rem 0.65rem; white-space: nowrap; flex-shrink: 0; } .bulk-actions { padding: 0.5rem 0.75rem; flex-direction: column; gap: 0.5rem; font-size: 0.75rem; } .bulk-btns { gap: 0.5rem; } .bulk-btn { font-size: 0.7rem; padding: 0.35rem 0.6rem; } .editor-body { padding: 1rem; min-height: 180px; } .editor-chapter { font-size: 0.6rem; margin-bottom: 0.5rem; } .editor-title { font-size: 1.1rem; margin-bottom: 1rem; } .editor-text { font-size: 0.85rem; line-height: 1.7; } .editor-text p { margin-bottom: 0.875rem; } .editor-status { padding: 0.5rem 0.75rem; flex-direction: column; gap: 0.25rem; font-size: 0.7rem; } /* --- 2. LOGOS SECTION --- */ .logos-section { padding-top: 2rem; padding-bottom: 2rem; } .logos-label { font-size: 0.65rem; } .logos-row { flex-wrap: wrap; gap: 1rem 1.5rem; justify-content: center; } .logo-item { font-size: 0.8rem; } /* --- 3. WRITERS ROOM SECTION --- */ .writers-room-section { padding-top: 3rem; padding-bottom: 3rem; } .writers-window { margin-top: 1.5rem; border-radius: 12px; } .window-titlebar { padding: 0.6rem 0.75rem; flex-wrap: wrap; gap: 0.4rem; } .window-dots { gap: 4px; } .window-dot { width: 8px; height: 8px; } .window-title { font-size: 0.65rem; } .window-status { font-size: 0.6rem; } /* Writers sidebar becomes horizontal scroll */ .writers-sidebar { padding: 0.75rem; border-bottom: 1px solid rgba(255,255,255,0.08); } .sidebar-header { font-size: 0.7rem; margin-bottom: 0.5rem; } .writer-avatars-large { display: flex; flex-direction: row; overflow-x: auto; gap: 0.5rem; padding-bottom: 0.5rem; -webkit-overflow-scrolling: touch; } .writer-btn-large { flex-direction: column; min-width: 70px; padding: 0.5rem; gap: 0.25rem; } .writer-avatar-lg { width: 36px; height: 36px; font-size: 0.7rem; } .writer-info { display: none; } .writer-btn-large.active .writer-info, .writer-btn-large:hover .writer-info { display: none; } .writer-btn-large::after { content: attr(data-name); font-size: 0.55rem; color: rgba(255,255,255,0.7); text-align: center; } .writers-main { padding: 1rem; } .demo-review-card { padding: 1rem; border-radius: 10px; } .demo-review-header { gap: 0.75rem; margin-bottom: 0.75rem; } .demo-reviewer-name { font-size: 0.85rem; } .demo-reviewer-title { font-size: 0.65rem; } .demo-review-content { font-size: 0.8rem; line-height: 1.6; } .demo-highlight { padding: 0.6rem; margin: 0.75rem 0; font-size: 0.75rem; } /* --- 4. PACING SECTION --- */ .pacing-section { padding-top: 3rem; padding-bottom: 3rem; } .pacing-main-card { border-radius: 12px; } .pacing-card-header { padding: 0.875rem 1rem; } .book-title { font-size: 0.95rem; } .book-stats { font-size: 0.65rem; } .pacing-score-pill { padding: 0.4rem 0.75rem; } .score-num { font-size: 1.2rem; } .score-max { font-size: 0.7rem; } .pacing-viz-container { padding: 1.25rem 0.75rem 1.75rem; } .rhythm-map { height: 70px; gap: 3px; } .rhythm-bar { border-radius: 3px 3px 0 0; } .rhythm-bardata-label:not(data-label)::after { display: none; } .pacing-insights-row { grid-template-columns: 1fr; } .insight-box { padding: 0.75rem; gap: 0.6rem; } .insight-icon { width: 32px; height: 32px; font-size: 0.95rem; border-radius: 8px; } .insight-text strong { font-size: 0.8rem; } .insight-text span { font-size: 0.7rem; } /* --- 5. READER INSIGHTS SECTION --- */ .reader-insights-section { padding-top: 3rem; padding-bottom: 3rem; } .reader-window { margin-top: 1.5rem; border-radius: 12px; } .reader-story-preview { max-height: 250px; overflow-y: auto; } .story-header-mini { padding: 0.6rem 0.75rem; } .story-title-mini { font-size: 0.85rem; } .story-stats { font-size: 0.6rem; } .story-content-mini { padding: 0.75rem; } .story-paragraph { padding: 0.5rem; margin-bottom: 0.4rem; } .story-paragraph p { font-size: 0.75rem; line-height: 1.5; } .reader-marker { font-size: 0.55rem; padding: 0.25rem 0.4rem; } .scroll-legend { padding: 0.6rem 0.75rem; gap: 0.75rem; flex-wrap: wrap; } .legend-item { font-size: 0.6rem; } .legend-color { width: 8px; height: 8px; } .reader-analytics-sidebar { padding: 0.75rem; gap: 0.6rem; } .analytics-card { padding: 0.6rem; border-radius: 8px; } .analytics-card.main-stat { padding: 0.75rem; } .reader-count { font-size: 1.5rem; } .stat-row { font-size: 0.7rem; } .hotspot-item { padding: 0.4rem; font-size: 0.65rem; } /* --- 6. VERSION HISTORY SECTION --- */ .version-history-section { padding-top: 3rem; padding-bottom: 3rem; } .version-window { margin-top: 1.5rem; border-radius: 12px; } /* Timeline becomes compact horizontal */ .version-sidebar { padding: 0.75rem; border-bottom: 1px solid rgba(0,0,0,0.06); } .timeline-track { flex-direction: row; overflow-x: auto; gap: 0; padding-bottom: 0.25rem; } .timeline-marker { flex-direction: column; min-width: 65px; padding: 0.5rem 0.25rem; } .marker-dot { width: 10px; height: 10px; } .marker-info { margin-top: 0.4rem; } .marker-time { font-size: 0.6rem; } .marker-label { font-size: 0.5rem; display: none; } .timeline-marker.selected .marker-label, .timeline-marker.current .marker-label { display: block; } .version-compare-area { padding: 0.75rem; } .compare-tabs { gap: 0.25rem; } .compare-tab { font-size: 0.7rem; padding: 0.4rem 0.6rem; border-radius: 6px; } .version-compare { gap: 0.75rem; } .compare-panel { border-radius: 8px; } .compare-header { padding: 0.6rem 0.75rem; font-size: 0.7rem; } .compare-badge { font-size: 0.55rem; padding: 3px 6px; } .compare-content { padding: 0.75rem; font-size: 0.8rem; line-height: 1.6; } .compare-content p { margin-bottom: 0.6rem; } /* --- 7. COLLABORATION SECTION --- */ .collab-section { padding-top: 3rem; padding-bottom: 3rem; } .collab-window { margin-top: 1.5rem; border-radius: 12px; } .collab-users { gap: 0.2rem; } .collab-avatar { width: 26px; height: 26px; } .collab-avatar span { font-size: 0.55rem; } .typing-badge { font-size: 0.45rem; padding: 1px 3px; } .collab-content { padding: 0.75rem; } .collab-content p { font-size: 0.8rem; line-height: 1.6; margin-bottom: 0.6rem; } .remote-cursor { height: 1em; } .remote-cursor::before { font-size: 0.5rem; padding: 2px 4px; top: -16px; } .collab-comment { padding: 0.6rem; margin: 0.6rem 0; gap: 0.5rem; } .comment-avatar { width: 24px; height: 24px; font-size: 0.55rem; } .comment-author { font-size: 0.7rem; } .comment-time { font-size: 0.55rem; } .comment-text { font-size: 0.75rem; } .collab-sidebar { padding: 0.75rem; gap: 0.6rem; } .feature-item { padding: 0.5rem; font-size: 0.7rem; } .feature-icon { font-size: 1rem; } /* --- 8. GOALS SECTION --- */ .goals-section { padding-top: 3rem; padding-bottom: 3rem; } .goals-window { margin-top: 1.5rem; border-radius: 12px; } .goals-header { padding: 0.75rem; flex-direction: column; align-items: flex-start; gap: 0.75rem; } .streak-display { gap: 0.5rem; } .streak-icon { font-size: 1.25rem; } .streak-number { font-size: 1.75rem; } .streak-label { font-size: 0.6rem; } .goals-main { padding: 0.75rem; gap: 0.75rem; } .goal-card { padding: 0.75rem; border-radius: 8px; } .goal-card h4 { font-size: 0.8rem; margin-bottom: 0.5rem; } .goal-progress { height: 6px; border-radius: 3px; } .goal-stats { font-size: 0.65rem; } .goals-sidebar { padding: 0.75rem; gap: 0.5rem; } .tip-card { padding: 0.6rem; } .tip-card h5 { font-size: 0.75rem; } .tip-card p { font-size: 0.7rem; } /* --- 9. PRICING SECTION --- */ .pricing { padding-top: 3rem; padding-bottom: 3rem; } .pricing-grid { gap: 1rem; } .pricing-card { padding: 1.25rem; border-radius: 12px; } .pricing-card h3 { font-size: 1rem; } .price { font-size: 1.75rem; } .price span { font-size: 0.8rem; } .pricing-card ul { font-size: 0.8rem; } .pricing-card li { padding: 0.4rem 0; } .pricing-btn { padding: 0.6rem; font-size: 0.85rem; } /* --- 10. TESTIMONIALS SECTION --- */ .testimonials { padding-top: 3rem; padding-bottom: 3rem; } .testimonials-grid { gap: 1rem; } .testimonial-card { padding: 1.25rem; border-radius: 12px; } .testimonial-card p { font-size: 0.85rem; line-height: 1.6; } .testimonial-author { margin-top: 1rem; } .author-avatar { width: 36px; height: 36px; } .author-name { font-size: 0.8rem; } .author-title { font-size: 0.65rem; } /* --- 11. CTA SECTION --- */ .cta-section { padding-top: 3rem; padding-bottom: 3rem; border-radius: 16px; margin: 0 0.5rem; } .cta-section h2 { font-size: 1.4rem; line-height: 1.3; } .cta-section p { font-size: 0.85rem; margin: 0.75rem 0 1.25rem; } .cta-btn { padding: 0.75rem 1.5rem; font-size: 0.9rem; } /* --- 12. FOOTER --- */ footer { padding-top: 2rem; padding-bottom: 1.5rem; } .footer-content { gap: 1.5rem; text-align: center; } .footer-brand { font-size: 1rem; } .footer-links { justify-content: center; gap: 1rem; flex-wrap: wrap; } .footer-links a { font-size: 0.8rem; } .footer-bottom { margin-top: 1.5rem; padding-top: 1rem; font-size: 0.7rem; } } /* ANIMATIONS */ /* Nav entrance */ nav { animation: navSlideDown 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; } @keyframes navSlideDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } /* Hero entrance animations */ .hero-content { animation: heroFadeUp 1s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .hero-content h1 { opacity: 0; animation: textReveal 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.2s forwards; } .hero-content p { opacity: 0; animation: textReveal 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.4s forwards; } @keyframes heroFadeUp { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: translateY(0); } } @keyframes textReveal { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* Editor card entrance */ .editor-card { opacity: 0; animation: editorEntrance 1s cubic-bezier(0.16, 1, 0.3, 1) 0.5s forwards; } @keyframes editorEntrance { from { opacity: 0; transform: translateY(60px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } /* AI chips staggered animation */ .ai-chip { opacity: 0; animation: chipReveal 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .ai-chip:nth-child(1) { animation-delay: 1s; } .ai-chip:nth-child(2) { animation-delay: 1.05s; } .ai-chip:nth-child(3) { animation-delay: 1.1s; } .ai-chip:nth-child(4) { animation-delay: 1.15s; } .ai-chip:nth-child(5) { animation-delay: 1.2s; } .ai-chip:nth-child(6) { animation-delay: 1.25s; } .ai-chip:nth-child(7) { animation-delay: 1.3s; } .ai-chip:nth-child(8) { animation-delay: 1.35s; } .ai-chip:nth-child(9) { animation-delay: 1.4s; } @keyframes chipReveal { from { opacity: 0; transform: translateY(10px) scale(0.9); } to { opacity: 1; transform: translateY(0) scale(1); } } /* Scroll-triggered section reveals */ .reveal-section { opacity: 0; transform: translateY(50px); transition: all 0.9s cubic-bezier(0.16, 1, 0.3, 1); } .reveal-section.visible { opacity: 1; transform: translateY(0); } /* Hover effects */ .writer-btn-large { transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); } .writer-btn-large:hover { transform: translateY(-4px); } .testimonial-card { transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); } .testimonial-card:hover { transform: translateY(-6px); box-shadow: 0 20px 40px rgba(0,0,0,0.12); } .pricing-card { transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); } .pricing-card:hover { transform: translateY(-8px); box-shadow: 0 25px 50px rgba(0,0,0,0.15); } /style>/head>body> nav> div classlogo>bossgpt.com/div> a hrefhttps://editor.bossgpt.com classnav-cta>Open Editor →/a> /nav> !-- Hero --> section classhero> div classhero-content> h1>The em>smartest/em> way to write stories/h1> p>bossgpt.com combines beautiful writing tools with powerful AI to help you create compelling narratives faster than ever./p> /div> !-- Editor Card --> div classeditor-card> div classeditor-nav> div classeditor-nav-left> div classdots> div classdot red>/div> div classdot yellow>/div> div classdot green>/div> /div> span classdoc-title>The-Lost-Garden.md/span> /div> /div> div classai-row> button classai-chip onclickapplyEdit(jokes)>😄 Add Jokes/button> button classai-chip onclickapplyEdit(sadder)>😢 Make Sadder/button> button classai-chip onclickapplyEdit(descriptive)>🎨 More Descriptive/button> button classai-chip onclickgenerateContent(continue)>✏️ Continue Story/button> button classai-chip analyze onclickanalyzeText(exitPoints)>🚪 Exit Points/button> button classai-chip analyze onclickanalyzeText(plotHoles)>🕳️ Plot Holes/button> button classai-chip analyze onclickanalyzeText(showDontTell)>👁️ Show Dont Tell/button> button classai-chip analyze onclickanalyzeText(pacing)>🐢 Pacing Issues/button> button classai-chip analyze onclickanalyzeText(cliches)>🎯 Clichés/button> /div> div classbulk-actions idbulkActions> span>✨ span idpendingCount>0/span> AI suggestions pending/span> div classbulk-btns> button classbulk-btn accept-all onclickacceptAll()>✓ Accept All/button> button classbulk-btn reject-all onclickrejectAll()>✗ Reject All/button> /div> /div> div classeditor-body> div classeditor-chapter>Chapter 1/div> div classeditor-title>The Warehouse/div> div classeditor-text ideditorText> p idp1>The school day ended, and I was walking to the bus when I got a message from my crush, Carter, the school jock, who never even knew I existed. strong>Carter:/strong> Hey, I need to tell you something important. Meet me in the warehouse behind the school. NOW!/p> p idp2>Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am and decided to ask me out. So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding. I got there, only to find darkness. The warehouse was small, with no windows or anything./p> p idp3>I started calling out for Carter when I heard noises behind some shelves. I peeked, and there was Carter, hugging and laughing with his girlfriend, Zoe. She was the queen bee and the head cheerleader. She was mean, and everyone was scared of her. But then I wondered why Carter sent me that message? Was it an accident? Of course it was. God, Im so stupid. I tried to tiptoe out, but the door wouldnt budge. I kept pulling like crazy until I ended up with the knob in my hand. Oh my god. Could this get any worse?/p> div idgeneratedContent>/div> div classtyping-indicator idtypingIndicator> div classtyping-dots> span>/span>span>/span>span>/span> /div> span>AI is writing.../span> /div> span classcursor idcursor>/span> /div> /div> div classeditor-status> div classstatus-left> span>📝 span idwordCount>247/span> words/span> span>⏱ 1 min read/span> /div> div classstatus-right> span classstatus-ai idstatusText>Ready/span> /div> /div> /div> /section> !-- Logos --> section classlogos-section> div classlogos-label>Trusted by creators from/div> div classlogos-row> span classlogo-item>MSA/span> span classlogo-item>Dhar Mann Studios/span> span classlogo-item>Zvoid Studios/span> span classlogo-item>MrBeast/span> span classlogo-item>Cocomelon/span> span classlogo-item>Storybooth/span> /div> /section> !-- Writers Room Section --> section classwriters-room-section idwriters-room> div classsection-label>Writers Room/div> div classsection-header> h2>Get feedback from literary legends/h2> p>AI channels the voice of famous authors to critique your work in their unique style./p> /div> div classeditor-window writers-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Writers Room — AI Feedback/span> /div> div classwindow-actions> div classwindow-status> span classstatus-indicator>/span> Ready /div> /div> /div> div classwriters-window-body> div classwriters-sidebar> div classsidebar-header>Select Mentor/div> div classwriter-avatars-large> button classwriter-btn-large active onclickshowWriterDemo(hemingway)> div classwriter-avatar-lg hemingway>EH/div> div classwriter-info> span classwriter-name-lg>Ernest Hemingway/span> span classwriter-style>Minimalist & Direct/span> /div> /button> button classwriter-btn-large onclickshowWriterDemo(king)> div classwriter-avatar-lg king>SK/div> div classwriter-info> span classwriter-name-lg>Stephen King/span> span classwriter-style>Horror & Suspense/span> /div> /button> button classwriter-btn-large onclickshowWriterDemo(austen)> div classwriter-avatar-lg austen>JA/div> div classwriter-info> span classwriter-name-lg>Jane Austen/span> span classwriter-style>Social & Witty/span> /div> /button> button classwriter-btn-large onclickshowWriterDemo(poe)> div classwriter-avatar-lg poe>EP/div> div classwriter-info> span classwriter-name-lg>Edgar Allan Poe/span> span classwriter-style>Gothic & Atmospheric/span> /div> /button> button classwriter-btn-large onclickshowWriterDemo(twain)> div classwriter-avatar-lg twain>MT/div> div classwriter-info> span classwriter-name-lg>Mark Twain/span> span classwriter-style>Humorous & Plain/span> /div> /button> /div> /div> div classwriters-main> div classdemo-review-card iddemoReviewCard> div classdemo-review-header> div classwriter-avatar-lg hemingway iddemoAvatar>EH/div> div> h4 iddemoWriterName>Ernest Hemingway/h4> span iddemoWriterBooks>The Old Man & The Sea/span> /div> /div> div classdemo-review-quote iddemoQuote> Cut the fat. The school jock who never even knew I existed—we get it. You like him. He doesnt know you. Say it once and move on. The warehouse scene is good. Dark. Small. No windows. Thats how you write. /div> div classdemo-suggestions iddemoSuggestions> div classdemo-suggestion>svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM6 9l6 6 6-6/>/svg> Cut the wedding metaphor—too cute/div> div classdemo-suggestion>svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM13 10V3L4 14h7v7l9-11h-7z/>/svg> I ran is enough. No need to explain why./div> div classdemo-suggestion>svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>circle cx12 cy12 r3/>/svg> The doorknob detail is perfect. Keep it./div> /div> /div> /div> /div> /div> /section> !-- Pacing Analysis Section --> section classpacing-section idpacing> div classsection-label>Pacing Analysis/div> div classsection-header> h2>See your storys heartbeat/h2> p>Visualize the rhythm of your entire manuscript at a glance./p> /div> div classpacing-overview> div classpacing-main-card> div classpacing-card-header> div classpacing-card-title> span classbook-title>The Warehouse/span> span classbook-stats>Chapter 3 · 2,847 words/span> /div> div classpacing-score-pill> span classscore-num>78/span> span classscore-max>/100/span> /div> /div> div classpacing-viz-container> div classrhythm-map> div classrhythm-bar style--height: 30% data-labelOpening>/div> div classrhythm-bar style--height: 35% data-label>/div> div classrhythm-bar style--height: 25% data-label>/div> div classrhythm-bar style--height: 40% data-label>/div> div classrhythm-bar style--height: 55% data-labelRising>/div> div classrhythm-bar style--height: 50% data-label>/div> div classrhythm-bar style--height: 65% data-label>/div> div classrhythm-bar style--height: 75% data-label>/div> div classrhythm-bar style--height: 85% data-label>/div> div classrhythm-bar peak style--height: 95% data-labelClimax>/div> div classrhythm-bar peak style--height: 90% data-label>/div> div classrhythm-bar style--height: 70% data-label>/div> div classrhythm-bar style--height: 55% data-labelFalling>/div> div classrhythm-bar style--height: 45% data-label>/div> div classrhythm-bar style--height: 35% data-labelEnd>/div> /div> /div> div classpacing-insights-row> div classinsight-box> div classinsight-icon slow>🐢/div> div classinsight-text> strong>Slow opening/strong> span>First 400 words are descriptive/span> /div> /div> div classinsight-box> div classinsight-icon good>✓/div> div classinsight-text> strong>Good build-up/strong> span>Tension rises steadily/span> /div> /div> div classinsight-box> div classinsight-icon peak>⚡/div> div classinsight-text> strong>Strong climax/strong> span>Peak action at 75% mark/span> /div> /div> /div> /div> /div> /section> !-- Reader Insights Section --> section classreader-insights-section idreader-insights> div classsection-label>Reader Insights/div> div classsection-header> h2>See exactly how readers experience your story/h2> p>Share your draft with beta readers and get detailed analytics on their reading journey./p> /div> div classeditor-window light reader-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Reader Analytics — The Warehouse/span> /div> div classwindow-actions> button classwindow-action-btn idshareReaderLinkBtn typebutton onclickcopyReaderShareLink()> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71/>/svg> span classbtn-label>Share Link/span> /button> /div> /div> div classreader-window-body> div classreader-story-preview> div classstory-scroll-container> div classstory-header-mini> span classstory-title-mini>The Warehouse/span> span classstory-stats>Chapter 3 • 2,450 words/span> /div> div classstory-content-mini> div classstory-paragraph read data-para1 style--read-percent: 100%> div classpara-heat>/div> p>The school day ended, and I was walking to the bus when I got a message from my crush, Carter.../p> /div> div classstory-paragraph read data-para2 style--read-percent: 100%> div classpara-heat>/div> p>Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am.../p> /div> div classstory-paragraph read data-para3 style--read-percent: 100%> div classpara-heat>/div> p>I got there, only to find darkness. The warehouse was small, with no windows or anything.../p> /div> div classstory-paragraph read slow data-para4 style--read-percent: 85%> div classpara-heat>/div> p>I started calling out for Carter when I heard noises behind some shelves.../p> div classreader-marker pause> svg classmarker-icon-svg viewBox0 0 24 24 fillcurrentColor>rect x6 y4 width4 height16 rx1/>rect x14 y4 width4 height16 rx1/>/svg> span classmarker-label>3 readers paused here/span> /div> /div> div classstory-paragraph read data-para5 style--read-percent: 70%> div classpara-heat>/div> p>I peeked, and there was Carter, hugging and laughing with his girlfriend, Zoe.../p> /div> div classstory-paragraph dropoff data-para6 style--read-percent: 45%> div classpara-heat>/div> p>I tried to tiptoe out, but the door wouldnt budge. I kept pulling like crazy.../p> div classreader-marker stop> svg classmarker-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4M16 17l5-5-5-5M21 12H9/>/svg> span classmarker-label>2 readers stopped here/span> /div> /div> div classstory-paragraph unread data-para7 style--read-percent: 20%> div classpara-heat>/div> p>I ended up with the knob in my hand. Oh my god. Could this get any worse?.../p> /div> /div> /div> div classscroll-legend> div classlegend-item>span classlegend-color hot>/span> High engagement/div> div classlegend-item>span classlegend-color warm>/span> Normal reading/div> div classlegend-item>span classlegend-color cold>/span> Skimmed/dropped/div> /div> /div> div classreader-analytics-sidebar> div classanalytics-card main-stat> div classreader-avatars-row> div classreader-avatar-small stylebackground: #6366f1;>JM/div> div classreader-avatar-small stylebackground: #ec4899;>SL/div> div classreader-avatar-small stylebackground: #14b8a6;>KR/div> div classreader-avatar-small stylebackground: #f59e0b;>+4/div> /div> h3>7 readers/h3> p>have read this chapter/p> /div> div classanalytics-card> div classanalytics-header> svg classanalytics-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM2 3h6a4 4 0 014 4v14a3 3 0 00-3-3H2zM22 3h-6a4 4 0 00-4 4v14a3 3 0 013-3h7z/>/svg> h4>Completion Rate/h4> /div> div classcompletion-bar-container> div classcompletion-bar> div classcompletion-fill stylewidth: 71%>/div> /div> span classcompletion-percent>71%/span> /div> p classanalytics-note>5 of 7 readers finished/p> /div> div classanalytics-card> div classanalytics-header> svg classanalytics-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>polyline points12,6 12,12 16,14/>/svg> h4>Avg. Read Time/h4> /div> div classtime-display> span classtime-value>8:34/span> span classtime-expected>/ 10:00 expected/span> /div> p classanalytics-note speed-indicator fast>Readers are engaged! 15% faster than avg./p> /div> div classanalytics-card> div classanalytics-header> svg classanalytics-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM8.5 14.5A2.5 2.5 0 0011 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 11-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 002.5 2.5z/>/svg> h4>Hotspots/h4> /div> ul classhotspot-list> li classhotspot-item positive data-reader-para4 rolebutton tabindex0> span>Para 4/span> span classhotspot-detail>svg classhotspot-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z/>circle cx12 cy12 r3/>/svg> Re-read 3x/span> /li> li classhotspot-item negative data-reader-para6 rolebutton tabindex0> span>Para 6/span> span classhotspot-detail>svg classhotspot-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4M16 17l5-5-5-5M21 12H9/>/svg> Drop-off point/span> /li> li classhotspot-item positive data-reader-para3 rolebutton tabindex0> span>Para 3/span> span classhotspot-detail>svg classhotspot-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z/>/svg> 2 comments/span> /li> /ul> /div> /div> /div> /div> /section> !-- Version History Section --> section classversion-history-section idversion-history> div classsection-label>Version History/div> div classsection-header> h2>Travel through time in your story/h2> p>Every change is saved. Go back to any moment, compare drafts, restore with one click./p> /div> div classeditor-window light version-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Version History — Chapter 3/span> /div> div classwindow-actions> button classwindow-action-btn> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM3 12a9 9 0 109-9 9.75 9.75 0 00-6.74 2.74L3 8/>path dM3 3v5h5/>/svg> Restore /button> button classwindow-action-btn> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>rect x9 y9 width13 height13 rx2/>path dM5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1/>/svg> Copy /button> /div> /div> div classversion-window-body> div classversion-sidebar> div classsidebar-header>Timeline/div> div classtimeline-track> div classtimeline-marker current data-versionnow> div classmarker-dot>/div> div classmarker-info> span classmarker-time>Now/span> span classmarker-label>Current version/span> /div> /div> div classtimeline-marker data-versionv4> div classmarker-dot>/div> div classmarker-info> span classmarker-time>2 hours ago/span> span classmarker-label>Added chapter ending/span> /div> /div> div classtimeline-marker data-versionv3> div classmarker-dot>/div> div classmarker-info> span classmarker-time>Yesterday/span> span classmarker-label>Rewrote dialog scene/span> /div> /div> div classtimeline-marker selected data-versionv2> div classmarker-dot>/div> div classmarker-info> span classmarker-time>3 days ago/span> span classmarker-label>Major plot revision/span> /div> /div> div classtimeline-marker data-versionv1> div classmarker-dot>/div> div classmarker-info> span classmarker-time>1 week ago/span> span classmarker-label>First draft/span> /div> /div> /div> /div> div classversion-compare-area> div classcompare-tabs> button classcompare-tab active>Side by Side/button> button classcompare-tab>Unified/button> /div> div classversion-compare> div classcompare-panel old> div classcompare-header> span classcompare-badge old>3 days ago/span> span>Major plot revision/span> /div> div classcompare-content> p>Carter sent me a text. span classdiff-removed>He wanted to meet up./span>/p> p>span classdiff-removed>Carter texted me to meet him./span>/p> p>I ran to the warehouse without thinking twice./p> /div> /div> div classcompare-panel new> div classcompare-header> span classcompare-badge new>Current/span> span>Latest version/span> /div> div classcompare-content> p>Carter texted me to meet him, span classdiff-added>and my heart nearly stopped when I saw his name on my screen./span>/p> p>span classdiff-added>Without hesitating even a bit, I ran to that warehouse like I was late to my own wedding./span>/p> p>I ran to the warehouse without thinking twice./p> /div> /div> /div> /div> /div> /div> /section> !-- Collaboration Section --> section classcollab-section idcollaboration> div classsection-label>Collaboration/div> div classsection-header> h2>Write together in real-time/h2> p>Co-author with friends, get feedback from editors, all in one shared space./p> /div> div classeditor-window light collab-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Chapter 3 - The Warehouse/span> /div> div classwindow-actions> div classcollab-users> div classcollab-avatar you stylebackground: #6366f1;> span>You/span> /div> div classcollab-avatar stylebackground: #ec4899; --cursor-color: #ec4899;> span>Sarah/span> div classtyping-badge>typing.../div> /div> div classcollab-avatar stylebackground: #14b8a6;> span>Mike/span> /div> /div> button classwindow-action-btn> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71/>/svg> Share /button> /div> /div> div classcollab-window-body> div classcollab-content> p>The school day ended, and I was walking to the bus when I got a message from my crush, Carter./p> p classhas-cursor sarah>Carter: Hey, I need to tell you something important. Meet me in the warehouse behind the school. NOW!span classremote-cursor sarah>/span>/p> p>Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am./p> div classcollab-comment> div classcomment-avatar stylebackground: #14b8a6;>M/div> div classcomment-body> div classcomment-author>Mike span classcomment-time>2 min ago/span>/div> div classcomment-text>This is so relatable! Maybe add how her heart was racing?/div> /div> /div> p>I got there, only to find darkness. The warehouse was small, with no windows or anything./p> /div> div classcollab-sidebar> div classsidebar-header>Features/div> div classcollab-feature-list> div classcollab-feature-item> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2/>circle cx9 cy7 r4/>path dM23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75/>/svg> div> strong>Live Cursors/strong> span>See where everyone is writing/span> /div> /div> div classcollab-feature-item> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z/>/svg> div> strong>Inline Comments/strong> span>Leave feedback on passages/span> /div> /div> div classcollab-feature-item> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>polyline points20,6 9,17 4,12/>/svg> div> strong>Suggest Mode/strong> span>Propose changes safely/span> /div> /div> div classcollab-feature-item> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>rect x3 y11 width18 height11 rx2/>path dM7 11V7a5 5 0 0110 0v4/>/svg> div> strong>Permissions/strong> span>Control access levels/span> /div> /div> /div> /div> /div> /div> /section> !-- Writing Goals Section --> section classgoals-section idgoals> div classsection-label>Writing Goals/div> div classsection-header> h2>Build your writing habit/h2> p>Set daily goals, track your progress, earn streaks and stay motivated./p> /div> div classeditor-window light goals-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Writing Dashboard/span> /div> div classwindow-actions> button classwindow-action-btn> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r3/>path dM19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z/>/svg> Settings /button> /div> /div> div classgoals-window-body> div classgoals-main> div classgoals-stats> div classstat-card streak> svg classstat-icon-svg flame viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM8.5 14.5A2.5 2.5 0 0011 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 11-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 002.5 2.5z/>/svg> div classstat-content> div classstat-value>14/div> div classstat-label>Day Streak/div> /div> div classstreak-badge>Personal Best!/div> /div> div classstat-card> svg classstat-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM12 19l7-7 3 3-7 7-3-3z/>path dM18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z/>path dM2 2l7.586 7.586/>circle cx11 cy11 r2/>/svg> div classstat-content> div classstat-value>1,247/div> div classstat-label>Words Today/div> /div> div classgoal-progress> div classgoal-bar> div classgoal-fill stylewidth: 83%>/div> /div> span>1,247 / 1,500/span> /div> /div> div classstat-card> svg classstat-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM4 19.5A2.5 2.5 0 016.5 17H20/>path dM6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z/>/svg> div classstat-content> div classstat-value>23,456/div> div classstat-label>Total Words/div> /div> div classword-trend>svg classtrend-arrow viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM18 15l-6-6-6 6/>/svg> 2,340 this week/div> /div> /div> div classgoals-calendar> div classcalendar-header> h4>December 2024/h4> /div> div classcalendar-grid> div classcal-day header>M/div> div classcal-day header>T/div> div classcal-day header>W/div> div classcal-day header>T/div> div classcal-day header>F/div> div classcal-day header>S/div> div classcal-day header>S/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day hit low>1/div> div classcal-day hit medium>2/div> div classcal-day hit high>3/div> div classcal-day hit high>4/div> div classcal-day hit medium>5/div> div classcal-day hit high>6/div> div classcal-day hit low>7/div> div classcal-day miss>8/div> div classcal-day hit high>9/div> div classcal-day hit high>10/div> div classcal-day hit high>11/div> div classcal-day hit medium>12/div> div classcal-day hit high>13/div> div classcal-day hit medium>14/div> div classcal-day hit high>15/div> div classcal-day hit high>16/div> div classcal-day hit high>17/div> div classcal-day hit medium>18/div> div classcal-day hit high>19/div> div classcal-day hit high>20/div> div classcal-day hit high>21/div> div classcal-day hit medium>22/div> div classcal-day today>23/div> div classcal-day future>24/div> div classcal-day future>25/div> div classcal-day future>26/div> div classcal-day future>27/div> div classcal-day future>28/div> div classcal-day future>29/div> div classcal-day future>30/div> div classcal-day future>31/div> /div> div classcalendar-legend> span>span classlegend-dot miss>/span> Missed/span> span>span classlegend-dot low>/span> <500/span> span>span classlegend-dot medium>/span> 500-1k/span> span>span classlegend-dot high>/span> 1k+/span> /div> /div> /div> div classgoals-sidebar> div classsidebar-header>Achievements/div> div classbadges-grid> div classbadge earned> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>polygon points12,2 15.09,8.26 22,9.27 17,14.14 18.18,21.02 12,17.77 5.82,21.02 7,14.14 2,9.27 8.91,8.26/>/svg> span classbadge-name>First Chapter/span> /div> div classbadge earned> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM8.5 14.5A2.5 2.5 0 0011 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 11-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 002.5 2.5z/>/svg> span classbadge-name>7-Day Streak/span> /div> div classbadge earned> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM2 3h6a4 4 0 014 4v14a3 3 0 00-3-3H2z/>path dM22 3h-6a4 4 0 00-4 4v14a3 3 0 013-3h7z/>/svg> span classbadge-name>10K Words/span> /div> div classbadge earned> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>circle cx12 cy12 r6/>circle cx12 cy12 r2/>/svg> span classbadge-name>Goal Crusher/span> /div> div classbadge locked> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM6 9H4.5a2.5 2.5 0 010-5C7 4 7 7 7 7M18 9h1.5a2.5 2.5 0 000-5C17 4 17 7 17 7/>path dM4 22h16M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20 7 22M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20 17 22M18 2H6v7a6 6 0 1012 0V2z/>/svg> span classbadge-name>30-Day Streak/span> /div> div classbadge locked> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM4 19.5A2.5 2.5 0 016.5 17H20/>path dM6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z/>path dM8 7h8M8 11h8M8 15h5/>/svg> span classbadge-name>50K Words/span> /div> /div> /div> /div> /div> /section> !-- Pricing --> section classpricing idpricing> div classsection-label>Pricing/div> div classsection-header> h2>Simple, honest pricing/h2> p>Start free, upgrade when you need more./p> /div> div classpricing-grid stylemax-width: 800px; grid-template-columns: repeat(2, 1fr);> div classpricing-card> h3>Free/h3> div classprice>$0span>/mo/span>/div> ul> li>Unlimited projects/li> li>Unlimited AI generations/li> li>All editor features/li> li>Real-time collaboration/li> li>Standard AI model/li> /ul> a hrefhttps://editor.bossgpt.com classbtn btn-primary>Get Started Free/a> /div> div classpricing-card featured> h3>Pro/h3> div classprice>$8span>/mo/span>/div> ul> li>Everything in Free/li> li>Claude Opus 4.5/li> li>GPT 5.2/li> li>Gemini 3 Pro/li> li>Advanced AI features/li> li>Priority support/li> /ul> a hrefhttps://editor.bossgpt.com?upgradepro classbtn btn-primary>Upgrade to Pro/a> /div> /div> /section> !-- Testimonials --> section classtestimonials> div classsection-header> h2>Writers love bossgpt.com/h2> p>Join thousands of storytellers crafting their best work./p> /div> div classtestimonials-grid> div classtestimonial-card> div classtestimonial-stars>★★★★★/div> blockquote>bossgpt.com helped me finish my novel in half the time./blockquote> div classtestimonial-author> div classauthor-avatar>MR/div> div classauthor-info> h4>Maria Rodriguez/h4> span>Novelist/span> /div> /div> /div> div classtestimonial-card> div classtestimonial-stars>★★★★★/div> blockquote>The dialog generator is incredible. My characters feel authentic./blockquote> div classtestimonial-author> div classauthor-avatar>JC/div> div classauthor-info> h4>James Chen/h4> span>Screenwriter/span> /div> /div> /div> div classtestimonial-card> div classtestimonial-stars>★★★★★/div> blockquote>Finally, an AI tool that enhances my creativity./blockquote> div classtestimonial-author> div classauthor-avatar>SK/div> div classauthor-info> h4>Sarah Kim/h4> span>Author/span> /div> /div> /div> /div> /section> !-- CTA --> section classcta-section> h2>Ready to write your best story?/h2> p>Join 50,000+ writers using bossgpt.com to create compelling narratives./p> a href# classbtn btn-primary>Start Writing Free →/a> /section> !-- Footer --> footer> div classfooter-content> div classfooter-brand> h3>bossgpt.com/h3> p>AI-powered story editor for writers who want to create without limits./p> /div> div classfooter-links> h4>Product/h4> a href#>Features/a> a href#>Pricing/a> a href#>Changelog/a> /div> div classfooter-links> h4>Resources/h4> a href#>Documentation/a> a href#>Blog/a> a href#>API/a> /div> div classfooter-links> h4>Company/h4> a href#>About/a> a href#>Contact/a> a href#>Privacy/a> /div> /div> div classfooter-bottom> © 2024 bossgpt.com. All rights reserved. /div> /footer> script> const originalText { p1: The school day ended, and I was walking to the bus when I got a message from my crush, Carter, the school jock, who never even knew I existed. Carter: \Hey, I need to tell you something important. Meet me in the warehouse behind the school. NOW!\, p2: Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am and decided to ask me out. So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding. I got there, only to find darkness. The warehouse was small, with no windows or anything., p3: I started calling out for Carter when I heard noises behind some shelves. I peeked, and there was Carter, hugging and laughing with his girlfriend, Zoe. She was the queen bee and the head cheerleader. She was mean, and everyone was scared of her. But then I wondered why Carter sent me that message? Was it an accident? Of course it was. God, Im so stupid. I tried to tiptoe out, but the door wouldnt budge. I kept pulling like crazy until I ended up with the knob in my hand. Oh my god. Could this get any worse? }; const edits { jokes: { id: p1, old: who never even knew I existed, new: who never even knew I existed—which was honestly impressive since I sat behind him in three classes }, { id: p2, old: like I was late to my own wedding, new: like I was late to my own wedding, tripping over my own feet twice }, { id: p3, old: Could this get any worse?, new: Could this get any worse? (Spoiler: yes, yes it could.) } , sadder: { id: p1, old: who never even knew I existed, new: who never even knew I existed, no matter how hard I tried to be noticed }, { id: p2, old: maybe he finally realized how cool I am, new: maybe, just maybe, someone finally saw me }, { id: p3, old: God, I\m so stupid, new: God, I\m so stupid. I always fall for this. Every single time. } , happier: { id: p1, old: who never even knew I existed, new: who I\d admired from afar }, { id: p2, old: without hesitating even a bit, new: with butterflies in my stomach and hope in my heart }, { id: p3, old: God, I\m so stupid, new: Okay, this was embarrassing, but at least now I knew the truth } , tension: { id: p1, old: Meet me in the warehouse behind the school. NOW!, new: Meet me in the warehouse behind the school. NOW! Come alone. Tell no one. }, { id: p2, old: only to find darkness, new: only to find darkness so thick I could taste it }, { id: p3, old: the door wouldn\t budge, new: the door wouldn\t budge—and that\s when I heard footsteps behind me } , romantic: { id: p1, old: my crush, Carter, new: Carter, the boy who made my heart skip every time he smiled }, { id: p2, old: decided to ask me out, new: finally felt the same electric connection I\d been feeling all year }, { id: p3, old: hugging and laughing with his girlfriend, new: wrapped in Zoe\s arms, looking at her the way I\d dreamed he\d look at me } , mysterious: { id: p1, old: I got a message from my crush, new: I got a message from an unknown number—but somehow I knew it was Carter }, { id: p2, old: The warehouse was small, new: The warehouse seemed smaller than it should have been, the walls almost breathing }, { id: p3, old: ended up with the knob in my hand, new: ended up with the knob in my hand—and noticed strange symbols carved into the door } , funny: { id: p1, old: who never even knew I existed, new: who never even knew I existed—which was honestly impressive since I sat behind him in three classes }, { id: p2, old: like I was late to my own wedding, new: like I was late to my own wedding, tripping over my own feet twice }, { id: p3, old: Could this get any worse?, new: Could this get any worse? (Spoiler: yes, yes it could.) } , descriptive: { id: p1, old: the school jock, new: the school jock with his perfect jawline and those ocean-blue eyes }, { id: p2, old: only to find darkness, new: only to find suffocating darkness that pressed against my skin like velvet }, { id: p3, old: The warehouse was small, new: The warehouse was cramped and musty, dust motes floating in thin shafts of light from the cracks in the walls } , shorter: { id: p1, old: The school day ended, and I was walking to the bus when I got a message from my crush, Carter, the school jock, who never even knew I existed., new: After school, Carter texted me. }, { id: p2, old: Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am and decided to ask me out. So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding. I got there, only to find darkness. The warehouse was small, with no windows or anything., new: I ran to the warehouse. It was dark inside. } , dramatic: { id: p1, old: Meet me in the warehouse, new: Meet me in the warehouse—if you dare }, { id: p2, old: I ran to that warehouse, new: I ran to that warehouse, sealing my fate with every step }, { id: p3, old: Could this get any worse?, new: And in that moment, I knew—nothing would ever be the same again. } , simplify: { id: p1, old: the school jock, who never even knew I existed, new: the popular guy }, { id: p2, old: So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding, new: So I ran there fast } , pov: { id: p1, old: I was walking, new: She was walking }, { id: p1, old: I got a message from my crush, new: She got a message from her crush }, { id: p2, old: I told myself, new: She told herself } , grammar: { id: p3, old: God, I\m so stupid, new: God, I was so stupid }, { id: p1, old: NOW!, new: NOW. } }; const generatedTexts { continue: { type: continue, tag: ▶️ AI Continuation, content: Then I heard Zoe\s voice, sharp as broken glass. Did you hear something? My heart stopped. Carter mumbled something I couldn\t make out. Footsteps. Coming closer. I pressed myself against the wall, praying the shadows would swallow me whole. The door knob was still in my hand, cold and useless. }, dialog: { type: dialog, tag: 💬 Generated Dialog, content: `div classdialog-line>Well, well, well, Zoes voice cut through the darkness. Look what we have here./div>div classdialog-line>I froze. She was standing right behind me, her phone flashlight blinding my eyes./div>div classdialog-line>I... I was just leaving, I stammered./div>div classdialog-line>With my boyfriends doorknob? She laughed, but there was no warmth in it. Carter, come look at your little stalker./div>` }, character: { type: continue, tag: 👤 New Character, content: That\s when I noticed someone else in the corner—a girl with bright purple hair and combat boots, filming everything on her phone. She caught my eye and winked. Don\t worry, she mouthed silently. I got you. I had no idea who she was, but something told me she was about to change everything. }, twist: { type: continue, tag: 🌀 Plot Twist, content: But then Carter pulled away from Zoe and looked right at me. Finally, he said, and he was smiling. I was wondering when you\d show up. Zoe\s face went pale. Carter, what— The message wasn\t an accident, he said. I needed a witness. Zoe\s been blackmailing me for months. } }; const writerReviews { hemingway: { name: Ernest Hemingway, initials: EH, style: hemingway, title: The Old Man & The Sea, quote: Cut the fat. The school jock who never even knew I existed—we get it. You like him. He doesn\t know you. Say it once and move on. The warehouse scene is good. Dark. Small. No windows. That\s how you write. But like I was late to my own wedding? Kill that line., suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM6 9l6 6 6-6/>/svg>, text: Cut the wedding metaphor—too cute }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM13 10V3L4 14h7v7l9-11h-7z/>/svg>, text: I ran is enough. No need to explain why. }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>circle cx12 cy12 r3/>/svg>, text: The doorknob detail is perfect. Keep it. } }, king: { name: Stephen King, initials: SK, style: king, title: The Shining, It, quote: You\ve got the setup for something nasty here, kid. Dark warehouse, mysterious message, popular mean girl—this is the stuff teen nightmares are made of. But you\re rushing it. Let us feel that darkness. What does it smell like in there? What sounds are hiding in those shadows?, suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z/>circle cx12 cy12 r3/>/svg>, text: The warehouse should feel alive, threatening }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM12 22c1-3 4-5.5 4-8.5a4 4 0 10-8 0c0 3 3 5.5 4 8.5z/>/svg>, text: Why can\t the door open? Make it sinister. }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>path dM8 15h8M9 9h.01M15 9h.01/>/svg>, text: Zoe is scary because everyone fears her—show us why } }, austen: { name: Jane Austen, initials: JA, style: austen, title: Pride & Prejudice, quote: Oh dear. Our heroine rushes to meet a young man in a warehouse, alone, based on a single text message? One must question her judgement. However, the social dynamics are deliciously cruel—the quarterback, the queen bee, the invisible girl. This is a tale of reputation and its destruction., suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2/>circle cx12 cy7 r4/>/svg>, text: What are the social stakes if she\s caught? }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z/>/svg>, text: Her inner thoughts reveal delightful self-deception }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>line x12 y112 x222 y212/>/svg>, text: Zoe\s power comes from society—explore that } }, poe: { name: Edgar Allan Poe, initials: EP, style: poe, title: The Raven, The Fall of the House of Usher, quote: Ah! A dark warehouse, a mysterious summons, a door that will not yield! This has the makings of exquisite torment. But you must descend deeper into the protagonist\s despair. When the doorknob comes free, it should feel like her heart being ripped from her chest. Let the humiliation be Gothic in its intensity!, suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z/>/svg>, text: The darkness should be oppressive, alive }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z/>/svg>, text: Unrequited love is a kind of death—lean into it }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>rect x3 y3 width18 height18 rx2/>path dM12 8v4M12 16h.01/>/svg>, text: The broken doorknob is symbolic—make it explicit } }, twain: { name: Mark Twain, initials: MT, style: twain, title: Tom Sawyer, Huckleberry Finn, quote: Now this is more like it! A kid doing something foolish because of a crush—that\s as old as time and twice as reliable. The doorknob coming off in her hand? That\s comedy gold, friend. Don\t waste it by making her too sorry for herself. Let her be embarrassed AND mad about it., suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z/>/svg>, text: Let her get angry—anger\s funnier than sadness }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>path dM8 14s1.5 2 4 2 4-2 4-2/>/svg>, text: Queen bee is perfect—every school\s got one }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM19 21l-7-5-7 5V5a2 2 0 012-2h10a2 2 0 012 2z/>/svg>, text: What\s she gonna do with that doorknob? } } }; const analysisData { exitPoints: { id: p1, dropRate: 15, reason: Strong hook with mystery }, { id: p2, dropRate: 25, reason: Internal monologue slows pace }, { id: p3, dropRate: 8, reason: High tension, cliffhanger ending } , plotHoles: { id: p1, text: message from my crush, question: How did Carter get her number if he doesn\t know she exists? }, { id: p2, text: warehouse behind the school, question: Why would a school have an accessible warehouse? }, { id: p3, text: door wouldn\t budge, question: Did someone lock her in? How did Carter and Zoe get in? } , showDontTell: { id: p1, telling: who never even knew I existed, showing: His eyes swept past me like I was part of the wallpaper }, { id: p2, telling: She was mean, showing: Her smile had a way of making people flinch }, { id: p3, telling: everyone was scared of her, showing: Students parted for her in the hallway like she was contagious } , pacing: { id: p1, speed: fast, label: Inciting incident }, { id: p2, speed: medium, label: Building tension }, { id: p3, speed: fast, label: Crisis moment } , senses: { id: p1, present: sight, missing: sound, touch }, { id: p2, present: sight, missing: smell, sound }, { id: p3, present: sight, touch, sound, missing: smell } , cliches: { id: p1, text: school jock, freshness: 20, suggestion: varsity quarterback with the easy smile }, { id: p2, text: queen bee, freshness: 15, suggestion: social assassin }, { id: p3, text: head cheerleader, freshness: 25, suggestion: captain of the spirit squad } }; let pendingEdits ; let editCounter 0; let activeAnnotations ; function clearState() { resetText(); document.getElementById(generatedContent).innerHTML ; pendingEdits ; editCounter 0; // Remove analysis elements activeAnnotations.forEach(ann > { if (ann.element) { ann.element.remove(); } }); activeAnnotations ; // Reset editor text styles const editorText document.getElementById(editorText); editorText.style.marginLeft ; editorText.style.marginRight ; editorText.style.position ; editorText.classList.remove(has-pacing); // Remove any added elements const timeline document.getElementById(pacingTimeline); if (timeline) timeline.remove(); const legend document.getElementById(sensesLegend); if (legend) legend.remove(); // Close writer review panel const reviewPanel document.querySelector(.writer-review-panel); if (reviewPanel) reviewPanel.remove(); document.querySelector(.editor-body)?.classList.remove(has-review); document.querySelectorAll(.writer-btn).forEach(btn > btn.classList.remove(active)); // Reset paragraph styles document.querySelectorAll(#editorText p).forEach(p > { p.style.position ; p.style.marginLeft ; }); document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); updatePendingCount(); } function analyzeText(type) { clearState(); event.target.classList.add(active); document.getElementById(statusText).textContent AI is analyzing...; setTimeout(() > { const data analysisDatatype; if (!data) return; switch(type) { case exitPoints: renderExitPoints(data); break; case plotHoles: renderPlotHoles(data); break; case showDontTell: renderShowDontTell(data); break; case pacing: renderPacing(data); break; case senses: renderSenses(data); break; case cliches: renderCliches(data); break; } }, 600); } // EXIT POINTS - Danger meters on the side function renderExitPoints(data) { const editorText document.getElementById(editorText); editorText.style.position relative; editorText.style.marginLeft 70px; data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; para.style.position relative; const indicator document.createElement(div); indicator.className exit-point-indicator; indicator.innerHTML ` div classexit-meter> div classexit-meter-fill styleheight: ${item.dropRate}%>/div> /div> div classexit-percent>${item.dropRate}%/div> div classexit-label>drop/div> `; indicator.title item.reason; para.appendChild(indicator); activeAnnotations.push({ element: indicator }); }, index * 300); }); setTimeout(() > { const avgDrop Math.round(data.reduce((a, b) > a + b.dropRate, 0) / data.length); document.getElementById(statusText).textContent `Avg. reader drop-off: ${avgDrop}% — hover meters for details`; }, data.length * 300 + 100); } // PLOT HOLES - Question bubbles with connecting lines function renderPlotHoles(data) { const editorText document.getElementById(editorText); editorText.style.marginRight 200px; data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; para.style.position relative; // Highlight the text const html para.innerHTML; const newHtml html.replace(item.text, `span classplot-hole-highlight>${item.text}/span>`); para.innerHTML newHtml; // Add question bubble const bubble document.createElement(div); bubble.className plot-hole-bubble; bubble.innerHTML `span classbubble-icon>❓/span>${item.question}`; bubble.style.top 0; para.appendChild(bubble); activeAnnotations.push({ id: item.id, original: html }); }, index * 400); }); setTimeout(() > { document.getElementById(statusText).textContent `Found ${data.length} potential plot holes`; }, data.length * 400 + 100); } // SHOW DONT TELL - Transform cards function renderShowDontTell(data) { data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; const html para.innerHTML; const card `span classshow-tell-card> span classshow-tell-tag>TELLING/span> span classshow-tell-original>${item.telling}/span> span classshow-tell-arrow>→/span> span classshow-tell-better>${item.showing}/span> /span>`; const newHtml html.replace(item.telling, card); para.innerHTML newHtml; activeAnnotations.push({ id: item.id, original: html }); }, index * 400); }); setTimeout(() > { document.getElementById(statusText).textContent `Found ${data.length} telling phrases — see suggested showing alternatives`; }, data.length * 400 + 100); } // PACING - Timeline on the left function renderPacing(data) { const editorText document.getElementById(editorText); editorText.classList.add(has-pacing); editorText.style.position relative; const timeline document.createElement(div); timeline.className pacing-timeline; timeline.id pacingTimeline; data.forEach((item, index) > { const segment document.createElement(div); segment.className `pacing-segment ${item.speed}`; const icon item.speed slow ? 🐢 : item.speed fast ? 🐇 : 🚶; segment.innerHTML `${icon}span classpacing-label>${item.label}/span>`; timeline.appendChild(segment); }); editorText.insertBefore(timeline, editorText.firstChild); activeAnnotations.push({ element: timeline }); const slowCount data.filter(d > d.speed slow).length; document.getElementById(statusText).textContent `Pacing: ${slowCount} slow sections detected — 🐢 slow, 🐇 fast`; } // SENSES - Icons showing present/missing senses function renderSenses(data) { const senseIcons { sight: 👁️, sound: 👂, smell: 👃, touch: ✋, taste: 👅 }; // Add legend const legend document.createElement(div); legend.className senses-legend; legend.id sensesLegend; legend.innerHTML ` span>span classsense-icon present>✓/span> Present/span> span>span classsense-icon missing>!/span> Missing/span> span>| 👁️ Sight 👂 Sound 👃 Smell ✋ Touch 👅 Taste/span> `; const editorText document.getElementById(editorText); editorText.insertBefore(legend, editorText.firstChild); activeAnnotations.push({ element: legend }); data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; const html para.innerHTML; const checkHtml document.createElement(span); checkHtml.className senses-check; const allSenses sight, sound, smell, touch, taste; allSenses.forEach(sense > { const isPresent item.present.includes(sense); const isMissing item.missing.includes(sense); if (isPresent || isMissing) { const icon document.createElement(span); icon.className `sense-icon ${isPresent ? present : missing}`; icon.innerHTML senseIconssense; icon.title `${sense}: ${isPresent ? present : MISSING}`; checkHtml.appendChild(icon); } }); para.appendChild(checkHtml); activeAnnotations.push({ id: item.id, original: html }); }, index * 300); }); setTimeout(() > { const totalMissing data.reduce((a, b) > a + b.missing.length, 0); document.getElementById(statusText).textContent `${totalMissing} missing sensory details — add smell, sound, touch`; }, data.length * 300 + 100); } // CLICHÉS - Stamp overlays with freshness meter function renderCliches(data) { data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; const html para.innerHTML; const stampHtml `span classcliche-stamp> span classcliche-text>${item.text}/span> /span> span classcliche-freshness> div classfreshness-bar>div classfreshness-fill stylewidth: ${item.freshness}%>/div>/div> ${item.freshness}% fresh /span> span classcliche-suggestion>Try: ${item.suggestion}/span>`; const newHtml html.replace(item.text, stampHtml); para.innerHTML newHtml; activeAnnotations.push({ id: item.id, original: html }); }, index * 400); }); setTimeout(() > { document.getElementById(statusText).textContent `Found ${data.length} clichés — see freshness scores and alternatives`; }, data.length * 400 + 100); } // WRITERS ROOM - Famous author reviews function getWriterReview(writer) { // Clear any existing review panel const existingPanel document.querySelector(.writer-review-panel); if (existingPanel) existingPanel.remove(); document.querySelector(.editor-body)?.classList.remove(has-review); // Remove active state from all writer buttons document.querySelectorAll(.writer-btn).forEach(btn > btn.classList.remove(active)); const review writerReviewswriter; if (!review) return; // Set active state event.target.closest(.writer-btn).classList.add(active); document.getElementById(statusText).textContent `${review.name} is reviewing...`; setTimeout(() > { const editorMockup document.querySelector(.editor-mockup); editorMockup.style.position relative; editorMockup.style.overflow visible; const panel document.createElement(div); panel.className `writer-review-panel ${review.style}`; panel.innerHTML ` button classclose-review onclickcloseWriterReview()>✕/button> div classreview-header> div classwriter-avatar ${review.style}>${review.initials}/div> div classreview-header-text> h4>${review.name}/h4> span>${review.title}/span> /div> /div> div classreview-quote>${review.quote}/div> div classreview-suggestions> h5>Suggestions/h5> ${review.suggestions.map(s > ` div classsuggestion-item> span classicon>${s.icon}/span> span>${s.text}/span> /div> `).join()} /div> `; editorMockup.appendChild(panel); document.querySelector(.editor-body).classList.add(has-review); document.getElementById(statusText).textContent `${review.name}s review`; }, 800); } function closeWriterReview() { const panel document.querySelector(.writer-review-panel); if (panel) { panel.style.animation slideOut 0.3s ease forwards; setTimeout(() > { panel.remove(); document.querySelector(.editor-body)?.classList.remove(has-review); }, 300); } document.querySelectorAll(.writer-btn).forEach(btn > btn.classList.remove(active)); document.getElementById(statusText).textContent Ready; } // Writers Room Demo Section function showWriterDemo(writer) { const review writerReviewswriter; if (!review) return; // Update active state document.querySelectorAll(.writer-btn-large).forEach(btn > btn.classList.remove(active)); event.target.closest(.writer-btn-large).classList.add(active); // Update avatar const avatar document.getElementById(demoAvatar); avatar.className `writer-avatar-lg ${review.style}`; avatar.textContent review.initials; // Update text document.getElementById(demoWriterName).textContent review.name; document.getElementById(demoWriterBooks).textContent review.title; document.getElementById(demoQuote).textContent `${review.quote}`; // Update suggestions const suggestionsEl document.getElementById(demoSuggestions); suggestionsEl.innerHTML review.suggestions.map(s > ` div classdemo-suggestion>span>${s.icon}/span> ${s.text}/div> `).join(); // Add animation const card document.getElementById(demoReviewCard); card.style.animation none; card.offsetHeight; // Trigger reflow card.style.animation fadeIn 0.3s ease; } function applyEdit(style) { clearState(); event.target.classList.add(active); document.getElementById(statusText).textContent AI is analyzing...; setTimeout(() > { const styleEdits editsstyle; if (!styleEdits) return; styleEdits.forEach((edit, index) > { setTimeout(() > { applyInlineEdit(edit); }, index * 300); }); setTimeout(() > { updatePendingCount(); document.getElementById(statusText).textContent `${styleEdits.length} suggestions ready`; }, styleEdits.length * 300 + 100); }, 500); } function generateContent(type) { clearState(); event.target.classList.add(active); document.getElementById(statusText).textContent AI is writing...; document.getElementById(cursor).style.display none; document.getElementById(typingIndicator).classList.add(visible); setTimeout(() > { document.getElementById(typingIndicator).classList.remove(visible); const gen generatedTextstype; const container document.getElementById(generatedContent); const block document.createElement(div); block.className `ai-new-block ${gen.type}`; block.innerHTML ` div classai-new-header> span classai-new-tag>${gen.tag}/span> div classedit-actions> button classedit-btn accept onclickacceptGenerated(this)>✓/button> button classedit-btn reject onclickrejectGenerated(this)>✗/button> /div> /div> div classai-new-content>${gen.content}/div> `; container.appendChild(block); document.getElementById(cursor).style.display inline-block; document.getElementById(statusText).textContent New content generated; updateWordCount(); }, 1500); } function applyInlineEdit(edit) { const para document.getElementById(edit.id); if (!para) return; const editId `edit-${editCounter++}`; pendingEdits.push(editId); const html para.innerHTML; if (!html.includes(edit.old)) return; const editHtml `span classedit-wrapper id${editId}>span classedit-deleted>${edit.old}/span>span classedit-added>${edit.new}/span>span classedit-actions>button classedit-btn accept onclickacceptEdit(${editId}, ${encodeURIComponent(edit.old)}, ${encodeURIComponent(edit.new)})>✓/button>button classedit-btn reject onclickrejectEdit(${editId}, ${encodeURIComponent(edit.old)})>✗/button>/span>/span>`; para.innerHTML html.replace(edit.old, editHtml); updatePendingCount(); } function acceptEdit(editId, oldTextEncoded, newTextEncoded) { const wrapper document.getElementById(editId); if (!wrapper) return; const newText decodeURIComponent(newTextEncoded); wrapper.outerHTML newText; pendingEdits pendingEdits.filter(id > id ! editId); updatePendingCount(); updateWordCount(); } function rejectEdit(editId, oldTextEncoded) { const wrapper document.getElementById(editId); if (!wrapper) return; const oldText decodeURIComponent(oldTextEncoded); wrapper.outerHTML oldText; pendingEdits pendingEdits.filter(id > id ! editId); updatePendingCount(); } function acceptGenerated(btn) { const block btn.closest(.ai-new-block); const content block.querySelector(.ai-new-content).innerHTML; const p document.createElement(p); p.innerHTML content; p.style.background rgba(16, 185, 129, 0.1); p.style.padding 0.5rem; p.style.borderRadius 6px; p.style.transition background 1s; block.replaceWith(p); setTimeout(() > { p.style.background transparent; }, 2000); document.getElementById(statusText).textContent Content added ✓; document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); updateWordCount(); } function rejectGenerated(btn) { const block btn.closest(.ai-new-block); block.style.opacity 0; block.style.transform translateX(20px); setTimeout(() > { block.remove(); }, 300); document.getElementById(statusText).textContent Content rejected; document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); } function acceptAll() { document.querySelectorAll(.edit-wrapper).forEach(wrapper > { const addedText wrapper.querySelector(.edit-added).textContent; wrapper.outerHTML addedText; }); document.querySelectorAll(.ai-new-block).forEach(block > { const content block.querySelector(.ai-new-content).innerHTML; const p document.createElement(p); p.innerHTML content; block.replaceWith(p); }); pendingEdits ; updatePendingCount(); document.getElementById(statusText).textContent All changes accepted ✓; document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); updateWordCount(); } function rejectAll() { document.querySelectorAll(.edit-wrapper).forEach(wrapper > { const deletedText wrapper.querySelector(.edit-deleted).textContent; wrapper.outerHTML deletedText; }); document.querySelectorAll(.ai-new-block).forEach(block > { block.remove(); }); pendingEdits ; updatePendingCount(); document.getElementById(statusText).textContent All changes rejected; document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); } function resetText() { document.getElementById(p1).innerHTML originalText.p1; document.getElementById(p2).innerHTML originalText.p2; document.getElementById(p3).innerHTML originalText.p3; } function updatePendingCount() { const editCount document.querySelectorAll(.edit-wrapper).length; const genCount document.querySelectorAll(.ai-new-block).length; const count editCount + genCount; document.getElementById(pendingCount).textContent count; const bulkActions document.getElementById(bulkActions); if (count > 0) { bulkActions.classList.add(visible); } else { bulkActions.classList.remove(visible); } } function updateWordCount() { const text document.getElementById(editorText).innerText; const words text.trim().split(/\s+/).filter(w > w.length > 0).length; document.getElementById(wordCount).textContent words; } async function copyToClipboard(text) { if (navigator?.clipboard?.writeText) { await navigator.clipboard.writeText(text); return; } const textarea document.createElement(textarea); textarea.value text; textarea.setAttribute(readonly, ); textarea.style.position fixed; textarea.style.top -1000px; textarea.style.left -1000px; document.body.appendChild(textarea); textarea.select(); const ok document.execCommand(copy); textarea.remove(); if (!ok) throw new Error(Copy failed); } function copyReaderShareLink() { const shareUrl https://editor.bossgpt.com; const btn document.getElementById(shareReaderLinkBtn); const label btn?.querySelector(.btn-label); const originalLabel (label?.textContent || Share Link).trim(); if (!btn || !label) { window.open(shareUrl, _blank, noopener,noreferrer); return; } copyToClipboard(shareUrl).then(() > { label.textContent Copied ✓; btn.classList.add(is-copied); const existing btn.dataset.resetTimeoutId ? Number(btn.dataset.resetTimeoutId) : 0; if (existing) window.clearTimeout(existing); btn.dataset.resetTimeoutId String(window.setTimeout(() > { label.textContent originalLabel; btn.classList.remove(is-copied); }, 1800)); }).catch(() > { window.prompt(Copy this link:, shareUrl); }); } let readerActiveTimeout null; function setActiveReaderPara(targetEl) { document.querySelectorAll(.reader-window .story-paragraph.is-active).forEach(el > el.classList.remove(is-active)); targetEl.classList.add(is-active); if (readerActiveTimeout) window.clearTimeout(readerActiveTimeout); readerActiveTimeout window.setTimeout(() > targetEl.classList.remove(is-active), 2000); } function scrollToReaderPara(paraNumber, hotspotEl) { const target document.querySelector(`.reader-window .story-paragraphdata-para${paraNumber}`); if (!target) return; if (hotspotEl) { document.querySelectorAll(.reader-window .hotspot-item.is-active).forEach(el > el.classList.remove(is-active)); hotspotEl.classList.add(is-active); } target.scrollIntoView({ behavior: smooth, block: center }); setActiveReaderPara(target); } function initReaderAnalyticsDemo() { document.querySelectorAll(.reader-window .hotspot-itemdata-reader-para).forEach(item > { item.addEventListener(click, () > scrollToReaderPara(Number(item.dataset.readerPara), item)); item.addEventListener(keydown, (e) > { if (e.key Enter || e.key ) { e.preventDefault(); item.click(); } }); }); document.querySelectorAll(.reader-window .story-paragraphdata-para).forEach(para > { para.addEventListener(click, () > setActiveReaderPara(para)); }); } initReaderAnalyticsDemo(); // Version History tab switching function initVersionHistoryTabs() { const tabs document.querySelectorAll(.compare-tab); const compareArea document.querySelector(.version-compare); tabs.forEach(tab > { tab.addEventListener(click, () > { tabs.forEach(t > t.classList.remove(active)); tab.classList.add(active); if (tab.textContent Unified) { compareArea.classList.add(unified-view); } else { compareArea.classList.remove(unified-view); } }); }); } initVersionHistoryTabs(); // Version History timeline item selection const versionData { now: { oldBadge: 2 hours ago, oldLabel: Added cliffhanger ending, oldContent: `p>I tried to tiptoe out, but the door wouldnt budge./p> p>I kept pulling on the handle./p> p>The warehouse was dark and scary./p>`, newContent: `p>I tried to tiptoe out, but the door wouldnt budge./p> p>I kept pulling like crazy until I ended up with the knob in my hand./p> p>Oh my god. Could this get any worse? span classdiff-added>The answer, of course, was yes./span>/p>` }, v4: { oldBadge: 2 hours ago, oldLabel: Added Zoe description, oldContent: `p>I peeked, and there was Carter with his girlfriend./p> p>span classdiff-removed>She seemed nice./span>/p> p>I tried to leave quietly./p>`, newContent: `p>I peeked, and there was Carter, hugging and laughing with his girlfriend, Zoe./p> p>span classdiff-added>She was the queen bee and the head cheerleader. She was mean, and everyone was scared of her./span>/p> p>I tried to leave quietly./p>` }, v3: { oldBadge: Yesterday, oldLabel: Rewrote warehouse scene, oldContent: `p>I got to the warehouse. span classdiff-removed>It was dark inside./span>/p> p>span classdiff-removed>I walked in./span>/p> p>I started looking for Carter./p>`, newContent: `p>I got there, only to find darkness. span classdiff-added>The warehouse was small, with no windows or anything./span>/p> p>span classdiff-added>I started calling out for Carter when I heard noises behind some shelves./span>/p> p>I started looking for Carter./p>` }, v2: { oldBadge: 3 days ago, oldLabel: Major plot revision, oldContent: `p>Carter sent me a text. span classdiff-removed>He wanted to talk./span>/p> p>span classdiff-removed>I decided to go meet him./span>/p> p>I went to the warehouse./p>`, newContent: `p>Carter: Hey, I need to tell you something important. Meet me in the warehouse behind the school. NOW!/p> p>span classdiff-added>Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am and decided to ask me out./span>/p> p>span classdiff-added>So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding./span>/p>` }, v1: { oldBadge: 1 week ago, oldLabel: First draft, oldContent: `p>span classdiff-removed>School ended./span>/p> p>span classdiff-removed>I got a text./span>/p>`, newContent: `p>span classdiff-added>The school day ended, and I was walking to the bus when I got a message from my crush, Carter./span>/p> p>span classdiff-added>Carter was the school jock, who never even knew I existed./span>/p> p>span classdiff-added>But today, everything was about to change./span>/p>` } }; function initVersionTimeline() { const items document.querySelectorAll(.timeline-marker); const oldPanel document.querySelector(.compare-panel.old); const newPanel document.querySelector(.compare-panel.new); items.forEach(item > { item.style.cursor pointer; item.addEventListener(click, () > { items.forEach(i > i.classList.remove(selected)); item.classList.add(selected); const version item.dataset.version; const data versionDataversion; if (data && oldPanel && newPanel) { oldPanel.querySelector(.compare-badge).textContent data.oldBadge; oldPanel.querySelector(.compare-header span:last-child).textContent data.oldLabel; oldPanel.querySelector(.compare-content).innerHTML data.oldContent; newPanel.querySelector(.compare-content).innerHTML data.newContent; } }); }); } initVersionTimeline(); // Scroll-triggered reveal animations const revealSections document.querySelectorAll(.writers-room-section, .pacing-section, .reader-insights-section, .version-history-section, .collab-section, .goals-section, .pricing, .testimonials, .cta-section); revealSections.forEach(section > { section.classList.add(reveal-section); }); const revealObserver new IntersectionObserver((entries) > { entries.forEach(entry > { if (entry.isIntersecting) { entry.target.classList.add(visible); } }); }, { threshold: 0.1, rootMargin: 0px 0px -50px 0px }); document.querySelectorAll(.reveal-section).forEach(section > { revealObserver.observe(section); }); /script>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Thu, 26 Feb 2026 13:30:28 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: keep-aliveServer: cloudflareLast-Modified: Sat, 03 Jan 2026 22:35:19 GMTNel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}vary: accept-encodingCache-Control: no-cacheReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?s8MBxQ7QndbB03R%2BJw%2BNBf06%2B6If1es1hAD7r6DNrYZxQdNJNsYOw%2FWaYOjm0jBcWZdfaKfnjDkCXVuAYbOnP8%2F0yP1A6v6vOuGnl}}cf-cache-status: DYNAMICCF-RAY: 9d3fcc18a871ac0d-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langen>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>bossgpt.com/title> link hrefhttps://fonts.googleapis.com/css2?familyFraunces:ital,wght@0,400;0,700;1,400&familyDM+Sans:wght@400;500;600;700&displayswap relstylesheet> style> * { margin: 0; padding: 0; box-sizing: border-box; } :root { --cream: #faf8f3; --dark: #1c1c1c; --accent: #2563eb; --accent-light: #dbeafe; --warm: #f59e0b; --green: #10b981; --green-light: #d1fae5; --red: #ef4444; --red-light: #fee2e2; --purple: #8b5cf6; --purple-light: #ede9fe; } body { background: var(--cream); color: var(--dark); font-family: DM Sans, sans-serif; line-height: 1.6; } /* Navigation */ nav { display: flex; justify-content: space-between; align-items: center; padding: 1.5rem 4rem; position: sticky; top: 0; background: var(--cream); z-index: 100; border-bottom: 1px solid rgba(0,0,0,0.05); } .logo { font-family: Fraunces, serif; font-size: 1.6rem; font-weight: 700; } .nav-links { display: flex; gap: 2rem; align-items: center; } .nav-links a { color: var(--dark); text-decoration: none; font-size: 0.95rem; font-weight: 500; opacity: 0.7; transition: opacity 0.3s; } .nav-links a:hover { opacity: 1; } .nav-cta { background: var(--dark); color: var(--cream) !important; padding: 0.75rem 1.5rem; border-radius: 8px; opacity: 1 !important; text-decoration: none; font-weight: 600; display: inline-flex; align-items: center; gap: 0.5rem; transition: transform 0.2s ease, background 0.2s ease; } .nav-cta:hover { background: #333; transform: translateY(-2px); } /* Hero Section */ .hero { padding: 4rem 4rem 6rem; } .hero-top { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 2rem; } .hero-badge { display: inline-flex; align-items: center; gap: 0.5rem; background: var(--accent-light); color: var(--accent); padding: 0.6rem 1.2rem; border-radius: 50px; font-size: 0.85rem; font-weight: 600; } .hero-meta { text-align: right; font-size: 0.85rem; color: #888; } .hero-content { text-align: center; max-width: 700px; margin: 0 auto 3rem; } .hero-content h1 { font-family: Fraunces, serif; font-size: 4rem; font-weight: 400; line-height: 1.15; margin-bottom: 1.5rem; } .hero-content h1 em { font-style: italic; color: var(--accent); } .hero-content p { font-size: 1.2rem; color: #666; margin-bottom: 2rem; line-height: 1.8; } .btn { padding: 1rem 2rem; font-family: DM Sans, sans-serif; font-size: 1rem; font-weight: 600; border-radius: 8px; cursor: pointer; transition: all 0.3s; text-decoration: none; display: inline-flex; align-items: center; gap: 0.5rem; border: none; } .btn-primary { background: var(--dark); color: var(--cream); } .btn-primary:hover { background: #333; transform: translateY(-2px); } .btn-text { background: transparent; color: var(--dark); text-decoration: underline; text-underline-offset: 4px; } .cta-group { display: flex; gap: 1.5rem; align-items: center; justify-content: center; } /* Editor Card */ .editor-card { background: #fff; border-radius: 24px; box-shadow: 0 0 0 1px rgba(0,0,0,0.03), 0 20px 50px rgba(0,0,0,0.08); overflow: hidden; max-width: 950px; margin: 0 auto; } .editor-nav { background: var(--dark); padding: 1rem 1.5rem; display: flex; align-items: center; justify-content: space-between; } .editor-nav-left { display: flex; align-items: center; gap: 1rem; } .dots { display: flex; gap: 6px; } .dot { width: 10px; height: 10px; border-radius: 50%; } .dot.red { background: #ff5f57; } .dot.yellow { background: #febc2e; } .dot.green { background: #28c840; } .doc-title { color: rgba(255,255,255,0.7); font-size: 0.85rem; } /* AI Toolbar */ .ai-toolbar { background: #f8f8f8; border-bottom: 1px solid #eee; } .ai-row { padding: 0.75rem 1.5rem; display: flex; gap: 0.5rem; overflow-x: auto; align-items: center; border-bottom: 1px solid #eee; } .ai-row:last-child { border-bottom: none; } .ai-row-label { font-size: 0.7rem; font-weight: 600; color: #888; text-transform: uppercase; letter-spacing: 1px; margin-right: 0.5rem; white-space: nowrap; min-width: 70px; } .ai-chip { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.5rem 1rem; background: #fff; border: 1px solid #e5e5e5; border-radius: 20px; font-size: 0.8rem; font-weight: 500; cursor: pointer; transition: all 0.2s; white-space: nowrap; font-family: DM Sans, sans-serif; } .ai-chip:hover { border-color: var(--accent); background: var(--accent-light); color: var(--accent); transform: translateY(-1px); } .ai-chip.analyze { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); border-color: #f59e0b; } .ai-chip.analyze:hover { background: linear-gradient(135deg, #fde68a 0%, #fbbf24 100%); border-color: #d97706; color: #92400e; } /* EXIT POINTS - Danger meter on side */ .exit-point-indicator { position: absolute; left: -60px; top: 0; width: 50px; display: flex; flex-direction: column; align-items: center; gap: 4px; } .exit-meter { width: 8px; height: 40px; background: #e5e5e5; border-radius: 4px; overflow: hidden; position: relative; } .exit-meter-fill { position: absolute; bottom: 0; width: 100%; background: linear-gradient(to top, #22c55e, #eab308, #ef4444); border-radius: 4px; transition: height 0.5s ease; } .exit-percent { font-size: 0.65rem; font-weight: 700; color: #ef4444; } .exit-label { font-size: 0.5rem; color: #888; text-transform: uppercase; } .para-with-indicator { position: relative; margin-left: 60px !important; } /* PLOT HOLES - Question bubbles with lines */ .plot-hole-bubble { position: absolute; right: -180px; background: #8b5cf6; color: white; padding: 8px 12px; border-radius: 12px; font-size: 0.7rem; max-width: 160px; box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3); animation: bubblePop 0.3s ease; } .plot-hole-bubble::before { content: ; position: absolute; left: -30px; top: 50%; width: 30px; height: 2px; background: repeating-linear-gradient(90deg, #8b5cf6 0, #8b5cf6 4px, transparent 4px, transparent 8px); } .plot-hole-bubble .bubble-icon { font-size: 1rem; margin-right: 4px; } @keyframes bubblePop { 0% { transform: scale(0); opacity: 0; } 100% { transform: scale(1); opacity: 1; } } .plot-hole-highlight { background: #ede9fe; border: 2px dashed #8b5cf6; border-radius: 4px; padding: 0 4px; } /* SHOW DONT TELL - Transform cards */ .show-tell-card { display: inline-flex; align-items: center; gap: 8px; background: linear-gradient(135deg, #fff7ed, #ffedd5); border: 1px solid #f97316; border-radius: 8px; padding: 6px 10px; margin: 4px 0; font-size: 0.75rem; } .show-tell-original { color: #9a3412; text-decoration: line-through; opacity: 0.7; } .show-tell-arrow { color: #f97316; font-weight: bold; font-size: 1.1rem; } .show-tell-better { color: #16a34a; font-weight: 600; font-style: italic; } .show-tell-tag { background: #f97316; color: white; font-size: 0.55rem; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: 700; letter-spacing: 0.5px; } /* PACING - Timeline on left */ .pacing-timeline { position: absolute; left: -50px; top: 0; bottom: 0; width: 40px; display: flex; flex-direction: column; gap: 8px; } .pacing-segment { flex: 1; display: flex; align-items: center; justify-content: center; border-radius: 6px; font-size: 1.2rem; position: relative; transition: all 0.3s; } .pacing-segment.slow { background: linear-gradient(135deg, #cffafe, #a5f3fc); border: 2px solid #06b6d4; } .pacing-segment.medium { background: linear-gradient(135deg, #fef3c7, #fde68a); border: 2px solid #f59e0b; } .pacing-segment.fast { background: linear-gradient(135deg, #fee2e2, #fecaca); border: 2px solid #ef4444; } .pacing-label { position: absolute; left: 100%; margin-left: 8px; font-size: 0.6rem; color: #666; white-space: nowrap; opacity: 0; transition: opacity 0.2s; } .pacing-segment:hover .pacing-label { opacity: 1; } .editor-text.has-pacing { margin-left: 50px; } /* SENSES - Floating icons */ .senses-check { display: inline-flex; gap: 4px; margin-left: 8px; vertical-align: middle; } .sense-icon { width: 22px; height: 22px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; transition: all 0.2s; cursor: help; } .sense-icon.present { background: #dcfce7; border: 2px solid #22c55e; } .sense-icon.missing { background: #fee2e2; border: 2px solid #ef4444; animation: pulse 2s infinite; } .sense-icon.missing::after { content: !; position: absolute; top: -4px; right: -4px; width: 12px; height: 12px; background: #ef4444; color: white; border-radius: 50%; font-size: 0.5rem; font-weight: bold; display: flex; align-items: center; justify-content: center; } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } .senses-legend { display: flex; gap: 12px; padding: 8px 12px; background: #f8f8f8; border-radius: 8px; margin-bottom: 12px; font-size: 0.7rem; } .senses-legend span { display: flex; align-items: center; gap: 4px; } /* CLICHÉS - Stamp overlays */ .cliche-stamp { position: relative; display: inline-block; } .cliche-stamp::after { content: CLICHÉ; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotate(-12deg); background: rgba(234, 179, 8, 0.9); color: #713f12; font-size: 0.55rem; font-weight: 900; padding: 2px 8px; border: 2px solid #713f12; border-radius: 4px; letter-spacing: 1px; pointer-events: none; } .cliche-text { background: #fef9c3; padding: 0 4px; border-radius: 2px; text-decoration: wavy underline #eab308; } .cliche-freshness { display: inline-flex; align-items: center; gap: 4px; margin-left: 8px; font-size: 0.65rem; color: #92400e; } .freshness-bar { width: 50px; height: 6px; background: #e5e5e5; border-radius: 3px; overflow: hidden; } .freshness-fill { height: 100%; background: linear-gradient(90deg, #ef4444, #f59e0b); border-radius: 3px; } .cliche-suggestion { display: block; font-size: 0.7rem; color: #16a34a; margin-top: 4px; padding-left: 12px; border-left: 2px solid #22c55e; } /* WRITERS ROOM */ .writers-room { display: flex; align-items: center; gap: 1rem; padding: 0.75rem 1.5rem; background: linear-gradient(135deg, #1c1c1c 0%, #2d2d2d 100%); border-bottom: 1px solid #333; } .writers-label { font-size: 0.7rem; font-weight: 600; color: #888; text-transform: uppercase; letter-spacing: 1px; white-space: nowrap; } .writer-avatars { display: flex; gap: 0.5rem; } .writer-btn { display: flex; flex-direction: column; align-items: center; gap: 4px; background: none; border: none; cursor: pointer; padding: 6px; border-radius: 8px; transition: all 0.2s; } .writer-btn:hover { background: rgba(255,255,255,0.1); transform: translateY(-2px); } .writer-btn.active .writer-avatar { box-shadow: 0 0 0 3px #f59e0b; } .writer-avatar { width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.75rem; color: white; transition: all 0.2s; } .writer-avatar.hemingway { background: linear-gradient(135deg, #78350f, #a16207); } .writer-avatar.king { background: linear-gradient(135deg, #450a0a, #7f1d1d); } .writer-avatar.austen { background: linear-gradient(135deg, #831843, #be185d); } .writer-avatar.poe { background: linear-gradient(135deg, #1e1b4b, #3730a3); } .writer-avatar.twain { background: linear-gradient(135deg, #14532d, #166534); } .writer-name { font-size: 0.6rem; color: #aaa; font-family: DM Sans, sans-serif; } /* Writer Review Panel */ .writer-review-panel { position: absolute; top: 0; right: -320px; width: 300px; height: 100%; background: #faf8f3; border-left: 3px solid; padding: 1.5rem; overflow-y: auto; animation: slideIn 0.3s ease; box-shadow: -4px 0 20px rgba(0,0,0,0.1); } @keyframes slideIn { from { right: -320px; opacity: 0; } to { right: 0; opacity: 1; } } @keyframes slideOut { from { right: 0; opacity: 1; } to { right: -320px; opacity: 0; } } .writer-review-panel.hemingway { border-color: #a16207; } .writer-review-panel.king { border-color: #7f1d1d; } .writer-review-panel.austen { border-color: #be185d; } .writer-review-panel.poe { border-color: #3730a3; } .writer-review-panel.twain { border-color: #166534; } .review-header { display: flex; align-items: center; gap: 12px; margin-bottom: 1rem; padding-bottom: 1rem; border-bottom: 1px solid #e5e5e5; } .review-header .writer-avatar { width: 50px; height: 50px; font-size: 1rem; } .review-header-text h4 { font-family: Fraunces, serif; font-size: 1.1rem; margin-bottom: 2px; } .review-header-text span { font-size: 0.75rem; color: #666; } .review-quote { font-family: Fraunces, serif; font-style: italic; font-size: 0.95rem; line-height: 1.7; color: #333; margin-bottom: 1.5rem; padding: 1rem; background: white; border-radius: 8px; position: relative; } .review-quote::before { content: ; font-size: 3rem; position: absolute; top: -10px; left: 10px; color: #ddd; font-family: Georgia, serif; } .review-suggestions { font-size: 0.85rem; } .review-suggestions h5 { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 1px; color: #888; margin-bottom: 0.75rem; } .suggestion-item { display: flex; gap: 8px; margin-bottom: 0.75rem; padding: 0.5rem; background: white; border-radius: 6px; font-size: 0.8rem; } .suggestion-item .icon { font-size: 1rem; } .close-review { position: absolute; top: 1rem; right: 1rem; background: none; border: none; font-size: 1.2rem; cursor: pointer; color: #888; padding: 4px 8px; border-radius: 4px; } .close-review:hover { background: #eee; color: #333; } .editor-body.has-review { margin-right: 300px; transition: margin-right 0.3s; } .ai-chip.active { background: var(--accent); color: #fff; border-color: var(--accent); } .ai-chip.purple:hover { border-color: var(--purple); background: var(--purple-light); color: var(--purple); } .ai-chip.purple.active { background: var(--purple); border-color: var(--purple); } .ai-chip.green:hover { border-color: var(--green); background: var(--green-light); color: var(--green); } .ai-chip.green.active { background: var(--green); border-color: var(--green); } .ai-chip.warm:hover { border-color: var(--warm); background: #fef3c7; color: #b45309; } .ai-chip.warm.active { background: var(--warm); border-color: var(--warm); color: #fff; } /* Editor Body */ .editor-body { padding: 2rem 2.5rem; min-height: 400px; } .editor-chapter { font-size: 0.75rem; font-weight: 600; letter-spacing: 2px; text-transform: uppercase; color: #aaa; margin-bottom: 1rem; } .editor-title { font-family: Fraunces, serif; font-size: 1.8rem; margin-bottom: 1.5rem; } .editor-text { font-size: 1.05rem; line-height: 2; color: #333; } .editor-text p { margin-bottom: 1.2rem; } /* Inline Edit Styles */ .edit-wrapper { display: inline; position: relative; } .edit-deleted { background: var(--red-light); color: var(--red); text-decoration: line-through; padding: 2px 4px; border-radius: 3px; margin-right: 4px; } .edit-added { background: var(--green-light); color: #065f46; padding: 2px 4px; border-radius: 3px; position: relative; } .edit-actions { display: inline-flex; gap: 4px; margin-left: 6px; vertical-align: middle; } .edit-btn { width: 22px; height: 22px; border-radius: 50%; border: none; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; transition: all 0.2s; vertical-align: middle; } .edit-btn.accept { background: var(--green); color: #fff; } .edit-btn.accept:hover { background: #059669; transform: scale(1.1); } .edit-btn.reject { background: #e5e5e5; color: #666; } .edit-btn.reject:hover { background: var(--red); color: #fff; transform: scale(1.1); } /* AI Generated Block (for new content) */ .ai-new-block { background: var(--purple-light); border-left: 3px solid var(--purple); padding: 1rem 1.5rem; margin: 1.2rem 0; border-radius: 0 12px 12px 0; animation: slideIn 0.4s ease; } .ai-new-block.dialog { background: #fef3c7; border-left-color: var(--warm); } .ai-new-block.continue { background: var(--green-light); border-left-color: var(--green); } @keyframes slideIn { from { opacity: 0; transform: translateX(-10px); } to { opacity: 1; transform: translateX(0); } } .ai-new-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.75rem; } .ai-new-tag { background: var(--purple); color: #fff; padding: 3px 10px; border-radius: 4px; font-size: 0.7rem; font-weight: 600; } .ai-new-block.dialog .ai-new-tag { background: var(--warm); } .ai-new-block.continue .ai-new-tag { background: var(--green); } .ai-new-content { font-style: italic; color: #333; line-height: 1.8; } .ai-new-content .dialog-line { margin-bottom: 0.5rem; } /* Cursor */ .cursor { display: inline-block; width: 2px; height: 1.1em; background: var(--accent); animation: blink 1s infinite; vertical-align: text-bottom; margin-left: 2px; } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } /* Editor Status Bar */ .editor-status { padding: 0.75rem 1.5rem; background: #fafafa; border-top: 1px solid #eee; display: flex; justify-content: space-between; font-size: 0.8rem; color: #888; } .status-left { display: flex; gap: 1.5rem; } .status-ai { color: var(--accent); font-weight: 500; } /* Accept/Reject All Bar */ .bulk-actions { display: none; padding: 0.75rem 1.5rem; background: var(--accent-light); border-bottom: 1px solid #bfdbfe; justify-content: space-between; align-items: center; } .bulk-actions.visible { display: flex; } .bulk-actions span { font-size: 0.85rem; color: var(--accent); font-weight: 500; } .bulk-btns { display: flex; gap: 0.5rem; } .bulk-btn { padding: 0.4rem 1rem; border-radius: 6px; font-size: 0.8rem; font-weight: 500; cursor: pointer; border: none; font-family: DM Sans, sans-serif; } .bulk-btn.accept-all { background: var(--green); color: #fff; } .bulk-btn.reject-all { background: #fff; color: #666; border: 1px solid #ddd; } /* Typing indicator */ .typing-indicator { display: none; align-items: center; gap: 0.5rem; padding: 1rem; color: #888; font-size: 0.9rem; } .typing-indicator.visible { display: flex; } .typing-dots { display: flex; gap: 4px; } .typing-dots span { width: 8px; height: 8px; background: var(--accent); border-radius: 50%; animation: typingBounce 1.4s infinite ease-in-out; } .typing-dots span:nth-child(1) { animation-delay: 0s; } .typing-dots span:nth-child(2) { animation-delay: 0.2s; } .typing-dots span:nth-child(3) { animation-delay: 0.4s; } @keyframes typingBounce { 0%, 80%, 100% { transform: translateY(0); } 40% { transform: translateY(-6px); } } /* SVG ICON STYLES */ .suggestion-icon { width: 16px; height: 16px; color: var(--accent); flex-shrink: 0; } .pacing-indicator { display: flex; align-items: center; justify-content: center; } .pacing-indicator svg { width: 18px; height: 18px; } .pacing-bar.slow .pacing-indicator { color: #0891b2; } .pacing-bar.fast .pacing-indicator { color: #dc2626; } .pacing-bar.medium .pacing-indicator { color: #d97706; } .insight-icon-svg { width: 20px; height: 20px; color: var(--accent); flex-shrink: 0; } .list-icon { width: 14px; height: 14px; color: var(--accent); flex-shrink: 0; margin-right: 6px; } .marker-icon-svg { width: 16px; height: 16px; margin-right: 6px; } .reader-marker.pause .marker-icon-svg { color: #f59e0b; } .reader-marker.stop .marker-icon-svg { color: #ef4444; } .analytics-icon-svg { width: 18px; height: 18px; color: var(--purple); flex-shrink: 0; } .hotspot-icon { width: 12px; height: 12px; margin-right: 4px; vertical-align: middle; } .share-icon { width: 16px; height: 16px; margin-right: 6px; vertical-align: middle; } .btn-icon { width: 16px; height: 16px; margin-right: 6px; vertical-align: middle; } .collab-feature-icon-svg { width: 28px; height: 28px; color: var(--green); margin-bottom: 0.75rem; } .stat-icon-svg { width: 32px; height: 32px; color: #666; } .stat-icon-svg.flame { color: white; } .trend-arrow { width: 14px; height: 14px; color: #22c55e; vertical-align: middle; } .badge-icon-svg { width: 24px; height: 24px; margin-bottom: 6px; } .badge.earned .badge-icon-svg { color: #f59e0b; } .badge.locked .badge-icon-svg { color: #999; } .bento-icon-svg { width: 40px; height: 40px; color: var(--accent); margin-bottom: 1rem; } /* Logos Section */ .logos-section { padding: 3rem 4rem; border-top: 1px solid rgba(0,0,0,0.05); border-bottom: 1px solid rgba(0,0,0,0.05); } .logos-label { text-align: center; font-size: 0.8rem; font-weight: 500; letter-spacing: 2px; text-transform: uppercase; color: #aaa; margin-bottom: 2rem; } .logos-row { display: flex; justify-content: center; gap: 4rem; opacity: 0.4; } .logo-item { font-family: Fraunces, serif; font-size: 1.5rem; font-weight: 700; } /* Features Section */ .features { padding: 6rem 4rem; } .section-label { font-size: 0.8rem; font-weight: 600; letter-spacing: 2px; text-transform: uppercase; color: var(--accent); margin-bottom: 1rem; } .section-header { max-width: 600px; margin-bottom: 4rem; } .section-header h2 { font-family: Fraunces, serif; font-size: 3rem; font-weight: 400; margin-bottom: 1rem; } .section-header p { color: #666; font-size: 1.1rem; } .features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; } .feature-card { background: #fff; padding: 2rem; border-radius: 16px; border: 1px solid #eee; transition: all 0.3s; } .feature-card:hover { transform: translateY(-4px); box-shadow: 0 20px 40px rgba(0,0,0,0.06); border-color: var(--accent); } .feature-icon { width: 50px; height: 50px; background: var(--accent-light); border-radius: 12px; display: flex; align-items: center; justify-content: center; margin-bottom: 1.5rem; font-size: 1.4rem; } .feature-card h3 { font-size: 1.15rem; margin-bottom: 0.75rem; } .feature-card p { color: #666; font-size: 0.95rem; line-height: 1.7; } /* Writers Room Section */ .writers-room-section { padding: 6rem 4rem; background: linear-gradient(180deg, #1c1c1c 0%, #2d2d2d 100%); color: white; } .writers-room-section .section-label { color: #f59e0b; } .writers-room-section .section-header h2 { color: white; } .writers-room-section .section-header p { color: #aaa; } /* Writers Window Editor Styles */ .writers-window { margin-top: 3rem; max-width: 1000px; margin-left: auto; margin-right: auto; } .writers-window-body { display: grid; grid-template-columns: 280px 1fr; } .writers-sidebar { background: rgba(0,0,0,0.3); border-right: 1px solid rgba(255,255,255,0.08); padding: 20px; } .writers-sidebar .sidebar-header { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 1px; color: rgba(255,255,255,0.4); margin-bottom: 16px; font-weight: 600; } .writers-main { padding: 24px; background: rgba(0,0,0,0.15); } .writer-avatars-large { display: flex; flex-direction: column; gap: 0.75rem; } .writer-btn-large { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.25rem; background: rgba(255,255,255,0.05); border: 2px solid transparent; border-radius: 12px; cursor: pointer; transition: all 0.3s; text-align: left; } .writer-btn-large:hover { background: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.2); } .writer-btn-large.active { background: rgba(255,255,255,0.15); border-color: #f59e0b; } .writer-avatar-lg { width: 50px; height: 50px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.9rem; color: white; flex-shrink: 0; } .writer-avatar-lg.hemingway { background: linear-gradient(135deg, #78350f, #a16207); } .writer-avatar-lg.king { background: linear-gradient(135deg, #450a0a, #7f1d1d); } .writer-avatar-lg.austen { background: linear-gradient(135deg, #831843, #be185d); } .writer-avatar-lg.poe { background: linear-gradient(135deg, #1e1b4b, #3730a3); } .writer-avatar-lg.twain { background: linear-gradient(135deg, #14532d, #166534); } .writer-info { display: flex; flex-direction: column; } .writer-name-lg { color: white; font-weight: 600; font-size: 0.95rem; } .writer-style { color: #888; font-size: 0.75rem; } .demo-review-card { background: #faf8f3; border-radius: 16px; padding: 2rem; color: #1c1c1c; box-shadow: 0 20px 60px rgba(0,0,0,0.3); } .demo-review-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid #eee; } .demo-review-header h4 { font-family: Fraunces, serif; font-size: 1.2rem; margin: 0; } .demo-review-header span { font-size: 0.8rem; color: #666; } .demo-review-quote { font-family: Fraunces, serif; font-style: italic; font-size: 1.1rem; line-height: 1.8; color: #333; margin-bottom: 1.5rem; padding: 1.25rem; background: white; border-radius: 8px; border-left: 4px solid #f59e0b; } .demo-suggestions { display: flex; flex-direction: column; gap: 0.75rem; } .demo-suggestion { display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; background: white; border-radius: 8px; font-size: 0.9rem; } .demo-suggestion span { font-size: 1.1rem; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Pacing Analysis Section */ .pacing-section { padding: 6rem 4rem; background: linear-gradient(180deg, #faf8f3 0%, #f5f0e8 100%); } .pacing-demo { display: grid; grid-template-columns: 1.4fr 1fr; gap: 2rem; margin-top: 3rem; align-items: start; } .pacing-overview { max-width: 700px; margin: 3rem auto 0; } .pacing-main-card { background: white; border-radius: 20px; box-shadow: 0 10px 50px rgba(0,0,0,0.1); overflow: hidden; } .pacing-card-header { display: flex; justify-content: space-between; align-items: center; padding: 1.25rem 1.75rem; background: linear-gradient(135deg, #1e293b 0%, #334155 100%); color: white; } .pacing-card-title { display: flex; flex-direction: column; gap: 0.25rem; } .book-title { font-family: Fraunces, serif; font-size: 1.2rem; font-weight: 600; } .book-stats { font-size: 0.8rem; opacity: 0.7; } .pacing-score-pill { display: flex; align-items: baseline; gap: 2px; background: rgba(255,255,255,0.15); padding: 0.5rem 1rem; border-radius: 30px; } .score-num { font-size: 1.5rem; font-weight: 700; } .score-max { font-size: 0.85rem; opacity: 0.7; } .pacing-viz-container { padding: 2rem 1.75rem; position: relative; } .rhythm-map { display: flex; align-items: flex-end; justify-content: space-between; height: 140px; gap: 6px; } .rhythm-bar { flex: 1; height: var(--height); background: linear-gradient(180deg, #3b82f6 0%, #60a5fa 100%); border-radius: 4px 4px 0 0; position: relative; transition: all 0.3s ease; } .rhythm-bar.peak { background: linear-gradient(180deg, #f59e0b 0%, #fbbf24 100%); } .rhythm-bar:hover { filter: brightness(1.1); transform: scaleY(1.05); transform-origin: bottom; } .rhythm-bardata-label:not(data-label)::after { content: attr(data-label); position: absolute; bottom: -24px; left: 50%; transform: translateX(-50%); font-size: 0.7rem; color: #64748b; white-space: nowrap; } .pacing-insights-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: #e5e7eb; border-top: 1px solid #e5e7eb; } .insight-box { display: flex; align-items: center; gap: 0.75rem; padding: 1rem 1.25rem; background: #f8fafc; } .insight-icon { width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; border-radius: 10px; font-size: 1.1rem; } .insight-icon.slow { background: #fef2f2; } .insight-icon.good { background: #f0fdf4; color: #16a34a; font-weight: 700; } .insight-icon.peak { background: #fffbeb; } .insight-text { display: flex; flex-direction: column; gap: 2px; } .insight-text strong { font-size: 0.85rem; font-weight: 600; color: #1e293b; } .insight-text span { font-size: 0.75rem; color: #64748b; } .pacing-window-body { padding: 22px; background: #fff; display: grid; gap: 18px; } .pacing-chart { background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%); border: 1px solid rgba(0,0,0,0.06); border-radius: 16px; padding: 18px 18px 14px; } .pacing-chart-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; } .pacing-chart-title { font-size: 0.95rem; font-weight: 600; color: #111827; } .pacing-chart-legend { display: flex; align-items: center; gap: 14px; font-size: 0.75rem; color: #6b7280; } .pacing-legend-item { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; } .pacing-legend-swatch { width: 28px; height: 3px; border-radius: 999px; background: rgba(148, 163, 184, 0.8); } .pacing-legend-swatch.pace { background: #2563eb; } .pacing-chart-svg { width: 100%; aspect-ratio: 6 / 1; display: block; } .pacing-chart-svg .baseline { stroke: rgba(148, 163, 184, 0.6); stroke-width: 2; stroke-dasharray: 4 6; } .pacing-chart-svg .pacing-line { stroke: #2563eb; stroke-width: 4; fill: none; stroke-linecap: round; stroke-linejoin: round; } .pacing-chart-svg .pacing-area { fill: url(#pacingFill); } .pacing-chart-svg .pacing-point-glow { fill: rgba(37, 99, 235, 0.18); } .pacing-chart-svg .pacing-point { fill: #fff; stroke: #2563eb; stroke-width: 4; } .pacing-chart-labels { display: flex; justify-content: space-between; gap: 12px; margin-top: 10px; font-size: 0.75rem; color: #9ca3af; } .pacing-passages { display: flex; flex-direction: column; gap: 12px; } /* GENERIC EDITOR WINDOW STYLES */ .editor-window { background: #0f172a; border-radius: 24px; overflow: hidden; box-shadow: 0 0 0 1px rgba(255,255,255,0.06), 0 30px 90px rgba(0,0,0,0.45); } .editor-window.light { background: #fff; box-shadow: 0 0 0 1px rgba(0,0,0,0.06), 0 30px 80px rgba(0,0,0,0.14); } .editor-window .window-titlebar { background: var(--dark); padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(255,255,255,0.08); } .editor-window.light .window-titlebar { background: var(--dark); border-bottom: 1px solid rgba(255,255,255,0.08); } .window-titlebar .window-title-left { display: flex; align-items: center; gap: 12px; min-width: 0; } .window-titlebar .window-dots { display: flex; gap: 8px; } .window-titlebar .window-dot { width: 12px; height: 12px; border-radius: 50%; } .window-dot.red { background: #ff5f57; } .window-dot.yellow { background: #ffbd2e; } .window-dot.green { background: #28c840; } .window-titlebar .window-title { font-size: 0.85rem; color: rgba(255,255,255,0.75); font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; } .editor-window.light .window-titlebar .window-title { color: rgba(255,255,255,0.75); } .window-titlebar .window-actions { display: flex; align-items: center; gap: 12px; } .window-action-btn { padding: 6px 12px; background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.12); border-radius: 6px; color: rgba(255,255,255,0.85); font-size: 0.75rem; font-weight: 500; cursor: pointer; display: flex; align-items: center; gap: 6px; transition: transform 0.15s ease, background 0.15s ease, border-color 0.15s ease; } .editor-window.light .window-action-btn { background: rgba(255,255,255,0.12); color: rgba(255,255,255,0.85); } .window-action-btn:hover { transform: translateY(-1px); background: rgba(255,255,255,0.16); border-color: rgba(255,255,255,0.18); } .window-action-btn svg { width: 14px; height: 14px; } .window-status { display: flex; align-items: center; gap: 8px; font-size: 0.75rem; color: rgba(255,255,255,0.65); } .editor-window.light .window-status { color: rgba(255,255,255,0.65); } .window-status .status-indicator { width: 8px; height: 8px; background: #28c840; border-radius: 50%; animation: statusPulse 2s infinite; } .editor-window .window-body { padding: 24px; } .editor-window .window-sidebar { background: rgba(0,0,0,0.2); border-left: 1px solid rgba(255,255,255,0.06); padding: 20px; min-width: 200px; } .editor-window.light .window-sidebar { background: #f8f9fa; border-left: 1px solid rgba(0,0,0,0.06); } .pacing-demo-text { background: #1a1a2e; border-radius: 16px; overflow: hidden; box-shadow: 0 25px 50px -12px rgba(0,0,0,0.4); } /* Editor title bar */ .editor-titlebar { background: linear-gradient(180deg, #252542 0%, #1e1e36 100%); padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(255,255,255,0.06); } .editor-dots { display: flex; gap: 8px; } .editor-dot { width: 12px; height: 12px; border-radius: 50%; } .editor-dot.red { background: #ff5f57; } .editor-dot.yellow { background: #ffbd2e; } .editor-dot.green { background: #28c840; } .editor-filename { font-size: 0.8rem; color: rgba(255,255,255,0.5); font-family: SF Mono, Fira Code, monospace; } .editor-titlebar .editor-status { display: flex; align-items: center; gap: 8px; font-size: 0.7rem; color: rgba(255,255,255,0.4); } .status-dot { width: 6px; height: 6px; background: #28c840; border-radius: 50%; animation: statusPulse 2s infinite; } @keyframes statusPulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* Pacing visualization strip */ .pacing-strip { height: 4px; display: flex; background: rgba(255,255,255,0.05); } .strip-segment { height: 100%; transition: all 0.5s ease; } .strip-segment.s1 { flex: 3; background: var(--accent); opacity: 0.3; } .strip-segment.s2 { flex: 2; background: var(--accent); opacity: 0.4; } .strip-segment.s3 { flex: 1; background: var(--accent); opacity: 0.6; } .strip-segment.s4 { flex: 2; background: var(--accent); opacity: 1; } .strip-segment.s5 { flex: 1; background: var(--accent); opacity: 0.8; } .strip-segment.s6 { flex: 2; background: var(--accent); opacity: 0.5; } /* Main editor area */ .editor-main { display: flex; } /* Line numbers */ .line-numbers { padding: 24px 0; background: rgba(0,0,0,0.2); border-right: 1px solid rgba(255,255,255,0.06); min-width: 50px; text-align: right; } .line-num { padding: 0 16px; font-family: SF Mono, Fira Code, monospace; font-size: 0.75rem; color: rgba(255,255,255,0.2); line-height: 1.9rem; display: block; } .line-num.active { color: var(--accent); } /* Text content */ .editor-content { flex: 1; padding: 24px; font-family: Fraunces, Georgia, serif; font-size: 1rem; line-height: 1.9rem; color: rgba(255,255,255,0.85); position: relative; } .editor-line { position: relative; padding: 0 12px; margin: 0 -12px; border-radius: 4px; transition: background 0.3s; } .editor-line:hover { background: rgba(255,255,255,0.03); } .editor-line.slow { color: rgba(255,255,255,0.5); } .editor-line.medium { color: rgba(255,255,255,0.7); } .editor-line.fast { color: rgba(255,255,255,0.95); text-shadow: 0 0 30px rgba(37,99,235,0.3); } /* Pace indicator on hover */ .editor-line::after { content: attr(data-pace); position: absolute; right: 12px; top: 50%; transform: translateY(-50%); font-size: 0.6rem; font-family: DM Sans, sans-serif; text-transform: uppercase; letter-spacing: 1px; padding: 3px 8px; border-radius: 4px; opacity: 0; transition: opacity 0.2s; } .editor-line:hover::after { opacity: 1; } .editor-line.slow::after { background: rgba(148,163,184,0.2); color: #94a3b8; } .editor-line.medium::after { background: rgba(59,130,246,0.2); color: #60a5fa; } .editor-line.fast::after { background: rgba(37,99,235,0.3); color: #93c5fd; } /* Right sidebar analysis */ .editor-sidebar { width: 200px; background: rgba(0,0,0,0.3); border-left: 1px solid rgba(255,255,255,0.06); padding: 20px; } .sidebar-title { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 1.5px; color: rgba(255,255,255,0.4); margin-bottom: 16px; } .pace-score { text-align: center; margin-bottom: 24px; } .score-ring { width: 80px; height: 80px; margin: 0 auto 12px; position: relative; } .score-ring svg { transform: rotate(-90deg); } .score-ring circle { fill: none; stroke-width: 6; } .score-ring .bg { stroke: rgba(255,255,255,0.1); } .score-ring .progress { stroke: var(--accent); stroke-dasharray: 220; stroke-dashoffset: 66; stroke-linecap: round; } .score-value { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 1.5rem; font-weight: 700; color: white; } .score-label { font-size: 0.75rem; color: rgba(255,255,255,0.5); } .pace-breakdown { display: flex; flex-direction: column; gap: 12px; } .breakdown-item { display: flex; justify-content: space-between; align-items: center; } .breakdown-label { font-size: 0.75rem; color: rgba(255,255,255,0.5); display: flex; align-items: center; gap: 8px; } .breakdown-dot { width: 8px; height: 8px; border-radius: 50%; } .breakdown-dot.slow { background: #06b6d4; } .breakdown-dot.medium { background: #f59e0b; } .breakdown-dot.fast { background: #ef4444; box-shadow: 0 0 10px rgba(239,68,68,0.25); } .breakdown-value { font-size: 0.8rem; color: rgba(255,255,255,0.8); font-weight: 600; } .pacing-para { font-family: Fraunces, serif; font-size: 0.95rem; line-height: 1.8; margin: 0; padding: 0.95rem 1rem; border-radius: 14px; transition: all 0.3s; } .pacing-para.slow-text { background: rgba(6, 182, 212, 0.1); border-left: 3px solid #06b6d4; } .pacing-para.fast-text { background: rgba(239, 68, 68, 0.1); border-left: 3px solid #ef4444; } .pacing-para.medium-text { background: rgba(245, 158, 11, 0.1); border-left: 3px solid #f59e0b; } .pacing-insights { display: flex; flex-direction: column; gap: 1.25rem; } .insight-card { background: white; border-radius: 12px; padding: 1.25rem; box-shadow: 0 4px 20px rgba(0,0,0,0.06); } .insight-header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; } .insight-icon { font-size: 1.3rem; } .insight-header h4 { font-size: 0.95rem; margin: 0; } .pacing-score { text-align: center; } .score-circle { width: 90px; height: 90px; border-radius: 50%; background: linear-gradient(135deg, #dbeafe, #bfdbfe); border: 4px solid #2563eb; display: flex; align-items: center; justify-content: center; margin: 0 auto 0.75rem; position: relative; } .pacing-score .score-circle .score-value { position: static; transform: none; top: auto; left: auto; font-size: 1.75rem; font-weight: 700; color: #1e40af; line-height: 1; } .pacing-score .score-circle .score-label { font-size: 0.85rem; color: #6b7280; font-weight: 500; } .pacing-score p { font-size: 0.85rem; color: #666; } .insight-list { list-style: none; padding: 0; margin: 0; } .insight-list li { display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 0; font-size: 0.85rem; border-bottom: 1px solid #f0f0f0; } .insight-list li:last-child { border-bottom: none; } .insight-list li span { font-size: 1rem; } .benchmark-bars { display: flex; flex-direction: column; gap: 0.75rem; } .benchmark-row { display: flex; align-items: center; gap: 1rem; } .benchmark-row span { font-size: 0.75rem; width: 80px; color: #666; } .benchmark-bar { flex: 1; height: 12px; background: #e5e5e5; border-radius: 6px; overflow: hidden; } .benchmark-fill { height: 100%; border-radius: 6px; transition: width 1s ease; } .benchmark-fill.yours { background: linear-gradient(90deg, #06b6d4, #0891b2); } .benchmark-fill.genre { background: linear-gradient(90deg, #f59e0b, #d97706); } .benchmark-note { font-size: 0.75rem; color: #888; margin-top: 0.75rem; font-style: italic; } /* Reader Insights Section */ .reader-insights-section { padding: 6rem 4rem; background: linear-gradient(180deg, #1e1b4b 0%, #312e81 100%); color: white; } .reader-insights-section .section-label { color: #a5b4fc; } .reader-insights-section .section-header h2 { color: white; } .reader-insights-section .section-header p { color: #c7d2fe; } /* Reader Window Editor Styles */ .reader-window { margin-top: 3rem; max-width: 1100px; margin-left: auto; margin-right: auto; color: #111827; } .reader-window-body { display: grid; grid-template-columns: 1.2fr 280px; align-items: start; } .reader-story-preview { background: white; overflow: hidden; } .reader-analytics-sidebar { background: #f8f9fa; border-left: 1px solid rgba(0,0,0,0.06); padding: 16px; display: flex; flex-direction: column; gap: 12px; color: #111827; } .story-scroll-container { /* Content fits naturally, no scroll needed for this demo */ } .story-header-mini { padding: 1rem 1.5rem; background: #f8f8f8; border-bottom: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; position: sticky; top: 0; } .story-title-mini { font-family: Fraunces, serif; font-weight: 600; color: #1c1c1c; } .story-stats { font-size: 0.75rem; color: #888; } .story-content-mini { padding: 1rem; } .story-paragraph { position: relative; padding: 0.75rem 1rem 0.75rem 2.5rem; margin-bottom: 0.5rem; border-radius: 8px; transition: all 0.3s; cursor: pointer; } .story-paragraph:hover { background: rgba(37, 99, 235, 0.04); } .story-paragraph p { font-family: Fraunces, serif; font-size: 0.85rem; line-height: 1.7; color: #333; margin: 0; } .para-heat { position: absolute; left: 0; top: 0; bottom: 0; width: 6px; border-radius: 3px; background: linear-gradient(180deg, #22c55e calc(var(--read-percent)), #e5e5e5 calc(var(--read-percent)) ); } .story-paragraph.read .para-heat { background: #22c55e; } .story-paragraph.read.slow .para-heat { background: #f59e0b; } .story-paragraph.dropoff .para-heat { background: linear-gradient(180deg, #f59e0b 0%, #ef4444 100%); } .story-paragraph.unread .para-heat { background: #e5e5e5; } .story-paragraph.dropoff { background: rgba(239, 68, 68, 0.08); } .story-paragraph.is-active { box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.25); background: rgba(37, 99, 235, 0.06); } .story-paragraph.dropoff.is-active { box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.25); } .reader-marker { display: inline-flex; align-items: center; gap: 6px; margin-top: 8px; padding: 4px 10px; border-radius: 12px; font-size: 0.7rem; font-weight: 500; } .reader-marker.pause { background: #fef3c7; color: #92400e; } .reader-marker.stop { background: #fee2e2; color: #991b1b; } .marker-icon { font-size: 0.85rem; } .scroll-legend { display: flex; gap: 1.5rem; padding: 1rem 1.5rem; background: #f8f8f8; border-top: 1px solid #eee; } .legend-item { display: flex; align-items: center; gap: 6px; font-size: 0.7rem; color: #666; } .legend-color { width: 12px; height: 12px; border-radius: 3px; } .legend-color.hot { background: #22c55e; } .legend-color.warm { background: #f59e0b; } .legend-color.cold { background: #e5e5e5; } .reader-analytics { display: flex; flex-direction: column; gap: 1rem; } .analytics-card { background: #fff; border-radius: 12px; padding: 1.25rem; border: 1px solid rgba(0,0,0,0.06); box-shadow: 0 10px 30px rgba(0,0,0,0.06); } .analytics-card.main-stat { text-align: center; padding: 1.5rem; } .reader-avatars-row { display: flex; justify-content: center; margin-bottom: 0.75rem; } .reader-avatar-small { width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; font-weight: 600; color: white; margin-left: -8px; border: 2px solid #1e1b4b; } .reader-avatar-small:first-child { margin-left: 0; } .analytics-card h3 { font-size: 2rem; font-weight: 700; margin: 0; } .analytics-card.main-stat p { color: #6b7280; font-size: 0.9rem; margin: 0; } .analytics-header { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; } .analytics-icon { font-size: 1.1rem; } .analytics-header h4 { font-size: 0.85rem; margin: 0; font-weight: 600; } .completion-bar-container { display: flex; align-items: center; gap: 1rem; } .completion-bar { flex: 1; height: 10px; background: rgba(0,0,0,0.08); border-radius: 5px; overflow: hidden; } .completion-fill { height: 100%; background: linear-gradient(90deg, #22c55e, #16a34a); border-radius: 5px; } .completion-percent { font-size: 1.25rem; font-weight: 700; } .analytics-note { font-size: 0.75rem; color: #6b7280; margin: 0.5rem 0 0; } .analytics-note.speed-indicator.fast { color: #166534; } .time-display { display: flex; align-items: baseline; gap: 0.5rem; } .time-value { font-size: 1.75rem; font-weight: 700; } .time-expected { font-size: 0.85rem; color: #6b7280; } .hotspot-list { list-style: none; padding: 0; margin: 0; } .hotspot-item { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0.5rem; border-bottom: 1px solid rgba(0,0,0,0.06); font-size: 0.85rem; border-radius: 10px; cursor: pointer; transition: background 0.15s ease, box-shadow 0.15s ease; } .hotspot-item:hover { background: rgba(0,0,0,0.04); } .hotspot-item.is-active { background: rgba(37, 99, 235, 0.08); box-shadow: 0 0 0 1px rgba(37, 99, 235, 0.12); } .hotspot-item:last-child { border-bottom: none; } .hotspot-detail { font-size: 0.75rem; padding: 3px 8px; border-radius: 8px; } .hotspot-item.positive .hotspot-detail { background: rgba(34, 197, 94, 0.2); color: #166534; } .hotspot-item.negative .hotspot-detail { background: rgba(239, 68, 68, 0.2); color: #991b1b; } .analytics-card.share-card { text-align: center; background: linear-gradient(135deg, #4f46e5, #6366f1); border: none; color: white; box-shadow: 0 14px 40px rgba(79,70,229,0.35); } .share-btn { width: 100%; padding: 0.875rem; background: white; border: none; border-radius: 8px; font-size: 0.95rem; font-weight: 600; color: #4f46e5; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 0.5rem; transition: all 0.2s; } .share-btn:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.2); } .share-note { font-size: 0.75rem; color: rgba(255,255,255,0.8); margin: 0.75rem 0 0; } /* Version History Section */ .version-history-section { padding: 6rem 4rem; background: linear-gradient(180deg, #faf8f3 0%, #f0ebe3 100%); } /* Version Window Editor Styles */ .version-window { margin-top: 3rem; max-width: 1100px; margin-left: auto; margin-right: auto; } .version-window-body { display: grid; grid-template-columns: 240px 1fr; } .version-sidebar { background: #f8f9fa; border-right: 1px solid rgba(0,0,0,0.06); padding: 20px; } .version-sidebar .sidebar-header { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 1px; color: rgba(0,0,0,0.4); margin-bottom: 16px; font-weight: 600; } .version-compare-area { background: #fff; padding: 20px; } .compare-tabs { display: flex; gap: 8px; margin-bottom: 16px; } .compare-tab { padding: 8px 16px; background: rgba(0,0,0,0.04); border: 1px solid rgba(0,0,0,0.06); border-radius: 6px; color: rgba(0,0,0,0.6); font-size: 0.8rem; cursor: pointer; transition: all 0.2s; } .compare-tab:hover { background: rgba(0,0,0,0.06); } .compare-tab.active { background: var(--accent); border-color: var(--accent); color: white; } .timeline-track { display: flex; flex-direction: column; gap: 4px; position: relative; } .timeline-track::before { content: ; position: absolute; top: 12px; left: 2rem; right: 2rem; height: 4px; background: #e5e5e5; border-radius: 2px; } .timeline-marker { display: flex; flex-direction: column; align-items: center; position: relative; cursor: pointer; } .marker-dot { width: 24px; height: 24px; background: white; border: 4px solid #d4d4d4; border-radius: 50%; transition: all 0.3s; z-index: 1; } .timeline-marker:hover .marker-dot, .timeline-marker.current .marker-dot, .timeline-marker.selected .marker-dot { border-color: #2563eb; background: #2563eb; } .timeline-marker.selected .marker-info { font-weight: 600; } .timeline-marker.selected .marker-time { color: #2563eb; } .marker-info { margin-top: 0.75rem; text-align: center; } .marker-time { display: block; font-size: 0.75rem; font-weight: 600; color: #333; } .marker-label { display: block; font-size: 0.7rem; color: #888; max-width: 100px; } .version-compare { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; margin-bottom: 1.5rem; } .version-compare.unified-view { grid-template-columns: 1fr; } .version-compare.unified-view .compare-panel.old { display: none; } .version-compare.unified-view .compare-panel.new .compare-badge.new { display: none; } .version-compare.unified-view .compare-panel.new .compare-header span:last-child { display: none; } .version-compare.unified-view .compare-panel.new .compare-header::after { content: Unified diff view; color: #666; } .compare-panel { background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 20px rgba(0,0,0,0.08); } .compare-header { padding: 1rem 1.5rem; background: #f8f8f8; border-bottom: 1px solid #eee; display: flex; align-items: center; gap: 0.75rem; font-size: 0.85rem; color: #666; } .compare-badge { padding: 4px 10px; border-radius: 12px; font-size: 0.7rem; font-weight: 600; } .compare-badge.old { background: #fee2e2; color: #991b1b; } .compare-badge.new { background: #dcfce7; color: #166534; } .compare-content { padding: 1.5rem; font-family: Fraunces, serif; font-size: 0.9rem; line-height: 1.8; } .compare-content p { margin-bottom: 0.75rem; } .diff-removed { background: #fee2e2; color: #991b1b; text-decoration: line-through; padding: 0 4px; border-radius: 3px; } .diff-added { background: #dcfce7; color: #166534; padding: 0 4px; border-radius: 3px; } .version-actions { display: flex; gap: 1rem; justify-content: center; } .version-btn { display: flex; align-items: center; gap: 0.5rem; padding: 0.875rem 1.5rem; border-radius: 8px; font-size: 0.9rem; font-weight: 600; cursor: pointer; transition: all 0.2s; border: none; background: #2563eb; color: white; } .version-btn:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3); } .version-btn.secondary { background: white; color: #333; border: 1px solid #ddd; } .version-btn.secondary:hover { border-color: #2563eb; color: #2563eb; box-shadow: 0 4px 12px rgba(0,0,0,0.1); } /* Collaboration Section */ .collab-section { padding: 6rem 4rem; background: linear-gradient(180deg, #ecfdf5 0%, #d1fae5 100%); } .collab-section .section-label { color: #059669; } /* Collaboration Window Editor Styles */ .collab-window { margin-top: 3rem; max-width: 1100px; margin-left: auto; margin-right: auto; } .collab-window-body { display: grid; grid-template-columns: 1fr 260px; } .collab-window .collab-content { padding: 24px; background: #fff; } .collab-sidebar { background: #f8f9fa; border-left: 1px solid rgba(0,0,0,0.06); padding: 20px; } .collab-sidebar .sidebar-header { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 1px; color: rgba(0,0,0,0.4); margin-bottom: 16px; font-weight: 600; } .collab-feature-list { display: flex; flex-direction: column; gap: 16px; } .collab-feature-item { display: flex; gap: 12px; align-items: flex-start; } .collab-feature-item svg { width: 20px; height: 20px; color: var(--accent); flex-shrink: 0; margin-top: 2px; } .collab-feature-item strong { display: block; font-size: 0.85rem; color: var(--dark); margin-bottom: 2px; } .collab-feature-item span { font-size: 0.75rem; color: #666; } .collab-toolbar { padding: 1rem 1.5rem; background: #f8f8f8; border-bottom: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; } .collab-doc-name { font-weight: 600; font-size: 0.9rem; } .collab-users { display: flex; gap: 0.5rem; } .collab-avatar { position: relative; padding: 6px 12px; border-radius: 16px; font-size: 0.75rem; font-weight: 600; color: white; } .collab-avatar.you { border: 2px solid #4f46e5; } .typing-badge { position: absolute; bottom: -8px; left: 50%; transform: translateX(-50%); background: #1c1c1c; color: white; padding: 2px 6px; border-radius: 8px; font-size: 0.6rem; white-space: nowrap; } .collab-content { padding: 1.5rem; font-family: Fraunces, serif; font-size: 0.95rem; line-height: 1.9; } .collab-content p { margin-bottom: 1rem; } .has-cursor { position: relative; } .remote-cursor { display: inline-block; width: 2px; height: 1.2em; background: #ec4899; margin-left: 1px; animation: blink 1s infinite; position: relative; vertical-align: text-bottom; } .remote-cursor::before { content: Sarah; position: absolute; top: -20px; left: -2px; background: #ec4899; color: white; padding: 2px 6px; border-radius: 4px; font-size: 0.65rem; font-family: DM Sans, sans-serif; white-space: nowrap; animation: none; opacity: 1; } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } .collab-comment { display: flex; gap: 0.75rem; padding: 1rem; background: #fffbeb; border-left: 3px solid #f59e0b; border-radius: 0 8px 8px 0; margin: 1rem 0; } .comment-avatar { width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-size: 0.75rem; font-weight: 600; font-family: DM Sans, sans-serif; flex-shrink: 0; } .comment-body { font-family: DM Sans, sans-serif; } .comment-author { font-weight: 600; font-size: 0.8rem; margin-bottom: 4px; } .comment-time { font-weight: 400; color: #888; font-size: 0.7rem; } .comment-text { font-size: 0.85rem; color: #555; } .collab-features { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } .collab-feature-card { background: white; padding: 1.25rem; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.06); } .collab-feature-icon { font-size: 1.5rem; margin-bottom: 0.5rem; display: block; } .collab-feature-card h4 { font-size: 0.95rem; margin: 0 0 0.25rem; } .collab-feature-card p { font-size: 0.8rem; color: #666; margin: 0; } /* Writing Goals Section */ .goals-section { padding: 6rem 4rem; background: linear-gradient(180deg, #fef3c7 0%, #fde68a 100%); } .goals-section .section-label { color: #b45309; } /* Goals Window Editor Styles */ .goals-window { margin-top: 3rem; max-width: 1100px; margin-left: auto; margin-right: auto; } .goals-window-body { display: grid; grid-template-columns: 1fr 220px; } .goals-main { padding: 24px; background: #fff; display: grid; grid-template-columns: 280px 1fr; gap: 24px; } .goals-sidebar { background: #f8f9fa; border-left: 1px solid rgba(0,0,0,0.06); padding: 20px; } .goals-sidebar .sidebar-header { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 1px; color: rgba(0,0,0,0.4); margin-bottom: 16px; font-weight: 600; } .goals-sidebar .badges-grid { display: flex; flex-direction: column; gap: 12px; } .goals-sidebar .badge { display: flex; align-items: center; gap: 10px; padding: 10px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .goals-sidebar .badge svg { width: 24px; height: 24px; } .goals-stats { display: flex; flex-direction: column; gap: 1rem; } .stat-card { background: white; border-radius: 16px; padding: 1.5rem; display: flex; align-items: center; gap: 1rem; box-shadow: 0 4px 20px rgba(0,0,0,0.08); position: relative; } .stat-card.streak { background: linear-gradient(135deg, #7c3aed, #a855f7); color: white; } .stat-icon { font-size: 2rem; } .stat-value { font-size: 2rem; font-weight: 700; } .stat-label { font-size: 0.8rem; color: #666; } .stat-card.streak .stat-label { color: rgba(255,255,255,0.8); } .streak-badge { position: absolute; top: -8px; right: -8px; background: #fef08a; color: #713f12; padding: 4px 10px; border-radius: 12px; font-size: 0.7rem; font-weight: 600; } .goal-progress { margin-top: 0.5rem; width: 100%; } .goal-bar { height: 8px; background: #e5e5e5; border-radius: 4px; overflow: hidden; margin-bottom: 4px; } .goal-fill { height: 100%; background: linear-gradient(90deg, #22c55e, #16a34a); border-radius: 4px; } .goal-progress span { font-size: 0.75rem; color: #888; } .word-trend { font-size: 0.8rem; color: #22c55e; font-weight: 600; margin-top: 0.5rem; } .goals-calendar { background: white; border-radius: 16px; padding: 1.5rem; box-shadow: 0 4px 20px rgba(0,0,0,0.08); } .calendar-header h4 { margin: 0 0 1rem; font-size: 1rem; text-align: center; } .calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; } .cal-day { aspect-ratio: 1; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; border-radius: 6px; } .cal-day.header { font-weight: 600; color: #888; font-size: 0.65rem; } .cal-day.empty { background: transparent; } .cal-day.hit.low { background: #dcfce7; color: #166534; } .cal-day.hit.medium { background: #86efac; color: #166534; } .cal-day.hit.high { background: #22c55e; color: white; } .cal-day.miss { background: #fee2e2; color: #991b1b; } .cal-day.today { background: #2563eb; color: white; font-weight: 700; box-shadow: 0 0 0 2px #2563eb, 0 0 0 4px white; } .cal-day.future { color: #ccc; } .calendar-legend { display: flex; justify-content: center; gap: 1rem; margin-top: 1rem; font-size: 0.7rem; color: #888; } .legend-dot { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 4px; } .legend-dot.miss { background: #fee2e2; } .legend-dot.low { background: #dcfce7; } .legend-dot.medium { background: #86efac; } .legend-dot.high { background: #22c55e; } .goals-badges { background: white; border-radius: 16px; padding: 1.5rem; box-shadow: 0 4px 20px rgba(0,0,0,0.08); } .goals-badges h4 { margin: 0 0 1rem; font-size: 1rem; } .badges-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.75rem; } .badge { display: flex; flex-direction: column; align-items: center; padding: 1rem 0.5rem; border-radius: 12px; text-align: center; } .badge.earned { background: linear-gradient(135deg, #fef3c7, #fde68a); } .badge.locked { background: #f5f5f5; opacity: 0.6; } .badge-icon { font-size: 1.5rem; margin-bottom: 0.25rem; } .badge.locked .badge-icon { filter: grayscale(1); } .badge-name { font-size: 0.7rem; color: #666; } /* Bento Grid */ .bento { padding: 6rem 4rem; background: var(--dark); color: #fff; } .bento .section-label { color: var(--warm); } .bento .section-header { color: #fff; } .bento .section-header p { color: rgba(255,255,255,0.6); } .bento-grid { display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: repeat(2, 250px); gap: 1.5rem; } .bento-card { background: rgba(255,255,255,0.05); border-radius: 16px; border: 1px solid rgba(255,255,255,0.1); display: flex; flex-direction: column; overflow: hidden; transition: all 0.3s; cursor: pointer; } .bento-card:hover { background: rgba(255,255,255,0.08); transform: translateY(-4px); } .bento-titlebar { padding: 10px 14px; background: rgba(0,0,0,0.2); border-bottom: 1px solid rgba(255,255,255,0.06); } .bento-dots { display: flex; gap: 6px; } .bento-dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,0.2); } .bento-body { padding: 1.5rem; flex: 1; display: flex; flex-direction: column; justify-content: flex-end; } .bento-card.large { grid-column: span 2; } .bento-card.tall { grid-row: span 2; } .bento-card h3 { font-size: 1.2rem; margin-bottom: 0.5rem; } .bento-card p { color: rgba(255,255,255,0.6); font-size: 0.9rem; } .bento-icon { font-size: 2.5rem; margin-bottom: 1rem; } /* Pricing */ .pricing { padding: 6rem 4rem; } .pricing .section-header { text-align: center; margin: 0 auto 4rem; } .pricing-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; max-width: 1000px; margin: 0 auto; } .pricing-card { background: #fff; padding: 2.5rem; border-radius: 20px; border: 2px solid #eee; text-align: center; } .pricing-card.featured { background: var(--dark); color: #fff; border-color: var(--dark); transform: scale(1.05); } .pricing-card h3 { font-size: 1.2rem; margin-bottom: 1rem; } .pricing-card .price { font-family: Fraunces, serif; font-size: 3.5rem; font-weight: 700; } .pricing-card .price span { font-size: 1rem; font-weight: 400; opacity: 0.6; } .pricing-card ul { list-style: none; margin: 2rem 0; text-align: left; } .pricing-card li { padding: 0.5rem 0; font-size: 0.9rem; color: #666; display: flex; align-items: center; gap: 0.5rem; } .pricing-card.featured li { color: rgba(255,255,255,0.7); } .pricing-card li::before { content: ✓; color: var(--accent); font-weight: bold; } .pricing-card.featured li::before { color: var(--warm); } .pricing-card .btn { width: 100%; justify-content: center; } .pricing-card.featured .btn-primary { background: #fff; color: var(--dark); } /* Testimonials */ .testimonials { padding: 6rem 4rem; background: #f5f5f0; } .testimonials .section-header { text-align: center; margin: 0 auto 4rem; } .testimonials-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; max-width: 1100px; margin: 0 auto; } .testimonial-card { background: #fff; padding: 2rem; border-radius: 16px; } .testimonial-stars { color: var(--warm); margin-bottom: 1rem; } .testimonial-card blockquote { font-family: Fraunces, serif; font-size: 1.1rem; font-style: italic; line-height: 1.7; margin-bottom: 1.5rem; } .testimonial-author { display: flex; align-items: center; gap: 1rem; } .author-avatar { width: 48px; height: 48px; background: var(--accent-light); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--accent); font-weight: 600; } .author-info h4 { font-size: 0.95rem; } .author-info span { font-size: 0.8rem; color: #888; } /* CTA */ .cta-section { padding: 8rem 4rem; text-align: center; position: relative; overflow: hidden; } .cta-section::before { content: ; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 600px; height: 600px; background: radial-gradient(circle, var(--accent-light) 0%, transparent 70%); opacity: 0.5; } .cta-section h2 { font-family: Fraunces, serif; font-size: 3.5rem; margin-bottom: 1rem; position: relative; } .cta-section p { font-size: 1.2rem; color: #666; margin-bottom: 2.5rem; position: relative; } /* Footer */ footer { background: var(--dark); color: #fff; padding: 4rem; } .footer-content { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 3rem; max-width: 1200px; margin: 0 auto; } .footer-brand h3 { font-family: Fraunces, serif; font-size: 1.5rem; margin-bottom: 1rem; } .footer-brand p { color: rgba(255,255,255,0.6); font-size: 0.9rem; line-height: 1.7; } .footer-links h4 { font-size: 0.8rem; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; margin-bottom: 1.5rem; color: rgba(255,255,255,0.4); } .footer-links a { display: block; color: rgba(255,255,255,0.7); text-decoration: none; font-size: 0.9rem; margin-bottom: 0.75rem; transition: color 0.3s; } .footer-links a:hover { color: #fff; } .footer-bottom { border-top: 1px solid rgba(255,255,255,0.1); margin-top: 3rem; padding-top: 2rem; text-align: center; color: rgba(255,255,255,0.4); font-size: 0.85rem; } /* Responsive */ @media (max-width: 1024px) { .features-grid, .testimonials-grid { grid-template-columns: repeat(2, 1fr); } .bento-grid { grid-template-columns: repeat(2, 1fr); } .pricing-grid { grid-template-columns: 1fr; } .footer-content { grid-template-columns: 1fr 1fr; } .pacing-demo { grid-template-columns: 1fr; gap: 1.5rem; } .writers-window-body, .reader-window-body, .version-window-body, .collab-window-body, .goals-window-body { grid-template-columns: 1fr; } .writers-sidebar { border-right: none; border-bottom: 1px solid rgba(255,255,255,0.08); } .reader-analytics-sidebar, .collab-sidebar, .goals-sidebar { border-left: none; border-top: 1px solid rgba(0,0,0,0.06); } .version-sidebar { border-right: none; border-bottom: 1px solid rgba(0,0,0,0.06); } .goals-main { grid-template-columns: 1fr; } .pacing-overview { max-width: 100%; margin-left: 1rem; margin-right: 1rem; } /* Editor card */ .editor-card { max-width: 100%; } .ai-row { flex-wrap: wrap; } /* Version history */ .version-window-body { flex-direction: column; } .version-sidebar { width: 100%; border-right: none; border-bottom: 1px solid rgba(0,0,0,0.06); } .timeline-track { flex-direction: row; overflow-x: auto; padding-bottom: 1rem; } .timeline-marker { flex-direction: column; min-width: 100px; } } @media (max-width: 768px) { /* Global section padding */ nav, .hero, .logos-section, .writers-room-section, .pacing-section, .reader-insights-section, .version-history-section, .collab-section, .goals-section, .features, .bento, .pricing, .testimonials, .cta-section, footer { padding-left: 1.5rem; padding-right: 1.5rem; } /* Navigation */ .nav-links { display: none; } nav { padding: 1rem 1.5rem; } /* Hero */ .hero { padding-top: 4rem; padding-bottom: 3rem; } .hero-content h1 { font-size: 2.2rem; line-height: 1.2; } .hero-content p { font-size: 1rem; } .hero-top { flex-direction: column; gap: 1rem; } .hero-meta { flex-direction: row; gap: 1.5rem; } /* Editor card in hero */ .editor-card { margin: 2rem auto 0; border-radius: 12px; } .editor-nav { padding: 0.75rem 1rem; } .ai-row { padding: 0.75rem; gap: 0.5rem; } .ai-chip { font-size: 0.75rem; padding: 0.4rem 0.75rem; } .editor-body { padding: 1.25rem; min-height: 200px; } .editor-title { font-size: 1.4rem; } .editor-text { font-size: 0.95rem; line-height: 1.8; } /* Section headers */ .section-header h2 { font-size: 1.75rem; } .section-header p { font-size: 0.95rem; } /* Writers room */ .writers-window { margin-top: 2rem; } .window-titlebar { padding: 0.75rem 1rem; flex-wrap: wrap; gap: 0.5rem; } .window-title { font-size: 0.8rem; } .writers-sidebar { padding: 1rem; } .writers-content { padding: 1rem; } /* Reader insights */ .reader-window { margin-top: 2rem; } .reader-window-body { gap: 0; } .reader-story-preview { padding: 0; } .story-header-mini { padding: 0.75rem 1rem; } .story-content-mini { padding: 1rem; } .scroll-legend { flex-wrap: wrap; gap: 1rem; padding: 0.75rem 1rem; } .reader-analytics-sidebar { padding: 1rem; } .analytics-card { padding: 0.875rem; } /* Version history */ .version-window { margin-top: 2rem; } .version-compare-area { padding: 1rem; } .compare-tabs { justify-content: center; } .version-compare { grid-template-columns: 1fr; gap: 1rem; } .compare-panel { border-radius: 8px; } .compare-header { padding: 0.75rem 1rem; } .compare-content { padding: 1rem; font-size: 0.85rem; } /* Collaboration */ .collab-window { margin-top: 2rem; } .collab-users { gap: 0.25rem; } .collab-avatar span { font-size: 0.65rem; } .collab-content { padding: 1rem; } .collab-content p { font-size: 0.9rem; } .collab-comment { padding: 0.75rem; margin: 0.75rem 0; } .collab-sidebar { padding: 1rem; } /* Goals */ .goals-window { margin-top: 2rem; } .goals-header { padding: 1rem; flex-direction: column; align-items: flex-start; gap: 1rem; } .goals-main { padding: 1rem; gap: 1rem; } .goal-card { padding: 1rem; } .goals-sidebar { padding: 1rem; } /* Pacing Overview */ .pacing-overview { margin-left: 0; margin-right: 0; } .pacing-card-header { flex-direction: column; align-items: flex-start; gap: 1rem; padding: 1rem 1.25rem; } .pacing-score-pill { align-self: flex-start; } .pacing-viz-container { padding: 1.5rem 1rem; } .rhythm-map { height: 100px; gap: 4px; } .rhythm-bardata-label:not(data-label)::after { font-size: 0.6rem; bottom: -20px; } .pacing-insights-row { grid-template-columns: 1fr; } .insight-box { padding: 0.875rem 1rem; } /* Pricing */ .pricing-grid { gap: 1.5rem; } .pricing-card { padding: 1.5rem; } /* Testimonials */ .testimonials-grid { grid-template-columns: 1fr; gap: 1.5rem; } /* CTA */ .cta-section h2 { font-size: 2rem; } /* Footer */ .footer-content { grid-template-columns: 1fr; gap: 2rem; text-align: center; } .footer-links { justify-content: center; } } /* MOBILE OPTIMIZED STYLES (480px and below) Each section carefully optimized for mobile */ @media (max-width: 480px) { /* --- GLOBAL MOBILE SETTINGS --- */ nav, .hero, .logos-section, .writers-room-section, .pacing-section, .reader-insights-section, .version-history-section, .collab-section, .goals-section, .features, .bento, .pricing, .testimonials, .cta-section, footer { padding-left: 1rem; padding-right: 1rem; } .section-label { font-size: 0.65rem; margin-bottom: 0.5rem; } .section-header { margin-bottom: 1.5rem; } .section-header h2 { font-size: 1.4rem; line-height: 1.3; } .section-header p { font-size: 0.85rem; margin-top: 0.5rem; } /* --- 1. HERO SECTION --- */ .hero { padding-top: 3rem; padding-bottom: 2rem; } .hero-top { flex-direction: column; gap: 0.75rem; margin-bottom: 1.5rem; } .hero-badge { font-size: 0.7rem; padding: 0.35rem 0.7rem; } .hero-meta { font-size: 0.75rem; gap: 1rem; } .hero-content h1 { font-size: 1.6rem; line-height: 1.25; } .hero-content p { font-size: 0.9rem; line-height: 1.6; } /* Hero Editor Card - Make it compact and touch-friendly */ .editor-card { margin-top: 1.5rem; border-radius: 12px; } .editor-nav { padding: 0.6rem 0.75rem; } .dots { gap: 5px; } .dot { width: 8px; height: 8px; } .doc-title { font-size: 0.7rem; } /* AI chips - horizontal scroll */ .ai-row { padding: 0.6rem; gap: 0.4rem; overflow-x: auto; flex-wrap: nowrap; -webkit-overflow-scrolling: touch; scrollbar-width: none; } .ai-row::-webkit-scrollbar { display: none; } .ai-chip { font-size: 0.7rem; padding: 0.4rem 0.65rem; white-space: nowrap; flex-shrink: 0; } .bulk-actions { padding: 0.5rem 0.75rem; flex-direction: column; gap: 0.5rem; font-size: 0.75rem; } .bulk-btns { gap: 0.5rem; } .bulk-btn { font-size: 0.7rem; padding: 0.35rem 0.6rem; } .editor-body { padding: 1rem; min-height: 180px; } .editor-chapter { font-size: 0.6rem; margin-bottom: 0.5rem; } .editor-title { font-size: 1.1rem; margin-bottom: 1rem; } .editor-text { font-size: 0.85rem; line-height: 1.7; } .editor-text p { margin-bottom: 0.875rem; } .editor-status { padding: 0.5rem 0.75rem; flex-direction: column; gap: 0.25rem; font-size: 0.7rem; } /* --- 2. LOGOS SECTION --- */ .logos-section { padding-top: 2rem; padding-bottom: 2rem; } .logos-label { font-size: 0.65rem; } .logos-row { flex-wrap: wrap; gap: 1rem 1.5rem; justify-content: center; } .logo-item { font-size: 0.8rem; } /* --- 3. WRITERS ROOM SECTION --- */ .writers-room-section { padding-top: 3rem; padding-bottom: 3rem; } .writers-window { margin-top: 1.5rem; border-radius: 12px; } .window-titlebar { padding: 0.6rem 0.75rem; flex-wrap: wrap; gap: 0.4rem; } .window-dots { gap: 4px; } .window-dot { width: 8px; height: 8px; } .window-title { font-size: 0.65rem; } .window-status { font-size: 0.6rem; } /* Writers sidebar becomes horizontal scroll */ .writers-sidebar { padding: 0.75rem; border-bottom: 1px solid rgba(255,255,255,0.08); } .sidebar-header { font-size: 0.7rem; margin-bottom: 0.5rem; } .writer-avatars-large { display: flex; flex-direction: row; overflow-x: auto; gap: 0.5rem; padding-bottom: 0.5rem; -webkit-overflow-scrolling: touch; } .writer-btn-large { flex-direction: column; min-width: 70px; padding: 0.5rem; gap: 0.25rem; } .writer-avatar-lg { width: 36px; height: 36px; font-size: 0.7rem; } .writer-info { display: none; } .writer-btn-large.active .writer-info, .writer-btn-large:hover .writer-info { display: none; } .writer-btn-large::after { content: attr(data-name); font-size: 0.55rem; color: rgba(255,255,255,0.7); text-align: center; } .writers-main { padding: 1rem; } .demo-review-card { padding: 1rem; border-radius: 10px; } .demo-review-header { gap: 0.75rem; margin-bottom: 0.75rem; } .demo-reviewer-name { font-size: 0.85rem; } .demo-reviewer-title { font-size: 0.65rem; } .demo-review-content { font-size: 0.8rem; line-height: 1.6; } .demo-highlight { padding: 0.6rem; margin: 0.75rem 0; font-size: 0.75rem; } /* --- 4. PACING SECTION --- */ .pacing-section { padding-top: 3rem; padding-bottom: 3rem; } .pacing-main-card { border-radius: 12px; } .pacing-card-header { padding: 0.875rem 1rem; } .book-title { font-size: 0.95rem; } .book-stats { font-size: 0.65rem; } .pacing-score-pill { padding: 0.4rem 0.75rem; } .score-num { font-size: 1.2rem; } .score-max { font-size: 0.7rem; } .pacing-viz-container { padding: 1.25rem 0.75rem 1.75rem; } .rhythm-map { height: 70px; gap: 3px; } .rhythm-bar { border-radius: 3px 3px 0 0; } .rhythm-bardata-label:not(data-label)::after { display: none; } .pacing-insights-row { grid-template-columns: 1fr; } .insight-box { padding: 0.75rem; gap: 0.6rem; } .insight-icon { width: 32px; height: 32px; font-size: 0.95rem; border-radius: 8px; } .insight-text strong { font-size: 0.8rem; } .insight-text span { font-size: 0.7rem; } /* --- 5. READER INSIGHTS SECTION --- */ .reader-insights-section { padding-top: 3rem; padding-bottom: 3rem; } .reader-window { margin-top: 1.5rem; border-radius: 12px; } .reader-story-preview { max-height: 250px; overflow-y: auto; } .story-header-mini { padding: 0.6rem 0.75rem; } .story-title-mini { font-size: 0.85rem; } .story-stats { font-size: 0.6rem; } .story-content-mini { padding: 0.75rem; } .story-paragraph { padding: 0.5rem; margin-bottom: 0.4rem; } .story-paragraph p { font-size: 0.75rem; line-height: 1.5; } .reader-marker { font-size: 0.55rem; padding: 0.25rem 0.4rem; } .scroll-legend { padding: 0.6rem 0.75rem; gap: 0.75rem; flex-wrap: wrap; } .legend-item { font-size: 0.6rem; } .legend-color { width: 8px; height: 8px; } .reader-analytics-sidebar { padding: 0.75rem; gap: 0.6rem; } .analytics-card { padding: 0.6rem; border-radius: 8px; } .analytics-card.main-stat { padding: 0.75rem; } .reader-count { font-size: 1.5rem; } .stat-row { font-size: 0.7rem; } .hotspot-item { padding: 0.4rem; font-size: 0.65rem; } /* --- 6. VERSION HISTORY SECTION --- */ .version-history-section { padding-top: 3rem; padding-bottom: 3rem; } .version-window { margin-top: 1.5rem; border-radius: 12px; } /* Timeline becomes compact horizontal */ .version-sidebar { padding: 0.75rem; border-bottom: 1px solid rgba(0,0,0,0.06); } .timeline-track { flex-direction: row; overflow-x: auto; gap: 0; padding-bottom: 0.25rem; } .timeline-marker { flex-direction: column; min-width: 65px; padding: 0.5rem 0.25rem; } .marker-dot { width: 10px; height: 10px; } .marker-info { margin-top: 0.4rem; } .marker-time { font-size: 0.6rem; } .marker-label { font-size: 0.5rem; display: none; } .timeline-marker.selected .marker-label, .timeline-marker.current .marker-label { display: block; } .version-compare-area { padding: 0.75rem; } .compare-tabs { gap: 0.25rem; } .compare-tab { font-size: 0.7rem; padding: 0.4rem 0.6rem; border-radius: 6px; } .version-compare { gap: 0.75rem; } .compare-panel { border-radius: 8px; } .compare-header { padding: 0.6rem 0.75rem; font-size: 0.7rem; } .compare-badge { font-size: 0.55rem; padding: 3px 6px; } .compare-content { padding: 0.75rem; font-size: 0.8rem; line-height: 1.6; } .compare-content p { margin-bottom: 0.6rem; } /* --- 7. COLLABORATION SECTION --- */ .collab-section { padding-top: 3rem; padding-bottom: 3rem; } .collab-window { margin-top: 1.5rem; border-radius: 12px; } .collab-users { gap: 0.2rem; } .collab-avatar { width: 26px; height: 26px; } .collab-avatar span { font-size: 0.55rem; } .typing-badge { font-size: 0.45rem; padding: 1px 3px; } .collab-content { padding: 0.75rem; } .collab-content p { font-size: 0.8rem; line-height: 1.6; margin-bottom: 0.6rem; } .remote-cursor { height: 1em; } .remote-cursor::before { font-size: 0.5rem; padding: 2px 4px; top: -16px; } .collab-comment { padding: 0.6rem; margin: 0.6rem 0; gap: 0.5rem; } .comment-avatar { width: 24px; height: 24px; font-size: 0.55rem; } .comment-author { font-size: 0.7rem; } .comment-time { font-size: 0.55rem; } .comment-text { font-size: 0.75rem; } .collab-sidebar { padding: 0.75rem; gap: 0.6rem; } .feature-item { padding: 0.5rem; font-size: 0.7rem; } .feature-icon { font-size: 1rem; } /* --- 8. GOALS SECTION --- */ .goals-section { padding-top: 3rem; padding-bottom: 3rem; } .goals-window { margin-top: 1.5rem; border-radius: 12px; } .goals-header { padding: 0.75rem; flex-direction: column; align-items: flex-start; gap: 0.75rem; } .streak-display { gap: 0.5rem; } .streak-icon { font-size: 1.25rem; } .streak-number { font-size: 1.75rem; } .streak-label { font-size: 0.6rem; } .goals-main { padding: 0.75rem; gap: 0.75rem; } .goal-card { padding: 0.75rem; border-radius: 8px; } .goal-card h4 { font-size: 0.8rem; margin-bottom: 0.5rem; } .goal-progress { height: 6px; border-radius: 3px; } .goal-stats { font-size: 0.65rem; } .goals-sidebar { padding: 0.75rem; gap: 0.5rem; } .tip-card { padding: 0.6rem; } .tip-card h5 { font-size: 0.75rem; } .tip-card p { font-size: 0.7rem; } /* --- 9. PRICING SECTION --- */ .pricing { padding-top: 3rem; padding-bottom: 3rem; } .pricing-grid { gap: 1rem; } .pricing-card { padding: 1.25rem; border-radius: 12px; } .pricing-card h3 { font-size: 1rem; } .price { font-size: 1.75rem; } .price span { font-size: 0.8rem; } .pricing-card ul { font-size: 0.8rem; } .pricing-card li { padding: 0.4rem 0; } .pricing-btn { padding: 0.6rem; font-size: 0.85rem; } /* --- 10. TESTIMONIALS SECTION --- */ .testimonials { padding-top: 3rem; padding-bottom: 3rem; } .testimonials-grid { gap: 1rem; } .testimonial-card { padding: 1.25rem; border-radius: 12px; } .testimonial-card p { font-size: 0.85rem; line-height: 1.6; } .testimonial-author { margin-top: 1rem; } .author-avatar { width: 36px; height: 36px; } .author-name { font-size: 0.8rem; } .author-title { font-size: 0.65rem; } /* --- 11. CTA SECTION --- */ .cta-section { padding-top: 3rem; padding-bottom: 3rem; border-radius: 16px; margin: 0 0.5rem; } .cta-section h2 { font-size: 1.4rem; line-height: 1.3; } .cta-section p { font-size: 0.85rem; margin: 0.75rem 0 1.25rem; } .cta-btn { padding: 0.75rem 1.5rem; font-size: 0.9rem; } /* --- 12. FOOTER --- */ footer { padding-top: 2rem; padding-bottom: 1.5rem; } .footer-content { gap: 1.5rem; text-align: center; } .footer-brand { font-size: 1rem; } .footer-links { justify-content: center; gap: 1rem; flex-wrap: wrap; } .footer-links a { font-size: 0.8rem; } .footer-bottom { margin-top: 1.5rem; padding-top: 1rem; font-size: 0.7rem; } } /* ANIMATIONS */ /* Nav entrance */ nav { animation: navSlideDown 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; } @keyframes navSlideDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } /* Hero entrance animations */ .hero-content { animation: heroFadeUp 1s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .hero-content h1 { opacity: 0; animation: textReveal 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.2s forwards; } .hero-content p { opacity: 0; animation: textReveal 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.4s forwards; } @keyframes heroFadeUp { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: translateY(0); } } @keyframes textReveal { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* Editor card entrance */ .editor-card { opacity: 0; animation: editorEntrance 1s cubic-bezier(0.16, 1, 0.3, 1) 0.5s forwards; } @keyframes editorEntrance { from { opacity: 0; transform: translateY(60px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } /* AI chips staggered animation */ .ai-chip { opacity: 0; animation: chipReveal 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .ai-chip:nth-child(1) { animation-delay: 1s; } .ai-chip:nth-child(2) { animation-delay: 1.05s; } .ai-chip:nth-child(3) { animation-delay: 1.1s; } .ai-chip:nth-child(4) { animation-delay: 1.15s; } .ai-chip:nth-child(5) { animation-delay: 1.2s; } .ai-chip:nth-child(6) { animation-delay: 1.25s; } .ai-chip:nth-child(7) { animation-delay: 1.3s; } .ai-chip:nth-child(8) { animation-delay: 1.35s; } .ai-chip:nth-child(9) { animation-delay: 1.4s; } @keyframes chipReveal { from { opacity: 0; transform: translateY(10px) scale(0.9); } to { opacity: 1; transform: translateY(0) scale(1); } } /* Scroll-triggered section reveals */ .reveal-section { opacity: 0; transform: translateY(50px); transition: all 0.9s cubic-bezier(0.16, 1, 0.3, 1); } .reveal-section.visible { opacity: 1; transform: translateY(0); } /* Hover effects */ .writer-btn-large { transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); } .writer-btn-large:hover { transform: translateY(-4px); } .testimonial-card { transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); } .testimonial-card:hover { transform: translateY(-6px); box-shadow: 0 20px 40px rgba(0,0,0,0.12); } .pricing-card { transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); } .pricing-card:hover { transform: translateY(-8px); box-shadow: 0 25px 50px rgba(0,0,0,0.15); } /style>/head>body> nav> div classlogo>bossgpt.com/div> a hrefhttps://editor.bossgpt.com classnav-cta>Open Editor →/a> /nav> !-- Hero --> section classhero> div classhero-content> h1>The em>smartest/em> way to write stories/h1> p>bossgpt.com combines beautiful writing tools with powerful AI to help you create compelling narratives faster than ever./p> /div> !-- Editor Card --> div classeditor-card> div classeditor-nav> div classeditor-nav-left> div classdots> div classdot red>/div> div classdot yellow>/div> div classdot green>/div> /div> span classdoc-title>The-Lost-Garden.md/span> /div> /div> div classai-row> button classai-chip onclickapplyEdit(jokes)>😄 Add Jokes/button> button classai-chip onclickapplyEdit(sadder)>😢 Make Sadder/button> button classai-chip onclickapplyEdit(descriptive)>🎨 More Descriptive/button> button classai-chip onclickgenerateContent(continue)>✏️ Continue Story/button> button classai-chip analyze onclickanalyzeText(exitPoints)>🚪 Exit Points/button> button classai-chip analyze onclickanalyzeText(plotHoles)>🕳️ Plot Holes/button> button classai-chip analyze onclickanalyzeText(showDontTell)>👁️ Show Dont Tell/button> button classai-chip analyze onclickanalyzeText(pacing)>🐢 Pacing Issues/button> button classai-chip analyze onclickanalyzeText(cliches)>🎯 Clichés/button> /div> div classbulk-actions idbulkActions> span>✨ span idpendingCount>0/span> AI suggestions pending/span> div classbulk-btns> button classbulk-btn accept-all onclickacceptAll()>✓ Accept All/button> button classbulk-btn reject-all onclickrejectAll()>✗ Reject All/button> /div> /div> div classeditor-body> div classeditor-chapter>Chapter 1/div> div classeditor-title>The Warehouse/div> div classeditor-text ideditorText> p idp1>The school day ended, and I was walking to the bus when I got a message from my crush, Carter, the school jock, who never even knew I existed. strong>Carter:/strong> Hey, I need to tell you something important. Meet me in the warehouse behind the school. NOW!/p> p idp2>Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am and decided to ask me out. So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding. I got there, only to find darkness. The warehouse was small, with no windows or anything./p> p idp3>I started calling out for Carter when I heard noises behind some shelves. I peeked, and there was Carter, hugging and laughing with his girlfriend, Zoe. She was the queen bee and the head cheerleader. She was mean, and everyone was scared of her. But then I wondered why Carter sent me that message? Was it an accident? Of course it was. God, Im so stupid. I tried to tiptoe out, but the door wouldnt budge. I kept pulling like crazy until I ended up with the knob in my hand. Oh my god. Could this get any worse?/p> div idgeneratedContent>/div> div classtyping-indicator idtypingIndicator> div classtyping-dots> span>/span>span>/span>span>/span> /div> span>AI is writing.../span> /div> span classcursor idcursor>/span> /div> /div> div classeditor-status> div classstatus-left> span>📝 span idwordCount>247/span> words/span> span>⏱ 1 min read/span> /div> div classstatus-right> span classstatus-ai idstatusText>Ready/span> /div> /div> /div> /section> !-- Logos --> section classlogos-section> div classlogos-label>Trusted by creators from/div> div classlogos-row> span classlogo-item>MSA/span> span classlogo-item>Dhar Mann Studios/span> span classlogo-item>Zvoid Studios/span> span classlogo-item>MrBeast/span> span classlogo-item>Cocomelon/span> span classlogo-item>Storybooth/span> /div> /section> !-- Writers Room Section --> section classwriters-room-section idwriters-room> div classsection-label>Writers Room/div> div classsection-header> h2>Get feedback from literary legends/h2> p>AI channels the voice of famous authors to critique your work in their unique style./p> /div> div classeditor-window writers-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Writers Room — AI Feedback/span> /div> div classwindow-actions> div classwindow-status> span classstatus-indicator>/span> Ready /div> /div> /div> div classwriters-window-body> div classwriters-sidebar> div classsidebar-header>Select Mentor/div> div classwriter-avatars-large> button classwriter-btn-large active onclickshowWriterDemo(hemingway)> div classwriter-avatar-lg hemingway>EH/div> div classwriter-info> span classwriter-name-lg>Ernest Hemingway/span> span classwriter-style>Minimalist & Direct/span> /div> /button> button classwriter-btn-large onclickshowWriterDemo(king)> div classwriter-avatar-lg king>SK/div> div classwriter-info> span classwriter-name-lg>Stephen King/span> span classwriter-style>Horror & Suspense/span> /div> /button> button classwriter-btn-large onclickshowWriterDemo(austen)> div classwriter-avatar-lg austen>JA/div> div classwriter-info> span classwriter-name-lg>Jane Austen/span> span classwriter-style>Social & Witty/span> /div> /button> button classwriter-btn-large onclickshowWriterDemo(poe)> div classwriter-avatar-lg poe>EP/div> div classwriter-info> span classwriter-name-lg>Edgar Allan Poe/span> span classwriter-style>Gothic & Atmospheric/span> /div> /button> button classwriter-btn-large onclickshowWriterDemo(twain)> div classwriter-avatar-lg twain>MT/div> div classwriter-info> span classwriter-name-lg>Mark Twain/span> span classwriter-style>Humorous & Plain/span> /div> /button> /div> /div> div classwriters-main> div classdemo-review-card iddemoReviewCard> div classdemo-review-header> div classwriter-avatar-lg hemingway iddemoAvatar>EH/div> div> h4 iddemoWriterName>Ernest Hemingway/h4> span iddemoWriterBooks>The Old Man & The Sea/span> /div> /div> div classdemo-review-quote iddemoQuote> Cut the fat. The school jock who never even knew I existed—we get it. You like him. He doesnt know you. Say it once and move on. The warehouse scene is good. Dark. Small. No windows. Thats how you write. /div> div classdemo-suggestions iddemoSuggestions> div classdemo-suggestion>svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM6 9l6 6 6-6/>/svg> Cut the wedding metaphor—too cute/div> div classdemo-suggestion>svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM13 10V3L4 14h7v7l9-11h-7z/>/svg> I ran is enough. No need to explain why./div> div classdemo-suggestion>svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>circle cx12 cy12 r3/>/svg> The doorknob detail is perfect. Keep it./div> /div> /div> /div> /div> /div> /section> !-- Pacing Analysis Section --> section classpacing-section idpacing> div classsection-label>Pacing Analysis/div> div classsection-header> h2>See your storys heartbeat/h2> p>Visualize the rhythm of your entire manuscript at a glance./p> /div> div classpacing-overview> div classpacing-main-card> div classpacing-card-header> div classpacing-card-title> span classbook-title>The Warehouse/span> span classbook-stats>Chapter 3 · 2,847 words/span> /div> div classpacing-score-pill> span classscore-num>78/span> span classscore-max>/100/span> /div> /div> div classpacing-viz-container> div classrhythm-map> div classrhythm-bar style--height: 30% data-labelOpening>/div> div classrhythm-bar style--height: 35% data-label>/div> div classrhythm-bar style--height: 25% data-label>/div> div classrhythm-bar style--height: 40% data-label>/div> div classrhythm-bar style--height: 55% data-labelRising>/div> div classrhythm-bar style--height: 50% data-label>/div> div classrhythm-bar style--height: 65% data-label>/div> div classrhythm-bar style--height: 75% data-label>/div> div classrhythm-bar style--height: 85% data-label>/div> div classrhythm-bar peak style--height: 95% data-labelClimax>/div> div classrhythm-bar peak style--height: 90% data-label>/div> div classrhythm-bar style--height: 70% data-label>/div> div classrhythm-bar style--height: 55% data-labelFalling>/div> div classrhythm-bar style--height: 45% data-label>/div> div classrhythm-bar style--height: 35% data-labelEnd>/div> /div> /div> div classpacing-insights-row> div classinsight-box> div classinsight-icon slow>🐢/div> div classinsight-text> strong>Slow opening/strong> span>First 400 words are descriptive/span> /div> /div> div classinsight-box> div classinsight-icon good>✓/div> div classinsight-text> strong>Good build-up/strong> span>Tension rises steadily/span> /div> /div> div classinsight-box> div classinsight-icon peak>⚡/div> div classinsight-text> strong>Strong climax/strong> span>Peak action at 75% mark/span> /div> /div> /div> /div> /div> /section> !-- Reader Insights Section --> section classreader-insights-section idreader-insights> div classsection-label>Reader Insights/div> div classsection-header> h2>See exactly how readers experience your story/h2> p>Share your draft with beta readers and get detailed analytics on their reading journey./p> /div> div classeditor-window light reader-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Reader Analytics — The Warehouse/span> /div> div classwindow-actions> button classwindow-action-btn idshareReaderLinkBtn typebutton onclickcopyReaderShareLink()> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71/>/svg> span classbtn-label>Share Link/span> /button> /div> /div> div classreader-window-body> div classreader-story-preview> div classstory-scroll-container> div classstory-header-mini> span classstory-title-mini>The Warehouse/span> span classstory-stats>Chapter 3 • 2,450 words/span> /div> div classstory-content-mini> div classstory-paragraph read data-para1 style--read-percent: 100%> div classpara-heat>/div> p>The school day ended, and I was walking to the bus when I got a message from my crush, Carter.../p> /div> div classstory-paragraph read data-para2 style--read-percent: 100%> div classpara-heat>/div> p>Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am.../p> /div> div classstory-paragraph read data-para3 style--read-percent: 100%> div classpara-heat>/div> p>I got there, only to find darkness. The warehouse was small, with no windows or anything.../p> /div> div classstory-paragraph read slow data-para4 style--read-percent: 85%> div classpara-heat>/div> p>I started calling out for Carter when I heard noises behind some shelves.../p> div classreader-marker pause> svg classmarker-icon-svg viewBox0 0 24 24 fillcurrentColor>rect x6 y4 width4 height16 rx1/>rect x14 y4 width4 height16 rx1/>/svg> span classmarker-label>3 readers paused here/span> /div> /div> div classstory-paragraph read data-para5 style--read-percent: 70%> div classpara-heat>/div> p>I peeked, and there was Carter, hugging and laughing with his girlfriend, Zoe.../p> /div> div classstory-paragraph dropoff data-para6 style--read-percent: 45%> div classpara-heat>/div> p>I tried to tiptoe out, but the door wouldnt budge. I kept pulling like crazy.../p> div classreader-marker stop> svg classmarker-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4M16 17l5-5-5-5M21 12H9/>/svg> span classmarker-label>2 readers stopped here/span> /div> /div> div classstory-paragraph unread data-para7 style--read-percent: 20%> div classpara-heat>/div> p>I ended up with the knob in my hand. Oh my god. Could this get any worse?.../p> /div> /div> /div> div classscroll-legend> div classlegend-item>span classlegend-color hot>/span> High engagement/div> div classlegend-item>span classlegend-color warm>/span> Normal reading/div> div classlegend-item>span classlegend-color cold>/span> Skimmed/dropped/div> /div> /div> div classreader-analytics-sidebar> div classanalytics-card main-stat> div classreader-avatars-row> div classreader-avatar-small stylebackground: #6366f1;>JM/div> div classreader-avatar-small stylebackground: #ec4899;>SL/div> div classreader-avatar-small stylebackground: #14b8a6;>KR/div> div classreader-avatar-small stylebackground: #f59e0b;>+4/div> /div> h3>7 readers/h3> p>have read this chapter/p> /div> div classanalytics-card> div classanalytics-header> svg classanalytics-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM2 3h6a4 4 0 014 4v14a3 3 0 00-3-3H2zM22 3h-6a4 4 0 00-4 4v14a3 3 0 013-3h7z/>/svg> h4>Completion Rate/h4> /div> div classcompletion-bar-container> div classcompletion-bar> div classcompletion-fill stylewidth: 71%>/div> /div> span classcompletion-percent>71%/span> /div> p classanalytics-note>5 of 7 readers finished/p> /div> div classanalytics-card> div classanalytics-header> svg classanalytics-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>polyline points12,6 12,12 16,14/>/svg> h4>Avg. Read Time/h4> /div> div classtime-display> span classtime-value>8:34/span> span classtime-expected>/ 10:00 expected/span> /div> p classanalytics-note speed-indicator fast>Readers are engaged! 15% faster than avg./p> /div> div classanalytics-card> div classanalytics-header> svg classanalytics-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM8.5 14.5A2.5 2.5 0 0011 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 11-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 002.5 2.5z/>/svg> h4>Hotspots/h4> /div> ul classhotspot-list> li classhotspot-item positive data-reader-para4 rolebutton tabindex0> span>Para 4/span> span classhotspot-detail>svg classhotspot-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z/>circle cx12 cy12 r3/>/svg> Re-read 3x/span> /li> li classhotspot-item negative data-reader-para6 rolebutton tabindex0> span>Para 6/span> span classhotspot-detail>svg classhotspot-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4M16 17l5-5-5-5M21 12H9/>/svg> Drop-off point/span> /li> li classhotspot-item positive data-reader-para3 rolebutton tabindex0> span>Para 3/span> span classhotspot-detail>svg classhotspot-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z/>/svg> 2 comments/span> /li> /ul> /div> /div> /div> /div> /section> !-- Version History Section --> section classversion-history-section idversion-history> div classsection-label>Version History/div> div classsection-header> h2>Travel through time in your story/h2> p>Every change is saved. Go back to any moment, compare drafts, restore with one click./p> /div> div classeditor-window light version-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Version History — Chapter 3/span> /div> div classwindow-actions> button classwindow-action-btn> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM3 12a9 9 0 109-9 9.75 9.75 0 00-6.74 2.74L3 8/>path dM3 3v5h5/>/svg> Restore /button> button classwindow-action-btn> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>rect x9 y9 width13 height13 rx2/>path dM5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1/>/svg> Copy /button> /div> /div> div classversion-window-body> div classversion-sidebar> div classsidebar-header>Timeline/div> div classtimeline-track> div classtimeline-marker current data-versionnow> div classmarker-dot>/div> div classmarker-info> span classmarker-time>Now/span> span classmarker-label>Current version/span> /div> /div> div classtimeline-marker data-versionv4> div classmarker-dot>/div> div classmarker-info> span classmarker-time>2 hours ago/span> span classmarker-label>Added chapter ending/span> /div> /div> div classtimeline-marker data-versionv3> div classmarker-dot>/div> div classmarker-info> span classmarker-time>Yesterday/span> span classmarker-label>Rewrote dialog scene/span> /div> /div> div classtimeline-marker selected data-versionv2> div classmarker-dot>/div> div classmarker-info> span classmarker-time>3 days ago/span> span classmarker-label>Major plot revision/span> /div> /div> div classtimeline-marker data-versionv1> div classmarker-dot>/div> div classmarker-info> span classmarker-time>1 week ago/span> span classmarker-label>First draft/span> /div> /div> /div> /div> div classversion-compare-area> div classcompare-tabs> button classcompare-tab active>Side by Side/button> button classcompare-tab>Unified/button> /div> div classversion-compare> div classcompare-panel old> div classcompare-header> span classcompare-badge old>3 days ago/span> span>Major plot revision/span> /div> div classcompare-content> p>Carter sent me a text. span classdiff-removed>He wanted to meet up./span>/p> p>span classdiff-removed>Carter texted me to meet him./span>/p> p>I ran to the warehouse without thinking twice./p> /div> /div> div classcompare-panel new> div classcompare-header> span classcompare-badge new>Current/span> span>Latest version/span> /div> div classcompare-content> p>Carter texted me to meet him, span classdiff-added>and my heart nearly stopped when I saw his name on my screen./span>/p> p>span classdiff-added>Without hesitating even a bit, I ran to that warehouse like I was late to my own wedding./span>/p> p>I ran to the warehouse without thinking twice./p> /div> /div> /div> /div> /div> /div> /section> !-- Collaboration Section --> section classcollab-section idcollaboration> div classsection-label>Collaboration/div> div classsection-header> h2>Write together in real-time/h2> p>Co-author with friends, get feedback from editors, all in one shared space./p> /div> div classeditor-window light collab-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Chapter 3 - The Warehouse/span> /div> div classwindow-actions> div classcollab-users> div classcollab-avatar you stylebackground: #6366f1;> span>You/span> /div> div classcollab-avatar stylebackground: #ec4899; --cursor-color: #ec4899;> span>Sarah/span> div classtyping-badge>typing.../div> /div> div classcollab-avatar stylebackground: #14b8a6;> span>Mike/span> /div> /div> button classwindow-action-btn> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71/>/svg> Share /button> /div> /div> div classcollab-window-body> div classcollab-content> p>The school day ended, and I was walking to the bus when I got a message from my crush, Carter./p> p classhas-cursor sarah>Carter: Hey, I need to tell you something important. Meet me in the warehouse behind the school. NOW!span classremote-cursor sarah>/span>/p> p>Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am./p> div classcollab-comment> div classcomment-avatar stylebackground: #14b8a6;>M/div> div classcomment-body> div classcomment-author>Mike span classcomment-time>2 min ago/span>/div> div classcomment-text>This is so relatable! Maybe add how her heart was racing?/div> /div> /div> p>I got there, only to find darkness. The warehouse was small, with no windows or anything./p> /div> div classcollab-sidebar> div classsidebar-header>Features/div> div classcollab-feature-list> div classcollab-feature-item> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2/>circle cx9 cy7 r4/>path dM23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75/>/svg> div> strong>Live Cursors/strong> span>See where everyone is writing/span> /div> /div> div classcollab-feature-item> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z/>/svg> div> strong>Inline Comments/strong> span>Leave feedback on passages/span> /div> /div> div classcollab-feature-item> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>polyline points20,6 9,17 4,12/>/svg> div> strong>Suggest Mode/strong> span>Propose changes safely/span> /div> /div> div classcollab-feature-item> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>rect x3 y11 width18 height11 rx2/>path dM7 11V7a5 5 0 0110 0v4/>/svg> div> strong>Permissions/strong> span>Control access levels/span> /div> /div> /div> /div> /div> /div> /section> !-- Writing Goals Section --> section classgoals-section idgoals> div classsection-label>Writing Goals/div> div classsection-header> h2>Build your writing habit/h2> p>Set daily goals, track your progress, earn streaks and stay motivated./p> /div> div classeditor-window light goals-window> div classwindow-titlebar> div classwindow-title-left> div classwindow-dots> span classwindow-dot red>/span> span classwindow-dot yellow>/span> span classwindow-dot green>/span> /div> span classwindow-title>Writing Dashboard/span> /div> div classwindow-actions> button classwindow-action-btn> svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r3/>path dM19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z/>/svg> Settings /button> /div> /div> div classgoals-window-body> div classgoals-main> div classgoals-stats> div classstat-card streak> svg classstat-icon-svg flame viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM8.5 14.5A2.5 2.5 0 0011 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 11-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 002.5 2.5z/>/svg> div classstat-content> div classstat-value>14/div> div classstat-label>Day Streak/div> /div> div classstreak-badge>Personal Best!/div> /div> div classstat-card> svg classstat-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM12 19l7-7 3 3-7 7-3-3z/>path dM18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z/>path dM2 2l7.586 7.586/>circle cx11 cy11 r2/>/svg> div classstat-content> div classstat-value>1,247/div> div classstat-label>Words Today/div> /div> div classgoal-progress> div classgoal-bar> div classgoal-fill stylewidth: 83%>/div> /div> span>1,247 / 1,500/span> /div> /div> div classstat-card> svg classstat-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM4 19.5A2.5 2.5 0 016.5 17H20/>path dM6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z/>/svg> div classstat-content> div classstat-value>23,456/div> div classstat-label>Total Words/div> /div> div classword-trend>svg classtrend-arrow viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM18 15l-6-6-6 6/>/svg> 2,340 this week/div> /div> /div> div classgoals-calendar> div classcalendar-header> h4>December 2024/h4> /div> div classcalendar-grid> div classcal-day header>M/div> div classcal-day header>T/div> div classcal-day header>W/div> div classcal-day header>T/div> div classcal-day header>F/div> div classcal-day header>S/div> div classcal-day header>S/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day empty>/div> div classcal-day hit low>1/div> div classcal-day hit medium>2/div> div classcal-day hit high>3/div> div classcal-day hit high>4/div> div classcal-day hit medium>5/div> div classcal-day hit high>6/div> div classcal-day hit low>7/div> div classcal-day miss>8/div> div classcal-day hit high>9/div> div classcal-day hit high>10/div> div classcal-day hit high>11/div> div classcal-day hit medium>12/div> div classcal-day hit high>13/div> div classcal-day hit medium>14/div> div classcal-day hit high>15/div> div classcal-day hit high>16/div> div classcal-day hit high>17/div> div classcal-day hit medium>18/div> div classcal-day hit high>19/div> div classcal-day hit high>20/div> div classcal-day hit high>21/div> div classcal-day hit medium>22/div> div classcal-day today>23/div> div classcal-day future>24/div> div classcal-day future>25/div> div classcal-day future>26/div> div classcal-day future>27/div> div classcal-day future>28/div> div classcal-day future>29/div> div classcal-day future>30/div> div classcal-day future>31/div> /div> div classcalendar-legend> span>span classlegend-dot miss>/span> Missed/span> span>span classlegend-dot low>/span> <500/span> span>span classlegend-dot medium>/span> 500-1k/span> span>span classlegend-dot high>/span> 1k+/span> /div> /div> /div> div classgoals-sidebar> div classsidebar-header>Achievements/div> div classbadges-grid> div classbadge earned> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>polygon points12,2 15.09,8.26 22,9.27 17,14.14 18.18,21.02 12,17.77 5.82,21.02 7,14.14 2,9.27 8.91,8.26/>/svg> span classbadge-name>First Chapter/span> /div> div classbadge earned> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM8.5 14.5A2.5 2.5 0 0011 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 11-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 002.5 2.5z/>/svg> span classbadge-name>7-Day Streak/span> /div> div classbadge earned> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM2 3h6a4 4 0 014 4v14a3 3 0 00-3-3H2z/>path dM22 3h-6a4 4 0 00-4 4v14a3 3 0 013-3h7z/>/svg> span classbadge-name>10K Words/span> /div> div classbadge earned> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>circle cx12 cy12 r6/>circle cx12 cy12 r2/>/svg> span classbadge-name>Goal Crusher/span> /div> div classbadge locked> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM6 9H4.5a2.5 2.5 0 010-5C7 4 7 7 7 7M18 9h1.5a2.5 2.5 0 000-5C17 4 17 7 17 7/>path dM4 22h16M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20 7 22M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20 17 22M18 2H6v7a6 6 0 1012 0V2z/>/svg> span classbadge-name>30-Day Streak/span> /div> div classbadge locked> svg classbadge-icon-svg viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM4 19.5A2.5 2.5 0 016.5 17H20/>path dM6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z/>path dM8 7h8M8 11h8M8 15h5/>/svg> span classbadge-name>50K Words/span> /div> /div> /div> /div> /div> /section> !-- Pricing --> section classpricing idpricing> div classsection-label>Pricing/div> div classsection-header> h2>Simple, honest pricing/h2> p>Start free, upgrade when you need more./p> /div> div classpricing-grid stylemax-width: 800px; grid-template-columns: repeat(2, 1fr);> div classpricing-card> h3>Free/h3> div classprice>$0span>/mo/span>/div> ul> li>Unlimited projects/li> li>Unlimited AI generations/li> li>All editor features/li> li>Real-time collaboration/li> li>Standard AI model/li> /ul> a hrefhttps://editor.bossgpt.com classbtn btn-primary>Get Started Free/a> /div> div classpricing-card featured> h3>Pro/h3> div classprice>$8span>/mo/span>/div> ul> li>Everything in Free/li> li>Claude Opus 4.5/li> li>GPT 5.2/li> li>Gemini 3 Pro/li> li>Advanced AI features/li> li>Priority support/li> /ul> a hrefhttps://editor.bossgpt.com?upgradepro classbtn btn-primary>Upgrade to Pro/a> /div> /div> /section> !-- Testimonials --> section classtestimonials> div classsection-header> h2>Writers love bossgpt.com/h2> p>Join thousands of storytellers crafting their best work./p> /div> div classtestimonials-grid> div classtestimonial-card> div classtestimonial-stars>★★★★★/div> blockquote>bossgpt.com helped me finish my novel in half the time./blockquote> div classtestimonial-author> div classauthor-avatar>MR/div> div classauthor-info> h4>Maria Rodriguez/h4> span>Novelist/span> /div> /div> /div> div classtestimonial-card> div classtestimonial-stars>★★★★★/div> blockquote>The dialog generator is incredible. My characters feel authentic./blockquote> div classtestimonial-author> div classauthor-avatar>JC/div> div classauthor-info> h4>James Chen/h4> span>Screenwriter/span> /div> /div> /div> div classtestimonial-card> div classtestimonial-stars>★★★★★/div> blockquote>Finally, an AI tool that enhances my creativity./blockquote> div classtestimonial-author> div classauthor-avatar>SK/div> div classauthor-info> h4>Sarah Kim/h4> span>Author/span> /div> /div> /div> /div> /section> !-- CTA --> section classcta-section> h2>Ready to write your best story?/h2> p>Join 50,000+ writers using bossgpt.com to create compelling narratives./p> a href# classbtn btn-primary>Start Writing Free →/a> /section> !-- Footer --> footer> div classfooter-content> div classfooter-brand> h3>bossgpt.com/h3> p>AI-powered story editor for writers who want to create without limits./p> /div> div classfooter-links> h4>Product/h4> a href#>Features/a> a href#>Pricing/a> a href#>Changelog/a> /div> div classfooter-links> h4>Resources/h4> a href#>Documentation/a> a href#>Blog/a> a href#>API/a> /div> div classfooter-links> h4>Company/h4> a href#>About/a> a href#>Contact/a> a href#>Privacy/a> /div> /div> div classfooter-bottom> © 2024 bossgpt.com. All rights reserved. /div> /footer> script> const originalText { p1: The school day ended, and I was walking to the bus when I got a message from my crush, Carter, the school jock, who never even knew I existed. Carter: \Hey, I need to tell you something important. Meet me in the warehouse behind the school. NOW!\, p2: Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am and decided to ask me out. So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding. I got there, only to find darkness. The warehouse was small, with no windows or anything., p3: I started calling out for Carter when I heard noises behind some shelves. I peeked, and there was Carter, hugging and laughing with his girlfriend, Zoe. She was the queen bee and the head cheerleader. She was mean, and everyone was scared of her. But then I wondered why Carter sent me that message? Was it an accident? Of course it was. God, Im so stupid. I tried to tiptoe out, but the door wouldnt budge. I kept pulling like crazy until I ended up with the knob in my hand. Oh my god. Could this get any worse? }; const edits { jokes: { id: p1, old: who never even knew I existed, new: who never even knew I existed—which was honestly impressive since I sat behind him in three classes }, { id: p2, old: like I was late to my own wedding, new: like I was late to my own wedding, tripping over my own feet twice }, { id: p3, old: Could this get any worse?, new: Could this get any worse? (Spoiler: yes, yes it could.) } , sadder: { id: p1, old: who never even knew I existed, new: who never even knew I existed, no matter how hard I tried to be noticed }, { id: p2, old: maybe he finally realized how cool I am, new: maybe, just maybe, someone finally saw me }, { id: p3, old: God, I\m so stupid, new: God, I\m so stupid. I always fall for this. Every single time. } , happier: { id: p1, old: who never even knew I existed, new: who I\d admired from afar }, { id: p2, old: without hesitating even a bit, new: with butterflies in my stomach and hope in my heart }, { id: p3, old: God, I\m so stupid, new: Okay, this was embarrassing, but at least now I knew the truth } , tension: { id: p1, old: Meet me in the warehouse behind the school. NOW!, new: Meet me in the warehouse behind the school. NOW! Come alone. Tell no one. }, { id: p2, old: only to find darkness, new: only to find darkness so thick I could taste it }, { id: p3, old: the door wouldn\t budge, new: the door wouldn\t budge—and that\s when I heard footsteps behind me } , romantic: { id: p1, old: my crush, Carter, new: Carter, the boy who made my heart skip every time he smiled }, { id: p2, old: decided to ask me out, new: finally felt the same electric connection I\d been feeling all year }, { id: p3, old: hugging and laughing with his girlfriend, new: wrapped in Zoe\s arms, looking at her the way I\d dreamed he\d look at me } , mysterious: { id: p1, old: I got a message from my crush, new: I got a message from an unknown number—but somehow I knew it was Carter }, { id: p2, old: The warehouse was small, new: The warehouse seemed smaller than it should have been, the walls almost breathing }, { id: p3, old: ended up with the knob in my hand, new: ended up with the knob in my hand—and noticed strange symbols carved into the door } , funny: { id: p1, old: who never even knew I existed, new: who never even knew I existed—which was honestly impressive since I sat behind him in three classes }, { id: p2, old: like I was late to my own wedding, new: like I was late to my own wedding, tripping over my own feet twice }, { id: p3, old: Could this get any worse?, new: Could this get any worse? (Spoiler: yes, yes it could.) } , descriptive: { id: p1, old: the school jock, new: the school jock with his perfect jawline and those ocean-blue eyes }, { id: p2, old: only to find darkness, new: only to find suffocating darkness that pressed against my skin like velvet }, { id: p3, old: The warehouse was small, new: The warehouse was cramped and musty, dust motes floating in thin shafts of light from the cracks in the walls } , shorter: { id: p1, old: The school day ended, and I was walking to the bus when I got a message from my crush, Carter, the school jock, who never even knew I existed., new: After school, Carter texted me. }, { id: p2, old: Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am and decided to ask me out. So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding. I got there, only to find darkness. The warehouse was small, with no windows or anything., new: I ran to the warehouse. It was dark inside. } , dramatic: { id: p1, old: Meet me in the warehouse, new: Meet me in the warehouse—if you dare }, { id: p2, old: I ran to that warehouse, new: I ran to that warehouse, sealing my fate with every step }, { id: p3, old: Could this get any worse?, new: And in that moment, I knew—nothing would ever be the same again. } , simplify: { id: p1, old: the school jock, who never even knew I existed, new: the popular guy }, { id: p2, old: So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding, new: So I ran there fast } , pov: { id: p1, old: I was walking, new: She was walking }, { id: p1, old: I got a message from my crush, new: She got a message from her crush }, { id: p2, old: I told myself, new: She told herself } , grammar: { id: p3, old: God, I\m so stupid, new: God, I was so stupid }, { id: p1, old: NOW!, new: NOW. } }; const generatedTexts { continue: { type: continue, tag: ▶️ AI Continuation, content: Then I heard Zoe\s voice, sharp as broken glass. Did you hear something? My heart stopped. Carter mumbled something I couldn\t make out. Footsteps. Coming closer. I pressed myself against the wall, praying the shadows would swallow me whole. The door knob was still in my hand, cold and useless. }, dialog: { type: dialog, tag: 💬 Generated Dialog, content: `div classdialog-line>Well, well, well, Zoes voice cut through the darkness. Look what we have here./div>div classdialog-line>I froze. She was standing right behind me, her phone flashlight blinding my eyes./div>div classdialog-line>I... I was just leaving, I stammered./div>div classdialog-line>With my boyfriends doorknob? She laughed, but there was no warmth in it. Carter, come look at your little stalker./div>` }, character: { type: continue, tag: 👤 New Character, content: That\s when I noticed someone else in the corner—a girl with bright purple hair and combat boots, filming everything on her phone. She caught my eye and winked. Don\t worry, she mouthed silently. I got you. I had no idea who she was, but something told me she was about to change everything. }, twist: { type: continue, tag: 🌀 Plot Twist, content: But then Carter pulled away from Zoe and looked right at me. Finally, he said, and he was smiling. I was wondering when you\d show up. Zoe\s face went pale. Carter, what— The message wasn\t an accident, he said. I needed a witness. Zoe\s been blackmailing me for months. } }; const writerReviews { hemingway: { name: Ernest Hemingway, initials: EH, style: hemingway, title: The Old Man & The Sea, quote: Cut the fat. The school jock who never even knew I existed—we get it. You like him. He doesn\t know you. Say it once and move on. The warehouse scene is good. Dark. Small. No windows. That\s how you write. But like I was late to my own wedding? Kill that line., suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM6 9l6 6 6-6/>/svg>, text: Cut the wedding metaphor—too cute }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM13 10V3L4 14h7v7l9-11h-7z/>/svg>, text: I ran is enough. No need to explain why. }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>circle cx12 cy12 r3/>/svg>, text: The doorknob detail is perfect. Keep it. } }, king: { name: Stephen King, initials: SK, style: king, title: The Shining, It, quote: You\ve got the setup for something nasty here, kid. Dark warehouse, mysterious message, popular mean girl—this is the stuff teen nightmares are made of. But you\re rushing it. Let us feel that darkness. What does it smell like in there? What sounds are hiding in those shadows?, suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z/>circle cx12 cy12 r3/>/svg>, text: The warehouse should feel alive, threatening }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM12 22c1-3 4-5.5 4-8.5a4 4 0 10-8 0c0 3 3 5.5 4 8.5z/>/svg>, text: Why can\t the door open? Make it sinister. }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>path dM8 15h8M9 9h.01M15 9h.01/>/svg>, text: Zoe is scary because everyone fears her—show us why } }, austen: { name: Jane Austen, initials: JA, style: austen, title: Pride & Prejudice, quote: Oh dear. Our heroine rushes to meet a young man in a warehouse, alone, based on a single text message? One must question her judgement. However, the social dynamics are deliciously cruel—the quarterback, the queen bee, the invisible girl. This is a tale of reputation and its destruction., suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2/>circle cx12 cy7 r4/>/svg>, text: What are the social stakes if she\s caught? }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z/>/svg>, text: Her inner thoughts reveal delightful self-deception }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>line x12 y112 x222 y212/>/svg>, text: Zoe\s power comes from society—explore that } }, poe: { name: Edgar Allan Poe, initials: EP, style: poe, title: The Raven, The Fall of the House of Usher, quote: Ah! A dark warehouse, a mysterious summons, a door that will not yield! This has the makings of exquisite torment. But you must descend deeper into the protagonist\s despair. When the doorknob comes free, it should feel like her heart being ripped from her chest. Let the humiliation be Gothic in its intensity!, suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z/>/svg>, text: The darkness should be oppressive, alive }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z/>/svg>, text: Unrequited love is a kind of death—lean into it }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>rect x3 y3 width18 height18 rx2/>path dM12 8v4M12 16h.01/>/svg>, text: The broken doorknob is symbolic—make it explicit } }, twain: { name: Mark Twain, initials: MT, style: twain, title: Tom Sawyer, Huckleberry Finn, quote: Now this is more like it! A kid doing something foolish because of a crush—that\s as old as time and twice as reliable. The doorknob coming off in her hand? That\s comedy gold, friend. Don\t waste it by making her too sorry for herself. Let her be embarrassed AND mad about it., suggestions: { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z/>/svg>, text: Let her get angry—anger\s funnier than sadness }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>circle cx12 cy12 r10/>path dM8 14s1.5 2 4 2 4-2 4-2/>/svg>, text: Queen bee is perfect—every school\s got one }, { icon: svg classsuggestion-icon viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2>path dM19 21l-7-5-7 5V5a2 2 0 012-2h10a2 2 0 012 2z/>/svg>, text: What\s she gonna do with that doorknob? } } }; const analysisData { exitPoints: { id: p1, dropRate: 15, reason: Strong hook with mystery }, { id: p2, dropRate: 25, reason: Internal monologue slows pace }, { id: p3, dropRate: 8, reason: High tension, cliffhanger ending } , plotHoles: { id: p1, text: message from my crush, question: How did Carter get her number if he doesn\t know she exists? }, { id: p2, text: warehouse behind the school, question: Why would a school have an accessible warehouse? }, { id: p3, text: door wouldn\t budge, question: Did someone lock her in? How did Carter and Zoe get in? } , showDontTell: { id: p1, telling: who never even knew I existed, showing: His eyes swept past me like I was part of the wallpaper }, { id: p2, telling: She was mean, showing: Her smile had a way of making people flinch }, { id: p3, telling: everyone was scared of her, showing: Students parted for her in the hallway like she was contagious } , pacing: { id: p1, speed: fast, label: Inciting incident }, { id: p2, speed: medium, label: Building tension }, { id: p3, speed: fast, label: Crisis moment } , senses: { id: p1, present: sight, missing: sound, touch }, { id: p2, present: sight, missing: smell, sound }, { id: p3, present: sight, touch, sound, missing: smell } , cliches: { id: p1, text: school jock, freshness: 20, suggestion: varsity quarterback with the easy smile }, { id: p2, text: queen bee, freshness: 15, suggestion: social assassin }, { id: p3, text: head cheerleader, freshness: 25, suggestion: captain of the spirit squad } }; let pendingEdits ; let editCounter 0; let activeAnnotations ; function clearState() { resetText(); document.getElementById(generatedContent).innerHTML ; pendingEdits ; editCounter 0; // Remove analysis elements activeAnnotations.forEach(ann > { if (ann.element) { ann.element.remove(); } }); activeAnnotations ; // Reset editor text styles const editorText document.getElementById(editorText); editorText.style.marginLeft ; editorText.style.marginRight ; editorText.style.position ; editorText.classList.remove(has-pacing); // Remove any added elements const timeline document.getElementById(pacingTimeline); if (timeline) timeline.remove(); const legend document.getElementById(sensesLegend); if (legend) legend.remove(); // Close writer review panel const reviewPanel document.querySelector(.writer-review-panel); if (reviewPanel) reviewPanel.remove(); document.querySelector(.editor-body)?.classList.remove(has-review); document.querySelectorAll(.writer-btn).forEach(btn > btn.classList.remove(active)); // Reset paragraph styles document.querySelectorAll(#editorText p).forEach(p > { p.style.position ; p.style.marginLeft ; }); document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); updatePendingCount(); } function analyzeText(type) { clearState(); event.target.classList.add(active); document.getElementById(statusText).textContent AI is analyzing...; setTimeout(() > { const data analysisDatatype; if (!data) return; switch(type) { case exitPoints: renderExitPoints(data); break; case plotHoles: renderPlotHoles(data); break; case showDontTell: renderShowDontTell(data); break; case pacing: renderPacing(data); break; case senses: renderSenses(data); break; case cliches: renderCliches(data); break; } }, 600); } // EXIT POINTS - Danger meters on the side function renderExitPoints(data) { const editorText document.getElementById(editorText); editorText.style.position relative; editorText.style.marginLeft 70px; data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; para.style.position relative; const indicator document.createElement(div); indicator.className exit-point-indicator; indicator.innerHTML ` div classexit-meter> div classexit-meter-fill styleheight: ${item.dropRate}%>/div> /div> div classexit-percent>${item.dropRate}%/div> div classexit-label>drop/div> `; indicator.title item.reason; para.appendChild(indicator); activeAnnotations.push({ element: indicator }); }, index * 300); }); setTimeout(() > { const avgDrop Math.round(data.reduce((a, b) > a + b.dropRate, 0) / data.length); document.getElementById(statusText).textContent `Avg. reader drop-off: ${avgDrop}% — hover meters for details`; }, data.length * 300 + 100); } // PLOT HOLES - Question bubbles with connecting lines function renderPlotHoles(data) { const editorText document.getElementById(editorText); editorText.style.marginRight 200px; data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; para.style.position relative; // Highlight the text const html para.innerHTML; const newHtml html.replace(item.text, `span classplot-hole-highlight>${item.text}/span>`); para.innerHTML newHtml; // Add question bubble const bubble document.createElement(div); bubble.className plot-hole-bubble; bubble.innerHTML `span classbubble-icon>❓/span>${item.question}`; bubble.style.top 0; para.appendChild(bubble); activeAnnotations.push({ id: item.id, original: html }); }, index * 400); }); setTimeout(() > { document.getElementById(statusText).textContent `Found ${data.length} potential plot holes`; }, data.length * 400 + 100); } // SHOW DONT TELL - Transform cards function renderShowDontTell(data) { data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; const html para.innerHTML; const card `span classshow-tell-card> span classshow-tell-tag>TELLING/span> span classshow-tell-original>${item.telling}/span> span classshow-tell-arrow>→/span> span classshow-tell-better>${item.showing}/span> /span>`; const newHtml html.replace(item.telling, card); para.innerHTML newHtml; activeAnnotations.push({ id: item.id, original: html }); }, index * 400); }); setTimeout(() > { document.getElementById(statusText).textContent `Found ${data.length} telling phrases — see suggested showing alternatives`; }, data.length * 400 + 100); } // PACING - Timeline on the left function renderPacing(data) { const editorText document.getElementById(editorText); editorText.classList.add(has-pacing); editorText.style.position relative; const timeline document.createElement(div); timeline.className pacing-timeline; timeline.id pacingTimeline; data.forEach((item, index) > { const segment document.createElement(div); segment.className `pacing-segment ${item.speed}`; const icon item.speed slow ? 🐢 : item.speed fast ? 🐇 : 🚶; segment.innerHTML `${icon}span classpacing-label>${item.label}/span>`; timeline.appendChild(segment); }); editorText.insertBefore(timeline, editorText.firstChild); activeAnnotations.push({ element: timeline }); const slowCount data.filter(d > d.speed slow).length; document.getElementById(statusText).textContent `Pacing: ${slowCount} slow sections detected — 🐢 slow, 🐇 fast`; } // SENSES - Icons showing present/missing senses function renderSenses(data) { const senseIcons { sight: 👁️, sound: 👂, smell: 👃, touch: ✋, taste: 👅 }; // Add legend const legend document.createElement(div); legend.className senses-legend; legend.id sensesLegend; legend.innerHTML ` span>span classsense-icon present>✓/span> Present/span> span>span classsense-icon missing>!/span> Missing/span> span>| 👁️ Sight 👂 Sound 👃 Smell ✋ Touch 👅 Taste/span> `; const editorText document.getElementById(editorText); editorText.insertBefore(legend, editorText.firstChild); activeAnnotations.push({ element: legend }); data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; const html para.innerHTML; const checkHtml document.createElement(span); checkHtml.className senses-check; const allSenses sight, sound, smell, touch, taste; allSenses.forEach(sense > { const isPresent item.present.includes(sense); const isMissing item.missing.includes(sense); if (isPresent || isMissing) { const icon document.createElement(span); icon.className `sense-icon ${isPresent ? present : missing}`; icon.innerHTML senseIconssense; icon.title `${sense}: ${isPresent ? present : MISSING}`; checkHtml.appendChild(icon); } }); para.appendChild(checkHtml); activeAnnotations.push({ id: item.id, original: html }); }, index * 300); }); setTimeout(() > { const totalMissing data.reduce((a, b) > a + b.missing.length, 0); document.getElementById(statusText).textContent `${totalMissing} missing sensory details — add smell, sound, touch`; }, data.length * 300 + 100); } // CLICHÉS - Stamp overlays with freshness meter function renderCliches(data) { data.forEach((item, index) > { setTimeout(() > { const para document.getElementById(item.id); if (!para) return; const html para.innerHTML; const stampHtml `span classcliche-stamp> span classcliche-text>${item.text}/span> /span> span classcliche-freshness> div classfreshness-bar>div classfreshness-fill stylewidth: ${item.freshness}%>/div>/div> ${item.freshness}% fresh /span> span classcliche-suggestion>Try: ${item.suggestion}/span>`; const newHtml html.replace(item.text, stampHtml); para.innerHTML newHtml; activeAnnotations.push({ id: item.id, original: html }); }, index * 400); }); setTimeout(() > { document.getElementById(statusText).textContent `Found ${data.length} clichés — see freshness scores and alternatives`; }, data.length * 400 + 100); } // WRITERS ROOM - Famous author reviews function getWriterReview(writer) { // Clear any existing review panel const existingPanel document.querySelector(.writer-review-panel); if (existingPanel) existingPanel.remove(); document.querySelector(.editor-body)?.classList.remove(has-review); // Remove active state from all writer buttons document.querySelectorAll(.writer-btn).forEach(btn > btn.classList.remove(active)); const review writerReviewswriter; if (!review) return; // Set active state event.target.closest(.writer-btn).classList.add(active); document.getElementById(statusText).textContent `${review.name} is reviewing...`; setTimeout(() > { const editorMockup document.querySelector(.editor-mockup); editorMockup.style.position relative; editorMockup.style.overflow visible; const panel document.createElement(div); panel.className `writer-review-panel ${review.style}`; panel.innerHTML ` button classclose-review onclickcloseWriterReview()>✕/button> div classreview-header> div classwriter-avatar ${review.style}>${review.initials}/div> div classreview-header-text> h4>${review.name}/h4> span>${review.title}/span> /div> /div> div classreview-quote>${review.quote}/div> div classreview-suggestions> h5>Suggestions/h5> ${review.suggestions.map(s > ` div classsuggestion-item> span classicon>${s.icon}/span> span>${s.text}/span> /div> `).join()} /div> `; editorMockup.appendChild(panel); document.querySelector(.editor-body).classList.add(has-review); document.getElementById(statusText).textContent `${review.name}s review`; }, 800); } function closeWriterReview() { const panel document.querySelector(.writer-review-panel); if (panel) { panel.style.animation slideOut 0.3s ease forwards; setTimeout(() > { panel.remove(); document.querySelector(.editor-body)?.classList.remove(has-review); }, 300); } document.querySelectorAll(.writer-btn).forEach(btn > btn.classList.remove(active)); document.getElementById(statusText).textContent Ready; } // Writers Room Demo Section function showWriterDemo(writer) { const review writerReviewswriter; if (!review) return; // Update active state document.querySelectorAll(.writer-btn-large).forEach(btn > btn.classList.remove(active)); event.target.closest(.writer-btn-large).classList.add(active); // Update avatar const avatar document.getElementById(demoAvatar); avatar.className `writer-avatar-lg ${review.style}`; avatar.textContent review.initials; // Update text document.getElementById(demoWriterName).textContent review.name; document.getElementById(demoWriterBooks).textContent review.title; document.getElementById(demoQuote).textContent `${review.quote}`; // Update suggestions const suggestionsEl document.getElementById(demoSuggestions); suggestionsEl.innerHTML review.suggestions.map(s > ` div classdemo-suggestion>span>${s.icon}/span> ${s.text}/div> `).join(); // Add animation const card document.getElementById(demoReviewCard); card.style.animation none; card.offsetHeight; // Trigger reflow card.style.animation fadeIn 0.3s ease; } function applyEdit(style) { clearState(); event.target.classList.add(active); document.getElementById(statusText).textContent AI is analyzing...; setTimeout(() > { const styleEdits editsstyle; if (!styleEdits) return; styleEdits.forEach((edit, index) > { setTimeout(() > { applyInlineEdit(edit); }, index * 300); }); setTimeout(() > { updatePendingCount(); document.getElementById(statusText).textContent `${styleEdits.length} suggestions ready`; }, styleEdits.length * 300 + 100); }, 500); } function generateContent(type) { clearState(); event.target.classList.add(active); document.getElementById(statusText).textContent AI is writing...; document.getElementById(cursor).style.display none; document.getElementById(typingIndicator).classList.add(visible); setTimeout(() > { document.getElementById(typingIndicator).classList.remove(visible); const gen generatedTextstype; const container document.getElementById(generatedContent); const block document.createElement(div); block.className `ai-new-block ${gen.type}`; block.innerHTML ` div classai-new-header> span classai-new-tag>${gen.tag}/span> div classedit-actions> button classedit-btn accept onclickacceptGenerated(this)>✓/button> button classedit-btn reject onclickrejectGenerated(this)>✗/button> /div> /div> div classai-new-content>${gen.content}/div> `; container.appendChild(block); document.getElementById(cursor).style.display inline-block; document.getElementById(statusText).textContent New content generated; updateWordCount(); }, 1500); } function applyInlineEdit(edit) { const para document.getElementById(edit.id); if (!para) return; const editId `edit-${editCounter++}`; pendingEdits.push(editId); const html para.innerHTML; if (!html.includes(edit.old)) return; const editHtml `span classedit-wrapper id${editId}>span classedit-deleted>${edit.old}/span>span classedit-added>${edit.new}/span>span classedit-actions>button classedit-btn accept onclickacceptEdit(${editId}, ${encodeURIComponent(edit.old)}, ${encodeURIComponent(edit.new)})>✓/button>button classedit-btn reject onclickrejectEdit(${editId}, ${encodeURIComponent(edit.old)})>✗/button>/span>/span>`; para.innerHTML html.replace(edit.old, editHtml); updatePendingCount(); } function acceptEdit(editId, oldTextEncoded, newTextEncoded) { const wrapper document.getElementById(editId); if (!wrapper) return; const newText decodeURIComponent(newTextEncoded); wrapper.outerHTML newText; pendingEdits pendingEdits.filter(id > id ! editId); updatePendingCount(); updateWordCount(); } function rejectEdit(editId, oldTextEncoded) { const wrapper document.getElementById(editId); if (!wrapper) return; const oldText decodeURIComponent(oldTextEncoded); wrapper.outerHTML oldText; pendingEdits pendingEdits.filter(id > id ! editId); updatePendingCount(); } function acceptGenerated(btn) { const block btn.closest(.ai-new-block); const content block.querySelector(.ai-new-content).innerHTML; const p document.createElement(p); p.innerHTML content; p.style.background rgba(16, 185, 129, 0.1); p.style.padding 0.5rem; p.style.borderRadius 6px; p.style.transition background 1s; block.replaceWith(p); setTimeout(() > { p.style.background transparent; }, 2000); document.getElementById(statusText).textContent Content added ✓; document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); updateWordCount(); } function rejectGenerated(btn) { const block btn.closest(.ai-new-block); block.style.opacity 0; block.style.transform translateX(20px); setTimeout(() > { block.remove(); }, 300); document.getElementById(statusText).textContent Content rejected; document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); } function acceptAll() { document.querySelectorAll(.edit-wrapper).forEach(wrapper > { const addedText wrapper.querySelector(.edit-added).textContent; wrapper.outerHTML addedText; }); document.querySelectorAll(.ai-new-block).forEach(block > { const content block.querySelector(.ai-new-content).innerHTML; const p document.createElement(p); p.innerHTML content; block.replaceWith(p); }); pendingEdits ; updatePendingCount(); document.getElementById(statusText).textContent All changes accepted ✓; document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); updateWordCount(); } function rejectAll() { document.querySelectorAll(.edit-wrapper).forEach(wrapper > { const deletedText wrapper.querySelector(.edit-deleted).textContent; wrapper.outerHTML deletedText; }); document.querySelectorAll(.ai-new-block).forEach(block > { block.remove(); }); pendingEdits ; updatePendingCount(); document.getElementById(statusText).textContent All changes rejected; document.querySelectorAll(.ai-chip).forEach(c > c.classList.remove(active)); } function resetText() { document.getElementById(p1).innerHTML originalText.p1; document.getElementById(p2).innerHTML originalText.p2; document.getElementById(p3).innerHTML originalText.p3; } function updatePendingCount() { const editCount document.querySelectorAll(.edit-wrapper).length; const genCount document.querySelectorAll(.ai-new-block).length; const count editCount + genCount; document.getElementById(pendingCount).textContent count; const bulkActions document.getElementById(bulkActions); if (count > 0) { bulkActions.classList.add(visible); } else { bulkActions.classList.remove(visible); } } function updateWordCount() { const text document.getElementById(editorText).innerText; const words text.trim().split(/\s+/).filter(w > w.length > 0).length; document.getElementById(wordCount).textContent words; } async function copyToClipboard(text) { if (navigator?.clipboard?.writeText) { await navigator.clipboard.writeText(text); return; } const textarea document.createElement(textarea); textarea.value text; textarea.setAttribute(readonly, ); textarea.style.position fixed; textarea.style.top -1000px; textarea.style.left -1000px; document.body.appendChild(textarea); textarea.select(); const ok document.execCommand(copy); textarea.remove(); if (!ok) throw new Error(Copy failed); } function copyReaderShareLink() { const shareUrl https://editor.bossgpt.com; const btn document.getElementById(shareReaderLinkBtn); const label btn?.querySelector(.btn-label); const originalLabel (label?.textContent || Share Link).trim(); if (!btn || !label) { window.open(shareUrl, _blank, noopener,noreferrer); return; } copyToClipboard(shareUrl).then(() > { label.textContent Copied ✓; btn.classList.add(is-copied); const existing btn.dataset.resetTimeoutId ? Number(btn.dataset.resetTimeoutId) : 0; if (existing) window.clearTimeout(existing); btn.dataset.resetTimeoutId String(window.setTimeout(() > { label.textContent originalLabel; btn.classList.remove(is-copied); }, 1800)); }).catch(() > { window.prompt(Copy this link:, shareUrl); }); } let readerActiveTimeout null; function setActiveReaderPara(targetEl) { document.querySelectorAll(.reader-window .story-paragraph.is-active).forEach(el > el.classList.remove(is-active)); targetEl.classList.add(is-active); if (readerActiveTimeout) window.clearTimeout(readerActiveTimeout); readerActiveTimeout window.setTimeout(() > targetEl.classList.remove(is-active), 2000); } function scrollToReaderPara(paraNumber, hotspotEl) { const target document.querySelector(`.reader-window .story-paragraphdata-para${paraNumber}`); if (!target) return; if (hotspotEl) { document.querySelectorAll(.reader-window .hotspot-item.is-active).forEach(el > el.classList.remove(is-active)); hotspotEl.classList.add(is-active); } target.scrollIntoView({ behavior: smooth, block: center }); setActiveReaderPara(target); } function initReaderAnalyticsDemo() { document.querySelectorAll(.reader-window .hotspot-itemdata-reader-para).forEach(item > { item.addEventListener(click, () > scrollToReaderPara(Number(item.dataset.readerPara), item)); item.addEventListener(keydown, (e) > { if (e.key Enter || e.key ) { e.preventDefault(); item.click(); } }); }); document.querySelectorAll(.reader-window .story-paragraphdata-para).forEach(para > { para.addEventListener(click, () > setActiveReaderPara(para)); }); } initReaderAnalyticsDemo(); // Version History tab switching function initVersionHistoryTabs() { const tabs document.querySelectorAll(.compare-tab); const compareArea document.querySelector(.version-compare); tabs.forEach(tab > { tab.addEventListener(click, () > { tabs.forEach(t > t.classList.remove(active)); tab.classList.add(active); if (tab.textContent Unified) { compareArea.classList.add(unified-view); } else { compareArea.classList.remove(unified-view); } }); }); } initVersionHistoryTabs(); // Version History timeline item selection const versionData { now: { oldBadge: 2 hours ago, oldLabel: Added cliffhanger ending, oldContent: `p>I tried to tiptoe out, but the door wouldnt budge./p> p>I kept pulling on the handle./p> p>The warehouse was dark and scary./p>`, newContent: `p>I tried to tiptoe out, but the door wouldnt budge./p> p>I kept pulling like crazy until I ended up with the knob in my hand./p> p>Oh my god. Could this get any worse? span classdiff-added>The answer, of course, was yes./span>/p>` }, v4: { oldBadge: 2 hours ago, oldLabel: Added Zoe description, oldContent: `p>I peeked, and there was Carter with his girlfriend./p> p>span classdiff-removed>She seemed nice./span>/p> p>I tried to leave quietly./p>`, newContent: `p>I peeked, and there was Carter, hugging and laughing with his girlfriend, Zoe./p> p>span classdiff-added>She was the queen bee and the head cheerleader. She was mean, and everyone was scared of her./span>/p> p>I tried to leave quietly./p>` }, v3: { oldBadge: Yesterday, oldLabel: Rewrote warehouse scene, oldContent: `p>I got to the warehouse. span classdiff-removed>It was dark inside./span>/p> p>span classdiff-removed>I walked in./span>/p> p>I started looking for Carter./p>`, newContent: `p>I got there, only to find darkness. span classdiff-added>The warehouse was small, with no windows or anything./span>/p> p>span classdiff-added>I started calling out for Carter when I heard noises behind some shelves./span>/p> p>I started looking for Carter./p>` }, v2: { oldBadge: 3 days ago, oldLabel: Major plot revision, oldContent: `p>Carter sent me a text. span classdiff-removed>He wanted to talk./span>/p> p>span classdiff-removed>I decided to go meet him./span>/p> p>I went to the warehouse./p>`, newContent: `p>Carter: Hey, I need to tell you something important. Meet me in the warehouse behind the school. NOW!/p> p>span classdiff-added>Why would Carter send me something like that? But I told myself maybe he finally realized how cool I am and decided to ask me out./span>/p> p>span classdiff-added>So without hesitating even a bit, I ran to that warehouse like I was late to my own wedding./span>/p>` }, v1: { oldBadge: 1 week ago, oldLabel: First draft, oldContent: `p>span classdiff-removed>School ended./span>/p> p>span classdiff-removed>I got a text./span>/p>`, newContent: `p>span classdiff-added>The school day ended, and I was walking to the bus when I got a message from my crush, Carter./span>/p> p>span classdiff-added>Carter was the school jock, who never even knew I existed./span>/p> p>span classdiff-added>But today, everything was about to change./span>/p>` } }; function initVersionTimeline() { const items document.querySelectorAll(.timeline-marker); const oldPanel document.querySelector(.compare-panel.old); const newPanel document.querySelector(.compare-panel.new); items.forEach(item > { item.style.cursor pointer; item.addEventListener(click, () > { items.forEach(i > i.classList.remove(selected)); item.classList.add(selected); const version item.dataset.version; const data versionDataversion; if (data && oldPanel && newPanel) { oldPanel.querySelector(.compare-badge).textContent data.oldBadge; oldPanel.querySelector(.compare-header span:last-child).textContent data.oldLabel; oldPanel.querySelector(.compare-content).innerHTML data.oldContent; newPanel.querySelector(.compare-content).innerHTML data.newContent; } }); }); } initVersionTimeline(); // Scroll-triggered reveal animations const revealSections document.querySelectorAll(.writers-room-section, .pacing-section, .reader-insights-section, .version-history-section, .collab-section, .goals-section, .pricing, .testimonials, .cta-section); revealSections.forEach(section > { section.classList.add(reveal-section); }); const revealObserver new IntersectionObserver((entries) > { entries.forEach(entry > { if (entry.isIntersecting) { entry.target.classList.add(visible); } }); }, { threshold: 0.1, rootMargin: 0px 0px -50px 0px }); document.querySelectorAll(.reveal-section).forEach(section > { revealObserver.observe(section); }); /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]