diff --git a/error.html b/error.html index 1ad2f88..2a93a7d 100644 --- a/error.html +++ b/error.html @@ -3,36 +3,7 @@ Error Page | Vapor API Docs - +
diff --git a/index.html b/index.html index 03e51dc..0efe3aa 100644 --- a/index.html +++ b/index.html @@ -3,188 +3,7 @@ Vapor API Docs - +
diff --git a/stack.yaml b/stack.yaml index 7acce4c..4ab0796 100644 --- a/stack.yaml +++ b/stack.yaml @@ -88,9 +88,9 @@ Resources: Override: true Value: 'Vapor API Docs' SecurityHeadersConfig: - # ContentSecurityPolicy: - # ContentSecurityPolicy: default-src 'none'; script-src 'self'; img-src 'self'; style-src 'self'; font-src 'self' - # Override: false + ContentSecurityPolicy: + ContentSecurityPolicy: default-src 'none'; script-src 'self'; img-src 'self'; style-src 'self'; font-src 'self'; connect-src 'self'; base-uri 'self'; form-action 'self' + Override: false ContentTypeOptions: Override: false FrameOptions: diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..244a1d9 --- /dev/null +++ b/styles.css @@ -0,0 +1,180 @@ +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html, body { + min-height: 100%; + background: #0a0a0a; + color: #ffffff; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + line-height: 1.6; +} + +body { + background: linear-gradient(135deg, #0a0a0a 0%, #1a0a2e 100%); + background-attachment: fixed; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 2rem; +} + +.header { + text-align: center; + margin-bottom: 3rem; +} + +.logo { + background-image: url(api-docs.png); + width: 300px; + height: 78px; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + text-indent: -9999px; + margin: 0 auto 1rem; +} + +.subtitle { + color: #a0a0a0; + font-size: 1.1rem; + margin-bottom: 2rem; +} + +.package-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + gap: 1.5rem; + margin-bottom: 3rem; +} + +.package-card { + background: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 12px; + padding: 1.5rem; + text-decoration: none; + color: inherit; + transition: all 0.3s ease; + cursor: pointer; + position: relative; + overflow: hidden; +} + +.package-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: linear-gradient(90deg, #7c3aed 0%, #3b82f6 100%); + transform: scaleX(0); + transition: transform 0.3s ease; +} + +.package-card:hover { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.2); + transform: translateY(-2px); + box-shadow: 0 8px 24px rgba(124, 58, 237, 0.2); +} + +.package-card:hover::before { + transform: scaleX(1); +} + +.package-name { + font-size: 1.25rem; + font-weight: 600; + margin-bottom: 0.5rem; + color: #ffffff; +} + +.package-description { + font-size: 0.9rem; + color: #a0a0a0; + line-height: 1.5; +} + +.footer { + text-align: center; + margin-top: 4rem; + padding-top: 2rem; + border-top: 1px solid rgba(255, 255, 255, 0.1); + color: #666; + font-size: 0.9rem; +} + +.footer a { + color: #7c3aed; + text-decoration: none; +} + +.footer a:hover { + text-decoration: underline; +} + +/* Responsive design */ +@media (max-width: 768px) { + .container { + padding: 1rem; + } + + .package-grid { + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 1rem; + } + + .logo { + width: 250px; + height: 65px; + } + + .subtitle { + font-size: 1rem; + } +} + +@media (max-width: 480px) { + .package-grid { + grid-template-columns: 1fr; + } +} + +/* Focus styles for accessibility */ +.package-card:focus { + outline: 2px solid #7c3aed; + outline-offset: 2px; +} + +/* Loading animation */ +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.package-card { + animation: fadeIn 0.5s ease forwards; + opacity: 0; +} + +.package-card:nth-child(1) { animation-delay: 0.05s; } +.package-card:nth-child(2) { animation-delay: 0.1s; } +.package-card:nth-child(3) { animation-delay: 0.15s; } +.package-card:nth-child(4) { animation-delay: 0.2s; } +.package-card:nth-child(5) { animation-delay: 0.25s; } +.package-card:nth-child(6) { animation-delay: 0.3s; } +.package-card:nth-child(7) { animation-delay: 0.35s; } +.package-card:nth-child(8) { animation-delay: 0.4s; } +.package-card:nth-child(n+9) { animation-delay: 0.45s; } \ No newline at end of file