Changes to sql.scroll.pub

ScrollHub
ScrollHub
11 days ago
Initial commit
index.scroll
Changed around line 1
+ buildHtml
+ baseUrl https://sql.scroll.pub
+ metaTags
+ editButton /edit.html
+ title SQL Parser | Visualize and Understand SQL Queries
+ style.css
+ header
+ class hero
+ nav
+ div SQL Parser
+ class logo
+ div
+ class nav-links
+ a Features
+ href #features
+ a Try It
+ href #demo
+ a Docs
+ href docs.html
+ div
+ class hero-content
+ h1 Visualize & Understand SQL
+ p Paste your SQL queries to see them parsed, formatted, and visualized
+ a Try It Now
+ class primary-button
+ href #demo
+ main
+ section
+ id features
+ class features
+ h2 Powerful SQL Analysis
+ div
+ class feature-grid
+ div
+ class feature-card
+ div 🔍
+ class feature-icon
+ h3 Query Breakdown
+ p See tables, columns, joins, and conditions clearly identified
+ div
+ class feature-card
+ div 🖇️
+ class feature-icon
+ h3 Relationship Mapping
+ p Visualize how tables connect through joins
+ div
+ class feature-card
+ div ✨
+ class feature-icon
+ h3 Syntax Highlighting
+ p Beautifully formatted SQL with color-coded elements
+ div
+ class feature-card
+ div ⚡
+ class feature-icon
+ h3 Performance Tips
+ p Get suggestions for optimizing your queries
+ section
+ id demo
+ class demo-section
+ h2 Try the SQL Parser
+ div
+ class editor-container
+ div
+ class input-area
+ h3 Input SQL
+ textarea
+ id sql-input
+ placeholder SELECT * FROM users JOIN orders ON users.id = orders.user_id WHERE orders.total > 100;
+ div
+ class output-area
+ h3 Parsed Output
+ div
+ id parse-result
+ class parse-output
+ div
+ id visualize-result
+ class visualize-output
+ button
+ id parse-button
+ class primary-button
+ Parse SQL
+ footer
+ div
+ class footer-content
+ div
+ class footer-links
+ a Documentation
+ href docs.html
+ a GitHub
+ href https://github.com/yourusername/sql-parser
+ a Contact
+ href mailto:hello@sql.scroll.pub
+ p A tool for developers to better understand SQL queries
+ script.js
prompt.json
Changed around line 1
+ {
+ "id": "d03e1fc6-9629-4b0e-aa13-7ac82b6ca45c",
+ "object": "chat.completion",
+ "created": 1749068513,
+ "model": "deepseek-chat",
+ "choices": [
+ {
+ "index": 0,
+ "message": {
+ "role": "assistant",
+ "content": "Here's my suggestion for a SQL parser website built with Scroll:\n\n---domain---\nsql.scroll.pub\n---index.scroll---\nbuildHtml\nbaseUrl https://sql.scroll.pub\nmetaTags\neditButton /edit.html\ntitle SQL Parser | Visualize and Understand SQL Queries\nstyle.css\nheader\n class hero\n nav\n div SQL Parser\n class logo\n div\n class nav-links\n a Features\n href #features\n a Try It\n href #demo\n a Docs\n href docs.html\n div\n class hero-content\n h1 Visualize & Understand SQL\n p Paste your SQL queries to see them parsed, formatted, and visualized\n a Try It Now\n class primary-button\n href #demo\nmain\n section\n id features\n class features\n h2 Powerful SQL Analysis\n div\n class feature-grid\n div\n class feature-card\n div 🔍\n class feature-icon\n h3 Query Breakdown\n p See tables, columns, joins, and conditions clearly identified\n div\n class feature-card\n div 🖇️\n class feature-icon\n h3 Relationship Mapping\n p Visualize how tables connect through joins\n div\n class feature-card\n div ✨\n class feature-icon\n h3 Syntax Highlighting\n p Beautifully formatted SQL with color-coded elements\n div\n class feature-card\n div ⚡\n class feature-icon\n h3 Performance Tips\n p Get suggestions for optimizing your queries\n section\n id demo\n class demo-section\n h2 Try the SQL Parser\n div\n class editor-container\n div\n class input-area\n h3 Input SQL\n textarea\n id sql-input\n placeholder SELECT * FROM users JOIN orders ON users.id = orders.user_id WHERE orders.total > 100;\n div\n class output-area\n h3 Parsed Output\n div\n id parse-result\n class parse-output\n div\n id visualize-result\n class visualize-output\n button\n id parse-button\n class primary-button\n Parse SQL\nfooter\n div\n class footer-content\n div\n class footer-links\n a Documentation\n href docs.html\n a GitHub\n href https://github.com/yourusername/sql-parser\n a Contact\n href mailto:hello@sql.scroll.pub\n p A tool for developers to better understand SQL queries\nscript.js\n---style.css---\n:root {\n --primary: #2563eb;\n --primary-dark: #1d4ed8;\n --text: #1f2937;\n --text-light: #6b7280;\n --bg: #f9fafb;\n --card-bg: #ffffff;\n --border: #e5e7eb;\n --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n color: var(--text);\n background-color: var(--bg);\n line-height: 1.5;\n}\n\nheader.hero {\n background: linear-gradient(135deg, #2563eb 0%, #1e40af 100%);\n color: white;\n padding: 2rem 1rem;\n text-align: center;\n}\n\nnav {\n display: flex;\n justify-content: space-between;\n align-items: center;\n max-width: 1200px;\n margin: 0 auto;\n padding: 0 1rem;\n}\n\n.logo {\n font-size: 1.5rem;\n font-weight: 700;\n}\n\n.nav-links {\n display: flex;\n gap: 1.5rem;\n}\n\n.nav-links a {\n color: white;\n text-decoration: none;\n font-weight: 500;\n}\n\n.hero-content {\n max-width: 800px;\n margin: 3rem auto;\n}\n\n.hero-content h1 {\n font-size: 2.5rem;\n margin-bottom: 1rem;\n}\n\n.hero-content p {\n font-size: 1.25rem;\n margin-bottom: 2rem;\n opacity: 0.9;\n}\n\n.primary-button {\n display: inline-block;\n background-color: white;\n color: var(--primary);\n padding: 0.75rem 1.5rem;\n border-radius: 0.5rem;\n text-decoration: none;\n font-weight: 600;\n transition: all 0.2s;\n}\n\n.primary-button:hover {\n background-color: rgba(255, 255, 255, 0.9);\n transform: translateY(-2px);\n}\n\nsection {\n padding: 4rem 1rem;\n max-width: 1200px;\n margin: 0 auto;\n}\n\nsection.features {\n text-align: center;\n}\n\n.features h2 {\n font-size: 2rem;\n margin-bottom: 3rem;\n}\n\n.feature-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 2rem;\n}\n\n.feature-card {\n background: var(--card-bg);\n border-radius: 0.5rem;\n padding: 2rem;\n box-shadow: var(--shadow);\n transition: transform 0.2s;\n}\n\n.feature-card:hover {\n transform: translateY(-5px);\n}\n\n.feature-icon {\n font-size: 2rem;\n margin-bottom: 1rem;\n}\n\n.feature-card h3 {\n font-size: 1.25rem;\n margin-bottom: 0.5rem;\n}\n\n.feature-card p {\n color: var(--text-light);\n}\n\n.demo-section {\n background-color: var(--card-bg);\n border-radius: 0.5rem;\n box-shadow: var(--shadow);\n}\n\n.demo-section h2 {\n text-align: center;\n margin-bottom: 2rem;\n}\n\n.editor-container {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2rem;\n}\n\n.input-area, .output-area {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\ntextarea#sql-input {\n width: 100%;\n min-height: 200px;\n padding: 1rem;\n border: 1px solid var(--border);\n border-radius: 0.5rem;\n font-family: monospace;\n resize: vertical;\n}\n\n.parse-output, .visualize-output {\n background-color: var(--bg);\n border: 1px solid var(--border);\n border-radius: 0.5rem;\n padding: 1rem;\n min-height: 200px;\n overflow: auto;\n}\n\n#parse-button {\n margin: 2rem auto 0;\n display: block;\n}\n\nfooter {\n background-color: var(--card-bg);\n padding: 2rem 1rem;\n text-align: center;\n}\n\n.footer-content {\n max-width: 1200px;\n margin: 0 auto;\n}\n\n.footer-links {\n display: flex;\n justify-content: center;\n gap: 2rem;\n margin-bottom: 1rem;\n}\n\n.footer-links a {\n color: var(--primary);\n text-decoration: none;\n}\n\n@media (max-width: 768px) {\n .editor-container {\n grid-template-columns: 1fr;\n }\n \n .nav-links {\n display: none;\n }\n \n .hero-content h1 {\n font-size: 2rem;\n }\n}\n---script.js---\ndocument.addEventListener('DOMContentLoaded', function() {\n const sqlInput = document.getElementById('sql-input');\n const parseResult = document.getElementById('parse-result');\n const visualizeResult = document.getElementById('visualize-result');\n const parseButton = document.getElementById('parse-button');\n \n // Sample SQL parsing function (simplified for demo)\n function parseSQL(sql) {\n // This is a simplified parser for demonstration\n // In a real app, you'd use a proper SQL parser library\n \n try {\n // Basic parsing\n const tables = [];\n const columns = [];\n const joins = [];\n const conditions = [];\n \n // Extract tables (simplified)\n const fromMatch = sql.match(/FROM\\s+([^\\s,(]+)/i);\n if (fromMatch) tables.push(fromMatch[1]);\n \n // Extract joins (simplified)\n const joinMatches = sql.match(/JOIN\\s+([^\\s]+)/gi) || [];\n joinMatches.forEach(match => {\n const table = match.replace(/JOIN\\s+/i, '');\n tables.push(table);\n joins.push(table);\n });\n \n // Extract columns (simplified)\n const selectMatch = sql.match(/SELECT\\s+(.+?)\\s+FROM/i) || sql.match(/SELECT\\s+(.+)/i);\n if (selectMatch) {\n const cols = selectMatch[1].split(',').map(col => col.trim());\n columns.push(...cols);\n }\n \n // Extract conditions (simplified)\n const whereMatch = sql.match(/WHERE\\s+(.+)/i);\n if (whereMatch) conditions.push(whereMatch[1]);\n \n return {\n tables: [...new Set(tables)],\n columns: [...new Set(columns)],\n joins,\n conditions,\n isValid: true\n };\n } catch (e) {\n return {\n error: \"Could not parse SQL\",\n isValid: false\n };\n }\n }\n \n function visualizeSQL(parsed) {\n if (!parsed.isValid) {\n return `
${parsed.error}
`;\n }\n \n let html = `\n
\n

Tables

\n
    ${parsed.tables.map(t => `
  • ${t}
  • `).join('')}
\n \n

Columns

\n
    ${parsed.columns.map(c => `
  • ${c}
  • `).join('')}
\n \n ${parsed.joins.length ? `\n

Joins

\n
    ${parsed.joins.map(j => `
  • ${j}
  • `).join('')}
\n ` : ''}\n \n ${parsed.conditions.length ? `\n

Conditions

\n
    ${parsed.conditions.map(c => `
  • ${c}
  • `).join('')}
\n ` : ''}\n
\n `;\n \n return html;\n }\n \n function renderDiagram(parsed) {\n if (!parsed.isValid) return '';\n \n // This would be replaced with actual diagram rendering in a real app\n return `\n
\n

Visual diagram would appear here showing:

\n
    \n
  • Tables: ${parsed.tables.join(', ')}
  • \n
  • Relationships between tables
  • \n
\n
\n `;\n }\n \n parseButton.addEventListener('click', function() {\n const sql = sqlInput.value.trim();\n if (!sql) return;\n \n const parsed = parseSQL(sql);\n parseResult.innerHTML = visualizeSQL(parsed);\n visualizeResult.innerHTML = renderDiagram(parsed);\n });\n \n // Initialize with sample SQL\n sqlInput.value = `SELECT users.name, orders.total \nFROM users \nJOIN orders ON users.id = orders.user_id \nWHERE orders.date > '2023-01-01' \nORDER BY orders.total DESC`;\n \n // Trigger initial parse\n parseButton.click();\n});\n---end---"
+ },
+ "logprobs": null,
+ "finish_reason": "stop"
+ }
+ ],
+ "usage": {
+ "prompt_tokens": 718,
+ "completion_tokens": 2630,
+ "total_tokens": 3348,
+ "prompt_tokens_details": {
+ "cached_tokens": 0
+ },
+ "prompt_cache_hit_tokens": 0,
+ "prompt_cache_miss_tokens": 718
+ },
+ "system_fingerprint": "fp_8802369eaa_prod0425fp8"
+ }
readme.scroll
Changed around line 1
+ # sql.scroll.pub
+
+ Prompt: website
+ Agent: deepseek
+ Model: deepseek-chat
+
+ ## User prompt
+ sql parser
+
+ ## System prompt
+ You are an expert web developer. Create a website based on this request: "sql parser"
+
+ Requirements:
+ - Use only Scroll, CSS, and JavaScript (NO frameworks, NO external dependencies)
+ - Create clean, semantic HTML5
+ - Make it mobile-responsive
+ - Follow modern best practices and accessibility guidelines
+ - Keep it simple but professional
+ - Use only relative links and no external resources
+ - Do not put a copyright symbol or all rights reserved in the footer.
+ - Make it beautiful. Dazzling. Advanced used of CSS.
+
+ As a refresher, for doing the html body, Scroll is a whitespace based language that uses a single indented space to mark a line (aka particle) as a subparticle of a parent line.
+
+ For example:
+
+ header
+ class hero
+ nav
+ div Scroll
+ class logo
+ div
+ class nav-links
+ a Features
+ href #features
+ a Examples
+ href #examples
+ a Edit
+ href edit.html
+ a GitHub
+ class cta-button
+ href https://github.com/breck7/scroll
+ div
+ class hero-content
+ h1 Write Better with Scroll
+ p The extendible markup language that makes source beautiful and compiles to anything
+ a Get Started
+ class primary-button
+ href https://hub.scroll.pub/
+ main
+ section
+ id features
+ class features
+ h2 Why Scroll?
+ div
+ class feature-grid
+ div
+ class feature-card
+ div ⚡
+ class feature-icon
+ h3 Simple Syntax
+ p Like Markdown, but more powerful. No parentheses needed.
+ div
+ class feature-card
+ div 🧩
+ class feature-icon
+ h3 Extendible
+ p Build your own custom parsers.
+ div
+ class feature-card
+ div 🎨
+ class feature-icon
+ h3 Beautiful Output
+ p Create stunning documents with minimal effort.
+ div
+ class feature-card
+ div 🚀
+ class feature-icon
+ h3 Fast & Light
+ p Built on the efficient PPS Stack.
+ section
+ id examples
+ class code-demo
+ h2 See It In Action
+ div
+ class code-container
+ pre
+ class code-example
+ div
+ class code-output
+ footer
+ div
+ class footer-content
+ div
+ class footer-links
+ a Documentation
+ href https://scroll.pub/tutorial.html
+ a Community
+ href https://www.reddit.com/r/WorldWideScroll/
+ a Blog
+ href https://scroll.pub/blog
+ p Started by Breck Yunits. Evolved by a community.
+ https://twitter.com/breckyunits Breck Yunits
+ https://github.com/breck7/scroll/graphs/contributors community
+
+
+ First suggest a short, memorable domain name ending in scroll.pub that represents this website. Then provide the website files. Use this exact format:
+
+ ---domain---
+ (domainscroll.pub here)
+ ---index.scroll---
+ buildHtml
+ baseUrl https://(domainscroll.pub here)
+ metaTags
+ editButton /edit.html
+ title (Title here)
+ style.css
+
+ (body content here. no blank lines please.)
+
+ script.js
+ ---style.css---
+ (CSS content here)
+ ---script.js---
+ (JavaScript content here)
+ ---end---
script.js
Changed around line 1
+ document.addEventListener('DOMContentLoaded', function() {
+ const sqlInput = document.getElementById('sql-input');
+ const parseResult = document.getElementById('parse-result');
+ const visualizeResult = document.getElementById('visualize-result');
+ const parseButton = document.getElementById('parse-button');
+
+ // Sample SQL parsing function (simplified for demo)
+ function parseSQL(sql) {
+ // This is a simplified parser for demonstration
+ // In a real app, you'd use a proper SQL parser library
+
+ try {
+ // Basic parsing
+ const tables = [];
+ const columns = [];
+ const joins = [];
+ const conditions = [];
+
+ // Extract tables (simplified)
+ const fromMatch = sql.match(/FROM\s+([^\s,(]+)/i);
+ if (fromMatch) tables.push(fromMatch[1]);
+
+ // Extract joins (simplified)
+ const joinMatches = sql.match(/JOIN\s+([^\s]+)/gi) || [];
+ joinMatches.forEach(match => {
+ const table = match.replace(/JOIN\s+/i, '');
+ tables.push(table);
+ joins.push(table);
+ });
+
+ // Extract columns (simplified)
+ const selectMatch = sql.match(/SELECT\s+(.+?)\s+FROM/i) || sql.match(/SELECT\s+(.+)/i);
+ if (selectMatch) {
+ const cols = selectMatch[1].split(',').map(col => col.trim());
+ columns.push(...cols);
+ }
+
+ // Extract conditions (simplified)
+ const whereMatch = sql.match(/WHERE\s+(.+)/i);
+ if (whereMatch) conditions.push(whereMatch[1]);
+
+ return {
+ tables: [...new Set(tables)],
+ columns: [...new Set(columns)],
+ joins,
+ conditions,
+ isValid: true
+ };
+ } catch (e) {
+ return {
+ error: "Could not parse SQL",
+ isValid: false
+ };
+ }
+ }
+
+ function visualizeSQL(parsed) {
+ if (!parsed.isValid) {
+ return `
${parsed.error}
`;
+ }
+
+ let html = `
+
+

Tables

+
    ${parsed.tables.map(t => `
  • ${t}
  • `).join('')}
+
+

Columns

+
    ${parsed.columns.map(c => `
  • ${c}
  • `).join('')}
+
+ ${parsed.joins.length ? `
+

Joins

+
    ${parsed.joins.map(j => `
  • ${j}
  • `).join('')}
+ ` : ''}
+
+ ${parsed.conditions.length ? `
+

Conditions

+
    ${parsed.conditions.map(c => `
  • ${c}
  • `).join('')}
+ ` : ''}
+
+ `;
+
+ return html;
+ }
+
+ function renderDiagram(parsed) {
+ if (!parsed.isValid) return '';
+
+ // This would be replaced with actual diagram rendering in a real app
+ return `
+
+

Visual diagram would appear here showing:

+
    +
  • Tables: ${parsed.tables.join(', ')}
  • +
  • Relationships between tables
  • +
    +
    + `;
    + }
    +
    + parseButton.addEventListener('click', function() {
    + const sql = sqlInput.value.trim();
    + if (!sql) return;
    +
    + const parsed = parseSQL(sql);
    + parseResult.innerHTML = visualizeSQL(parsed);
    + visualizeResult.innerHTML = renderDiagram(parsed);
    + });
    +
    + // Initialize with sample SQL
    + sqlInput.value = `SELECT users.name, orders.total
    + FROM users
    + JOIN orders ON users.id = orders.user_id
    + WHERE orders.date > '2023-01-01'
    + ORDER BY orders.total DESC`;
    +
    + // Trigger initial parse
    + parseButton.click();
    + });
    style.css
    Changed around line 1
    + :root {
    + --primary: #2563eb;
    + --primary-dark: #1d4ed8;
    + --text: #1f2937;
    + --text-light: #6b7280;
    + --bg: #f9fafb;
    + --card-bg: #ffffff;
    + --border: #e5e7eb;
    + --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
    + }
    +
    + * {
    + margin: 0;
    + padding: 0;
    + box-sizing: border-box;
    + }
    +
    + body {
    + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
    + color: var(--text);
    + background-color: var(--bg);
    + line-height: 1.5;
    + }
    +
    + header.hero {
    + background: linear-gradient(135deg, #2563eb 0%, #1e40af 100%);
    + color: white;
    + padding: 2rem 1rem;
    + text-align: center;
    + }
    +
    + nav {
    + display: flex;
    + justify-content: space-between;
    + align-items: center;
    + max-width: 1200px;
    + margin: 0 auto;
    + padding: 0 1rem;
    + }
    +
    + .logo {
    + font-size: 1.5rem;
    + font-weight: 700;
    + }
    +
    + .nav-links {
    + display: flex;
    + gap: 1.5rem;
    + }
    +
    + .nav-links a {
    + color: white;
    + text-decoration: none;
    + font-weight: 500;
    + }
    +
    + .hero-content {
    + max-width: 800px;
    + margin: 3rem auto;
    + }
    +
    + .hero-content h1 {
    + font-size: 2.5rem;
    + margin-bottom: 1rem;
    + }
    +
    + .hero-content p {
    + font-size: 1.25rem;
    + margin-bottom: 2rem;
    + opacity: 0.9;
    + }
    +
    + .primary-button {
    + display: inline-block;
    + background-color: white;
    + color: var(--primary);
    + padding: 0.75rem 1.5rem;
    + border-radius: 0.5rem;
    + text-decoration: none;
    + font-weight: 600;
    + transition: all 0.2s;
    + }
    +
    + .primary-button:hover {
    + background-color: rgba(255, 255, 255, 0.9);
    + transform: translateY(-2px);
    + }
    +
    + section {
    + padding: 4rem 1rem;
    + max-width: 1200px;
    + margin: 0 auto;
    + }
    +
    + section.features {
    + text-align: center;
    + }
    +
    + .features h2 {
    + font-size: 2rem;
    + margin-bottom: 3rem;
    + }
    +
    + .feature-grid {
    + display: grid;
    + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    + gap: 2rem;
    + }
    +
    + .feature-card {
    + background: var(--card-bg);
    + border-radius: 0.5rem;
    + padding: 2rem;
    + box-shadow: var(--shadow);
    + transition: transform 0.2s;
    + }
    +
    + .feature-card:hover {
    + transform: translateY(-5px);
    + }
    +
    + .feature-icon {
    + font-size: 2rem;
    + margin-bottom: 1rem;
    + }
    +
    + .feature-card h3 {
    + font-size: 1.25rem;
    + margin-bottom: 0.5rem;
    + }
    +
    + .feature-card p {
    + color: var(--text-light);
    + }
    +
    + .demo-section {
    + background-color: var(--card-bg);
    + border-radius: 0.5rem;
    + box-shadow: var(--shadow);
    + }
    +
    + .demo-section h2 {
    + text-align: center;
    + margin-bottom: 2rem;
    + }
    +
    + .editor-container {
    + display: grid;
    + grid-template-columns: 1fr 1fr;
    + gap: 2rem;
    + }
    +
    + .input-area, .output-area {
    + display: flex;
    + flex-direction: column;
    + gap: 1rem;
    + }
    +
    + textarea#sql-input {
    + width: 100%;
    + min-height: 200px;
    + padding: 1rem;
    + border: 1px solid var(--border);
    + border-radius: 0.5rem;
    + font-family: monospace;
    + resize: vertical;
    + }
    +
    + .parse-output, .visualize-output {
    + background-color: var(--bg);
    + border: 1px solid var(--border);
    + border-radius: 0.5rem;
    + padding: 1rem;
    + min-height: 200px;
    + overflow: auto;
    + }
    +
    + #parse-button {
    + margin: 2rem auto 0;
    + display: block;
    + }
    +
    + footer {
    + background-color: var(--card-bg);
    + padding: 2rem 1rem;
    + text-align: center;
    + }
    +
    + .footer-content {
    + max-width: 1200px;
    + margin: 0 auto;
    + }
    +
    + .footer-links {
    + display: flex;
    + justify-content: center;
    + gap: 2rem;
    + margin-bottom: 1rem;
    + }
    +
    + .footer-links a {
    + color: var(--primary);
    + text-decoration: none;
    + }
    +
    + @media (max-width: 768px) {
    + .editor-container {
    + grid-template-columns: 1fr;
    + }
    +
    + .nav-links {
    + display: none;
    + }
    +
    + .hero-content h1 {
    + font-size: 2rem;
    + }
    + }