Changes to radioscroll.pub.scroll.pub

root
root
10 days ago
Renamed readme.scroll to LocaFm.html
LocaFm.html
root
root
10 days ago
updated readme.scroll
readme.scroll
Changed around line 0
- # radioscroll.pub.scroll.pub
-
- Prompt: website
- Agent: deepseek
- Model: deepseek-chat
-
- ## User prompt
- radio
-
- ## System prompt
- You are an expert web developer. Create a website based on this request: "radio"
-
- 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:
-
- (domainscroll.pub here)
- buildHtml
- baseUrl https://(domainscroll.pub here)
- metaTags
- editButton /edit.html
- title (Title here)
- style.css
-
- (body content here. no blank lines please.)
-
- script.js
- (CSS content here)
- (JavaScript content here)
root
root
10 days ago
Renamed readme.html to reggae.html
reggae.html
root
root
10 days ago
updated readme.html
readme.html
root
root
10 days ago
Renamed prompt.json to makina.html
makina.html
root
root
10 days ago
updated index.html
index.html
root
root
10 days ago
updated script.js
script.js
Changed around line 1
- // Smooth scrolling for anchor links
- document.querySelectorAll('a[href^="#"]').forEach(anchor => {
- anchor.addEventListener('click', function (e) {
- e.preventDefault();
- document.querySelector(this.getAttribute('href')).scrollIntoView({
- behavior: 'smooth'
+ // script.js
+ // 1. Désactiver le menu contextuel (clic droit)
+ document.addEventListener("contextmenu", function (e) {
+ e.preventDefault();
+ });
+ // Attendre que le DOM soit complètement chargé
+ document.addEventListener("DOMContentLoaded", function () {
+ // 2. Gestion du menu hamburger pour la navigation responsive
+ const hamburgerMenu = document.querySelector(".hamburger-menu");
+ const navMenu = document.querySelector(".nav-menu");
+ if (hamburgerMenu && navMenu) {
+ hamburgerMenu.addEventListener("click", () => {
+ navMenu.classList.toggle("active");
+ });
+ }
+ // 3. Affichage de l'heure en temps réel
+ function afficherHeure() {
+ const date = new Date();
+ const heure = date.toLocaleTimeString();
+ const horlogeElement = document.getElementById("horloge");
+ if (horlogeElement) {
+ horlogeElement.textContent = heure;
+ }
+ }
+ afficherHeure();
+ setInterval(afficherHeure, 1000);
+ // 4. Fonction pour passer en mode plein écran
+ function ouvrirPleinEcran() {
+ const element = document.documentElement;
+ if (element.requestFullscreen) {
+ element.requestFullscreen();
+ } else if (element.mozRequestFullScreen) {
+ element.mozRequestFullScreen();
+ } else if (element.webkitRequestFullscreen) {
+ element.webkitRequestFullscreen();
+ } else if (element.msRequestFullscreen) {
+ element.msRequestFullscreen();
+ }
+ }
+ // 5. Code du calendrier
+ const monthYear = document.getElementById("monthYear");
+ const daysContainer = document.getElementById("days");
+ const prevMonthBtn = document.getElementById("prevMonth");
+ const nextMonthBtn = document.getElementById("nextMonth");
+ const currentDay = document.getElementById("currentDay");
+ function displayCurrentDay() {
+ const day = localStorage.getItem("currentDay");
+ if (day && currentDay) {
+ currentDay.textContent = day;
+ }
+ }
+ displayCurrentDay();
+ let currentDate = new Date();
+ let currentMonth = currentDate.getMonth();
+ let currentYear = currentDate.getFullYear();
+ let today = currentDate.getDate();
+ function generateCalendar(month, year) {
+ monthYear.textContent = new Date(year, month).toLocaleString("fr-FR", {
+ month: "long",
+ year: "numeric",
+ daysContainer.innerHTML = "";
+ const firstDay = new Date(year, month, 1).getDay();
+ const daysInMonth = new Date(year, month + 1, 0).getDate();
+ for (let i = 0; i < firstDay; i++) {
+ const emptyDiv = document.createElement("div");
+ emptyDiv.classList.add("empty");
+ daysContainer.appendChild(emptyDiv);
+ }
+ for (let i = 1; i <= daysInMonth; i++) {
+ const dayDiv = document.createElement("div");
+ dayDiv.textContent = i;
+ daysContainer.appendChild(dayDiv);
+ if (
+ i === today &&
+ month === new Date().getMonth() &&
+ year === new Date().getFullYear()
+ ) {
+ dayDiv.style.backgroundColor = "#fff";
+ dayDiv.style.color = "#000";
+ }
+ }
+ }
+ function updateCalendar() {
+ generateCalendar(currentMonth, currentYear);
+ }
+ prevMonthBtn.addEventListener("click", () => {
+ currentMonth--;
+ if (currentMonth < 0) {
+ currentMonth = 11;
+ currentYear--;
+ }
+ updateCalendar();
+ updateCurrentDay();
- });
-
- // Form submission handling
- const contactForm = document.querySelector('.contact-form');
- if (contactForm) {
- contactForm.addEventListener('submit', (e) => {
- e.preventDefault();
- const formData = new FormData(contactForm);
- const data = Object.fromEntries(formData);
-
- // Here you would typically send the data to your server
- console.log('Form submitted:', data);
-
- // Show success message
- alert('Thank you for your message! We\'ll get back to you soon.');
- contactForm.reset();
+ nextMonthBtn.addEventListener("click", () => {
+ currentMonth++;
+ if (currentMonth > 11) {
+ currentMonth = 0;
+ currentYear++;
+ }
+ updateCalendar();
+ updateCurrentDay();
- }
- // Add hover effects to station cards
- const stationCards = document.querySelectorAll('.station-card');
- stationCards.forEach(card => {
- card.addEventListener('mouseenter', () => {
- card.style.transform = 'translateY(-5px)';
- card.style.boxShadow = '0 4px 8px rgba(0,0,0,0.2)';
- });
-
- card.addEventListener('mouseleave', () => {
- card.style.transform = 'translateY(0)';
- card.style.boxShadow = '0 2px 4px rgba(0,0,0,0.1)';
- });
- });
+ function updateCurrentDay() {
+ const today = new Date();
+ const day = today.getDate();
+ const dayName = today.toLocaleDateString("fr-FR", { weekday: "long" }); // Obtient le nom du jour
+ const formattedDate = `${dayName} ${day}`; // Formate la date
+ currentDay.textContent = formattedDate;
+ localStorage.setItem("currentDay", formattedDate); // Stocker la date formatée dans localStorage
+ }
+ updateCalendar();
+ updateCurrentDay();
+ // Mettre à jour le numéro du jour toutes les secondes
+ setInterval(updateCurrentDay, 1000);
+ // 6. Affichage du jour depuis localStorage
+ function displayCurrentDay() {
+ const day = localStorage.getItem("currentDay");
+ if (day && currentDay) {
+ currentDay.textContent = day;
+ }
+ }
+ displayCurrentDay();
+ });
+ function enregistrerNotes() {
+ try {
+ var notes = document.getElementById("notes").value;
+ var element = document.createElement("a");
+ element.setAttribute(
+ "href",
+ "data:text/plain;charset=utf-8," + encodeURIComponent(notes),
+ );
+ element.setAttribute("download", "notes.txt");
+ element.style.display = "none";
+ document.body.appendChild(element);
+ element.click();
+ document.body.removeChild(element);
+ } catch (error) {
+ console.error("Erreur lors de l'enregistrement des notes :", error);
+ alert(
+ "Erreur lors de l'enregistrement des notes. Veuillez vérifier la console.",
+ );
+ }
+ }
+ function enregistrerNotes() {
+ try {
+ var notes = document.getElementById("notes").value;
+ localStorage.setItem("notes", notes);
+ console.log("Notes enregistrées :", localStorage.getItem("notes")); // Ajout d'un log
+ alert("Notes enregistrées !");
+ } catch (error) {
+ console.error("Erreur lors de l'enregistrement des notes :", error);
+ alert(
+ "Erreur lors de l'enregistrement des notes. Veuillez vérifier la console.",
+ );
+ }
+ }
+ function importerNotes() {
+ try {
+ var notes = localStorage.getItem("notes");
+ if (notes) {
+ document.getElementById("notes").value = notes;
+ alert("Notes importées !");
+ } else {
+ alert("Aucune note enregistrée.");
+ }
+ } catch (error) {
+ console.error("Erreur lors de l'importation des notes :", error);
+ alert(
+ "Erreur lors de l'importation des notes. Veuillez vérifier la console.",
+ );
+ }
+ }
root
root
10 days ago
Initial commit
index.scroll
Changed around line 1
+ buildHtml
+ baseUrl https://radioscroll.pub
+ metaTags
+ editButton /edit.html
+ title Radio Scroll
+ style.css
+
+ header
+ class hero
+ nav
+ div Radio
+ class logo
+ div
+ class nav-links
+ a About
+ href #about
+ a Stations
+ href #stations
+ a Contact
+ href #contact
+ div
+ class hero-content
+ h1 Tune Into the Future
+ p Experience the next generation of radio streaming
+ a Explore Stations
+ class primary-button
+ href #stations
+ main
+ section
+ id about
+ class about
+ h2 About Radio Scroll
+ p Radio Scroll brings you the best in online radio streaming. Our platform is built with simplicity and elegance in mind, offering a seamless listening experience across all devices.
+ section
+ id stations
+ class stations
+ h2 Featured Stations
+ div
+ class station-grid
+ div
+ class station-card
+ div 🎶
+ class station-icon
+ h3 Jazz Lounge
+ p Smooth jazz and relaxing tunes
+ div
+ class station-card
+ div 🎧
+ class station-icon
+ h3 Rock Revolution
+ p Classic and modern rock hits
+ div
+ class station-card
+ div 🎤
+ class station-icon
+ h3 Pop Central
+ p Top 40 and trending pop music
+ div
+ class station-card
+ div 🎷
+ class station-icon
+ h3 Blues & Soul
+ p Deep blues and soulful melodies
+ section
+ id contact
+ class contact
+ h2 Get In Touch
+ p Have questions or suggestions? We'd love to hear from you.
+ form
+ class contact-form
+ input
+ type text
+ placeholder Your Name
+ input
+ type email
+ placeholder Your Email
+ textarea
+ placeholder Your Message
+ button
+ type submit
+ class submit-button
+ Send Message
+ footer
+ div
+ class footer-content
+ div
+ class footer-links
+ a Privacy Policy
+ href /privacy
+ a Terms of Service
+ href /terms
+ a Careers
+ href /careers
+ p Radio Scroll - Redefining online radio streaming
+
+ script.js
prompt.json
Changed around line 1
+ {
+ "id": "614dd4c4-b77c-4c16-abbd-b26c2e00c4b1",
+ "object": "chat.completion",
+ "created": 1742564809,
+ "model": "deepseek-chat",
+ "choices": [
+ {
+ "index": 0,
+ "message": {
+ "role": "assistant",
+ "content": "---domain---\nradioscroll.pub\n---index.scroll---\nbuildHtml\nbaseUrl https://radioscroll.pub\nmetaTags\neditButton /edit.html\ntitle Radio Scroll\nstyle.css\n\nheader\n class hero\n nav\n div Radio\n class logo\n div\n class nav-links\n a About\n href #about\n a Stations\n href #stations\n a Contact\n href #contact\n div\n class hero-content\n h1 Tune Into the Future\n p Experience the next generation of radio streaming\n a Explore Stations\n class primary-button\n href #stations\nmain\n section\n id about\n class about\n h2 About Radio Scroll\n p Radio Scroll brings you the best in online radio streaming. Our platform is built with simplicity and elegance in mind, offering a seamless listening experience across all devices.\n section\n id stations\n class stations\n h2 Featured Stations\n div\n class station-grid\n div\n class station-card\n div 🎶\n class station-icon\n h3 Jazz Lounge\n p Smooth jazz and relaxing tunes\n div\n class station-card\n div 🎧\n class station-icon\n h3 Rock Revolution\n p Classic and modern rock hits\n div\n class station-card\n div 🎤\n class station-icon\n h3 Pop Central\n p Top 40 and trending pop music\n div\n class station-card\n div 🎷\n class station-icon\n h3 Blues & Soul\n p Deep blues and soulful melodies\n section\n id contact\n class contact\n h2 Get In Touch\n p Have questions or suggestions? We'd love to hear from you.\n form\n class contact-form\n input\n type text\n placeholder Your Name\n input\n type email\n placeholder Your Email\n textarea\n placeholder Your Message\n button\n type submit\n class submit-button\n Send Message\nfooter\n div\n class footer-content\n div\n class footer-links\n a Privacy Policy\n href /privacy\n a Terms of Service\n href /terms\n a Careers\n href /careers\n p Radio Scroll - Redefining online radio streaming\n\nscript.js\n---style.css---\n:root {\n --primary-color: #1a73e8;\n --secondary-color: #fbbc05;\n --background-color: #f5f5f5;\n --text-color: #202124;\n --card-bg: #ffffff;\n --shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\nbody {\n font-family: 'Segoe UI', system-ui, sans-serif;\n line-height: 1.6;\n color: var(--text-color);\n background-color: var(--background-color);\n margin: 0;\n padding: 0;\n}\n\n.hero {\n background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));\n color: white;\n padding: 4rem 1rem;\n text-align: center;\n}\n\n.nav-links {\n display: flex;\n justify-content: center;\n gap: 2rem;\n margin-bottom: 2rem;\n}\n\n.primary-button {\n background: white;\n color: var(--primary-color);\n padding: 0.8rem 2rem;\n border-radius: 25px;\n text-decoration: none;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.primary-button:hover {\n transform: translateY(-2px);\n box-shadow: var(--shadow);\n}\n\n.station-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 2rem;\n padding: 2rem;\n}\n\n.station-card {\n background: var(--card-bg);\n padding: 2rem;\n border-radius: 10px;\n box-shadow: var(--shadow);\n text-align: center;\n transition: transform 0.3s ease;\n}\n\n.station-card:hover {\n transform: translateY(-5px);\n}\n\n.station-icon {\n font-size: 3rem;\n margin-bottom: 1rem;\n}\n\n.contact-form {\n max-width: 600px;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\ninput, textarea {\n padding: 0.8rem;\n border: 1px solid #ddd;\n border-radius: 5px;\n font-size: 1rem;\n}\n\n.submit-button {\n background: var(--primary-color);\n color: white;\n border: none;\n padding: 1rem;\n border-radius: 5px;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n\n.submit-button:hover {\n background: #1557b3;\n}\n\n@media (max-width: 768px) {\n .nav-links {\n flex-direction: column;\n gap: 1rem;\n }\n \n .hero-content h1 {\n font-size: 2rem;\n }\n \n .station-grid {\n grid-template-columns: 1fr;\n }\n}\n---script.js---\n// Smooth scrolling for anchor links\ndocument.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {\n anchor.addEventListener('click', function (e) {\n e.preventDefault();\n document.querySelector(this.getAttribute('href')).scrollIntoView({\n behavior: 'smooth'\n });\n });\n});\n\n// Form submission handling\nconst contactForm = document.querySelector('.contact-form');\nif (contactForm) {\n contactForm.addEventListener('submit', (e) => {\n e.preventDefault();\n const formData = new FormData(contactForm);\n const data = Object.fromEntries(formData);\n \n // Here you would typically send the data to your server\n console.log('Form submitted:', data);\n \n // Show success message\n alert('Thank you for your message! We\\'ll get back to you soon.');\n contactForm.reset();\n });\n}\n\n// Add hover effects to station cards\nconst stationCards = document.querySelectorAll('.station-card');\nstationCards.forEach(card => {\n card.addEventListener('mouseenter', () => {\n card.style.transform = 'translateY(-5px)';\n card.style.boxShadow = '0 4px 8px rgba(0,0,0,0.2)';\n });\n \n card.addEventListener('mouseleave', () => {\n card.style.transform = 'translateY(0)';\n card.style.boxShadow = '0 2px 4px rgba(0,0,0,0.1)';\n });\n});\n---end---"
+ },
+ "logprobs": null,
+ "finish_reason": "stop"
+ }
+ ],
+ "usage": {
+ "prompt_tokens": 717,
+ "completion_tokens": 1471,
+ "total_tokens": 2188,
+ "prompt_tokens_details": {
+ "cached_tokens": 0
+ },
+ "prompt_cache_hit_tokens": 0,
+ "prompt_cache_miss_tokens": 717
+ },
+ "system_fingerprint": "fp_3a5770e1b4_prod0225"
+ }
readme.scroll
Changed around line 1
+ # radioscroll.pub.scroll.pub
+
+ Prompt: website
+ Agent: deepseek
+ Model: deepseek-chat
+
+ ## User prompt
+ radio
+
+ ## System prompt
+ You are an expert web developer. Create a website based on this request: "radio"
+
+ 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
+ // Smooth scrolling for anchor links
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
+ anchor.addEventListener('click', function (e) {
+ e.preventDefault();
+ document.querySelector(this.getAttribute('href')).scrollIntoView({
+ behavior: 'smooth'
+ });
+ });
+ });
+
+ // Form submission handling
+ const contactForm = document.querySelector('.contact-form');
+ if (contactForm) {
+ contactForm.addEventListener('submit', (e) => {
+ e.preventDefault();
+ const formData = new FormData(contactForm);
+ const data = Object.fromEntries(formData);
+
+ // Here you would typically send the data to your server
+ console.log('Form submitted:', data);
+
+ // Show success message
+ alert('Thank you for your message! We\'ll get back to you soon.');
+ contactForm.reset();
+ });
+ }
+
+ // Add hover effects to station cards
+ const stationCards = document.querySelectorAll('.station-card');
+ stationCards.forEach(card => {
+ card.addEventListener('mouseenter', () => {
+ card.style.transform = 'translateY(-5px)';
+ card.style.boxShadow = '0 4px 8px rgba(0,0,0,0.2)';
+ });
+
+ card.addEventListener('mouseleave', () => {
+ card.style.transform = 'translateY(0)';
+ card.style.boxShadow = '0 2px 4px rgba(0,0,0,0.1)';
+ });
+ });
style.css
Changed around line 1
+ :root {
+ --primary-color: #1a73e8;
+ --secondary-color: #fbbc05;
+ --background-color: #f5f5f5;
+ --text-color: #202124;
+ --card-bg: #ffffff;
+ --shadow: 0 2px 4px rgba(0,0,0,0.1);
+ }
+
+ body {
+ font-family: 'Segoe UI', system-ui, sans-serif;
+ line-height: 1.6;
+ color: var(--text-color);
+ background-color: var(--background-color);
+ margin: 0;
+ padding: 0;
+ }
+
+ .hero {
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
+ color: white;
+ padding: 4rem 1rem;
+ text-align: center;
+ }
+
+ .nav-links {
+ display: flex;
+ justify-content: center;
+ gap: 2rem;
+ margin-bottom: 2rem;
+ }
+
+ .primary-button {
+ background: white;
+ color: var(--primary-color);
+ padding: 0.8rem 2rem;
+ border-radius: 25px;
+ text-decoration: none;
+ font-weight: 600;
+ transition: all 0.3s ease;
+ }
+
+ .primary-button:hover {
+ transform: translateY(-2px);
+ box-shadow: var(--shadow);
+ }
+
+ .station-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 2rem;
+ padding: 2rem;
+ }
+
+ .station-card {
+ background: var(--card-bg);
+ padding: 2rem;
+ border-radius: 10px;
+ box-shadow: var(--shadow);
+ text-align: center;
+ transition: transform 0.3s ease;
+ }
+
+ .station-card:hover {
+ transform: translateY(-5px);
+ }
+
+ .station-icon {
+ font-size: 3rem;
+ margin-bottom: 1rem;
+ }
+
+ .contact-form {
+ max-width: 600px;
+ margin: 0 auto;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ }
+
+ input, textarea {
+ padding: 0.8rem;
+ border: 1px solid #ddd;
+ border-radius: 5px;
+ font-size: 1rem;
+ }
+
+ .submit-button {
+ background: var(--primary-color);
+ color: white;
+ border: none;
+ padding: 1rem;
+ border-radius: 5px;
+ cursor: pointer;
+ transition: background 0.3s ease;
+ }
+
+ .submit-button:hover {
+ background: #1557b3;
+ }
+
+ @media (max-width: 768px) {
+ .nav-links {
+ flex-direction: column;
+ gap: 1rem;
+ }
+
+ .hero-content h1 {
+ font-size: 2rem;
+ }
+
+ .station-grid {
+ grid-template-columns: 1fr;
+ }
+ }