Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
671720d
Fix typos: CRICITAL -> CRITICAL and relase -> release
Jan 25, 2026
96f4745
Fix broken testing build link: update to https://download.xcsoar.org/…
Jan 25, 2026
261cc37
Upgrade to Ruby 4.0.1 and fix deprecated File.exists?
Jan 25, 2026
c7a6970
Update to Ruby 3.4.8 instead of 4.0.1 for dependency compatibility
Jan 25, 2026
95c6685
Update nanoc to 4.14.6 and actions/checkout to latest v6
Jan 25, 2026
db38442
Remove jQuery dependency and replace lightbox with vanilla JS
Jan 25, 2026
72346b8
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 25, 2026
29bbb65
Add security headers (Phase 1: Security & Performance)
Jan 25, 2026
ae51dcd
Address PR review comments: improve lightbox accessibility and robust…
Jan 25, 2026
de3cd66
Upgrade Bootstrap from 2.1.1 to 5.3.8
Jan 25, 2026
7c62992
Add Cursor rule: host all resources locally
Jan 25, 2026
94ee4d4
Add Cursor rule: prefer HTML5 over JavaScript
Jan 25, 2026
c113fdd
Implement Cursor rules: host resources locally and prefer HTML5
Jan 25, 2026
881e580
Fix HTML5 syntax: remove self-closing slashes and add security attrib…
Jan 25, 2026
58caa3f
Fix layout: ensure main content has white background
Jan 25, 2026
d6a55f7
Fix left margin: ensure .shadowed container is properly centered
Jan 25, 2026
dfe836e
Increase left margin for .shadowed container
Jan 25, 2026
04c01e2
Add left/right padding inside white container
Jan 25, 2026
24b9988
Fix logo alignment and overflow issues
Jan 25, 2026
b5a9368
Restore internal margins inside white container
Jan 25, 2026
e8f13e0
Fix logo cutoff: restore container padding and improve logo constraints
Jan 25, 2026
990c888
Fix logo SVG: add viewBox attribute to prevent cutoff
Jan 25, 2026
cec7ebd
Add viewBox to green and red logo SVGs for consistency
Jan 25, 2026
232b170
Fix logo SVG viewport: increase width to show full XCSoar text
Jan 25, 2026
2464d5c
Restructure navigation and homepage: simplify and reorganize
Jan 25, 2026
4c36af9
Fix homepage section order: About -> Screenshots -> News
Jan 25, 2026
82adb52
Reorder homepage sections: Screenshots before About
Jan 25, 2026
179b905
Replace Discover with Docs in navigation
Jan 25, 2026
ea2c521
Remove download sidebar from homepage
Jan 25, 2026
62c7b45
Make homepage screenshots horizontally scrollable
Jan 25, 2026
93d4747
Remove discover navigation from all layouts
Jan 25, 2026
f23e5ae
Add clickable carousel for homepage screenshots
Jan 25, 2026
b7232df
Remove screenshot title from homepage
Jan 25, 2026
5bf12ee
Fix collision between screenshot description and carousel indicators
Jan 25, 2026
0487350
Make screenshot images link to screenshot overview page
Jan 25, 2026
53c3da5
Remove redundant 'More screenshots...' link
Jan 25, 2026
3ba93a5
Add Home link to navigation menu
Jan 25, 2026
24092c9
Add hover styling for Home navigation link
Jan 25, 2026
de9157f
Update homepage tagline to 'The open-source tactical glide computer'
Jan 25, 2026
ae499a3
Rewrite About section to focus on what XCSoar is, not its history
Jan 25, 2026
e5aee9f
Format About section with bullet points for better readability
Jan 25, 2026
a0e877c
Fix missing bullets in About section
Jan 25, 2026
24ee1b9
Remove redundant 'About XCSoar' heading
Jan 25, 2026
12a84c0
Unify typography system for consistent fonts and sizes
Jan 25, 2026
ef09af9
Fix remaining percentage font-size to use em units
Jan 25, 2026
27e7ef2
Add photo stack effect to screenshot carousel
Jan 25, 2026
db54be8
Improve photo stack: show next two slides offset, hide descriptions f…
Jan 25, 2026
499cac0
Fix: Initialize carousel state on page load
Jan 25, 2026
4eace95
Add more screenshots to homepage carousel
Jan 25, 2026
0ea95a9
Improve transparency and visual effects for following cards
Jan 25, 2026
c95ee31
Reduce screenshot size in carousel
Jan 25, 2026
c8e6997
Layout: Place About section beside screenshots
Jan 25, 2026
b37e49c
Swap layout: About section left, screenshots right
Jan 25, 2026
085f260
Fix layout structure: About left, screenshots right
Jan 25, 2026
caf27a6
Remove duplicate About section content
Jan 25, 2026
6b38bc6
Fix carousel dots overlapping description
Jan 25, 2026
d30e081
Add News to top navigation bar
Jan 25, 2026
cba89a5
Remove news section from homepage
Jan 25, 2026
f35b2b0
Fix duplicate closing tags in homepage
Jan 25, 2026
a330cf1
Remove 'Learn more' link to discover section from homepage
Jan 25, 2026
bf6db2c
Center the page content
Jan 25, 2026
02c6e3e
Optimize page to fit on one screen without scrolling
Jan 25, 2026
1c39157
Fix horizontal scrolling/panning issue
Jan 25, 2026
7589cfa
Fix carousel dots overlapping captions again
Jan 25, 2026
2638b27
Fix carousel dots overlapping captions - better spacing
Jan 25, 2026
d753cd2
Make copyright year update automatically
Jan 25, 2026
2ff8efb
Update license link to GitHub COPYING file
Jan 25, 2026
1cc177c
Standardize footer font size across all pages
Jan 25, 2026
7b52f3b
Standardize CSS, headings, and fonts across all pages
Jan 25, 2026
6ed6d6a
Standardize footer styling across all pages
Jan 25, 2026
5e9e197
Force footer consistency with !important rules
Jan 25, 2026
3005d13
Fix imprint link to use relative path
Jan 25, 2026
6fd73c9
Convert relative links to absolute root-relative paths
Jan 25, 2026
741b311
Add cursor rule for using relative links
Jan 25, 2026
a52e585
Fix overlapping screenshots on gallery page
Jan 25, 2026
107c463
Fix aspect ratio for gallery screenshots
Jan 25, 2026
f4b2382
Fix carousel broken by screenshot aspect ratio changes
Jan 25, 2026
20ac483
Fix carousel centering issue
Jan 25, 2026
1e2e6f6
Fix carousel horizontal centering
Jan 25, 2026
bb91423
Modernize CSS: Convert pixel values to rem units
Jan 25, 2026
7d79953
Fix remaining pixel values in CSS
Jan 25, 2026
0f872c4
Fix remaining media query and margin pixel value
Jan 25, 2026
4d2ed63
Define font-family once in CSS
Jan 25, 2026
8e219ad
Remove Paprika font family
Jan 25, 2026
0078f2a
Standardize HTML elements across all pages
Jan 25, 2026
0f57018
Condense navigation styles into single consolidated definition
Jan 25, 2026
85c348d
Further condense navigation styles
Jan 25, 2026
5e153eb
Remove all subpage-specific element definitions
Jan 25, 2026
9bb27c3
Maximize CSS definition reuse
Jan 25, 2026
50a6dd2
Remove unnecessary contact CSS definitions
Jan 25, 2026
4c95a00
Consolidate copyright CSS definitions
Jan 25, 2026
c34272d
Add Cursor rule for minimal code and maximum reuse
Jan 25, 2026
c652157
Reduce color definitions and remove all margins
Jan 25, 2026
3a8ab83
Remove social links and copyright CSS, consolidate into footer
Jan 25, 2026
270c6c8
Remove all browser default CSS properties
Jan 25, 2026
31c0dec
Add Cursor rule for responsive design requirements
Jan 25, 2026
64a9b58
Replace custom classes/IDs with standard HTML5 semantic elements
Jan 25, 2026
ff88058
Replace custom CSS with Bootstrap standard definitions
Jan 25, 2026
4682a40
Add responsive navbar with hamburger menu for mobile devices
Jan 25, 2026
891e1cb
Center the main page container
Jan 25, 2026
70c99f1
Reorder homepage sections: carousel first on mobile portrait
Jan 25, 2026
483c308
Add top margin to main container
Jan 25, 2026
4263cb8
Add top margin to footer for spacing from main container
Jan 25, 2026
466858c
Ensure carousel fits within available space
Jan 25, 2026
ca34210
Fix carousel overlap with tagline header
Jan 25, 2026
a45e67a
Add top padding to main content to fix tagline overlap
Jan 25, 2026
4684d41
Fix screenshots being cut off in carousel
Jan 25, 2026
a4bf3b9
Make carousel images fill container width better
Jan 25, 2026
e19b32b
Fix carousel images: use width auto with max-width constraint
Jan 25, 2026
ecc9cd0
Increase carousel image size to better fill canvas
Jan 25, 2026
deb2ee1
Make carousel canvas width match image size dynamically
Jan 25, 2026
4712800
Add dynamic width calculation to carousel JavaScript
Jan 25, 2026
3339ab9
Improve carousel width calculation to reduce margin
Jan 25, 2026
2688550
Calculate carousel width from natural image dimensions
Jan 25, 2026
059336a
Remove max-width from carousel .screenshot class
Jan 25, 2026
1ae23d4
Use exact image width without buffer
Jan 25, 2026
1291dc0
Apply 'less is more' principle to website text
Jan 25, 2026
251732b
Remove link to xcsoar-data-repository
Jan 25, 2026
e4d704f
Remove remaining develop/new_ticket.md file
Jan 25, 2026
ed260c3
Create docs index page with Manual and Developer Docs sections
Jan 25, 2026
472c0b7
Fix FLARM protocol documentation link
Jan 25, 2026
9d762b0
Add Loefgren vario and Vaulter to Manufacturer Protocols
Jan 25, 2026
3af263d
Update LXNAV protocol link to official download page
Jan 25, 2026
2c1f030
Separate LX navigation and LXNAV as different manufacturers
Jan 25, 2026
858d0f7
Add features from NEWS.txt to about page
Jan 26, 2026
7005ef0
Update contest scoring: remove OLC, add WeGlide and SkyLines links
Jan 26, 2026
391e39b
Add automatic thermals from TIM to weather integration
Jan 26, 2026
900b05c
Add worldwide database mention for airspace/waypoints
Jan 26, 2026
1035bb5
Add traffic information to FLARM integration feature
Jan 26, 2026
95223e2
Add link to latest development build on download page
Jan 26, 2026
cc109da
Fix ol.js import path on maps download page
Jan 26, 2026
db25cfe
Fix CSP to allow eval() and blob workers for maps page
Jan 26, 2026
198c66b
Update website: various improvements and fixes
Jan 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions .cursor/rules/host-resources-locally.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
---
description: Host all resources locally - avoid CDN dependencies
alwaysApply: true
---

# Host All Resources Locally

## Principle

**All external resources (CSS, JavaScript, fonts, images) must be hosted locally** within the repository. Do not use CDN links or external dependencies.

## Rationale

- **Privacy & Security**: No external requests, better user privacy
- **Reliability**: No dependency on external CDN availability
- **Offline Support**: Site works without internet connection
- **Version Control**: All dependencies tracked in git
- **Performance**: No DNS lookups or external network latency
- **Compliance**: Better for strict security policies

## Implementation Guidelines

### CSS Frameworks
- Download and commit CSS files to `/lib/` directory
- Example: Bootstrap should be in `/lib/bootstrap/` not from CDN
- Use versioned directories if needed: `/lib/bootstrap-5.3.8/`

### JavaScript Libraries
- Download and commit JS files to `/lib/` directory
- Example: `/lib/lightbox.js` (already implemented)
- No external script tags from CDN

### Fonts
- Host font files in `/lib/fonts/` or `/css/fonts/`
- Use `@font-face` with local paths
- No Google Fonts or other external font services

### Images
- All images in `/img/` directory
- No external image hosting

## Current Status

⚠️ **Bootstrap is currently loaded from CDN** (`cdn.jsdelivr.net`)
- Should be downloaded and hosted in `/lib/bootstrap/`
- Update `_includes/header.html` to use local path

## Examples

### ❌ BAD - Using CDN
```html
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/some-library/dist/library.min.js"></script>
```

### ✅ GOOD - Hosting Locally
```html
<link href="/lib/bootstrap/bootstrap.min.css" rel="stylesheet">
<script src="/lib/some-library/library.min.js"></script>
```

## When Adding New Dependencies

1. Download the resource file(s)
2. Place in appropriate `/lib/` subdirectory
3. Reference with local path (`/lib/...`)
4. Commit to repository
5. Update `.gitignore` if needed (but generally commit all lib files)

## Migration Checklist

When migrating from CDN to local:
- [ ] Download resource files
- [ ] Place in `/lib/` directory structure
- [ ] Update HTML references to local paths
- [ ] Test build and verify resources load
- [ ] Update CSP headers if needed (remove CDN domains)
- [ ] Commit changes
209 changes: 209 additions & 0 deletions .cursor/rules/minimal-code-max-reuse.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
---
description: Minimal code philosophy - less is more, maximize reuse
alwaysApply: true
---

# Minimal Code, Maximum Reuse

## Principle

**Less code is more.** Write minimal, reusable CSS with maximum definition reuse. Consolidate duplicate properties, group selectors, and eliminate redundancy.

## Rationale

- **Maintainability**: Less code means fewer places to update
- **Performance**: Smaller CSS files load faster
- **Consistency**: Shared definitions ensure uniform styling
- **Readability**: Consolidated code is easier to understand
- **DRY Principle**: Don't Repeat Yourself

## Implementation Guidelines

### CSS Consolidation

1. **Group Selectors**: Combine selectors that share properties
```css
/* ❌ BAD - Duplicate properties */
h1 { font-size: 2rem; font-weight: 400; }
h2 { font-size: 1.75rem; font-weight: 400; }

/* ✅ GOOD - Shared properties grouped */
h1, h2 { font-weight: 400; }
h1 { font-size: 2rem; }
h2 { font-size: 1.75rem; }
```

2. **Reuse Base Definitions**: Use base element styles, avoid subpage-specific overrides
```css
/* ❌ BAD - Redundant subpage definitions */
#summary h1 { font-size: 2rem; }
#content h1 { font-size: 2rem; }

/* ✅ GOOD - Single base definition */
h1 { font-size: 2rem; }
```

3. **Consolidate Repeated Values**: Group selectors with identical properties
```css
/* ❌ BAD - Repeated properties */
footer { font-size: 0.875rem !important; color: #fff !important; }
.copyright { font-size: 0.875rem !important; color: #fff !important; }

/* ✅ GOOD - Consolidated */
footer, .copyright { font-size: 0.875rem !important; color: #fff !important; }
```

4. **Remove Unnecessary Specificity**: Don't create separate definitions for minor differences
```css
/* ❌ BAD - Unnecessary specificity */
ul.contact { list-style: none; margin: 0.625rem; }
ul.quicklinks { list-style: none; margin: 0.625rem; }

/* ✅ GOOD - Use base ul styles or group if truly needed */
ul.quicklinks { list-style: none; margin: 0.625rem; }
/* ul.contact uses base ul styles */
```

5. **Single Font Family Definition**: Define font-family once, inherit everywhere
```css
/* ❌ BAD - Repeated font-family */
html { font-family: "Ubuntu", sans-serif; }
h1 { font-family: "Ubuntu", sans-serif; }
footer { font-family: "Ubuntu", sans-serif !important; }

/* ✅ GOOD - Define once */
html { font-family: "Ubuntu", sans-serif; }
/* All elements inherit */
```

### Code Minimization

1. **Remove Redundant Comments**: Don't comment obvious things
```css
/* ❌ BAD - Obvious comment */
h1 { font-size: 2rem; /* 32px */ }

/* ✅ GOOD - No redundant comment */
h1 { font-size: 2rem; }
```

2. **Eliminate Duplicate Rules**: Consolidate identical definitions
```css
/* ❌ BAD - Duplicate rules */
.copyright a { text-decoration: none !important; }
/* ... later in file ... */
.copyright a { text-decoration: none !important; }

/* ✅ GOOD - Single definition */
.copyright a { text-decoration: none !important; }
```

3. **Use Shorthand Properties**: Combine related properties
```css
/* ❌ BAD - Verbose */
margin-top: 1.25rem;
margin-bottom: 1.25rem;

/* ✅ GOOD - Shorthand */
margin: 1.25rem 0;
```

4. **Remove Unused Styles**: Delete CSS that isn't used
```css
/* ❌ BAD - Unused style */
.old-class { /* not used anywhere */ }

/* ✅ GOOD - Removed */
```

### Formatting Reuse

1. **Consolidate Similar Components**: Group related styles
```css
/* ❌ BAD - Separate definitions */
.carousel-container { width: 100%; position: relative; }
.screenshot-carousel { width: 100%; position: relative; }

/* ✅ GOOD - Shared properties */
.carousel-container,
.screenshot-carousel { width: 100%; position: relative; }
```

2. **Reuse Common Patterns**: Extract repeated patterns
```css
/* ❌ BAD - Repeated pattern */
.btn { text-decoration: none; }
ul.quicklinks li a { text-decoration: none; }
.copyright a { text-decoration: none; }

/* ✅ GOOD - Grouped */
.btn,
ul.quicklinks li a,
.copyright a { text-decoration: none; }
```

## When to Create Separate Definitions

Only create separate definitions when:
- **Significant visual difference** that can't be achieved with base styles
- **Layout-specific needs** (e.g., carousel positioning)
- **Component-specific behavior** (e.g., hover states for navigation)

## Examples

### ✅ GOOD - Maximum Reuse
```css
h1, h2 {
font-weight: 400;
line-height: 1.3;
margin: 1.25rem 0 0.9375rem 0;
}

h1 { font-size: 2rem; }
h2 { font-size: 1.75rem; }

footer,
footer a,
.copyright,
.copyright a {
font-size: 0.875rem !important;
font-weight: 300 !important;
color: #fff !important;
}
```

### ❌ BAD - Excessive Duplication
```css
h1 {
font-size: 2rem;
font-weight: 400;
line-height: 1.3;
margin: 1.25rem 0 0.9375rem 0;
}

h2 {
font-size: 1.75rem;
font-weight: 400;
line-height: 1.3;
margin: 1.25rem 0 0.9375rem 0;
}

footer { font-size: 0.875rem !important; color: #fff !important; }
.copyright { font-size: 0.875rem !important; color: #fff !important; }
```

## Checklist

When writing or modifying CSS:
- [ ] Are there duplicate properties that can be grouped?
- [ ] Can subpage-specific definitions be removed in favor of base styles?
- [ ] Are there repeated values that can be consolidated?
- [ ] Can similar components share common properties?
- [ ] Is the font-family defined only once?
- [ ] Are there redundant comments that can be removed?
- [ ] Can shorthand properties be used?
- [ ] Are there unused styles that can be deleted?

## Goal

**Aim for the smallest possible CSS file that maintains all functionality.** Every line should serve a purpose, and every property should be reused wherever possible.
Loading