mirror of
https://github.com/waynesutton/markdown-site.git
synced 2026-01-11 20:08:57 +00:00
fix: sidebar border and ui sidebar ui changes
This commit is contained in:
17
TASK.md
17
TASK.md
@@ -2,23 +2,14 @@
|
||||
|
||||
## To Do
|
||||
|
||||
- [ ] fix netlify markdown bug
|
||||
- [ ] add MIT Licensed. Do whatevs.
|
||||
- [ ] add mcp
|
||||
- [ ] https://www.npmjs.com/package/remark-rehype
|
||||
- [ ] https://github.com/remarkjs/remark-rehype
|
||||
- [ ] https://github.com/remarkjs/remark-rehype
|
||||
- [ ] https://remark.js.org/
|
||||
- [ ] https://unifiedjs.com/explore/package/rehype-raw/
|
||||
- [ ] - add markdown html https://gist.github.com/pierrejoubert73/902cc94d79424356a8d20be2b382e1ab
|
||||
- [ ]
|
||||
- [ ] fix Netlify edge functions blocking AI crawlers from static files
|
||||
|
||||
## Current Status
|
||||
|
||||
v1.24.4 deployed. Added `showInNav` field for pages and hardcoded navigation items configuration for React routes.
|
||||
|
||||
## Completed
|
||||
|
||||
- [x] add MIT Licensed. Do whatevs.
|
||||
- [x] Blog page view mode toggle (list and card views)
|
||||
- [x] Post cards component with thumbnails, titles, excerpts, and metadata
|
||||
- [x] View preference saved to localStorage
|
||||
@@ -195,5 +186,5 @@ v1.24.4 deployed. Added `showInNav` field for pages and hardcoded navigation ite
|
||||
- [ ] Newsletter signup
|
||||
- [ ] Comments system
|
||||
- [ ] Draft preview mode
|
||||
- [ ] Image optimization
|
||||
- [ ] Reading progress indicator
|
||||
|
||||
|
||||
|
||||
23
changelog.md
23
changelog.md
@@ -4,6 +4,29 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
|
||||
## [1.25.2] - 2025-12-24
|
||||
|
||||
### Changed
|
||||
|
||||
- Disabled AI service links (ChatGPT, Claude, Perplexity) in CopyPageDropdown
|
||||
- Direct links to AI services removed due to Netlify edge function interception issues
|
||||
- AI crawlers cannot reliably fetch `/raw/*.md` files despite multiple configuration attempts
|
||||
- Users can still copy markdown and paste directly into AI tools manually
|
||||
- "Copy page", "View as Markdown", and "Download as SKILL.md" options remain available
|
||||
|
||||
### Removed
|
||||
|
||||
- Netlify Function at `/api/raw/:slug` endpoint
|
||||
- Removed due to build failures and dependency conflicts
|
||||
- Static `/raw/*.md` files still work in browsers but not for AI crawler fetch tools
|
||||
|
||||
### Technical
|
||||
|
||||
- `src/components/CopyPageDropdown.tsx`: Commented out AI service buttons, kept manual copy/view/download options
|
||||
- `netlify.toml`: Removed `/api/raw/*` redirect rule
|
||||
- `netlify/functions/raw.js`: Deleted Netlify Function file
|
||||
- `content/blog/netlify-edge-excludedpath-ai-crawlers.md`: Updated with detailed log of all attempted solutions and timestamps
|
||||
|
||||
## [1.25.1] - 2025-12-24
|
||||
|
||||
### Changed
|
||||
|
||||
@@ -8,6 +8,58 @@ layout: "sidebar"
|
||||
|
||||
All notable changes to this project.
|
||||
|
||||
## v1.25.2
|
||||
|
||||
Released December 24, 2025
|
||||
|
||||
**AI service links disabled due to Netlify edge function issues**
|
||||
|
||||
- Direct links to ChatGPT, Claude, and Perplexity removed from CopyPageDropdown
|
||||
- AI crawlers cannot reliably fetch `/raw/*.md` files despite multiple configuration attempts
|
||||
- Netlify edge functions intercept requests before static files are served
|
||||
- Multiple solutions attempted: excludedPath, code-level bypasses, AI crawler whitelisting, Netlify Functions, header adjustments
|
||||
- None resolved the issue for ChatGPT or Perplexity (Claude works)
|
||||
|
||||
- Workaround for users
|
||||
- Copy page: copies markdown to clipboard, paste directly into any AI tool
|
||||
- View as Markdown: opens raw `.md` file in browser for manual copying
|
||||
- Download as SKILL.md: downloads in Anthropic Agent Skills format
|
||||
|
||||
- Removed Netlify Function at `/api/raw/:slug`
|
||||
- Caused build failures and dependency conflicts
|
||||
- Static `/raw/*.md` files still work in browsers
|
||||
|
||||
Updated files: `src/components/CopyPageDropdown.tsx`, `netlify.toml`
|
||||
|
||||
Documentation: `content/blog/netlify-edge-excludedpath-ai-crawlers.md` updated with detailed log of all attempted solutions
|
||||
|
||||
## v1.25.1
|
||||
|
||||
Released December 24, 2025
|
||||
|
||||
**Logo moved to top navigation header**
|
||||
|
||||
- Logo now appears in header bar (top-left) on all pages
|
||||
- Separate from back button and navigation links
|
||||
- Reads from `siteConfig.innerPageLogo` and `siteConfig.logo`
|
||||
- Mobile responsive: logo positioned on left in header
|
||||
|
||||
Updated files: `src/components/Layout.tsx`, `src/pages/Post.tsx`, `src/pages/Blog.tsx`, `src/styles/global.css`
|
||||
|
||||
## v1.25.0
|
||||
|
||||
Released December 24, 2025
|
||||
|
||||
**Sidebar styling updated to match Cursor docs style**
|
||||
|
||||
- Sidebar has alternate background color for visual separation
|
||||
- Vertical border line on right side of sidebar
|
||||
- Theme-aware colors for all four themes
|
||||
- Sidebar width increased to 240px
|
||||
- Mobile responsive: sidebar hidden below 1024px
|
||||
|
||||
Updated files: `src/styles/global.css`
|
||||
|
||||
## v1.24.4
|
||||
|
||||
Released December 23, 2025
|
||||
|
||||
4
files.md
4
files.md
@@ -53,7 +53,7 @@ A brief description of each file in the codebase.
|
||||
| `ThemeToggle.tsx` | Theme switcher (dark/light/tan/cloud) |
|
||||
| `PostList.tsx` | Year-grouped blog post list or card grid (supports list/cards view modes) |
|
||||
| `BlogPost.tsx` | Markdown renderer with syntax highlighting and collapsible sections (details/summary) |
|
||||
| `CopyPageDropdown.tsx` | Share dropdown for LLMs (ChatGPT, Claude, Perplexity) using raw markdown URLs for better AI parsing, with View as Markdown and Generate Skill options |
|
||||
| `CopyPageDropdown.tsx` | Share dropdown with Copy page (markdown to clipboard), View as Markdown (opens raw .md file), and Download as SKILL.md (Anthropic Agent Skills format). AI service links (ChatGPT, Claude, Perplexity) disabled due to Netlify edge function issues |
|
||||
| `SearchModal.tsx` | Full text search modal with keyboard navigation |
|
||||
| `FeaturedCards.tsx` | Card grid for featured posts/pages with excerpts |
|
||||
| `LogoMarquee.tsx` | Scrolling logo gallery with clickable links |
|
||||
@@ -183,7 +183,7 @@ Frontmatter is the YAML metadata at the top of each markdown file. Here is how i
|
||||
|
||||
| File | Description |
|
||||
| ------------ | ------------------------------------------------------------ |
|
||||
| `botMeta.ts` | Edge function for social media crawler detection |
|
||||
| `botMeta.ts` | Edge function for social media crawler detection, excludes `/raw/*` paths and AI crawlers from OG interception |
|
||||
| `rss.ts` | Proxies `/rss.xml` and `/rss-full.xml` to Convex HTTP |
|
||||
| `sitemap.ts` | Proxies `/sitemap.xml` to Convex HTTP |
|
||||
| `api.ts` | Proxies `/api/posts`, `/api/post`, `/api/export` to Convex |
|
||||
|
||||
@@ -7,6 +7,58 @@ Date: 2025-12-24
|
||||
|
||||
All notable changes to this project.
|
||||
|
||||
## v1.25.2
|
||||
|
||||
Released December 24, 2025
|
||||
|
||||
**AI service links disabled due to Netlify edge function issues**
|
||||
|
||||
- Direct links to ChatGPT, Claude, and Perplexity removed from CopyPageDropdown
|
||||
- AI crawlers cannot reliably fetch `/raw/*.md` files despite multiple configuration attempts
|
||||
- Netlify edge functions intercept requests before static files are served
|
||||
- Multiple solutions attempted: excludedPath, code-level bypasses, AI crawler whitelisting, Netlify Functions, header adjustments
|
||||
- None resolved the issue for ChatGPT or Perplexity (Claude works)
|
||||
|
||||
- Workaround for users
|
||||
- Copy page: copies markdown to clipboard, paste directly into any AI tool
|
||||
- View as Markdown: opens raw `.md` file in browser for manual copying
|
||||
- Download as SKILL.md: downloads in Anthropic Agent Skills format
|
||||
|
||||
- Removed Netlify Function at `/api/raw/:slug`
|
||||
- Caused build failures and dependency conflicts
|
||||
- Static `/raw/*.md` files still work in browsers
|
||||
|
||||
Updated files: `src/components/CopyPageDropdown.tsx`, `netlify.toml`
|
||||
|
||||
Documentation: `content/blog/netlify-edge-excludedpath-ai-crawlers.md` updated with detailed log of all attempted solutions
|
||||
|
||||
## v1.25.1
|
||||
|
||||
Released December 24, 2025
|
||||
|
||||
**Logo moved to top navigation header**
|
||||
|
||||
- Logo now appears in header bar (top-left) on all pages
|
||||
- Separate from back button and navigation links
|
||||
- Reads from `siteConfig.innerPageLogo` and `siteConfig.logo`
|
||||
- Mobile responsive: logo positioned on left in header
|
||||
|
||||
Updated files: `src/components/Layout.tsx`, `src/pages/Post.tsx`, `src/pages/Blog.tsx`, `src/styles/global.css`
|
||||
|
||||
## v1.25.0
|
||||
|
||||
Released December 24, 2025
|
||||
|
||||
**Sidebar styling updated to match Cursor docs style**
|
||||
|
||||
- Sidebar has alternate background color for visual separation
|
||||
- Vertical border line on right side of sidebar
|
||||
- Theme-aware colors for all four themes
|
||||
- Sidebar width increased to 240px
|
||||
- Mobile responsive: sidebar hidden below 1024px
|
||||
|
||||
Updated files: `src/styles/global.css`
|
||||
|
||||
## v1.24.4
|
||||
|
||||
Released December 23, 2025
|
||||
|
||||
@@ -5,7 +5,7 @@ This is the homepage index of all published content.
|
||||
## Blog Posts (11)
|
||||
|
||||
- **[Netlify edge functions blocking AI crawlers from static files](/raw/netlify-edge-excludedpath-ai-crawlers.md)** - Why excludedPath in netlify.toml isn't preventing edge functions from intercepting /raw/* requests, and how ChatGPT and Perplexity get blocked while Claude works.
|
||||
- Date: 2025-12-21 | Reading time: 4 min read | Tags: netlify, edge-functions, ai, troubleshooting, help
|
||||
- Date: 2025-12-21 | Reading time: 5 min read | Tags: netlify, edge-functions, ai, troubleshooting, help
|
||||
- **[Visitor tracking and stats improvements](/raw/visitor-tracking-and-stats-improvements.md)** - Real-time visitor map, write conflict prevention, GitHub Stars integration, and better AI prompts. Updates from v1.18.1 to v1.20.2.
|
||||
- Date: 2025-12-21 | Reading time: 5 min read | Tags: features, stats, convex, updates, analytics
|
||||
- **[Configure your fork in one command](/raw/fork-configuration-guide.md)** - Two options to set up your forked markdown framework: automated JSON config with npm run configure, or step-by-step manual guide.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
---
|
||||
Type: post
|
||||
Date: 2025-12-21
|
||||
Reading time: 4 min read
|
||||
Reading time: 5 min read
|
||||
Tags: netlify, edge-functions, ai, troubleshooting, help
|
||||
---
|
||||
|
||||
@@ -36,78 +36,157 @@ The page could not be loaded with the tools currently available, so its raw mark
|
||||
**Claude:**
|
||||
Works. Loads and reads the markdown successfully.
|
||||
|
||||
## Current configuration
|
||||
## Attempted solutions log
|
||||
|
||||
Static files exist in `public/raw/` and are served via `_redirects`:
|
||||
### December 24, 2025
|
||||
|
||||
```
|
||||
/raw/* /raw/:splat 200
|
||||
```
|
||||
**Attempt 1: excludedPath in netlify.toml**
|
||||
|
||||
Edge function configuration in `netlify.toml`:
|
||||
Added array of excluded paths to the edge function declaration:
|
||||
|
||||
```toml
|
||||
[[edge_functions]]
|
||||
path = "/*"
|
||||
function = "botMeta"
|
||||
excludedPath = "/raw/*"
|
||||
excludedPath = [
|
||||
"/raw/*",
|
||||
"/assets/*",
|
||||
"/api/*",
|
||||
"/.netlify/*",
|
||||
"/favicon.ico",
|
||||
"/favicon.svg",
|
||||
"/robots.txt",
|
||||
"/sitemap.xml",
|
||||
"/llms.txt",
|
||||
"/openapi.yaml"
|
||||
]
|
||||
```
|
||||
|
||||
The `botMeta` function also has a code-level check:
|
||||
Result: ChatGPT and Perplexity still blocked.
|
||||
|
||||
**Attempt 2: Hard bypass in botMeta.ts**
|
||||
|
||||
Added early return at top of handler to guarantee static markdown is never intercepted:
|
||||
|
||||
```typescript
|
||||
// Skip if it's the home page, static assets, API routes, or raw markdown files
|
||||
const url = new URL(request.url);
|
||||
if (
|
||||
pathParts.length === 0 ||
|
||||
pathParts[0].includes(".") ||
|
||||
pathParts[0] === "api" ||
|
||||
pathParts[0] === "_next" ||
|
||||
pathParts[0] === "raw" // This check exists
|
||||
url.pathname.startsWith("/raw/") ||
|
||||
url.pathname.startsWith("/assets/") ||
|
||||
url.pathname.startsWith("/api/") ||
|
||||
url.pathname.startsWith("/.netlify/") ||
|
||||
url.pathname.endsWith(".md")
|
||||
) {
|
||||
return context.next();
|
||||
}
|
||||
```
|
||||
|
||||
## Why it's not working
|
||||
Result: ChatGPT and Perplexity still blocked.
|
||||
|
||||
Despite `excludedPath = "/raw/*"` and the code check, the edge function still intercepts requests to `/raw/*.md` before static files are served.
|
||||
**Attempt 3: AI crawler whitelist**
|
||||
|
||||
According to Netlify docs, edge functions run before redirects and static file serving. The `excludedPath` should prevent the function from running, but it appears the function still executes and may be returning a response that blocks static file access.
|
||||
|
||||
## What we've tried
|
||||
|
||||
1. Added `excludedPath = "/raw/*"` in netlify.toml
|
||||
2. Added code-level check in botMeta.ts to skip `/raw/` paths
|
||||
3. Verified static files exist in `public/raw/` after build
|
||||
4. Confirmed `_redirects` rule for `/raw/*` is in place
|
||||
5. Tested with different URLPattern syntax (`/raw/*`, `/**/*.md`)
|
||||
|
||||
All attempts result in the same behavior: ChatGPT and Perplexity cannot access the files, while Claude can.
|
||||
|
||||
## Why Claude works
|
||||
|
||||
Claude's web fetcher may use different headers or handle Netlify's edge function responses differently. It successfully bypasses whatever is blocking ChatGPT and Perplexity.
|
||||
|
||||
## The question
|
||||
|
||||
How can we configure Netlify edge functions to truly exclude `/raw/*` paths so static markdown files are served directly to all AI crawlers without interception?
|
||||
|
||||
Is there a configuration issue with `excludedPath`? Should we use a different approach like header-based matching to exclude AI crawlers from the botMeta function? Or is there a processing order issue where edge functions always run before static files regardless of exclusions?
|
||||
|
||||
## Code reference
|
||||
|
||||
The CopyPageDropdown component sends these URLs to AI services:
|
||||
Added explicit bypass for known AI user agents:
|
||||
|
||||
```typescript
|
||||
const rawMarkdownUrl = `${origin}/raw/${props.slug}.md`;
|
||||
const AI_CRAWLERS = [
|
||||
"gptbot", "chatgpt", "chatgpt-user", "oai-searchbot",
|
||||
"claude-web", "claudebot", "anthropic", "perplexitybot"
|
||||
];
|
||||
|
||||
if (isAICrawler(userAgent)) {
|
||||
return context.next();
|
||||
}
|
||||
```
|
||||
|
||||
Example: `https://www.markdown.fast/raw/fork-configuration-guide.md`
|
||||
Result: ChatGPT and Perplexity still blocked.
|
||||
|
||||
The files exist. The redirects are configured. The edge function has exclusions. But AI crawlers still cannot access them.
|
||||
**Attempt 4: Netlify Function at /api/raw/:slug**
|
||||
|
||||
Created a serverless function to serve markdown files directly:
|
||||
|
||||
```javascript
|
||||
// netlify/functions/raw.js
|
||||
exports.handler = async (event) => {
|
||||
const slug = event.queryStringParameters?.slug;
|
||||
// Read from dist/raw/${slug}.md or public/raw/${slug}.md
|
||||
return {
|
||||
statusCode: 200,
|
||||
headers: { "Content-Type": "text/plain; charset=utf-8" },
|
||||
body: markdownContent
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
With redirect rule:
|
||||
|
||||
```toml
|
||||
[[redirects]]
|
||||
from = "/api/raw/*"
|
||||
to = "/.netlify/functions/raw?slug=:splat"
|
||||
status = 200
|
||||
force = true
|
||||
```
|
||||
|
||||
Result: Netlify build failures due to function bundling issues and `package-lock.json` dependency conflicts.
|
||||
|
||||
**Attempt 5: Header adjustments**
|
||||
|
||||
Removed `Link` header from global scope to prevent header merging on `/raw/*`:
|
||||
|
||||
```toml
|
||||
[[headers]]
|
||||
for = "/*"
|
||||
[headers.values]
|
||||
X-Frame-Options = "DENY"
|
||||
# Link header removed from global scope
|
||||
|
||||
[[headers]]
|
||||
for = "/index.html"
|
||||
[headers.values]
|
||||
Link = "</llms.txt>; rel=\"author\""
|
||||
```
|
||||
|
||||
Removed `X-Robots-Tag = "noindex"` from `/raw/*` headers.
|
||||
|
||||
Result: ChatGPT and Perplexity still blocked.
|
||||
|
||||
### Why these attempts failed
|
||||
|
||||
The core issue appears to be how ChatGPT and Perplexity fetch URLs. Their tools receive 400 or 403 responses even when `curl` from the command line works. This suggests:
|
||||
|
||||
1. Netlify may handle AI crawler user agents differently at the CDN level
|
||||
2. The edge function exclusions work for browsers but not for AI fetch tools
|
||||
3. There may be rate limiting or bot protection enabled by default
|
||||
|
||||
## Current workaround
|
||||
|
||||
Users can still share content with AI tools by:
|
||||
|
||||
1. **Copy page** copies markdown to clipboard, then paste into any AI
|
||||
2. **View as Markdown** opens the raw `.md` file in a browser tab for manual copying
|
||||
3. **Download as SKILL.md** downloads in Anthropic Agent Skills format
|
||||
|
||||
The direct "Open in ChatGPT/Claude/Perplexity" buttons have been disabled since the URLs don't work reliably.
|
||||
|
||||
## Working features
|
||||
|
||||
Despite AI crawler issues, these features work correctly:
|
||||
|
||||
- `/raw/*.md` files load in browsers
|
||||
- `llms.txt` discovery file is accessible
|
||||
- `openapi.yaml` API spec loads properly
|
||||
- Sitemap and RSS feeds generate correctly
|
||||
- Social preview bots (Twitter, Facebook, LinkedIn) receive OG metadata
|
||||
- Claude's web fetcher can access raw markdown
|
||||
|
||||
## Help needed
|
||||
|
||||
If you've solved this or have suggestions, we'd appreciate guidance. The goal is simple: serve static markdown files at `/raw/*.md` to all clients, including AI crawlers, without edge function interception.
|
||||
If you've solved this or have suggestions, open an issue. We've tried:
|
||||
|
||||
GitHub raw URLs work as a workaround, but we'd prefer to use Netlify-hosted files for consistency and to avoid requiring users to configure GitHub repo details when forking.
|
||||
- netlify.toml excludedPath arrays
|
||||
- Code-level path checks in edge functions
|
||||
- AI crawler user agent whitelisting
|
||||
- Netlify Functions as an alternative endpoint
|
||||
- Header configuration adjustments
|
||||
|
||||
None have worked for ChatGPT or Perplexity. GitHub raw URLs remain the most reliable option for AI consumption, but require additional repository configuration when forking.
|
||||
@@ -633,8 +633,8 @@ body {
|
||||
max-width: 1400px;
|
||||
margin-left: calc(-1 * (min(100vw - 48px, 1400px) - 680px) / 2);
|
||||
position: relative;
|
||||
/* Add left padding to align content with sidebar edge */
|
||||
padding-left: 24px;
|
||||
/* Add left padding to align content with sidebar edge
|
||||
padding-left: 24px;*/
|
||||
}
|
||||
|
||||
.post-nav {
|
||||
@@ -839,26 +839,41 @@ body {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Sidebar wrapper - docs-style with alt background and right border */
|
||||
/* Sidebar wrapper - docs-style with alt background and borders */
|
||||
.post-sidebar-wrapper {
|
||||
position: sticky;
|
||||
top: 80px;
|
||||
align-self: flex-start;
|
||||
max-height: calc(100vh - 100px);
|
||||
overflow-y: auto;
|
||||
/* Hide scrollbar while keeping scroll functionality */
|
||||
-ms-overflow-style: none; /* IE */
|
||||
scrollbar-width: none; /* Firefox */
|
||||
background-color: var(--bg-sidebar);
|
||||
border-right: 1px solid var(--border-sidebar);
|
||||
margin-left: -24px;
|
||||
padding-left: 24px;
|
||||
padding-top: 24px;
|
||||
padding-bottom: 24px;
|
||||
margin-top: -24px;
|
||||
border-radius: 8px;
|
||||
/* Extend background to fill height */
|
||||
min-height: calc(100vh - 80px);
|
||||
/* Top border using CSS variable for theme consistency */
|
||||
border-top: 1px solid var(--border-sidebar);
|
||||
/* Right border using box-shadow for consistent 1px width regardless of scrollbar */
|
||||
box-shadow: inset -1px 0 0 var(--border-sidebar);
|
||||
}
|
||||
|
||||
/* Hide scrollbar for Chrome/Safari/Edge */
|
||||
.post-sidebar-wrapper::-webkit-scrollbar {
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/* Left sidebar - flush left with internal padding */
|
||||
.post-sidebar-left {
|
||||
/* Top border using CSS variable for theme consistency */
|
||||
border-top: 1px solid var(--border-sidebar);
|
||||
padding-right: 24px;
|
||||
}
|
||||
|
||||
@@ -3638,8 +3653,8 @@ body {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
/* Move top-nav to left side on mobile */
|
||||
@media (max-width: 1024px) {
|
||||
/* Move top-nav to left side on mobile/tablet */
|
||||
.top-nav {
|
||||
right: auto;
|
||||
left: 13px;
|
||||
@@ -3920,7 +3935,7 @@ body {
|
||||
}
|
||||
|
||||
/* Tablet adjustments */
|
||||
@media (min-width: 481px) and (max-width: 768px) {
|
||||
@media (min-width: 481px) and (max-width: 1024px) {
|
||||
.mobile-menu-drawer {
|
||||
width: 320px;
|
||||
}
|
||||
@@ -3953,7 +3968,7 @@ body {
|
||||
}
|
||||
|
||||
/* Desktop - hide mobile menu components */
|
||||
@media (min-width: 769px) {
|
||||
@media (min-width: 1025px) {
|
||||
.mobile-nav-controls,
|
||||
.mobile-menu-backdrop,
|
||||
.mobile-menu-drawer {
|
||||
|
||||
Reference in New Issue
Block a user