diff --git a/src/styles.scss b/src/styles.scss index 23706c8..ba9c7af 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -1,391 +1,804 @@ // Variables -$primary: #4a6fa5; -$primary-dark: #385580; -$secondary: #6c5ce7; -$light: #f8f9fa; -$dark: #212529; -$success: #28a745; -$gray: #6c757d; -$gray-light: #e9ecef; +$primary: #4a9d4a; +$primary-dark: #3a7a3a; +$secondary: #6a5acd; +$light: #1a1a1a; +$dark: #4a9d4a; +$success: #5cb85c; +$gray: #999999; +$gray-light: #2a2a2a; +$accent: #d35db9; +$terminal-bg: #222222; +$terminal-text: #c0c0c0; +$terminal-font: "Courier New", monospace; // Base styles * { - margin: 0; - padding: 0; - box-sizing: border-box; - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: $terminal-font; } body { - background-color: $light; - color: $dark; - line-height: 1.6; + background-color: $light; + color: $terminal-text; + line-height: 1.6; + background-image: url("data:image/svg+xml,%3Csvg width='6' height='6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23333' fill-opacity='0.1'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E"); } // Header styles header { - background: linear-gradient(135deg, $primary, $secondary); - color: white; - padding: 2rem 0; - text-align: center; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + background: linear-gradient(135deg, $terminal-bg, $secondary); + color: $primary; + padding: 2rem 0; + text-align: center; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); + border-bottom: 1px solid $primary-dark; - .logo { - font-size: 2.5rem; - font-weight: bold; - margin-bottom: 1rem; - } + .logo { + font-size: 2.5rem; + font-weight: bold; + margin-bottom: 1rem; + text-shadow: 0 0 2px $primary; + letter-spacing: 2px; + display: flex; + align-items: center; + justify-content: center; + position: relative; - .tagline { - font-size: 1.2rem; - opacity: 0.9; + // &:before { + // content: ""; + // display: inline-block; + // width: 65px; + // height: 50px; + // margin-right: 20px; + // background-color: $terminal-bg; + // border: 2px solid $primary; + // border-radius: 8px; + // position: relative; + // box-shadow: 0 0 8px rgba($primary, 0.3); + // overflow: hidden; + // } + + /* Chat bubbles */ + // &:after { + // content: ""; + // position: absolute; + // width: 45px; + // height: 30px; + // left: 10px; + // top: 10px; + // background: repeating-linear-gradient( + // 90deg, + // transparent, + // transparent 3px, + // $primary 3px, + // $primary 4px + // ); + // clip-path: polygon( + // 0% 0%, + // 100% 0%, + // 100% 60%, + // 80% 60%, + // 70% 100%, + // 70% 60%, + // 0% 60% + // ); + // animation: typeMessage 2s infinite; + // } + } + + /* Connection dots animation */ + .logo-dots { + position: absolute; + top: 15px; + left: 43px; + z-index: 2; + + .dot { + position: absolute; + width: 6px; + height: 6px; + background-color: $accent; + border-radius: 50%; + opacity: 0; + + &:nth-child(1) { + top: 0; + left: 0; + animation: showDot 3s infinite 0s; + } + + &:nth-child(2) { + top: 10px; + left: 10px; + animation: showDot 3s infinite 0.3s; + } + + &:nth-child(3) { + top: 20px; + left: 20px; + animation: showDot 3s infinite 0.6s; + } } + } + + @keyframes typeMessage { + 0% { + width: 0; + } + 40% { + width: 45px; + } + 60% { + width: 45px; + } + 100% { + width: 45px; + } + } + + @keyframes showDot { + 0% { + opacity: 0; + transform: scale(0.5); + } + 20% { + opacity: 1; + transform: scale(1); + } + 80% { + opacity: 1; + transform: scale(1); + } + 100% { + opacity: 0; + transform: scale(0.5); + } + } + + .tagline { + font-size: 1.2rem; + opacity: 0.9; + font-family: $terminal-font; + &:before { + content: "> "; + color: $primary; + } + } } // Navigation nav { - background-color: white; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); - position: sticky; - top: 0; - z-index: 100; + background-color: $terminal-bg; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); + position: sticky; + top: 0; + z-index: 100; + border-bottom: 1px solid $primary-dark; - .navbar { - display: flex; - justify-content: space-between; - align-items: center; - max-width: 1200px; - margin: 0 auto; - padding: 0 1rem; + .navbar { + display: flex; + justify-content: space-between; + align-items: center; + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; + } + + .nav-brand { + font-size: 1.5rem; + font-weight: bold; + color: $primary; + text-decoration: none; + padding: 1rem 0; + text-shadow: 0 0 1px $primary; + display: flex; + align-items: center; + position: relative; + + &:before { + content: ""; + display: inline-block; + width: 30px; + height: 25px; + margin-right: 10px; + background-color: $terminal-bg; + border: 1px solid $primary; + border-radius: 4px; + position: relative; + overflow: hidden; } - .nav-brand { - font-size: 1.5rem; - font-weight: bold; - color: $primary; - text-decoration: none; - padding: 1rem 0; + &:after { + content: ""; + position: absolute; + width: 20px; + height: 12px; + left: 5px; + top: 17px; + background: repeating-linear-gradient( + 90deg, + transparent, + transparent 1px, + $primary 1px, + $primary 2px + ); + clip-path: polygon( + 0% 0%, + 100% 0%, + 100% 60%, + 80% 60%, + 70% 100%, + 70% 60%, + 0% 60% + ); } + } - .nav-links { - display: flex; - list-style: none; + .nav-links { + display: flex; + list-style: none; - li a { - display: block; - padding: 1rem; - color: $dark; - text-decoration: none; - transition: color 0.3s; + li a { + display: block; + padding: 1rem; + color: $primary; + text-decoration: none; + transition: all 0.3s; + border: 1px solid transparent; - &:hover { - color: $primary; - } - } + &:hover { + color: $light; + background-color: $primary; + border: 1px solid $primary-dark; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); + } } + } } // Container .container { - max-width: 1200px; - margin: 0 auto; - padding: 2rem 1rem; + max-width: 1200px; + margin: 0 auto; + padding: 2rem 1rem; } // Hero section .hero { - text-align: center; - padding: 3rem 1rem; + text-align: center; + padding: 3rem 1rem; - h1 { - font-size: 2.5rem; - margin-bottom: 1rem; - color: $primary; + h1 { + font-size: 2.5rem; + margin-bottom: 1rem; + color: $primary; + text-shadow: 0 0 2px $primary; + letter-spacing: 1px; + &:before { + content: "[ "; + color: $accent; } + &:after { + content: " ]"; + color: $accent; + } + } - p { - font-size: 1.2rem; - color: $gray; - margin-bottom: 2rem; - max-width: 800px; - margin-left: auto; - margin-right: auto; + p { + font-size: 1.2rem; + color: $gray; + margin-bottom: 2rem; + max-width: 800px; + margin-left: auto; + margin-right: auto; + &:before { + content: "$ "; + color: $primary; } + } } // Buttons .btn { - display: inline-block; - padding: 0.8rem 1.5rem; + display: inline-block; + padding: 0.8rem 1.5rem; + background-color: $terminal-bg; + color: $primary; + text-decoration: none; + border-radius: 0; + font-weight: 500; + transition: all 0.3s; + cursor: pointer; + border: 1px solid $primary; + text-transform: uppercase; + letter-spacing: 1px; + + &:hover { background-color: $primary; - color: white; - text-decoration: none; - border-radius: 4px; - font-weight: 500; - transition: background-color 0.3s, transform 0.2s; - cursor: pointer; + color: $terminal-bg; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.3); + transform: translateY(-2px); + } - &:hover { - background-color: $primary-dark; - transform: translateY(-2px); - } - - &-large { - font-size: 1.1rem; - padding: 1rem 2rem; - } + &-large { + font-size: 1.1rem; + padding: 1rem 2rem; + } } // Connection methods .connection-methods { - background-color: white; - border-radius: 8px; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); - padding: 2rem; - margin-bottom: 2rem; + background-color: $terminal-bg; + border-radius: 4px; + box-shadow: 0 0 15px rgba(0, 0, 0, 0.2); + padding: 2rem; + margin-bottom: 2rem; + border: 1px solid $primary-dark; } .method-card { - background-color: $gray-light; - border-radius: 8px; - padding: 1.5rem; - margin-bottom: 1rem; - transition: transform 0.3s; + background-color: $gray-light; + border-radius: 4px; + // padding: 2.5rem; + padding: 1rem 1rem 1rem 2.5rem; + margin-bottom: 1rem; + transition: all 0.3s; + border-left: 3px solid $primary; - &:hover { - transform: translateY(-5px); - } + &:hover { + transform: translateY(-5px); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); + } - .method-title { - font-size: 1.2rem; - color: $primary; - margin-bottom: 0.5rem; - display: flex; - align-items: center; - } + .method-title { + font-size: 1.2rem; + color: $primary; + margin-bottom: 0.5rem; + display: flex; + align-items: center; + text-transform: uppercase; + letter-spacing: 1px; - .method-icon { - margin-right: 0.5rem; - font-size: 1.4rem; + &:before { + content: ">"; + margin-right: 0.5rem; + color: $accent; } + } - .method-details { - color: $gray; - } + .method-icon { + margin-right: 0.5rem; + font-size: 1.4rem; + color: $accent; + } + + .method-details { + color: $gray; + font-family: $terminal-font; + } } .connect-link { - display: inline-block; - margin-top: 0.5rem; - color: $primary; - font-weight: 500; - text-decoration: none; + display: inline-block; + margin-top: 0.5rem; + color: $primary; + font-weight: 500; + text-decoration: none; + border-bottom: 1px dashed $primary; - &:hover { - text-decoration: underline; - } + &:hover { + text-decoration: none; + text-shadow: 0 0 5px $primary; + border-bottom: 1px solid $primary; + } } // Features section .features { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2rem; - margin: 3rem 0; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; + margin: 3rem 0; } .feature-card { - background-color: white; - border-radius: 8px; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); - padding: 2rem; - text-align: center; - transition: transform 0.3s; + background-color: $terminal-bg; + border-radius: 6px; + box-shadow: 0 0 15px rgba(0, 0, 0, 0.2); + padding: 2rem; + text-align: center; + transition: all 0.3s; + border: 1px solid $primary-dark; - &:hover { - transform: translateY(-10px); - } + &:hover { + transform: translateY(-10px); + box-shadow: 0 0 15px rgba(0, 0, 0, 0.3); + border-color: $primary; + } - .feature-icon { - font-size: 2.5rem; - color: $primary; - margin-bottom: 1rem; - } + .feature-icon { + font-size: 2.5rem; + color: $primary; + margin-bottom: 1rem; + text-shadow: 0 0 2px $primary; + } - .feature-title { - font-size: 1.5rem; - margin-bottom: 1rem; - color: $dark; - } + .feature-title { + font-size: 1.5rem; + margin-bottom: 1rem; + color: $primary; + text-transform: uppercase; + letter-spacing: 2px; - .feature-text { - color: $gray; + &:before { + content: "[ "; + color: $accent; } + &:after { + content: " ]"; + color: $accent; + } + } + + .feature-text { + color: $gray; + font-family: $terminal-font; + } } // Section titles .section-title { - text-align: center; - margin: 3rem 0 2rem; - color: $primary; - font-size: 2rem; + text-align: center; + margin: 3rem 0 2rem; + color: $primary; + font-size: 2rem; + text-transform: uppercase; + letter-spacing: 2px; + position: relative; + text-shadow: 0 0 1px $primary; + + &:before, + &:after { + content: "===================="; + color: $primary-dark; + position: absolute; + left: 50%; + transform: translateX(-50%); + font-size: 1rem; + } + + &:before { + top: -1.5rem; + } + + &:after { + bottom: -1.5rem; + } } // FAQ section .faq-item { - background-color: white; - border-radius: 8px; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); - margin-bottom: 1rem; - overflow: hidden; + background-color: $terminal-bg; + border-radius: 4px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); + margin-bottom: 1rem; + overflow: hidden; + border: 1px solid $primary-dark; - .faq-question { - background-color: $gray-light; - padding: 1rem; - font-weight: 500; - cursor: pointer; - display: flex; - justify-content: space-between; - align-items: center; - } + .faq-question { + background-color: $gray-light; + padding: 1rem; + font-weight: 500; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + color: $primary; + text-transform: uppercase; + letter-spacing: 1px; - .faq-answer { - padding: 1rem; - color: $gray; + &:before { + content: "?> "; + color: $accent; } + } + + .faq-answer { + padding: 1rem; + color: $gray; + font-family: $terminal-font; + border-top: 1px dashed $primary-dark; + + &:before { + content: "$> "; + color: $primary; + } + } } // Steps section .steps { - counter-reset: step-counter; - margin: 2rem 0; + counter-reset: step-counter; + margin: 2rem 0; } .step { - background-color: white; - border-radius: 8px; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); - padding: 1.5rem; - margin-bottom: 1.5rem; - position: relative; - padding-left: 3.5rem; + background-color: $terminal-bg; + border-radius: 4px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); + padding: 1.5rem; + margin-bottom: 1.5rem; + position: relative; + padding-left: 3.5rem; + border: 1px solid $primary-dark; - &::before { - counter-increment: step-counter; - content: counter(step-counter); - position: absolute; - left: 1rem; - top: 1.5rem; - background-color: $primary; - color: white; - width: 2rem; - height: 2rem; - border-radius: 50%; - display: flex; - justify-content: center; - align-items: center; - font-weight: bold; - } + &:hover { + border-color: $primary; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.3); + } - &-title { - color: $primary; - margin-bottom: 0.5rem; - font-size: 1.2rem; - } + &::before { + counter-increment: step-counter; + content: counter(step-counter); + position: absolute; + left: 1rem; + top: 1.5rem; + background-color: $terminal-bg; + color: $primary; + width: 2rem; + height: 2rem; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + font-weight: bold; + border: 1px solid $primary; + } + + &-title { + color: $primary; + margin-bottom: 0.5rem; + font-size: 1.2rem; + text-transform: uppercase; + letter-spacing: 1px; + } } // Footer footer { - background-color: $dark; - color: white; - padding: 3rem 0; - margin-top: 3rem; + background-color: $terminal-bg; + color: $primary; + padding: 3rem 0; + margin-top: 3rem; + border-top: 1px solid $primary-dark; - .footer-content { - max-width: 1200px; - margin: 0 auto; - padding: 0 1rem; - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 2rem; + .footer-content { + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 2rem; + } + + .footer-section { + h3 { + color: $primary; + margin-bottom: 1rem; + text-transform: uppercase; + letter-spacing: 2px; + text-shadow: 0 0 1px $primary; + display: flex; + align-items: center; + position: relative; + + &:before { + content: "#"; + display: inline-block; + width: 18px; + height: 18px; + margin-right: 8px; + background-color: $terminal-bg; + // border: 1px solid $primary; + border-radius: 3px; + display: flex; + align-items: center; + justify-content: center; + font-size: 12px; + color: $accent; + } + } + } + + .footer-links { + list-style: none; + + li { + margin-bottom: 0.5rem; } - .footer-section { - h3 { - color: $gray-light; - margin-bottom: 1rem; - } + a { + color: $gray; + text-decoration: none; + transition: color 0.3s; + + &:before { + content: "- "; + color: $primary; + } + + &:hover { + color: $primary; + text-shadow: 0 0 3px $primary; + } + } + } + + .copyright { + text-align: center; + padding: 1rem 0; + color: $gray; + border-top: 1px solid $primary-dark; + margin-top: 2rem; + font-family: $terminal-font; + + &:before { + content: "/* "; + color: $primary; } - .footer-links { - list-style: none; - - li { - margin-bottom: 0.5rem; - } - - a { - color: $gray; - text-decoration: none; - transition: color 0.3s; - - &:hover { - color: white; - } - } - } - - .copyright { - text-align: center; - padding: 1rem 0; - color: $gray; - border-top: 1px solid rgba(255, 255, 255, 0.1); - margin-top: 2rem; + &:after { + content: " */"; + color: $primary; } + } } // Responsive styles @media (max-width: 768px) { - .navbar { - flex-direction: column; - padding: 0.5rem 1rem; - } - - .nav-links { - flex-direction: column; - width: 100%; - } - - .features { - grid-template-columns: 1fr; - } + .navbar { + flex-direction: column; + padding: 0.5rem 1rem; + } + + .nav-links { + flex-direction: column; + width: 100%; + } + + .features { + grid-template-columns: 1fr; + } } // Additional utilities .page-content { - min-height: 60vh; + min-height: 60vh; } .code-block { - background-color: #f1f1f1; - border-radius: 4px; - padding: 0.5rem; - font-family: monospace; - overflow-x: auto; - margin: 0.5rem 0; + background-color: $terminal-bg; + border-radius: 0; + padding: 0.8rem; + font-family: $terminal-font; + overflow-x: auto; + margin: 0.5rem 0; + color: $primary; + border: 1px solid $primary-dark; + position: relative; + + &:before { + content: "> "; + color: $accent; + } } .tip { - background-color: rgba($primary, 0.1); - border-left: 4px solid $primary; - padding: 1rem; - margin: 1rem 0; + background-color: rgba($primary, 0.1); + border-left: 4px solid $primary; + padding: 1rem; + margin: 1rem 0; + + &:before { + content: "! "; + color: $accent; + font-weight: bold; + } } .screenshot { - max-width: 100%; - height: auto; - border-radius: 8px; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); - margin: 1rem 0; -} \ No newline at end of file + max-width: 100%; + height: auto; + border-radius: 0; + box-shadow: 0 0 15px rgba(0, 255, 0, 0.2); + margin: 1rem 0; + border: 1px solid $primary-dark; + filter: brightness(0.9) contrast(1.1) saturate(1.2); +} + +// Glitch effect +@keyframes glitch { + 0% { + text-shadow: 0.05em 0 0 $accent, -0.05em -0.025em 0 rgba(255, 0, 255, 0.75); + } + 14% { + text-shadow: 0.05em 0 0 $accent, -0.05em -0.025em 0 rgba(255, 0, 255, 0.75); + } + 15% { + text-shadow: -0.05em -0.025em 0 $accent, + 0.025em 0.025em 0 rgba(255, 0, 255, 0.75); + } + 49% { + text-shadow: -0.05em -0.025em 0 $accent, + 0.025em 0.025em 0 rgba(255, 0, 255, 0.75); + } + 50% { + text-shadow: 0.025em 0.05em 0 $accent, 0.05em 0 0 rgba(255, 0, 255, 0.75); + } + 99% { + text-shadow: 0.025em 0.05em 0 $accent, 0.05em 0 0 rgba(255, 0, 255, 0.75); + } + 100% { + text-shadow: -0.025em 0 0 $accent, + -0.025em -0.025em 0 rgba(255, 0, 255, 0.75); + } +} + +.glitch-text { + animation: glitch 1s linear infinite; + color: $primary; +} + +// Terminal effect +.terminal { + background-color: $terminal-bg; + border: 1px solid $primary; + padding: 1rem; + font-family: $terminal-font; + color: $primary; + position: relative; + + &:before { + content: "$ "; + color: $primary; + } + + .cursor { + display: inline-block; + width: 10px; + height: 20px; + background-color: $primary; + animation: blink 1s step-end infinite; + } +} + +@keyframes blink { + from, + to { + opacity: 1; + } + 50% { + opacity: 0; + } +} + +// Matrix effect background element +.matrix-bg { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + opacity: 0.03; + background: repeating-linear-gradient( + 0deg, + rgba(125, 125, 125, 0.1) 0px, + rgba(125, 125, 125, 0.1) 1px, + transparent 1px, + transparent 2px + ); +} diff --git a/src/views/layout.pug b/src/views/layout.pug index 54d8868..18aee82 100644 --- a/src/views/layout.pug +++ b/src/views/layout.pug @@ -8,9 +8,18 @@ html(lang="en") title #{title} | IRC*Sekor link(rel="stylesheet", href="styles.css") body - header - .logo IRC*Sekor - .tagline #{tagline} + //- header + //- .logo + //- .logo-dots + //- .dot + //- .dot + //- .dot + //- | IRC*Sekor + //- .tagline #{tagline} + + //- header + //- .logo IRC*Sekor + //- .tagline #{tagline} nav .navbar @@ -24,8 +33,8 @@ html(lang="en") a(href="login.html") Login li a(href="channels.html") Channels - li - a(href="faq.html") FAQ + //- li + //- a(href="faq.html") FAQ block content diff --git a/src/views/login.pug b/src/views/login.pug index 87361bc..a9b8679 100644 --- a/src/views/login.pug +++ b/src/views/login.pug @@ -13,7 +13,7 @@ block content ul li | Using an IRC client: - span.code-block ircs://irc.sekor.eu.org:6697 + pre.code-block ircs://irc.sekor.eu.org:6697 li | Or use the a(href="/web/") web client diff --git a/src/views/register.pug b/src/views/register.pug index 6e4df00..888c201 100644 --- a/src/views/register.pug +++ b/src/views/register.pug @@ -13,7 +13,7 @@ block content ul li | Using an IRC client: - span.code-block ircs://irc.sekor.eu.org:6697 + pre.code-block ircs://irc.sekor.eu.org:6697 li | Or use the a(href="/web/") web client