diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 547523e..572484f 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -70,20 +70,21 @@ jobs: - name: Build the site in the jekyll/builder container run: | docker run \ - -v ${{ github.workspace }}:/srv/jekyll -v ${{ github.workspace }}/_site:/srv/jekyll/_site \ - jekyll/builder:latest /bin/bash -c "chmod -R 777 /srv/jekyll && jekyll build --future" + -v ${{ github.workspace }}:/srv/jekyll -v ${{ github.workspace }}/output:/srv/jekyll/output \ + jekyll/builder:latest /bin/bash -c "chmod -R 777 /srv/jekyll && cd src/jekyll && jekyll build --future" - name: Run accessibility audit run: | # Build a11y Docker image - docker build -t bitprepared-a11y:latest -f docker/accessibility/Dockerfile . + docker build -t bitprepared-a11y:latest -f src/docker/accessibility/Dockerfile . # Start Jekyll in background docker run -d \ --name bitprepared-jekyll \ -v ${{ github.workspace }}:/srv/jekyll \ + -v ${{ github.workspace }}/output:/srv/jekyll/output \ -p 4000:4000 \ - jekyll/jekyll:latest \ - jekyll serve --config _config.yml,_config_dev.yml --host 0.0.0.0 + jekyll/jekyll:4 \ + bash -c "cd src/jekyll && jekyll serve --config _config.yml,_config_dev.yml --host 0.0.0.0" # Wait for Jekyll to be ready for i in {1..30}; do if curl -f -s -o /dev/null http://localhost:4000; then @@ -93,9 +94,9 @@ jobs: sleep 1 done # Run accessibility audit - mkdir -p docs/accessibility/reports + mkdir -p output/accessibility/reports docker run --rm --init \ - -v ${{ github.workspace }}/docs/accessibility/reports:/app/reports \ + -v ${{ github.workspace }}/output/accessibility/reports:/app/reports \ --add-host=host.docker.internal:host-gateway \ -e SITE_URL=http://host.docker.internal:4000 \ bitprepared-a11y:latest \ @@ -106,17 +107,17 @@ jobs: - name: Generate accessibility summary run: | - ./scripts/analyze-a11y-reports.sh docs/accessibility/reports > docs/accessibility/reports/summary.md + ./scripts/analyze-a11y-reports.sh output/accessibility/reports > output/accessibility/reports/summary.md - uses: montudor/action-zip@v1 with: - args: zip -qq -r release.zip _site + args: zip -qq -r release.zip output/_site - name: Upload accessibility summary as artifact uses: actions/upload-artifact@v4 with: name: accessibility-report - path: docs/accessibility/reports/summary.md + path: output/accessibility/reports/summary.md - name: Create GitHub Release uses: ncipollo/release-action@v1 diff --git a/.github/workflows/validate-pr.yml b/.github/workflows/validate-pr.yml index e6931d5..bc05c8c 100644 --- a/.github/workflows/validate-pr.yml +++ b/.github/workflows/validate-pr.yml @@ -70,3 +70,46 @@ jobs: echo "❌ CHANGELOG validation failed" exit 1 fi + + check-html-in-markdown: + runs-on: ubuntu-latest + env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check for HTML in markdown files + id: check-html + run: | + chmod +x ./scripts/check-html-in-markdown.sh + ./scripts/check-html-in-markdown.sh + + - name: Comment on PR if HTML found + if: failure() && steps.check-html.outcome == 'failure' + uses: actions/github-script@v6 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: '❌ **HTML Found in Markdown Files**\n\n' + + 'Jekyll usa Liquid templates, non HTML inline nei file markdown.\n\n' + + '**Problemi trovati:**\n' + + '- Rimuovi tutti i tag HTML dai file markdown (`.md`)\n' + + '- Usa componenti Liquid o layout invece\n' + + '- Per script con variabili Liquid, mantienili inline in `.md`\n\n' + + 'Per details, vedi il workflow log.' + }) + + - name: Check result + if: always() + run: | + if [[ "${{ steps.check-html.outcome }}" == "success" ]]; then + echo "✅ No HTML found in markdown files" + else + echo "❌ HTML found in markdown files" + exit 1 + fi diff --git a/.gitignore b/.gitignore index 2b927a0..fb18b08 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,19 @@ node_modules/ assets/css/tailwind.css docs/accessibility/reports/ .worktrees/ + +# Generated output +output/_site/ +output/.jekyll-cache/ +output/accessibility/ +output/screenshots/ + +# Docker can create these in src/ during builds (ignore) +src/.jekyll-cache/ +src/node_modules/ +src/output/ +src/vendor/ + +# Old accessibility reports location (now in output/accessibility/) +docs/accessibility/reports/ +src/jekyll/.jekyll-cache/ diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 1d6fb2d..6ac8eb4 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -6,6 +6,94 @@ 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/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + + +### Added +- Project structure reorganization + - All source files moved to src/ subdirectories (src/jekyll/, src/tailwind/, src/docker/) + - New output/ directory for generated content (output/_site/, output/screenshots/) + - Clear separation between source code and build artifacts + - Better project organization and cleaner repository root + - docs/ moved from src/jekyll/ to project root (project-wide, not Jekyll-specific) + +### Removed +- Obsolete CSS files in src/jekyll/assets/css/ + - Removed main.css (6.4KB) - content already included in styles.css + - Removed scout-tech.css (18KB) - old design system no longer used + - Removed critical.css (468 bytes) - not used in production + - Removed legacy/ directory (28KB) - old CSS files from pre-refactor era + - Removed font/ directory (614KB) - obsolete Font Awesome 5 fonts (.eot, .svg, .ttf, .woff, .otf) + - Site now uses Font Awesome 6.4.0 with modern woff2 fonts in src/jekyll/assets/fonts/webfonts/ + - Total cleanup: ~710KB saved (81% reduction in CSS directory size) + - Only necessary CSS files remain: styles.css, fontawesome-all.css, tailwind-input.css +- Obsolete JavaScript files in src/jekyll/assets/js/ + - Removed jquery.min.js (95KB) - jQuery not used in modern site + - Removed skel.min.js (20KB) - old skel framework no longer used + - Removed skel-panels.min.js (14KB) - skel plugin no longer used + - Removed init.js (1.1KB) - skel configuration no longer used + - Removed html5shiv.js (2.4KB) - IE8 polyfill obsolete + - Total cleanup: ~132KB saved (90% reduction in JS directory size) + - Only necessary JS files remain: scroll-animations.js, edit-button-dev.js + - Site now uses modern vanilla JavaScript instead of old frameworks + +### Changed +- Tailwind CSS configuration paths + - Fixed tailwind.config.js content paths for new src/ structure + - Changed from relative paths (_layouts/**/*.html) to correct paths (../jekyll/_layouts/**/*.html) + - make build-css now works correctly without "No utility classes were detected" warning + +### Changed +- Jekyll configuration: Updated paths in _config.yml + - destination: /workspace/output/_site (absolute path in container) + - cache: /workspace/output/.jekyll-cache (absolute path in container) + - robots.txt path: src/jekyll/robots.txt +- Makefile Docker commands: All updated for new src/ structure + - Mount points: src/ → /workspace, output/ → /workspace/output + - build, serve, build-css, install commands all use new structure + - serve command: Added --host 0.0.0.0 for Docker accessibility + - install commands: Added --no-cache to prevent permission errors +- Visual regression scripts: Updated screenshot paths + - capture.js, compare.js: output/screenshots/ instead of screenshots/ + - All scripts now point to correct output directory +- .gitignore: Added new patterns + - output/_site/, output/.jekyll-cache/ (generated content) + - src/.jekyll-cache/, src/node_modules/, src/output/, src/vendor/ (Docker artifacts) +- clean command: Enhanced to remove output/_site, output/.jekyll-cache, output/screenshots +- Docker volumes: Improved permission handling + - Removed cache volume from install commands (prevents permission issues) + - VENDOR_VOLUME for gems, NODE_MODULES_VOLUME for npm packages + +### Fixed +- Docker permission errors during bundle install + - Removed CACHE_VOLUME mount from install commands + - Added --no-cache flag to prevent cache directory access issues +- Jekyll serve not accessible from host + - Added --host 0.0.0.0 to bind to all interfaces in container +- Path resolution issues with relative paths in Jekyll config + - Changed to absolute paths (/workspace/output/...) for reliable resolution +- Jekyll creating src/output and src/jekyll/.jekyll-cache with root ownership + - Removed CACHE_VOLUME mount from serve, serve-bg, and build commands (was conflicting with bind mounts) + - Removed NODE_MODULES_VOLUME mount from serve-bg command (Jekyll doesn't need npm packages) + - Pre-create directories with correct user ownership (755 permissions) before Jekyll runs + - Added automatic cleanup after make serve, make build, and make stop-serve + - Added src/jekyll/.jekyll-cache/ to .gitignore + - Removed .jekyll-cache/ from Jekyll exclude list (was conflicting with cache path) + - Fixed project_path in _config.yml and _config_dev.yml for new src/ structure + - project_path now points to /workspace/src/jekyll (was /workspace) + - Edit button now opens files with correct paths in MarkText + - Added explicit --destination flag to Jekyll commands for reliable path resolution +- make generate-blog-post errors + - Fixed undefined GEM_VOLUME variable (changed to VENDOR_VOLUME) + - Added missing working directory (-w /srv/jekyll) to Docker command + - Fixed mount points: now mounts src/jekyll/ and scripts/ separately + - Added --user flag to prevent root-owned files + - Fixed blog post generation using event date instead of current date + - Blog posts now generated with today's date (not future event date) + - Added numbered event selection for easier use + - Fixed MarkText integration: script now communicates filename to Makefile + - MarkText now opens files with correct absolute paths from host perspective + ## [1.2.0] - 2026-05-03 @@ -273,7 +361,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Aggiornamento software list [1.2.0]: https://github.com/bitprepared/bitprepared.it/compare/v1.1.0...v1.2.0 -[Unreleased]: https://github.com/bitprepared/bitprepared.it/compare/v1.1.0...HEAD +[Unreleased]: https://github.com/bitprepared/bitprepared.it/compare/v1.2.0...HEAD [1.1.0]: https://github.com/bitprepared/bitprepared.it/compare/v1.0.0...v1.1.0 [1.0.0]: https://github.com/bitprepared/bitprepared.it/compare/v20260426T125004...v1.0.0 [20260426T125004]: https://github.com/bitprepared/bitprepared.it/compare/v0.9.0...v20260426T125004 diff --git a/CLAUDE.md b/CLAUDE.md index 48e69c5..0f23652 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,7 +11,7 @@ **Domande standard**: - "Hai eseguito make validate-graphics?" - "Vuoi aggiornare la baseline con make visual-baseline?" -- "Vuoi revieware il report in screenshots/report/index.html?" +- "Vuoi revieware il report in output/screenshots/report/index.html?" **Quando NON ricordare**: - Modifica contenuto testuale solo @@ -21,15 +21,15 @@ ## Pattern Progetto ### Layout Eventi -- Layout: `_layouts/evento.html` (NON `_layouts/epppi.html`) +- Layout: `src/jekyll/_layouts/evento.html` (NON `src/jekyll/_layouts/epppi.html`) - Classi CSS: `.evento-*` (NON `.epppi-*`) -- CSS: `assets/css/evento-custom.css` +- CSS: `src/jekyll/assets/css/evento-custom.css` ### Struttura File - Pagine: `_pages/*.md` o `*.html` -- Blog: `_posts/YYYY-MM-DD-titolo.md` -- Template: `_layouts/*.html` (default, page, post, evento) -- Assets: `assets/css/*.css`, `assets/js/*` +- Blog: `src/jekyll/_posts/YYYY-MM-DD-titolo.md` +- Template: `src/jekyll/_layouts/*.html` (default, page, post, evento) +- Assets: `src/jekyll/assets/css/*.css`, `src/jekyll/assets/js/*` ### Frontmatter Jekyll ```yaml @@ -76,7 +76,7 @@ Quando utente aggiunge/modifica features: ```bash # Ricorda di dire: 1. Esegui make validate-graphics (richiede 3 terminali: serve, serve-static, validate) -2. Review screenshots/report/index.html se fallisce +2. Review output/screenshots/report/index.html se fallisce 3. Fix bug grafici OR aggiorna baseline con make visual-baseline ``` diff --git a/Makefile b/Makefile index 7321d67..4f72957 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,14 @@ JEKYLL_VERSION ?= 4 PORT ?= 4000 STATIC_PORT ?= 8000 -PROJECT_PATH ?= /workspace/bitprepared.it DOCKER_IMAGE = jekyll/jekyll:$(JEKYLL_VERSION) -GEM_VOLUME = bitprepared-gems +NODE_MODULES_VOLUME = bitprepared-node-modules +VENDOR_VOLUME = bitprepared-vendor +CACHE_VOLUME = bitprepared-jekyll-cache POLLING ?= 0 A11Y_PAGE ?= full -.PHONY: serve serve-bg serve-static serve-static-bg build build-css clean install install-gems help open validate-graphics compare-graphics visual-baseline visual-clean docker-build-visual docker-build-a11y workflow generate-blog-post check-links accessibility-audit accessibility-analyze accessibility-clean accessibility-purge stop-servers stop-serve stop-static version-validate version-bump version-show release +.PHONY: serve serve-bg serve-static serve-static-bg build build-css clean install install-gems help open validate-graphics compare-graphics visual-baseline visual-clean docker-build-visual docker-build-a11y workflow generate-blog-post check-links check-html accessibility-audit accessibility-analyze accessibility-clean accessibility-purge stop-servers stop-serve stop-static version-validate version-bump version-show release help: @echo "Uso: make [target]" @@ -21,7 +22,7 @@ help: @echo " open - Apri sito locale nel browser (http://localhost:4000/)" @echo " build - Genera sito statico" @echo " build-css - Genera Tailwind CSS localmente (Docker)" - @echo " clean - Rimuove _site/" + @echo " clean - Rimuove output/_site/" @echo " install - Installa dipendenze bundle (Docker, locale)" @echo " install-gems - Installa gemme in volume persistente (una tantum)" @echo " validate-graphics- Valida grafica serve vs serve-static (Docker)" @@ -32,6 +33,7 @@ help: @echo " workflow - Mostra guida workflow sviluppo" @echo " generate-blog-post- Genera blog post da file evento" @echo " check-links - Verifica link broken nel sito (htmltest)" + @echo " check-html - Verifica HTML nei file markdown (Jekyll)" @echo " accessibility-audit- Audit accessibilità + auto-analyze (default: full 8 pagine, usa A11Y_PAGE=index per solo homepage)" @echo " accessibility-analyze - Analizza report, genera summary.md e mostra score di tutte le pagine" @echo " accessibility-clean - Rimuovi report accessibilità" @@ -48,33 +50,52 @@ help: @echo " VIEWPORTS='desktop,mobile' make validate-graphics - Test solo viewport specifici" serve: + @mkdir -p output/_site output/.jekyll-cache + @chmod 755 output/_site output/.jekyll-cache output + @mkdir -p src/output src/jekyll/.jekyll-cache + @chmod 755 src/output src/jekyll/.jekyll-cache docker run --rm -it \ - --mount type=bind,source=${PWD},target=/srv/jekyll \ - --volume="$(GEM_VOLUME):/usr/local/bundle" \ + --user $(shell id -u):$(shell id -g) \ + --mount type=bind,source=${PWD}/src,target=/workspace \ + --mount type=bind,source=${PWD}/output,target=/workspace/output \ + --volume="$(VENDOR_VOLUME):/usr/local/bundle" \ -e BUNDLE_PATH=/usr/local/bundle \ + -e GEM_HOME=/usr/local/bundle \ + -w /workspace/jekyll \ + -e JEKYLL_PATH=/workspace/jekyll \ -p $(PORT):4000 \ $(DOCKER_IMAGE) \ - jekyll serve --config _config.yml,_config_dev.yml $(if $(filter 1,$(POLLING)),--force_polling,) + bundle exec jekyll serve --host 0.0.0.0 --port 4000 --config _config.yml,_config_dev.yml --destination /workspace/output/_site $(if $(filter 1,$(POLLING)),--force_polling,) + @rm -rf src/output src/jekyll/.jekyll-cache serve-static: build @echo "Server statico avviato su http://localhost:$(STATIC_PORT)/" - @cd _site && python3 -m http.server $(STATIC_PORT) + @cd output/_site && python3 -m http.server $(STATIC_PORT) .PHONY: serve-bg serve-static-bg stop-servers stop-serve stop-static # Avvia Jekyll serve in background (scrive PID) serve-bg: @echo "🚀 Avvio Jekyll in background..." + @mkdir -p output/_site output/.jekyll-cache + @chmod 755 output/_site output/.jekyll-cache output + @mkdir -p src/output src/jekyll/.jekyll-cache + @chmod 755 src/output src/jekyll/.jekyll-cache @docker stop bitprepared-jekyll-$(PORT) 2>/dev/null || true @docker rm bitprepared-jekyll-$(PORT) 2>/dev/null || true @docker run -d \ --name bitprepared-jekyll-$(PORT) \ - --mount type=bind,source=${PWD},target=/srv/jekyll \ - --volume="$(GEM_VOLUME):/usr/local/bundle" \ + --user $(shell id -u):$(shell id -g) \ + --mount type=bind,source=${PWD}/src,target=/workspace \ + --mount type=bind,source=${PWD}/output,target=/workspace/output \ + --volume="$(VENDOR_VOLUME):/usr/local/bundle" \ -e BUNDLE_PATH=/usr/local/bundle \ + -e GEM_HOME=/usr/local/bundle \ + -w /workspace/jekyll \ + -e JEKYLL_PATH=/workspace/jekyll \ -p $(PORT):4000 \ $(DOCKER_IMAGE) \ - jekyll serve --config _config.yml,_config_dev.yml --host 0.0.0.0 > /dev/null + bundle exec jekyll serve --config _config.yml,_config_dev.yml --destination /workspace/output/_site --host 0.0.0.0 > /dev/null @docker ps -q -f name=bitprepared-jekyll-$(PORT) > .jekyll_serve.pid @echo "⏳ Attendo avvio server..." @for i in $$(seq 1 30); do \ @@ -89,17 +110,34 @@ serve-bg: # Avvia server statico in background (scrive PID) serve-static-bg: build @echo "🚀 Avvio server statico in background..." - @cd _site && python3 -m http.server $(STATIC_PORT) > /tmp/static_server.log 2>&1 & \ - echo $$! > ../.static_serve.pid - @echo "⏳ Attendo avvio server..." - @for i in $$(seq 1 10); do \ + @echo "⏳ Fermo eventuale server statico esistente..." + @if [ -f .static_serve.pid ]; then \ + pid=$$(cat .static_serve.pid); \ + if kill -0 $$pid 2>/dev/null; then \ + echo "🛑 Fermo vecchio server statico (PID: $$pid)"; \ + kill $$pid 2>/dev/null || true; \ + sleep 1; \ + fi; \ + rm -f .static_serve.pid; \ + fi + @echo "⏳ Avvio nuovo server..." + @(python3 -m http.server $(STATIC_PORT) --directory output/_site > /tmp/static_server.log 2>&1 & echo $$! > .static_serve.pid); \ + echo "📝 PID salvato: $$(cat .static_serve.pid 2>/dev/null || echo 'N/A')"; \ + echo "📝 Processo esiste: $$(ps -p $$(cat .static_serve.pid 2>/dev/null) >/dev/null 2>&1 && echo 'SI' || echo 'NO')"; \ + echo "📝 Directory servita: output/_site"; \ + echo "📝 Index exists: $$(test -f output/_site/index.html && echo 'SI' || echo 'NO')"; \ + for i in $$(seq 1 30); do \ if curl -f -s -o /dev/null http://localhost:$(STATIC_PORT); then \ echo "✅ Server statico pronto su http://localhost:$(STATIC_PORT)"; \ exit 0; \ fi; \ + echo "⏳ Tentativo $$i/30..."; \ sleep 1; \ done; \ - echo "❌ Timeout avvio server statico"; exit 1 + echo "❌ Timeout avvio server statico"; \ + echo "📝 Log errore:"; \ + cat /tmp/static_server.log 2>/dev/null || echo "Nessun log"; \ + exit 1 # Ferma entrambi i server stop-servers: stop-serve stop-static @@ -115,6 +153,7 @@ stop-serve: docker rm $$pid 2>/dev/null || true; \ rm -f .jekyll_serve.pid; \ fi + @rm -rf src/output src/jekyll/.jekyll-cache @echo "✅ Jekyll fermato" # Ferma server statico @@ -127,46 +166,67 @@ stop-static: fi build: + @mkdir -p output/_site output/.jekyll-cache + @chmod 755 output/_site output/.jekyll-cache output + @mkdir -p src/output src/jekyll/.jekyll-cache + @chmod 755 src/output src/jekyll/.jekyll-cache docker run --rm -it \ - --mount type=bind,source=${PWD},target=/srv/jekyll \ - --volume="$(GEM_VOLUME):/usr/local/bundle" \ - -e JEKYLL_ENV=production \ + --user $(shell id -u):$(shell id -g) \ + --mount type=bind,source=${PWD}/src,target=/workspace \ + --mount type=bind,source=${PWD}/output,target=/workspace/output \ + --volume="$(VENDOR_VOLUME):/usr/local/bundle" \ -e BUNDLE_PATH=/usr/local/bundle \ + -e GEM_HOME=/usr/local/bundle \ + -w /workspace/jekyll \ + -e JEKYLL_PATH=/workspace/jekyll \ + -e JEKYLL_ENV=production \ $(DOCKER_IMAGE) \ - jekyll build - @cp robots.txt _site/ + bundle exec jekyll build --destination /workspace/output/_site + @rm -rf src/output src/jekyll/.jekyll-cache + @cp src/jekyll/robots.txt output/_site/ build-css: - @echo "🎨 Generazione CSS unificato in Docker..." - @docker run --rm \ - --mount type=bind,source=${PWD},target=/app \ - -w /app \ - node:20-alpine \ - sh -c 'npm run build:css && cat assets/css/tailwind-input.css assets/css/tailwind.css assets/css/main.css assets/css/scout-tech.css > assets/css/styles.css' - @echo "✅ CSS unificato generato: assets/css/styles.css" + docker run --rm -it \ + --user $(shell id -u):$(shell id -g) \ + --mount type=bind,source=${PWD}/src,target=/workspace \ + --volume="$(NODE_MODULES_VOLUME):/workspace/node_modules" \ + -w /workspace/tailwind \ + node:20 \ + npm run build:css clean: - rm -rf _site .jekyll-cache + rm -rf output/_site output/.jekyll-cache output/screenshots output/accessibility + rm -rf src/jekyll/.jekyll-cache src/output src/.jekyll-cache src/node_modules src/vendor + rm -rf .jekyll-cache node_modules vendor _site install: + @echo "📦 Installing npm packages..." docker run --rm -it \ - --mount type=bind,source=${PWD},target=/srv/jekyll \ - --volume="$(GEM_VOLUME):/usr/local/bundle" \ - -e BUNDLE_PATH=/usr/local/bundle \ + --user $(shell id -u):$(shell id -g) \ + --mount type=bind,source=${PWD}/src,target=/workspace \ + --volume="$(NODE_MODULES_VOLUME):/workspace/node_modules" \ + -w /workspace/tailwind \ + node:20 \ + npm install + @echo "📦 Installing Ruby gems..." + docker run --rm -it \ + --user $(shell id -u):$(shell id -g) \ + --mount type=bind,source=${PWD}/src,target=/workspace \ + --volume="$(VENDOR_VOLUME):/usr/local/bundle" \ + -e GEM_HOME=/usr/local/bundle \ + -w /workspace/jekyll \ $(DOCKER_IMAGE) \ - bundle install + bundle install --no-cache install-gems: - @echo "💎 Installazione gemme nel volume persistente $(GEM_VOLUME)..." docker run --rm -it \ - --mount type=bind,source=${PWD},target=/srv/jekyll \ - --volume="$(GEM_VOLUME):/usr/local/bundle" \ - -e BUNDLE_PATH=/usr/local/bundle \ + --user $(shell id -u):$(shell id -g) \ + --mount type=bind,source=${PWD}/src,target=/workspace \ + --volume="$(VENDOR_VOLUME):/usr/local/bundle" \ + -e GEM_HOME=/usr/local/bundle \ + -w /workspace/jekyll \ $(DOCKER_IMAGE) \ - bundle install - @echo "" - @echo "✅ Gemme installate nel volume Docker '$(GEM_VOLUME)'" - @echo " Questo volume persiste tra le esecuzioni e non richiede re-installazione" + bundle install --no-cache open: @echo "Apertura sito locale: http://localhost:$(PORT)/" @@ -180,8 +240,8 @@ validate-graphics: docker-build-visual echo "📂 Baseline specificata: $(BASELINE_VERSION)"; \ fi @$(MAKE) --no-print-directory serve-static-bg - @mkdir -p screenshots/serve screenshots/static screenshots/diff screenshots/report - @chmod -R 777 screenshots/ + @mkdir -p output/screenshots/serve output/screenshots/static output/screenshots/diff output/screenshots/report + @chmod -R 777 output/screenshots/ @echo "📸 Eseguo capture..." @(docker run --rm --init \ --mount type=bind,source=${PWD},target=/app \ @@ -201,7 +261,7 @@ validate-graphics: docker-build-visual compare-graphics: docker-build-visual @echo "📊 Confronto screenshot esistenti (no capture)..." @echo "" - @mkdir -p screenshots/diff screenshots/report + @mkdir -p output/screenshots/diff output/screenshots/report docker run --rm --init \ --mount type=bind,source=${PWD},target=/app \ --user $(shell id -u):$(shell id -g) \ @@ -230,7 +290,7 @@ visual-baseline: docker-build-visual visual-clean: @echo "🧹 Rimozione screenshots..." - @rm -rf screenshots/ + @rm -rf output/screenshots/ @echo "✅ Screenshots rimossi" docker-build-visual: @@ -244,22 +304,40 @@ workflow: generate-blog-post: @echo "📝 Generazione blog post da evento..." - @read -p "Path file evento (es: _pages/eventi/epppi_rs.md): " event_path; \ - docker run --rm \ - --mount type=bind,source=${PWD},target=/srv/jekyll \ - --volume="$(GEM_VOLUME):/usr/local/bundle" \ + @echo "📂 Eventi disponibili:" + @find src/jekyll/_eventi -name "*.md" -not -name "README*" -not -name "percorso*" | nl -w2 -s'. ' + @read -p "Seleziona numero evento: " event_num; \ + event_path=$$(find src/jekyll/_eventi -name "*.md" -not -name "README*" -not -name "percorso*" | sed -n "$${event_num}p"); \ + if [ -z "$$event_path" ]; then \ + echo "❌ Numero non valido"; \ + exit 1; \ + fi; \ + echo "✅ Selezionato: $$event_path"; \ + event_name=$$(basename "$$event_path"); \ + generated_file=$$(docker run --rm \ + --user $(shell id -u):$(shell id -g) \ + --mount type=bind,source=${PWD}/src/jekyll,target=/srv/jekyll \ + --mount type=bind,source=${PWD}/scripts,target=/srv/scripts \ + --volume="$(VENDOR_VOLUME):/usr/local/bundle" \ -e BUNDLE_PATH=/usr/local/bundle \ + -w /srv/jekyll \ $(DOCKER_IMAGE) \ - ruby /srv/jekyll/scripts/generate-blog-post.rb "$$event_path" - @echo "" - @echo "🚀 Apertura MarkText con il file generato..." - @ls -t _posts/*.md 2>/dev/null | head -1 | xargs -r marktext 2>/dev/null & + ruby /srv/scripts/generate-blog-post.rb "_eventi/$$event_name" 2>&1 | grep "📝 FILENAME:" | cut -d: -f2); \ + if [ -n "$$generated_file" ]; then \ + echo ""; \ + echo "🚀 Apertura MarkText con il file generato..."; \ + full_path="${PWD}/src/jekyll/$$generated_file"; \ + echo "📂 Apertura: $$full_path"; \ + marktext "$$full_path" 2>/dev/null & \ + fi @echo "" @echo "📝 PROSSIMI PASSI:" @echo "1. Modifica il file in MarkText (sostituisci placeholder)" @echo "2. Verifica frontmatter e contenuti" @echo "3. Salva e chiudi MarkText" @echo "4. Git add e commit" + @echo "3. Salva e chiudi MarkText" + @echo "4. Git add e commit" check-links: build @echo "🔍 Verifica link broken nel sito..." @@ -267,7 +345,9 @@ check-links: build @echo "⚠️ Filtro solo errori significativi (ignoro fonts, hash tags, ecc.)" @echo "" @docker run --rm \ - --mount type=bind,source=${PWD}/_site,target=/test \ + --user $(shell id -u):$(shell id -g) \ + --mount type=bind,source=${PWD}/output/_site,target=/test \ + --mount type=bind,source=${PWD}/src/jekyll/.htmltest.yml,target=/.htmltest.yml \ wjdp/htmltest \ /test 2>&1 | \ grep -v "Non-OK status: 404.*fonts.googleapis.com" | \ @@ -289,23 +369,31 @@ check-links: build @echo " - Errori certificati SSL (siti esterni con problemi)" @echo " - Alt text vuoto (accessibilità)" +check-html: + @echo "🔍 Verifica HTML nei file markdown..." + @echo "" + @chmod +x ./scripts/check-html-in-markdown.sh + @./scripts/check-html-in-markdown.sh + @echo "" + @echo "✅ Nessun HTML trovato nei file markdown!" + # Accessibility Audit (Docker-based) .PHONY: docker-build-a11y docker-build-a11y: @echo "🐳 Building accessibility Docker image..." - docker build -t bitprepared-a11y:latest -f docker/accessibility/Dockerfile . + docker build -t bitprepared-a11y:latest -f src/docker/accessibility/Dockerfile . accessibility-audit: docker-build-a11y @echo "🔍 Running accessibility audit..." @echo "" @$(MAKE) --no-print-directory serve-bg - @mkdir -p docs/accessibility/reports + @mkdir -p output/accessibility/reports @(if [ "$(A11Y_PAGE)" = "index" ]; then \ echo "📊 Testing homepage only..."; \ docker run --rm --init \ --user $(shell id -u):$(shell id -g) \ - --mount type=bind,source=${PWD}/docs/accessibility/reports,target=/app/reports \ + --mount type=bind,source=${PWD}/output/accessibility/reports,target=/app/reports \ --add-host=host.docker.internal:host-gateway \ -e SITE_URL=http://host.docker.internal:4000 \ bitprepared-a11y:latest \ @@ -315,7 +403,7 @@ accessibility-audit: docker-build-a11y echo "⏱️ This may take several minutes..."; \ docker run --rm --init \ --user $(shell id -u):$(shell id -g) \ - --mount type=bind,source=${PWD}/docs/accessibility/reports,target=/app/reports \ + --mount type=bind,source=${PWD}/output/accessibility/reports,target=/app/reports \ --add-host=host.docker.internal:host-gateway \ -e SITE_URL=http://host.docker.internal:4000 \ bitprepared-a11y:latest \ @@ -325,8 +413,8 @@ accessibility-audit: docker-build-a11y $(MAKE) --no-print-directory stop-serve; \ exit $$ret) @echo "" - @echo "✅ Audit complete! Reports saved to docs/accessibility/reports/" - @echo "📋 View JSON: cat docs/accessibility/reports/lighthouse/homepage.report.json" + @echo "✅ Audit complete! Reports saved to output/accessibility/reports/" + @echo "📋 View JSON: cat output/accessibility/reports/lighthouse/homepage.report.json" @echo "" @$(MAKE) --no-print-directory accessibility-analyze @@ -335,20 +423,20 @@ accessibility-audit: docker-build-a11y accessibility-analyze: @echo "📊 Analyzing accessibility reports..." @echo "" - @mkdir -p docs/accessibility/reports - @./scripts/analyze-a11y-reports.sh docs/accessibility/reports > docs/accessibility/reports/summary.md - @echo "✅ Summary saved to docs/accessibility/reports/summary.md" + @mkdir -p output/accessibility/reports + @./scripts/analyze-a11y-reports.sh output/accessibility/reports > output/accessibility/reports/summary.md + @echo "✅ Summary saved to output/accessibility/reports/summary.md" @echo "" @echo "📊 Quick Scores:" @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - @for file in docs/accessibility/reports/lighthouse/*.json docs/accessibility/reports/lighthouse/*; do \ + @for file in output/accessibility/reports/lighthouse/*.json output/accessibility/reports/lighthouse/*; do \ if [ -f "$$file" ]; then \ pagename=$$(basename "$$file" .json | sed 's/\.report$$//'); \ score=$$(cat "$$file" | jq -r '.categories.accessibility.score * 100 | floor'); \ echo " ● Lighthouse ($$pagename): $$score%"; \ fi; \ done - @for file in docs/accessibility/reports/axe/*.json; do \ + @for file in output/accessibility/reports/axe/*.json; do \ if [ -f "$$file" ]; then \ pagename=$$(basename "$$file" .json); \ violations=$$(cat "$$file" | jq '.violations | length'); \ @@ -356,13 +444,13 @@ accessibility-analyze: fi; \ done @echo "" - @echo "📋 Full summary: cat docs/accessibility/reports/summary.md" + @echo "📋 Full summary: cat output/accessibility/reports/summary.md" # Clean accessibility reports .PHONY: accessibility-clean accessibility-clean: @echo "🧹 Cleaning accessibility reports..." - @rm -rf docs/accessibility/reports/ + @rm -rf output/accessibility/reports/ @echo "✅ Accessibility reports removed" @echo "💡 Run 'make accessibility-audit' to regenerate" @@ -378,10 +466,10 @@ accessibility-purge: accessibility-clean accessibility-issues: @echo "🔍 Showing accessibility issues with element locations..." @echo "" - @if [ -f docs/accessibility/reports/lighthouse/homepage ]; then \ - ./scripts/show-a11y-issues.sh docs/accessibility/reports/lighthouse/homepage; \ - elif [ -f docs/accessibility/reports/lighthouse/homepage.json ]; then \ - ./scripts/show-a11y-issues.sh docs/accessibility/reports/lighthouse/homepage.json; \ + @if [ -f output/accessibility/reports/lighthouse/homepage ]; then \ + ./scripts/show-a11y-issues.sh output/accessibility/reports/lighthouse/homepage; \ + elif [ -f output/accessibility/reports/lighthouse/homepage.json ]; then \ + ./scripts/show-a11y-issues.sh output/accessibility/reports/lighthouse/homepage.json; \ else \ echo "No report found. Run 'make accessibility-audit' first"; \ fi diff --git a/README.md b/README.md index 0dc21a1..513b58d 100644 --- a/README.md +++ b/README.md @@ -49,15 +49,15 @@ Accompagnare gli scout nell'era digitale attraverso: ### Requisiti -- Docker (nessuna installazione Ruby locale necessaria) +- Docker (nessuna installazione Ruby/Node locale necessaria) ### Quick start ```bash make serve # Avvia server su http://localhost:4000 -make build # Genera sito statico in _site/ -make clean # Rimuove _site/ e cache -make install # Installa dipendenze bundle (Docker) +make build # Genera sito statico in output/_site/ +make clean # Rimuove output/_site/ e cache +make install # Installa dipendenze (Docker) ``` Per tutti i comandi disponibili: `make help` @@ -68,25 +68,31 @@ Per tutti i comandi disponibili: `make help` ``` bitprepared.it/ -├── _posts/ → Blog posts (format: yyyy-mm-dd-titolo.md) -├── _eventi/ → Collection eventi (campo_eg, epppi, stage) -│ └── README_EVENTO.md → Guida template evento -├── _software/ → Collection software (GIMP, LibreOffice, etc.) -├── _layouts/ → Template Jekyll -│ ├── evento.html → Layout standard per eventi (ex epppi) -│ ├── default.html -│ ├── page.html -│ └── post.html -├── _includes/ → Componenti riutilizzabili (nav, footer, etc.) -├── blog/ → Archivio blog (index.html) -├── about.md → Pagina chi siamo -├── assets/ → CSS, JS, images -│ └── css/ -│ └── evento-custom.css → Stili template evento -├── _config.yml → Configurazione Jekyll -├── Makefile → Comandi sviluppo -└── .github/workflows/ - └── site-release.yml → CI/CD deployment +├── src/ → Source code +│ ├── jekyll/ → Jekyll site source +│ │ ├── _posts/ → Blog posts (yyyy-mm-dd-titolo.md) +│ │ ├── _eventi/ → Collection eventi (campo_eg, epppi, stage) +│ │ ├── _software/ → Collection software (GIMP, LibreOffice, etc.) +│ │ ├── _layouts/ → Template Jekyll +│ │ ├── _includes/ → Componenti riutilizzabili +│ │ ├── assets/ → CSS, JS, images +│ │ ├── _config.yml → Configurazione Jekyll +│ │ └── _config_dev.yml → Override development +│ ├── tailwind/ → Tailwind CSS configuration +│ └── docker/ → Docker configuration files +├── output/ → Generated content (non in git) +│ ├── _site/ → Jekyll build output +│ └── screenshots/ → Visual regression screenshots +├── scripts/ → Utility scripts +│ └── visual-regression/ → Screenshot capture & comparison +├── tests/ → Tests & baselines +│ └── visual-baseline/ → Screenshot baselines by version +├── docs/ → Project documentation +│ ├── WORKFLOW.md → Development workflow guide +│ ├── CHECKLIST.md → Pre-commit checklist +│ └── VISUAL_REGRESSION_DOCS.md → Technical docs +├── Makefile → Development commands +└── .github/workflows/ → CI/CD pipelines ``` --- @@ -117,9 +123,9 @@ make validate-graphics - ⚪ Modifiche contenuto testuale (opzionale) **Documentazione completa**: -- [docs/WORKFLOW.md](docs/WORKFLOW.md) - Guida workflow dettagliata -- [docs/CHECKLIST.md](docs/CHECKLIST.md) - Checklist rapida pre-commit -- [docs/VISUAL_REGRESSION_DOCS.md](docs/VISUAL_REGRESSION_DOCS.md) - Docs tecniche +- [WORKFLOW.md](docs/WORKFLOW.md) - Guida workflow dettagliata +- [CHECKLIST.md](docs/CHECKLIST.md) - Checklist rapida pre-commit +- [VISUAL_REGRESSION_DOCS.md](docs/VISUAL_REGRESSION_DOCS.md) - Docs tecniche ### Comandi Utili @@ -136,9 +142,9 @@ Il deployment è automatico tramite **GitHub Actions**: 1. Trigger: Merge di una PR sul branch `master` 2. Workflow: `.github/workflows/site-release.yml` -3. Build: Jekyll in container Docker (`jekyll/builder:latest`) -4. Output: `release.zip` con directory `_site/` compilata -5. Release: Creata automaticamente con tag timestamp (YYYYMMDDTHHmmss) +3. Build: Jekyll in container Docker (`jekyll/jekyll:4`) +4. Output: `release.zip` con directory `output/_site/` compilata +5. Release: Creata automaticamente con tag semver (v1.2.3, v1.3.0, etc.) 6. Changelog: `CHANGELOG.txt` usato come release body --- @@ -156,8 +162,8 @@ Il deployment è automatico tramite **GitHub Actions**: ### File config -- `_config.yml` — Configurazione principale -- `_config_dev.yml` — Override per development +- `src/jekyll/_config.yml` — Configurazione principale +- `src/jekyll/_config_dev.yml` — Override per development --- diff --git a/_config_dev.yml b/_config_dev.yml deleted file mode 100644 index 78cb6f8..0000000 --- a/_config_dev.yml +++ /dev/null @@ -1 +0,0 @@ -project_path: /home/yoghi/Workspace/eventi/bitprepared.it diff --git a/_layouts/blog.html b/_layouts/blog.html deleted file mode 100644 index 22346e1..0000000 --- a/_layouts/blog.html +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: default ---- - - -
-
-

{{ page.title }}

- {% if page.subtitle %} -

{{ page.subtitle }}

- {% endif %} -
-
- - -
-
-
- {% include edit-button.html %} - {{ content }} -
-
-
diff --git a/_layouts/tags.html b/_layouts/tags.html deleted file mode 100644 index 0238388..0000000 --- a/_layouts/tags.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: default ---- - - -
-
-

{{ page.title }}

-
-
- - -
-
-
- {{ content }} -
-
-
diff --git a/_posts/2016-09-18-Post-di-prova.md b/_posts/2016-09-18-Post-di-prova.md deleted file mode 100644 index 6957161..0000000 --- a/_posts/2016-09-18-Post-di-prova.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -layout: post -title: Osservando il cielo -published: false -type: blog ---- - -
-
- -

Osservando il cielo

- - - -
-

Esiste la possibilità di applicare i mezzi informatici, sempre più avanzati che abbiamo a disposizione, alle esperienze e alle attività scout? Questo è proprio quello su cui ci siamo interrogati durante questo campetto. La risposta è sicuramente positiva, come abbiamo già sperimentato nella creazione virtuale del percorso rettificato belga durante le missioni e nell’utilizzo del programma Flora per il riconoscimento delle piante. Giovedì sera abbiamo affrontato la stessa questione spostando però lo sguardo da ciò che abbiamo intorno per alzarlo verso il cielo stellato.

-

Infatti come i marinai nei secoli passati utilizzavano le mappe stellari e gli strumenti a loro disposizione, come per esempio la bussola, allo stesso modo anche noi abbiamo utilizzato i mezzi più utili a cui possiamo accedere per osservare il cielo notturno. Il primo che abbiamo utilizzato è il programma Celestia, che permette di osservare i pianeti in tempo reale. Alcune sue interessantissime funzioni sono la possibilità di velocizzare lo scorrere del tempo per osservare i moti dei pianeti e la funzione di ricerca delle eclissi dei prossimi anni per vedere la situazione di quella determinata giornata futura.

-

astrolabioDSC_0019

-

Abbiamo poi realizzato i nostri personali astrolabi, formati da un cerchio di plastica trasparente oscurato in parte e uno di carta con disegnate le varie costellazioni. Fissando le due parti con un fermacampione e ruotando la parte superiore fino a far corrispondere la porzione ancora trasparente con il mese di agosto, abbiamo potuto osservare la volta celeste di questo periodo e utilizzarla per riconoscere in cielo le costellazioni. La vera particolarità dei nostri astrolabi è il tocco artistico e assolutamente personale presente nella parte inferiore, disegnata infatti a mano da ognuno di noi basandosi su una versione stampata.

-

astrotab-DSC_0027

-

Dopo aver terminato la costruzione ci siamo divisi in squadriglie e abbiamo avuto la possibilità di utilizzare sui tablet un’altra applicazione, Google Sky Map, che visualizza sullo schermo le costellazioni presenti nella zona del cielo verso cui si sta puntando, ma anche le comete di passaggio e le galassie. Ci è piaciuta molto questa esperienza, perché questa funzione si è rivelata un aiuto determinante nel riconoscere con facilità le stelle che stavamo osservando.

-

Abbiamo poi avuto un momento di squadriglia attorno al fuoco per riflettere e confrontarci su come stiamo vivendo questo campetto che ci sembra appena iniziato e sta invece già volgendo al termine. Ci siamo anche impegnati nell’inventare e creare con le stelline luminose una costellazione che fosse in grado di rappresentare la nostra squadriglia. Gli Ikarus hanno disegnato dei gemelli, simbolo dell’unione della loro squadriglia, e le Phoenix un pungitopo, pianta che hanno incontrato in continuazione nella loro missione e che ha contribuito a legarle attraverso momenti di risate e battute. Noi Legacy abbiamo invece rappresentato una barca, che simboleggia non solo il viaggio che ognuna di noi ha affrontato per arrivare a questo campetto e l’incognita che questa esperienza era per noi, ma anche il nostro essere unite come un equipaggio a cui spetta governare la barca durante questi cinque giorni.

-

fuocobraggioDSC_0026

-
- - -
-
- -

Osservando il cielo

- - - -
-

Esiste la possibilità di applicare i mezzi informatici, sempre più avanzati che abbiamo a disposizione, alle esperienze e alle attività scout? Questo è proprio quello su cui ci siamo interrogati durante questo campetto. La risposta è sicuramente positiva, come abbiamo già sperimentato nella creazione virtuale del percorso rettificato belga durante le missioni e nell’utilizzo del programma Flora per il riconoscimento delle piante. Giovedì sera abbiamo affrontato la stessa questione spostando però lo sguardo da ciò che abbiamo intorno per alzarlo verso il cielo stellato.

-

Infatti come i marinai nei secoli passati utilizzavano le mappe stellari e gli strumenti a loro disposizione, come per esempio la bussola, allo stesso modo anche noi abbiamo utilizzato i mezzi più utili a cui possiamo accedere per osservare il cielo notturno. Il primo che abbiamo utilizzato è il programma Celestia, che permette di osservare i pianeti in tempo reale. Alcune sue interessantissime funzioni sono la possibilità di velocizzare lo scorrere del tempo per osservare i moti dei pianeti e la funzione di ricerca delle eclissi dei prossimi anni per vedere la situazione di quella determinata giornata futura.

-

astrolabioDSC_0019

-

Abbiamo poi realizzato i nostri personali astrolabi, formati da un cerchio di plastica trasparente oscurato in parte e uno di carta con disegnate le varie costellazioni. Fissando le due parti con un fermacampione e ruotando la parte superiore fino a far corrispondere la porzione ancora trasparente con il mese di agosto, abbiamo potuto osservare la volta celeste di questo periodo e utilizzarla per riconoscere in cielo le costellazioni. La vera particolarità dei nostri astrolabi è il tocco artistico e assolutamente personale presente nella parte inferiore, disegnata infatti a mano da ognuno di noi basandosi su una versione stampata.

-

astrotab-DSC_0027

-

Dopo aver terminato la costruzione ci siamo divisi in squadriglie e abbiamo avuto la possibilità di utilizzare sui tablet un’altra applicazione, Google Sky Map, che visualizza sullo schermo le costellazioni presenti nella zona del cielo verso cui si sta puntando, ma anche le comete di passaggio e le galassie. Ci è piaciuta molto questa esperienza, perché questa funzione si è rivelata un aiuto determinante nel riconoscere con facilità le stelle che stavamo osservando.

-

Abbiamo poi avuto un momento di squadriglia attorno al fuoco per riflettere e confrontarci su come stiamo vivendo questo campetto che ci sembra appena iniziato e sta invece già volgendo al termine. Ci siamo anche impegnati nell’inventare e creare con le stelline luminose una costellazione che fosse in grado di rappresentare la nostra squadriglia. Gli Ikarus hanno disegnato dei gemelli, simbolo dell’unione della loro squadriglia, e le Phoenix un pungitopo, pianta che hanno incontrato in continuazione nella loro missione e che ha contribuito a legarle attraverso momenti di risate e battute. Noi Legacy abbiamo invece rappresentato una barca, che simboleggia non solo il viaggio che ognuna di noi ha affrontato per arrivare a questo campetto e l’incognita che questa esperienza era per noi, ma anche il nostro essere unite come un equipaggio a cui spetta governare la barca durante questi cinque giorni.

-

fuocobraggioDSC_0026

-
- - -
diff --git a/_posts/2026-05-08-essere-solidi-in-una-societ-immateriale.md b/_posts/2026-05-08-essere-solidi-in-una-societ-immateriale.md deleted file mode 100644 index da092d4..0000000 --- a/_posts/2026-05-08-essere-solidi-in-una-societ-immateriale.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: post -title: Essere solidi in una società immateriale | Bologna 8-10 Maggio -description: "Come essere persone concrete in un mondo sempre più digitale?" -modified: 2026-04-20 -author: bitprepared -category: eventi -tags: bitprepared, epppi, rs, esseri solidi, società digitale, rover, scolte, bologna, 2026, blog -featured: images/essere-solidi.png -comments: true -share: true -permalink: /blog/2026/essere-solidi-in-una-societ-immateriale-bologna-8-10-maggio/ -type: blog ---- - -**Come essere persone concrete in un mondo sempre più digitale?** - -Un evento imperdibile per Rover e Scolte - -Maggiori informazioni sull'evento clicca [**qui**](/eventi/epppi) - -- **Quando**: 8-10 Maggio 2026 -- **Dove**: Bologna -- **Posti**: 24 massimo - -Posti limitati! Non perdere l'opportunità di partecipare a questo evento unico. - -[ISCRIVITI SUBITO - SOLO 24 POSTI](https://buonacaccia.net/Event.aspx?e=24768) diff --git a/assets/css/critical.css b/assets/css/critical.css deleted file mode 100644 index e9c64b7..0000000 --- a/assets/css/critical.css +++ /dev/null @@ -1,9 +0,0 @@ -/* Critical CSS - Above the fold styles */ -.hero-title{color:#E8F5E8} -.hero-subtitle{color:#E8F5E8} -.hero{background:linear-gradient(135deg,#0a3d0a 0%,#1a7f1a 100%)} -.bg-white{background-color:#fff} -.text-brand-dark{color:#0a3d0a} -.text-light{color:#E8F5E8} -.btn{display:inline-block;text-align:center;text-decoration:none;font-weight:600;padding:0.75rem 1.5rem;border-radius:2rem;cursor:pointer;transition:all 150ms ease-out} -.btn-event{background:#1a7f1a;color:#fff} \ No newline at end of file diff --git a/assets/css/font/FontAwesome.otf b/assets/css/font/FontAwesome.otf deleted file mode 100644 index 3461e3f..0000000 Binary files a/assets/css/font/FontAwesome.otf and /dev/null differ diff --git a/assets/css/font/fontawesome-webfont.eot b/assets/css/font/fontawesome-webfont.eot deleted file mode 100644 index 6cfd566..0000000 Binary files a/assets/css/font/fontawesome-webfont.eot and /dev/null differ diff --git a/assets/css/font/fontawesome-webfont.svg b/assets/css/font/fontawesome-webfont.svg deleted file mode 100644 index a9f8469..0000000 --- a/assets/css/font/fontawesome-webfont.svg +++ /dev/null @@ -1,504 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/css/font/fontawesome-webfont.ttf b/assets/css/font/fontawesome-webfont.ttf deleted file mode 100644 index 5cd6cff..0000000 Binary files a/assets/css/font/fontawesome-webfont.ttf and /dev/null differ diff --git a/assets/css/font/fontawesome-webfont.woff b/assets/css/font/fontawesome-webfont.woff deleted file mode 100644 index 9eaecb3..0000000 Binary files a/assets/css/font/fontawesome-webfont.woff and /dev/null differ diff --git a/assets/css/legacy/skel-noscript.css b/assets/css/legacy/skel-noscript.css deleted file mode 100644 index 3abd181..0000000 --- a/assets/css/legacy/skel-noscript.css +++ /dev/null @@ -1,168 +0,0 @@ -/* Resets (http://meyerweb.com/eric/tools/css/reset/ | v2.0 | 20110126 | License: none (public domain)) */ - - html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block;}body{line-height:1;}ol,ul{list-style:none;}blockquote,q{quotes:none;}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;}table{border-collapse:collapse;border-spacing:0;}body{-webkit-text-size-adjust:none} - -/* Box Model */ - - *, *:before, *:after { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -o-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - } - -/* Container */ - - body { - min-width: 1200px; - } - - .container { - width: 1200px; - margin-left: auto; - margin-right: auto; - } - - /* Modifiers */ - - .container.small { - width: 900px; - } - - .container.big { - width: 100%; - max-width: 1500px; - min-width: 1200px; - } - -/* Grid */ - - /* Cells */ - - .\31 2u { width: 100% } - .\31 1u { width: 91.6666666667% } - .\31 0u { width: 83.3333333333% } - .\39 u { width: 75% } - .\38 u { width: 66.6666666667% } - .\37 u { width: 58.3333333333% } - .\36 u { width: 50% } - .\35 u { width: 41.6666666667% } - .\34 u { width: 33.3333333333% } - .\33 u { width: 25% } - .\32 u { width: 16.6666666667% } - .\31 u { width: 8.3333333333% } - .\-11u { margin-left: 91.6666666667% } - .\-10u { margin-left: 83.3333333333% } - .\-9u { margin-left: 75% } - .\-8u { margin-left: 66.6666666667% } - .\-7u { margin-left: 58.3333333333% } - .\-6u { margin-left: 50% } - .\-5u { margin-left: 41.6666666667% } - .\-4u { margin-left: 33.3333333333% } - .\-3u { margin-left: 25% } - .\-2u { margin-left: 16.6666666667% } - .\-1u { margin-left: 8.3333333333% } - - .row > * { - padding: 50px 0 0 50px; - float: left; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -o-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - } - - .row + .row > * { - padding-top: 50px; - } - - .row { - margin-left: -50px; - } - - /* Rows */ - - .row:after { - content: ''; - display: block; - clear: both; - height: 0; - } - - .row:first-child > * { - padding-top: 0; - } - - .row > * { - padding-top: 0; - } - - /* Modifiers */ - - /* Flush */ - - .row.flush { - margin-left: 0; - } - - .row.flush > * { - padding: 0 !important; - } - - /* Quarter */ - - .row.quarter > * { - padding: 12.5px 0 0 12.5px; - } - - .row.quarter + .row.quarter > * { - padding-top: 12.5px; - } - - .row.quarter { - margin-left: -12.5px; - } - - /* Half */ - - .row.half > * { - padding: 25px 0 0 25px; - } - - .row.half + .row.half > * { - padding-top: 25px; - } - - .row.half { - margin-left: -25px; - } - - /* One and (a) Half */ - - .row.oneandhalf > * { - padding: 75px 0 0 75px; - } - - .row.oneandhalf + .row.oneandhalf > * { - padding-top: 75px; - } - - .row.oneandhalf { - margin-left: -75px; - } - - /* Double */ - - .row.double > * { - padding: 100px 0 0 100px; - } - - .row.double + .row.double > * { - padding-top: 100px; - } - - .row.double { - margin-left: -100px; - } \ No newline at end of file diff --git a/assets/css/legacy/style-1000px.css b/assets/css/legacy/style-1000px.css deleted file mode 100644 index 48430e3..0000000 --- a/assets/css/legacy/style-1000px.css +++ /dev/null @@ -1,85 +0,0 @@ -/* - Linear by TEMPLATED - templated.co @templatedco - Released for free under the Creative Commons Attribution 3.0 license (templated.co/license) -*/ - -/*********************************************************************************/ -/* Basic */ -/*********************************************************************************/ - - body - { - } - - body,input,textarea,select - { - font-size: 11pt; - } - - header - { - margin-bottom: 1.6em; - } - - header h2 - { - font-size: 2.8em; - } - - header .byline - { - font-size: 1.2em; - } - -/*********************************************************************************/ -/* Main */ -/*********************************************************************************/ - - #main - { - } - - .homepage #content header h2 - { - font-size: 1.8em; - } - - #featured .pennant - { - font-size: 4em; - height: 1.4em; - } - - #sidebar h2 - { - font-size: 2em; - } - -/*********************************************************************************/ -/* Tweet */ -/*********************************************************************************/ - - #tweet - { - } - - #tweet blockquote - { - font-size: 1.6em; - } - -#content .row section header h2 -{ - line-height: 1.2em !important; -} - -/* Article headings */ -article h2 -{ - font-size: 1.8em; - font-weight: 300; - color: #777; - margin-top: 1.5em; - margin-bottom: 0.8em; -} diff --git a/assets/css/legacy/style-desktop.css b/assets/css/legacy/style-desktop.css deleted file mode 100644 index cb980d2..0000000 --- a/assets/css/legacy/style-desktop.css +++ /dev/null @@ -1,140 +0,0 @@ -/* - Linear by TEMPLATED - templated.co @templatedco - Released for free under the Creative Commons Attribution 3.0 license (templated.co/license) -*/ - -/*********************************************************************************/ -/* Basic */ -/*********************************************************************************/ - - body - { - } - - body,input,textarea,select - { - } - - header - { - margin-bottom: 1.6em; - } - - header h2 - { - font-size: 3.4em; - } - - header .byline - { - font-size: 1.7em; - } - -/*********************************************************************************/ -/* Header */ -/*********************************************************************************/ - - #header - { - padding: 10em 0 6em 0; - } - - .homepage #header - { - padding: 16em 0 12em 0; - } - -/*********************************************************************************/ -/* Main */ -/*********************************************************************************/ - - #main - { - padding: 6em 0em; - } - - .homepage #content header h2 - { - padding: 0.70em 0em; - font-size: 2.2em; - } - - #sidebar h2 - { - font-size: 2.4em; - } - -/*********************************************************************************/ -/* Footer */ -/*********************************************************************************/ - - #footer - { - padding: 6em 0em; - } - -/*********************************************************************************/ -/* Featured */ -/*********************************************************************************/ - - #featured - { - padding: 6em 0em; - } - - #featured h3 - { - font-weight:bold; - padding: 1.5em 0em; - font-size: 1.6em; - } - - #featured .pennant - { - font-size: 4em; - height: 1.4em; - } - - #featured header - { - margin-bottom: 3em; - } - - #featured p - { - line-height: 2em; - font-size: 1.2em; - } - -/*********************************************************************************/ -/* Tweet */ -/*********************************************************************************/ - - #tweet - { - padding: 6em 0em; - } - - #tweet blockquote - { - margin: 0; - padding: 1em 4em; - line-height: 1.5em; - font-size: 1.8em; - } - -#content .row section header h2 -{ - line-height: 1.2em !important; -} - -/* Article headings */ -article h2 -{ - font-size: 1.8em; - font-weight: 300; - color: #777; - margin-top: 1.5em; - margin-bottom: 0.8em; -} diff --git a/assets/css/legacy/style-mobile.css b/assets/css/legacy/style-mobile.css deleted file mode 100644 index fb2cde0..0000000 --- a/assets/css/legacy/style-mobile.css +++ /dev/null @@ -1,284 +0,0 @@ -/* - Linear by TEMPLATED - templated.co @templatedco - Released for free under the Creative Commons Attribution 3.0 license (templated.co/license) -*/ - -/*********************************************************************************/ -/* Basic */ -/*********************************************************************************/ - - body,input,textarea,select - { - line-height: 1.75em; - font-size: 10.5pt; - letter-spacing: 0; - } - - body - { - padding-top: 44px; - } - - h2, h3, h4, h5, h6 - { - line-height: 1em; - font-size: 1.5em; - } - - section, - article - { - clear: both; - margin: 2em 0 2em 0 !important; - } - - section > :first-child, - article > :first-child - { - margin-top: 0 !important; - } - - section:first-child, - article:first-child - { - margin-top: 0 !important; - } - - .container - { - padding: 0em 1em; - } - - hr - { - margin: 3em 0 0 0; - padding: 3em 0 0 0; - } - - header - { - margin-bottom: 1.6em; - } - - header h2 - { - font-size: 2em; - } - - header .byline - { - font-size: 1.2em; - } - - .button - { - display: block; - width: 100%; - text-align: center; - } - -/*********************************************************************************/ -/* UI */ -/*********************************************************************************/ - - #titleBar - { - background: #161616; - } - - #titleBar .title a - { - display: block; - color: #fff; - text-align: center; - line-height: 44px; - font-weight: 300; - text-decoration: none; - } - - #titleBar .tag - { - display: none; - } - - #titleBar .toggle - { - position: absolute; - left: 0; - top: 0; - width: 80px; - height: 60px; - } - - #titleBar .toggle:after - { - content: ''; - display: block; - width: 20px; - height: 12px; - position: absolute; - left: 10px; - top: 15px; - background: url('images/toggle.svg') 0px 0px no-repeat; - opacity: 0.5; - } - - #titleBar .toggle:active:after - { - opacity: 0.75; - } - - #navPanel - { - background: #1f1f1f; - } - - #navPanel .link - { - display: block; - color: #888; - text-decoration: none; - height: 44px; - line-height: 44px; - border-top: solid 1px; - border-color: rgba(255,255,255,.05); - padding: 0 1em 0 1em; - letter-spacing: 1px; - } - - #navPanel .link:first-child - { - border-top: 0; - } - - #navPanel .link.depth-0 - { - color: #fff; - } - - #navPanel .indent-1 { display: inline-block; width: 1em; } - #navPanel .indent-2 { display: inline-block; width: 2em; } - #navPanel .indent-3 { display: inline-block; width: 3em; } - #navPanel .indent-4 { display: inline-block; width: 4em; } - #navPanel .indent-5 { display: inline-block; width: 5em; } - #navPanel .depth-0 { color: #fff; } - -/*********************************************************************************/ -/* Header */ -/*********************************************************************************/ - - #header - { - height: 10em; - padding: 0; - background-position: center center; - background-attachment: scroll; - } - -/*********************************************************************************/ -/* Logo */ -/*********************************************************************************/ - - #logo - { - display: none; - } - - #nav - { - display: none; - } - - -/*********************************************************************************/ -/* Main */ -/*********************************************************************************/ - - #main - { - padding: 4em 0em 2em 0em; - } - - .homepage #content header h2 - { - padding: 0.70em 0em; - font-size: 1.4em; - } - - #sidebar h2 - { - font-size: 1.8em; - } - -/*********************************************************************************/ -/* Footer */ -/*********************************************************************************/ - - #footer - { - padding: 4em 0em 2em 0em; - } - -/*********************************************************************************/ -/* Featured */ -/*********************************************************************************/ - - #featured - { - padding: 4em 0em 3em 0em; - } - - #featured h3 - { - padding: 1.5em 0em; - font-size: 1.4em; - } - - #featured .pennant - { - font-size: 4em; - height: 1.4em; - } - -/*********************************************************************************/ -/* Welcome */ -/*********************************************************************************/ - - #welcome - { - padding: 4em 0em 3em 0em; - } - -/*********************************************************************************/ -/* Tweet */ -/*********************************************************************************/ - - #tweet - { - padding: 3em 0em 1em 0em; - background-position: center center; - background-attachment: scroll; - } - - #tweet blockquote - { - margin: 0; - padding: 1em 1em; - font-size: 1.2em; - } - -#content .row section header h2 -{ - line-height: 1.2em !important; -} - -/* Article headings */ -article h2 -{ - font-size: 1.8em; - font-weight: 300; - color: #777; - margin-top: 1.5em; - margin-bottom: 0.8em; -} diff --git a/assets/css/legacy/style.css b/assets/css/legacy/style.css deleted file mode 100644 index 87fb900..0000000 --- a/assets/css/legacy/style.css +++ /dev/null @@ -1,1060 +0,0 @@ -/* - Linear by TEMPLATED - templated.co @templatedco - Released for free under the Creative Commons Attribution 3.0 license (templated.co/license) -*/ - -@charset 'UTF-8'; - -@font-face{font-family:'FontAwesome';src:url('font/fontawesome-webfont.eot?v=4.0.1');src:url('font/fontawesome-webfont.eot?#iefix&v=4.0.1') format('embedded-opentype'),url('font/fontawesome-webfont.woff?v=4.0.1') format('woff'),url('font/fontawesome-webfont.ttf?v=4.0.1') format('truetype'),url('font/fontawesome-webfont.svg?v=4.0.1#fontawesomeregular') format('svg');font-weight:normal;font-style:normal} - -/*********************************************************************************/ -/* Basic */ -/*********************************************************************************/ - - body - { - margin: 0; - padding: 0; - background: #161616; - } - - body,input,textarea,select - { - font-family: 'Roboto', sans-serif; - font-size: 11pt; - font-weight: 300; - line-height: 1.75em; - color: #777; - } - - h1,h2,h3,h4,h5,h6 - { - font-weight: 300; - color: #777; - } - - h2 - { - letter-spacing: -0.025em; - } - - h1 a, h2 a, h3 a, h4 a, h5 a, h6 a - { - color: inherit; - text-decoration: none; - } - - strong, b - { - font-weight: 500; - color: #000000; - } - - em, i - { - font-style: italic; - } - - a - { - text-decoration: none; - color: #80BA8E; - } - - a:hover - { - text-decoration: none; - } - - sub - { - position: relative; - top: 0.5em; - font-size: 0.8em; - } - - sup - { - position: relative; - top: -0.5em; - font-size: 0.8em; - } - - hr - { - border: 0; - border-top: solid 1px #ddd; - margin: 6em 0 0 0; - padding: 6em 0 0 0; - } - - blockquote - { - border-left: solid 0.5em #ddd; - padding: 1em 0 1em 2em; - font-style: italic; - } - - p, ul, ol, dl, table - { - margin-bottom: 1em; - } - - header - { - margin-bottom: 1.6em; - } - - header h2 - { - } - - header .byline - { - display: block; - margin: 1.5em 0 0 0; - padding: 0 0 0.5em 0; - } - - footer - { - margin-top: 1em; - } - - br.clear - { - clear: both; - } - - .pennant - { - color: #bbb; - } - - /* Sections/Articles */ - - section, - article - { - margin-bottom: 3em; - } - - section > :last-child, - article > :last-child - { - margin-bottom: 0; - } - - section:last-child, - article:last-child - { - margin-bottom: 0; - } - - .row > section, - .row > article - { - margin-bottom: 0; - } - - /* Images */ - - .image - { - display: inline-block; - } - - .image img - { - display: block; - width: 100%; - } - - .image.featured - { - display: block; - width: 100%; - margin: 0 0 2em 0; - } - - .image.full - { - display: block; - width: 100%; - margin-bottom: 2em; - } - - .image.medium - { - display: block; - /* margin: 0 auto; */ - width: 60%; - margin-bottom: 2em; - } - - .image.mini - { - display: block; - width: 10%; - margin-bottom: 2em; - } - - - .image.left - { - float: left; - margin: 0 2em 2em 0; - } - - .image.centered - { - display: block; - margin: 0 0 2em 0; - } - - .image.centered img - { - margin: 0 auto; - width: auto; - } - - /* Lists */ - - ul.default - { - margin: 0; - padding: 0em 0em 1.5em 0em; - list-style: none; - } - - ul.default li - { - padding: 0.60em 0em; - font-size: 0.95em; - border-top: 1px solid; - border-color: rgba(0,0,0,.1); - } - - ul.default li:first-child - { - padding-top: 0; - border-top: none; - } - - ul.default { - } - - ul.style li { - margin: 0; - padding: 2em 0em 1.5em 0em; - border-top: 1px solid; - border-color: rgba(0,0,0,.1); - } - - ul.style li:first-child - { - padding-top: 0; - border-top: none; - } - - ul.style img { - float: left; - margin-right: 20px; - } - - ul.style a { - color: #434343; - } - - ul.style .posted { - padding: 0em 0em 1em 0em; - letter-spacing: 1px; - text-transform: uppercase; - font-size: 8pt; - color: #A2A2A2; - } - - ul.style .first { - padding-top: 0px; - border-top: none; - } - - - /* Buttons */ - - .button - { - position: relative; - display: inline-block; - background: #80BA8E; - padding: 0.8em 2em; - text-decoration: none !important; - font-size: 1.2em; - font-weight: 300; - color: #FFF !important; - -moz-transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - -webkit-transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - -o-transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - -ms-transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - text-align: center; - border-radius: 0.25em; - } - - .button:hover - { - background: #70AA7E; - color: #FFF !important; - } - -/*********************************************************************************/ -/* Icons */ -/* Powered by Font Awesome by Dave Gandy | http://fontawesome.io */ -/* Licensed under the SIL OFL 1.1 (font), MIT (CSS) */ -/*********************************************************************************/ - - .fa - { - text-decoration: none; - } - - .fa.solo - { - } - - .fa.solo span - { - display: none; - } - - .fa:before - { - display:inline-block; - font-family: FontAwesome; - font-size: 1.25em; - text-decoration: none; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale; - } - - .fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%} - .fa-2x{font-size:2em} - .fa-3x{font-size:3em} - .fa-4x{font-size:4em} - .fa-5x{font-size:5em} - .fa-fw{width:1.2857142857142858em;text-align:center} - .fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative} - .fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em} - .fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em} - .pull-right{float:right} - .pull-left{float:left} - .fa.pull-left{margin-right:.3em} - .fa.pull-right{margin-left:.3em} - .fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear} - @-moz-keyframes spin{0%{-moz-transform:rotate(0deg)} 100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)} 100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)} 100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)} 100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)} 100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)} - .fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)} - .fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)} - .fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)} - .fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)} - .fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle} - .fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center} - .fa-stack-1x{line-height:inherit} - .fa-stack-2x{font-size:2em} - .fa-inverse{color:#fff} - .fa-glass:before{content:"\f000"} - .fa-music:before{content:"\f001"} - .fa-search:before{content:"\f002"} - .fa-envelope-o:before{content:"\f003"} - .fa-heart:before{content:"\f004"} - .fa-star:before{content:"\f005"} - .fa-star-o:before{content:"\f006"} - .fa-user:before{content:"\f007"} - .fa-film:before{content:"\f008"} - .fa-th-large:before{content:"\f009"} - .fa-th:before{content:"\f00a"} - .fa-th-list:before{content:"\f00b"} - .fa-check:before{content:"\f00c"} - .fa-times:before{content:"\f00d"} - .fa-search-plus:before{content:"\f00e"} - .fa-search-minus:before{content:"\f010"} - .fa-power-off:before{content:"\f011"} - .fa-signal:before{content:"\f012"} - .fa-gear:before,.fa-cog:before{content:"\f013"} - .fa-trash-o:before{content:"\f014"} - .fa-home:before{content:"\f015"} - .fa-file-o:before{content:"\f016"} - .fa-clock-o:before{content:"\f017"} - .fa-road:before{content:"\f018"} - .fa-download:before{content:"\f019"} - .fa-arrow-circle-o-down:before{content:"\f01a"} - .fa-arrow-circle-o-up:before{content:"\f01b"} - .fa-inbox:before{content:"\f01c"} - .fa-play-circle-o:before{content:"\f01d"} - .fa-rotate-right:before,.fa-repeat:before{content:"\f01e"} - .fa-refresh:before{content:"\f021"} - .fa-list-alt:before{content:"\f022"} - .fa-lock:before{content:"\f023"} - .fa-flag:before{content:"\f024"} - .fa-headphones:before{content:"\f025"} - .fa-volume-off:before{content:"\f026"} - .fa-volume-down:before{content:"\f027"} - .fa-volume-up:before{content:"\f028"} - .fa-qrcode:before{content:"\f029"} - .fa-barcode:before{content:"\f02a"} - .fa-tag:before{content:"\f02b"} - .fa-tags:before{content:"\f02c"} - .fa-book:before{content:"\f02d"} - .fa-bookmark:before{content:"\f02e"} - .fa-print:before{content:"\f02f"} - .fa-camera:before{content:"\f030"} - .fa-font:before{content:"\f031"} - .fa-bold:before{content:"\f032"} - .fa-italic:before{content:"\f033"} - .fa-text-height:before{content:"\f034"} - .fa-text-width:before{content:"\f035"} - .fa-align-left:before{content:"\f036"} - .fa-align-center:before{content:"\f037"} - .fa-align-right:before{content:"\f038"} - .fa-align-justify:before{content:"\f039"} - .fa-list:before{content:"\f03a"} - .fa-dedent:before,.fa-outdent:before{content:"\f03b"} - .fa-indent:before{content:"\f03c"} - .fa-video-camera:before{content:"\f03d"} - .fa-picture-o:before{content:"\f03e"} - .fa-pencil:before{content:"\f040"} - .fa-map-marker:before{content:"\f041"} - .fa-adjust:before{content:"\f042"} - .fa-tint:before{content:"\f043"} - .fa-edit:before,.fa-pencil-square-o:before{content:"\f044"} - .fa-share-square-o:before{content:"\f045"} - .fa-check-square-o:before{content:"\f046"} - .fa-move:before{content:"\f047"} - .fa-step-backward:before{content:"\f048"} - .fa-fast-backward:before{content:"\f049"} - .fa-backward:before{content:"\f04a"} - .fa-play:before{content:"\f04b"} - .fa-pause:before{content:"\f04c"} - .fa-stop:before{content:"\f04d"} - .fa-forward:before{content:"\f04e"} - .fa-fast-forward:before{content:"\f050"} - .fa-step-forward:before{content:"\f051"} - .fa-eject:before{content:"\f052"} - .fa-chevron-left:before{content:"\f053"} - .fa-chevron-right:before{content:"\f054"} - .fa-plus-circle:before{content:"\f055"} - .fa-minus-circle:before{content:"\f056"} - .fa-times-circle:before{content:"\f057"} - .fa-check-circle:before{content:"\f058"} - .fa-question-circle:before{content:"\f059"} - .fa-info-circle:before{content:"\f05a"} - .fa-crosshairs:before{content:"\f05b"} - .fa-times-circle-o:before{content:"\f05c"} - .fa-check-circle-o:before{content:"\f05d"} - .fa-ban:before{content:"\f05e"} - .fa-arrow-left:before{content:"\f060"} - .fa-arrow-right:before{content:"\f061"} - .fa-arrow-up:before{content:"\f062"} - .fa-arrow-down:before{content:"\f063"} - .fa-mail-forward:before,.fa-share:before{content:"\f064"} - .fa-resize-full:before{content:"\f065"} - .fa-resize-small:before{content:"\f066"} - .fa-plus:before{content:"\f067"} - .fa-minus:before{content:"\f068"} - .fa-asterisk:before{content:"\f069"} - .fa-exclamation-circle:before{content:"\f06a"} - .fa-gift:before{content:"\f06b"} - .fa-leaf:before{content:"\f06c"} - .fa-fire:before{content:"\f06d"} - .fa-eye:before{content:"\f06e"} - .fa-eye-slash:before{content:"\f070"} - .fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"} - .fa-plane:before{content:"\f072"} - .fa-calendar:before{content:"\f073"} - .fa-random:before{content:"\f074"} - .fa-comment:before{content:"\f075"} - .fa-magnet:before{content:"\f076"} - .fa-chevron-up:before{content:"\f077"} - .fa-chevron-down:before{content:"\f078"} - .fa-retweet:before{content:"\f079"} - .fa-shopping-cart:before{content:"\f07a"} - .fa-folder:before{content:"\f07b"} - .fa-folder-open:before{content:"\f07c"} - .fa-resize-vertical:before{content:"\f07d"} - .fa-resize-horizontal:before{content:"\f07e"} - .fa-bar-chart-o:before{content:"\f080"} - .fa-twitter-square:before{content:"\f081"} - .fa-facebook-square:before{content:"\f082"} - .fa-camera-retro:before{content:"\f083"} - .fa-key:before{content:"\f084"} - .fa-gears:before,.fa-cogs:before{content:"\f085"} - .fa-comments:before{content:"\f086"} - .fa-thumbs-o-up:before{content:"\f087"} - .fa-thumbs-o-down:before{content:"\f088"} - .fa-star-half:before{content:"\f089"} - .fa-heart-o:before{content:"\f08a"} - .fa-sign-out:before{content:"\f08b"} - .fa-linkedin-square:before{content:"\f08c"} - .fa-thumb-tack:before{content:"\f08d"} - .fa-external-link:before{content:"\f08e"} - .fa-sign-in:before{content:"\f090"} - .fa-trophy:before{content:"\f091"} - .fa-github-square:before{content:"\f092"} - .fa-upload:before{content:"\f093"} - .fa-lemon-o:before{content:"\f094"} - .fa-phone:before{content:"\f095"} - .fa-square-o:before{content:"\f096"} - .fa-bookmark-o:before{content:"\f097"} - .fa-phone-square:before{content:"\f098"} - .fa-twitter:before{content:"\f099"} - .fa-facebook:before{content:"\f09a"} - .fa-github:before{content:"\f09b"} - .fa-unlock:before{content:"\f09c"} - .fa-credit-card:before{content:"\f09d"} - .fa-rss:before{content:"\f09e"} - .fa-hdd-o:before{content:"\f0a0"} - .fa-bullhorn:before{content:"\f0a1"} - .fa-bell:before{content:"\f0f3"} - .fa-certificate:before{content:"\f0a3"} - .fa-hand-o-right:before{content:"\f0a4"} - .fa-hand-o-left:before{content:"\f0a5"} - .fa-hand-o-up:before{content:"\f0a6"} - .fa-hand-o-down:before{content:"\f0a7"} - .fa-arrow-circle-left:before{content:"\f0a8"} - .fa-arrow-circle-right:before{content:"\f0a9"} - .fa-arrow-circle-up:before{content:"\f0aa"} - .fa-arrow-circle-down:before{content:"\f0ab"} - .fa-globe:before{content:"\f0ac"} - .fa-wrench:before{content:"\f0ad"} - .fa-tasks:before{content:"\f0ae"} - .fa-filter:before{content:"\f0b0"} - .fa-briefcase:before{content:"\f0b1"} - .fa-fullscreen:before{content:"\f0b2"} - .fa-group:before{content:"\f0c0"} - .fa-chain:before,.fa-link:before{content:"\f0c1"} - .fa-cloud:before{content:"\f0c2"} - .fa-flask:before{content:"\f0c3"} - .fa-cut:before,.fa-scissors:before{content:"\f0c4"} - .fa-copy:before,.fa-files-o:before{content:"\f0c5"} - .fa-paperclip:before{content:"\f0c6"} - .fa-save:before,.fa-floppy-o:before{content:"\f0c7"} - .fa-square:before{content:"\f0c8"} - .fa-reorder:before{content:"\f0c9"} - .fa-list-ul:before{content:"\f0ca"} - .fa-list-ol:before{content:"\f0cb"} - .fa-strikethrough:before{content:"\f0cc"} - .fa-underline:before{content:"\f0cd"} - .fa-table:before{content:"\f0ce"} - .fa-magic:before{content:"\f0d0"} - .fa-truck:before{content:"\f0d1"} - .fa-pinterest:before{content:"\f0d2"} - .fa-pinterest-square:before{content:"\f0d3"} - .fa-google-plus-square:before{content:"\f0d4"} - .fa-google-plus:before{content:"\f0d5"} - .fa-money:before{content:"\f0d6"} - .fa-caret-down:before{content:"\f0d7"} - .fa-caret-up:before{content:"\f0d8"} - .fa-caret-left:before{content:"\f0d9"} - .fa-caret-right:before{content:"\f0da"} - .fa-columns:before{content:"\f0db"} - .fa-unsorted:before,.fa-sort:before{content:"\f0dc"} - .fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"} - .fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"} - .fa-envelope:before{content:"\f0e0"} - .fa-linkedin:before{content:"\f0e1"} - .fa-rotate-left:before,.fa-undo:before{content:"\f0e2"} - .fa-legal:before,.fa-gavel:before{content:"\f0e3"} - .fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"} - .fa-comment-o:before{content:"\f0e5"} - .fa-comments-o:before{content:"\f0e6"} - .fa-flash:before,.fa-bolt:before{content:"\f0e7"} - .fa-sitemap:before{content:"\f0e8"} - .fa-umbrella:before{content:"\f0e9"} - .fa-paste:before,.fa-clipboard:before{content:"\f0ea"} - .fa-lightbulb-o:before{content:"\f0eb"} - .fa-exchange:before{content:"\f0ec"} - .fa-cloud-download:before{content:"\f0ed"} - .fa-cloud-upload:before{content:"\f0ee"} - .fa-user-md:before{content:"\f0f0"} - .fa-stethoscope:before{content:"\f0f1"} - .fa-suitcase:before{content:"\f0f2"} - .fa-bell-o:before{content:"\f0a2"} - .fa-coffee:before{content:"\f0f4"} - .fa-cutlery:before{content:"\f0f5"} - .fa-file-text-o:before{content:"\f0f6"} - .fa-building:before{content:"\f0f7"} - .fa-hospital:before{content:"\f0f8"} - .fa-ambulance:before{content:"\f0f9"} - .fa-medkit:before{content:"\f0fa"} - .fa-fighter-jet:before{content:"\f0fb"} - .fa-beer:before{content:"\f0fc"} - .fa-h-square:before{content:"\f0fd"} - .fa-plus-square:before{content:"\f0fe"} - .fa-angle-double-left:before{content:"\f100"} - .fa-angle-double-right:before{content:"\f101"} - .fa-angle-double-up:before{content:"\f102"} - .fa-angle-double-down:before{content:"\f103"} - .fa-angle-left:before{content:"\f104"} - .fa-angle-right:before{content:"\f105"} - .fa-angle-up:before{content:"\f106"} - .fa-angle-down:before{content:"\f107"} - .fa-desktop:before{content:"\f108"} - .fa-laptop:before{content:"\f109"} - .fa-tablet:before{content:"\f10a"} - .fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"} - .fa-circle-o:before{content:"\f10c"} - .fa-quote-left:before{content:"\f10d"} - .fa-quote-right:before{content:"\f10e"} - .fa-spinner:before{content:"\f110"} - .fa-circle:before{content:"\f111"} - .fa-mail-reply:before,.fa-reply:before{content:"\f112"} - .fa-github-alt:before{content:"\f113"} - .fa-folder-o:before{content:"\f114"} - .fa-folder-open-o:before{content:"\f115"} - .fa-expand-o:before{content:"\f116"} - .fa-collapse-o:before{content:"\f117"} - .fa-smile-o:before{content:"\f118"} - .fa-frown-o:before{content:"\f119"} - .fa-meh-o:before{content:"\f11a"} - .fa-gamepad:before{content:"\f11b"} - .fa-keyboard-o:before{content:"\f11c"} - .fa-flag-o:before{content:"\f11d"} - .fa-flag-checkered:before{content:"\f11e"} - .fa-terminal:before{content:"\f120"} - .fa-code:before{content:"\f121"} - .fa-reply-all:before{content:"\f122"} - .fa-mail-reply-all:before{content:"\f122"} - .fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"} - .fa-location-arrow:before{content:"\f124"} - .fa-crop:before{content:"\f125"} - .fa-code-fork:before{content:"\f126"} - .fa-unlink:before,.fa-chain-broken:before{content:"\f127"} - .fa-question:before{content:"\f128"} - .fa-info:before{content:"\f129"} - .fa-exclamation:before{content:"\f12a"} - .fa-superscript:before{content:"\f12b"} - .fa-subscript:before{content:"\f12c"} - .fa-eraser:before{content:"\f12d"} - .fa-puzzle-piece:before{content:"\f12e"} - .fa-microphone:before{content:"\f130"} - .fa-microphone-slash:before{content:"\f131"} - .fa-shield:before{content:"\f132"} - .fa-calendar-o:before{content:"\f133"} - .fa-fire-extinguisher:before{content:"\f134"} - .fa-rocket:before{content:"\f135"} - .fa-maxcdn:before{content:"\f136"} - .fa-chevron-circle-left:before{content:"\f137"} - .fa-chevron-circle-right:before{content:"\f138"} - .fa-chevron-circle-up:before{content:"\f139"} - .fa-chevron-circle-down:before{content:"\f13a"} - .fa-html5:before{content:"\f13b"} - .fa-css3:before{content:"\f13c"} - .fa-anchor:before{content:"\f13d"} - .fa-unlock-o:before{content:"\f13e"} - .fa-bullseye:before{content:"\f140"} - .fa-ellipsis-horizontal:before{content:"\f141"} - .fa-ellipsis-vertical:before{content:"\f142"} - .fa-rss-square:before{content:"\f143"} - .fa-play-circle:before{content:"\f144"} - .fa-ticket:before{content:"\f145"} - .fa-minus-square:before{content:"\f146"} - .fa-minus-square-o:before{content:"\f147"} - .fa-level-up:before{content:"\f148"} - .fa-level-down:before{content:"\f149"} - .fa-check-square:before{content:"\f14a"} - .fa-pencil-square:before{content:"\f14b"} - .fa-external-link-square:before{content:"\f14c"} - .fa-share-square:before{content:"\f14d"} - .fa-compass:before{content:"\f14e"} - .fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"} - .fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"} - .fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"} - .fa-euro:before,.fa-eur:before{content:"\f153"} - .fa-gbp:before{content:"\f154"} - .fa-dollar:before,.fa-usd:before{content:"\f155"} - .fa-rupee:before,.fa-inr:before{content:"\f156"} - .fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"} - .fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"} - .fa-won:before,.fa-krw:before{content:"\f159"} - .fa-bitcoin:before,.fa-btc:before{content:"\f15a"} - .fa-file:before{content:"\f15b"} - .fa-file-text:before{content:"\f15c"} - .fa-sort-alpha-asc:before{content:"\f15d"} - .fa-sort-alpha-desc:before{content:"\f15e"} - .fa-sort-amount-asc:before{content:"\f160"} - .fa-sort-amount-desc:before{content:"\f161"} - .fa-sort-numeric-asc:before{content:"\f162"} - .fa-sort-numeric-desc:before{content:"\f163"} - .fa-thumbs-up:before{content:"\f164"} - .fa-thumbs-down:before{content:"\f165"} - .fa-youtube-square:before{content:"\f166"} - .fa-youtube:before{content:"\f167"} - .fa-xing:before{content:"\f168"} - .fa-xing-square:before{content:"\f169"} - .fa-youtube-play:before{content:"\f16a"} - .fa-dropbox:before{content:"\f16b"} - .fa-stack-overflow:before{content:"\f16c"} - .fa-instagram:before{content:"\f16d"} - .fa-flickr:before{content:"\f16e"} - .fa-adn:before{content:"\f170"} - .fa-bitbucket:before{content:"\f171"} - .fa-bitbucket-square:before{content:"\f172"} - .fa-tumblr:before{content:"\f173"} - .fa-tumblr-square:before{content:"\f174"} - .fa-long-arrow-down:before{content:"\f175"} - .fa-long-arrow-up:before{content:"\f176"} - .fa-long-arrow-left:before{content:"\f177"} - .fa-long-arrow-right:before{content:"\f178"} - .fa-apple:before{content:"\f179"} - .fa-windows:before{content:"\f17a"} - .fa-android:before{content:"\f17b"} - .fa-linux:before{content:"\f17c"} - .fa-dribbble:before{content:"\f17d"} - .fa-skype:before{content:"\f17e"} - .fa-foursquare:before{content:"\f180"} - .fa-trello:before{content:"\f181"} - .fa-female:before{content:"\f182"} - .fa-male:before{content:"\f183"} - .fa-gittip:before{content:"\f184"} - .fa-sun-o:before{content:"\f185"} - .fa-moon-o:before{content:"\f186"} - .fa-archive:before{content:"\f187"} - .fa-bug:before{content:"\f188"} - .fa-vk:before{content:"\f189"} - .fa-weibo:before{content:"\f18a"} - .fa-renren:before{content:"\f18b"} - .fa-pagelines:before{content:"\f18c"} - .fa-stack-exchange:before{content:"\f18d"} - .fa-arrow-circle-o-right:before{content:"\f18e"} - .fa-arrow-circle-o-left:before{content:"\f190"} - .fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"} - .fa-dot-circle-o:before{content:"\f192"} - .fa-wheelchair:before{content:"\f193"} - .fa-vimeo-square:before{content:"\f194"} - .fa-turkish-lira:before,.fa-try:before{content:"\f195"} - .fa-fax:before{content:"\f1ac"} - .fa-share-alt:before{content:"\f1e0"} - .fa-cubes:before{content:"\f1b3"} - .fa-eg:before{ - content:url(../images/loghi_branche/eg.png); - } - .fa-coca:before{ - content:url(../images/loghi_branche/coca.png); - } - .fa-rs:before{ - content:url(../images/loghi_branche/rs.png); - } - -/*********************************************************************************/ -/* Social Icon Styles */ -/*********************************************************************************/ - - ul.contact - { - padding: 1.5em 0 0 0; - list-style: none; - cursor: default; - } - - ul.contact li - { - display: inline-block; - margin: 0 1em; - } - - ul.contact li span - { - display: none; - margin: 0; - padding: 0; - } - - ul.contact li a - { - color: inherit; - font-size: 1.75em; - display: inline-block; - -moz-transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - -webkit-transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - -o-transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - -ms-transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - transition: color 0.35s ease-in-out, background-color 0.35s ease-in-out; - } - - ul.contact li a:hover - { - color: #fff; - } - -/*********************************************************************************/ -/* Header */ -/*********************************************************************************/ - - #header - { - position: relative; - background: url(../images/header.jpg) no-repeat bottom center; - background-attachment: fixed; - background-size: cover; - text-align: center; - } - - #header:before - { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - background: rgba(64,64,64,0.125); - } - -/*********************************************************************************/ -/* Logo */ -/*********************************************************************************/ - - #logo - { - position: relative; - z-index: 1; - } - - #logo h1 - { - color: #FFF; - } - - #logo a - { - display: block; - text-decoration: none; - font-weight: 300; - line-height: 1em; - font-size: 7em; - color: #FFF; - letter-spacing: -0.05em; - margin: 0 0 0.125em 0; - } - - #logo span - { - font-size: 1.4em; - color: #FFF; - } - -/*********************************************************************************/ -/* Nav */ -/*********************************************************************************/ - - #nav - { - } - - #nav-wrapper - { - background: rgba(0,0,0,.4); - position: absolute; - top: 0; - left: 0; - width: 100%; - } - - #nav > ul - { - margin: 0; - padding: 0; - text-align: center; - } - - #nav > ul > li - { - display: inline-block; - border-right: 1px solid; - border-color: rgba(255,255,255,.1); - } - - #nav > ul > li:last-child - { - padding-right: 0; - border-right: none; - } - - #nav > ul > li > a, - #nav > ul > li > span - { - display: inline-block; - padding: 1.5em 1.5em; - letter-spacing: 0.06em; - text-decoration: none; - text-transform: uppercase; - font-size: 1.1em; - outline: 0; - color: #FFF; - } - - #nav li.active a - { - color: #FFF; - } - - #nav > ul > li > ul - { - display: none; - } - -/*********************************************************************************/ -/* Main */ -/*********************************************************************************/ - - #main - { - position: relative; - background: #fff; - } - - .homepage #content - { - text-align: center; - } - - .homepage #content header h2 - { - } - - #sidebar h2 - { - display: block; - padding-bottom: 0.50em; - } - -/*********************************************************************************/ -/* Footer */ -/*********************************************************************************/ - - #footer - { - position: relative; - text-align: center; - } - - #footer header h2 - { - color: #FFF !important; - } - - #footer header .byline - { - color: rgba(255,255,255,.2); - } - -/*********************************************************************************/ -/* Copyright */ -/*********************************************************************************/ - - #copyright - { - position: relative; - text-align: center; - color: #774535; - } - - #copyright .container - { - padding: 3em 0em; - border-top: 1px solid; - border-color: rgba(255,255,255,.05); - color: rgba(255,255,255,.1); - } - - #copyright a - { - text-decoration: none; - color: rgba(255,255,255,.2); - } - -/*********************************************************************************/ -/* Featured */ -/*********************************************************************************/ - - #featured - { - position: relative; - background: #f2f2f2; - text-align: center; - } - - #featured h3 - { - display: block; - font-weight: 300; - } - - #featured .pennant - { - font-size: 4em; - height: 1.4em; - } - - #featured .button - { - margin-top: 1.5em; - } - -/*********************************************************************************/ -/* Tweet */ -/*********************************************************************************/ - - #tweet - { - position: relative; - text-align: center; - background: url(../images/header.jpg) no-repeat center center; - background-attachment: fixed; - background-size: cover; - } - - #tweet:before - { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - background: rgba(64,64,64,0.5); - } - - #tweet section - { - border-top: 1px solid; - border-bottom: 1px solid; - border-color: rgba(255,255,255,.1); - } - - #tweet blockquote - { - position: relative; - border: none; - margin: 0; - font-weight: 300; - color: rgba(255,255,255,.6); - } - -#content .row section header h2 -{ - line-height: 1.2em !important; -} - -/* Article headings */ -article h2 -{ - font-size: 1.8em; - font-weight: 300; - color: #777; - margin-top: 1.5em; - margin-bottom: 0.8em; -} diff --git a/assets/css/main.css b/assets/css/main.css deleted file mode 100644 index bd55dac..0000000 --- a/assets/css/main.css +++ /dev/null @@ -1,404 +0,0 @@ -/* - * Custom CSS for BitPrepared.it - * Essential styles that can't be handled by Tailwind - */ - -/* ===== TAILWIND CUSTOM CLASSES ===== */ -/* Custom color utility classes not generated by Tailwind */ -.text-primary { - color: #0a3d0a !important; -} - -.bg-accent { - background-color: #00d9ff !important; -} - -.text-dark { - color: #0a1f0a !important; -} - -.bg-primary { - background-color: #0a3d0a !important; -} - -.text-accent { - color: #00d9ff !important; -} - -/* ===== BASE STYLES ===== */ -body { - background: #161616; - color: #e8f5e8; -} - -#main-content { - margin-top: 20px; -} - -@media (max-width: 768px) { - #main-content { - margin-top: 0; - } -} - -/* ===== SKIP LINK ===== */ -.skip-link { - position: absolute; - top: -40px; - left: 0; - background: #00d9ff; - color: #0a1f0a; - padding: 8px; - z-index: 100; - text-decoration: none; - font-weight: 600; -} - -.skip-link:focus { top: 0; } - -/* ===== NAVBAR ===== */ -.navbar { - position: fixed; - top: 0; - left: 0; - right: 0; - background: rgba(10, 31, 10, 0.95); - backdrop-filter: blur(10px); - border-bottom: 1px solid #1a7f1a; - z-index: 1000; - padding: 1rem 1.5rem; -} - -.navbar-content { - max-width: 1200px; - margin: 0 auto; - display: flex; - justify-content: space-between; - align-items: center; - position: relative; -} - -.navbar-brand { - font-family: 'JetBrains Mono', monospace; - font-weight: 700; - font-size: 1.25rem; - color: #e8f5e8; - text-decoration: none; -} - -.navbar-brand:focus { - outline: 3px solid #00d9ff; - outline-offset: 2px; -} - -.navbar-toggle { - display: none; - flex-direction: column; - background: none; - border: none; - cursor: pointer; - padding: 0.5rem; - z-index: 1001; -} - -.navbar-toggle span { - width: 25px; - height: 3px; - background: #e8f5e8; - margin: 3px 0; - transition: 300ms ease-out; - border-radius: 2px; -} - -.navbar-toggle.active span:nth-child(1) { - transform: rotate(45deg) translate(8px, 8px); -} - -.navbar-toggle.active span:nth-child(2) { - opacity: 0; -} - -.navbar-toggle.active span:nth-child(3) { - transform: rotate(-45deg) translate(7px, -7px); -} - -.navbar-nav { - display: flex; - list-style: none; - margin: 0; - padding: 0; - gap: 2rem; -} - -.navbar-nav li a { - color: #e8f5e8; - text-decoration: none; - transition: color 0.15s ease-out; -} - -.navbar-nav li a:hover { - color: #00d9ff; -} - -.navbar-nav li a:focus { - background: rgba(26, 127, 26, 0.3); - outline: 3px solid #00d9ff; - outline-offset: 2px; -} - -@media (max-width: 768px) { - .navbar-toggle { - display: flex; - } - - .navbar-nav { - display: none; - position: absolute; - top: 100%; - left: 0; - right: 0; - background: rgba(10, 31, 10, 0.98); - flex-direction: column; - padding: 1rem; - gap: 1rem; - } - - .navbar-nav.active { - display: flex; - } -} - -/* ===== FOOTER ===== */ -footer { - background: rgba(10, 31, 10, 0.95); - border-top: 1px solid #1a7f1a; - padding: 2rem 1.5rem; - text-align: center; - margin-top: auto; -} - -.footer-social { - display: flex; - justify-content: center; - gap: 1.5rem; - margin-bottom: 1rem; - flex-wrap: wrap; -} - -.footer-social a { - color: #e8f5e8; - text-decoration: none; - transition: color 0.15s ease-out; -} - -.footer-social a:hover { - color: #00d9ff; -} - -.footer-social a:focus { - outline: 3px solid #00d9ff; - outline-offset: 2px; - background: rgba(26, 127, 26, 0.3); -} - -.footer-social a span { - /* Screen reader only - NOT display: none for accessibility */ - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} - -.footer-links { - margin-bottom: 1rem; -} - -.footer-links a { - color: #e8f5e8; - text-decoration: none; - margin: 0 0.5rem; -} - -.footer-links a:hover { - color: #00d9ff; -} - -.footer-copy { - color: #e8f5e8; - font-size: 0.875rem; - line-height: 1.5; -} - -/* ===== FOOTER LEGAL ===== */ -.footer-legal { - margin-bottom: 1rem; - font-size: 0.875rem; -} - -.footer-legal a { - color: #e8f5e8; - text-decoration: none; - margin: 0 0.5rem; -} - -.footer-legal a:hover { - color: #00d9ff; -} - -.footer-legal .separator { - color: #666666; - margin: 0 0.5rem; -} - -/* ===== BREADCRUMB ===== */ -.breadcrumb-nav { - padding: 0.75rem 1.5rem; - background: transparent; - border-bottom: none; -} - -.breadcrumb-list { - display: flex; - flex-wrap: wrap; - list-style: none; - margin: 0; - padding: 0; - max-width: 1200px; -} - -.breadcrumb-list li { - display: flex; - align-items: center; - font-size: 0.875rem; -} - -.breadcrumb-list li::after { - content: '/'; - margin: 0 0.5rem; - color: #1a7f1a; -} - -.breadcrumb-list li:last-child::after { - content: ''; -} - -.breadcrumb-list a { - color: #1a7f1a; - text-decoration: none; - transition: color 0.15s ease-out; -} - -.breadcrumb-list a:hover { - color: #00d9ff; - text-decoration: underline; -} - -.breadcrumb-list span { - color: #666666; - font-weight: 600; -} - -@media (max-width: 768px) { - .breadcrumb-nav { - padding: 0.5rem 1rem; - font-size: 0.8125rem; - } - - .breadcrumb-list li { - font-size: 0.8125rem; - } -} - -/* ===== PAGE BODY STYLES ===== */ -.page-body p:first-child { - margin-top: 0; -} - -.page-body p:last-child { - margin-bottom: 0; -} - -.page-body h2, -.page-body h3, -.page-body h4 { - color: #00d9ff; - margin-top: 2rem; - margin-bottom: 1rem; -} - -.page-body h2:first-child, -.page-body h3:first-child, -.page-body h4:first-child { - margin-top: 0; -} - -.page-body a { - color: #00d9ff; - text-decoration: underline; -} - -.page-body .btn-primary, -.page-body .btn-secondary, -.page-body a.btn-primary, -.page-body a.btn-secondary, -.page-body .btn, -.page-body .btn-event, -.page-body .btn-card, -.page-body .btn-cta, -.page-body .btn-tag, -.page-body a.btn, -.page-body a.btn-event, -.page-body a.btn-card, -.page-body a.btn-cta, -.page-body a.btn-tag { - text-decoration: none !important; -} - -.page-body .btn:hover, -.page-body a.btn:hover, -.page-body .btn-event:hover, -.page-body .btn-card:hover, -.page-body .btn-cta:hover, -.page-body .btn-tag:hover { - text-decoration: none !important; -} - -.page-body ul, -.page-body ol { - margin-bottom: 1rem; - margin-top: 1rem; - padding-left: 2rem; -} - -.page-body li { - margin-bottom: 0.5rem; -} - -.page-body img { - max-width: 100%; - height: auto; -} - -.page-body img:not([alt="software icon"]) { - display: block; - margin: 1rem auto; -} - -/* Software page icons left-aligned */ -body[class*="software"] .page-body img, -.permalink-software .page-body img { - display: inline-block; - margin: 0 0.5rem 0 0; - vertical-align: middle; -} - -@media (max-width: 768px) { - .page-body { - font-size: 1rem; - } -} diff --git a/assets/css/scout-tech.css b/assets/css/scout-tech.css deleted file mode 100644 index 630eb2f..0000000 --- a/assets/css/scout-tech.css +++ /dev/null @@ -1,990 +0,0 @@ -/* - * Scout Tech Modern - BitPrepared.it - * Design System: Scout Tech Modern - * Palette: Verde foresta + Matrix rivisitato + Ciano accents - */ - -/* ===== RESET & BASE ===== */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -html { - font-size: 16px; - scroll-behavior: smooth; -} - -body { - font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif; - font-weight: 400; - line-height: 1.6; - color: #0a1f0a; - background: #161616; - min-height: 100vh; - overflow-x: hidden; -} - -/* ===== TYPOGRAPHY ===== */ -h1, h2, h3, h4, h5, h6 { - font-family: JetBrains Mono, Courier New, monospace; - font-weight: 700; - line-height: 1.2; - color: #0a3d0a; -} - -h1 { font-size: 2.5rem; } -h2 { font-size: 2rem; } -h3 { font-size: 1.75rem; } -h4 { font-size: 1.5rem; } -h5 { font-size: 1.25rem; } -h6 { font-size: 1rem; } - -p { - margin-bottom: 1rem; -} - -a { - color: #1a7f1a; - text-decoration: none; - transition: color 150ms ease-out; - position: relative; -} - -a:not(.btn):not(.btn-primary):not(.btn-event):not(.btn-card):not(.btn-cta):not(.btn-tag)::after { - content: ''; - position: absolute; - bottom: -2px; - left: 0; - width: 0; - height: 2px; - background: #00d9ff; - transition: width 300ms ease-out; -} - -a:not(.btn):not(.btn-primary):not(.btn-event):not(.btn-card):not(.btn-cta):not(.btn-tag):hover::after { - width: 100%; -} - -a:hover { - color: #00d9ff; -} - -/* ===== LAYOUT ===== */ -.container { - width: 100%; - max-width: 1200px; - margin: 0 auto; - padding: 0 1.5rem; -} - -main { - min-height: 100vh; - display: flex; - flex-direction: column; -} - -/* ===== HERO SECTION ===== */ -.hero { - text-align: center; - min-height: 35vh; - max-height: 45vh; - padding: 2rem 1.5rem; - background: url(../images/header.jpg) no-repeat center center; - background-size: cover; - background-attachment: fixed; - position: relative; - overflow: hidden; - display: flex; - align-items: center; - justify-content: center; -} - -.hero-evento { - min-height: 40vh; - max-height: 55vh; - padding: 2.5rem 1.5rem; -} - -@media (max-width: 768px) { - .hero-evento { - min-height: 55vh; - max-height: 70vh; - padding: 4.5rem 1rem 1.5rem 1rem; - } - - .hero-evento .hero-title { - font-size: 1.75rem; - margin-bottom: 0.4rem; - } - - .hero-evento .hero-subtitle { - font-size: 0.95rem; - margin-bottom: 0.4rem; - } - - .hero-evento .btn-cta { - font-size: 0.85rem; - padding: 0.5rem 1rem; - margin-top: 0.5rem; - } -} - -.hero::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.05'/%3E%3C/svg%3E"); - opacity: 0.3; - pointer-events: none; -} - -.hero-content { - position: relative; - z-index: 1; -} - -.hero-logo { - max-width: 300px; - height: auto; - margin: 0 auto 2rem; - display: block; -} - -.hero-title { - color: #e8f5e8; - font-size: 3rem; - - margin-top: 4rem; - margin-bottom: 1rem; - font-family: JetBrains Mono, Courier New, monospace; - font-weight: 700; -} - -.hero-subtitle { - font-size: 1.5rem; - color: #00d9ff; - font-family: JetBrains Mono, Courier New, monospace; - font-weight: 500; -} - -/* ===== EVENTS GRID ===== */ -.events-section { - padding: 4rem 1.5rem; - flex: 1; -} - -.events-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); - gap: 2rem; - max-width: 1200px; - margin: 0 auto; -} - -/* ===== EVENT CARDS ===== */ -.evento-card { - background: #ffffff; - border: 1px solid #1a7f1a; - border-radius: 8px; - overflow: hidden; - transition: transform 300ms ease-out, box-shadow 300ms ease-out; - opacity: 0; - transform: translateY(30px); - animation: fadeUp 0.6s ease-out forwards; - display: flex; - flex-direction: column; - height: 100%; -} - -.evento-card:nth-child(1) { animation-delay: 0.1s; } -.evento-card:nth-child(2) { animation-delay: 0.2s; } -.evento-card:nth-child(3) { animation-delay: 0.3s; } - -@keyframes fadeUp { - to { - opacity: 1; - transform: translateY(0); - } -} - -.evento-card:hover { - transform: translateY(-4px); - box-shadow: 0 8px 24px rgba(26, 127, 26, 0.3); -} - -.evento-card img { - width: 100%; - height: 200px; - object-fit: cover; - transition: transform 300ms ease-out; -} - -.card-image-wrapper { - position: relative; - overflow: hidden; -} - -.post-date { - position: absolute; - top: 1rem; - right: 1rem; - background: #00d9ff; - color: #0a1f0a; - padding: 0.25rem 0.75rem; - border-radius: 1rem; - font-size: 0.75rem; - font-weight: 600; - font-family: JetBrains Mono, Courier New, monospace; - z-index: 1; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); -} - -.evento-card:hover img { - transform: scale(1.05); -} - -.evento-content { - padding: 1.5rem; - display: flex; - flex-direction: column; - flex-grow: 1; -} - -.evento-card h2 { - font-size: 1.5rem; - color: #0a3d0a; - margin-bottom: 1rem; -} - -.evento-card p { - color: #666666; - margin-bottom: 1.5rem; - line-height: 1.5; - flex-grow: 1; -} - -.evento-card .btn-primary { - margin-top: auto; -} - -/* ===== BUTTONS ===== */ -/* Base button class */ -.btn { - display: inline-block; - text-align: center; - text-decoration: none !important; - font-family: JetBrains Mono, Courier New, monospace; - font-weight: 600; - border: none; - border-radius: 2rem; - cursor: pointer; - transition: all 150ms ease-out; - padding: 0.75rem 1.5rem; - outline: none; -} - -.btn:hover { - outline: none; -} - -.btn:focus { - /* Focus indicators now defined in accessibility section below */ -} - -/* Primary button - green, default */ -.btn-primary { - background: #1a7f1a; - color: #ffffff; -} - -.btn-primary:hover { - background: #00d9ff; - color: #000000; - text-decoration: none !important; -} - -.btn-primary:active { - transform: scale(0.98); -} - -/* Event button - darker green for event cards */ -.btn-event { - background: #1a7f1a; - color: #ffffff; -} - -.btn-event:hover { - background: #00d9ff; - color: #000000; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 217, 255, 0.3); - text-decoration: none !important; -} - -.btn-event:active { - transform: translateY(0); -} - -/* Card button - for blog/article cards */ -.btn-card { - background: #1a7f1a; - color: #ffffff; - padding: 0.75rem 1.5rem; -} - -.btn-card:hover { - background: #00d9ff; - color: #000000; - text-decoration: none !important; -} - -/* CTA button - prominent call-to-action */ -.btn-cta { - background: #00d9ff; - color: #000000; - font-weight: 700; - padding: 0.75rem 1.5rem; -} - -.btn-cta:hover { - background: #00d9ff; - color: #000000; - transform: scale(1.05); - box-shadow: 0 8px 16px rgba(0, 217, 255, 0.4); - text-decoration: none !important; -} - -.btn-cta:active { - transform: scale(0.98); -} - -/* Tag button - small, pill */ -.btn-tag { - background: #1a7f1a; - color: #ffffff; - padding: 0.25rem 0.75rem; - font-size: 0.875rem; - border-radius: 1rem; - margin: 0.25rem; - display: inline-block; -} - -.btn-tag:hover { - background: #00d9ff; - color: #000000; - text-decoration: none !important; -} - -/* Card actions wrapper - aligns buttons to bottom */ -.card-actions { - margin-top: auto; - display: flex; - flex-direction: column; -} - -/* Post tags section - better vertical spacing when wrapping */ -.post-tags { - display: flex; - flex-wrap: wrap; - gap: 1rem; - align-items: center; - line-height: 2; -} - -.post-footer { - border-top: 1px solid #1a7f1a; - margin-top: 4rem; - padding-top: 1.5rem; -} - -/* ===== FOOTER ===== */ -footer { - background: #0a1f0a; - border-top: 1px solid #1a7f1a; - padding: 2rem 1.5rem; - text-align: center; - color: #0a1f0a; -} - -footer a { - color: #0a1f0a; - margin: 0 1rem; -} - -footer a::after { - display: none; -} - -.footer-social { - display: flex; - justify-content: center; - gap: 0.75rem; - margin-bottom: 1.5rem; - flex-wrap: wrap; -} - -.footer-social a { - color: #e8f5e8; - text-decoration: none; - transition: color 0.15s ease-out; -} - -.footer-social a:hover { - color: #00d9ff; -} - -.footer-social a:focus { - outline: 3px solid #00d9ff; - outline-offset: 2px; - background: rgba(26, 127, 26, 0.3); -} - -.footer-social a span { - /* Screen reader only - NOT display: none for accessibility */ - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} - -.footer-links { - margin-bottom: 1rem; -} - -.footer-copy { - font-size: 0.875rem; -} - -/* ===== UTILITY CLASSES ===== */ -.text-center { text-align: center; } -.text-muted { color: #666666; } -.mt-lg { margin-top: 2rem; } -.mb-lg { margin-bottom: 2rem; } - -/* ================================================== - BRAND COLOR UTILITIES - Sostituiscono inline styles in index.html - ================================================== */ - -.text-brand-dark { - color: #0a3d0a; -} - -/* ===== SCROLL REVEAL ===== */ -.reveal { - opacity: 0; - transform: translateY(30px); - transition: opacity 0.6s ease-out, transform 0.6s ease-out; - display: flex; - flex-direction: column; - height: 100%; -} - -.reveal.active { - opacity: 1; - transform: translateY(0); -} - -/* ===== RESPONSIVE BASE ===== */ -@media (max-width: 1024px) { - .events-grid { - grid-template-columns: repeat(2, 1fr); - } - - .hero-title { - font-size: 2.5rem; - color: #e8f5e8; - } -} - -/* ===== TAGS PAGE ===== */ -#tag-view { - display: none; -} - - -.tags-archive h1 { - text-align: center; - color: #00d9ff; - margin-bottom: 2rem; -} - -.tags-list { - display: flex; - flex-wrap: wrap; - gap: 1.5rem; - justify-content: center; - list-style: none; - padding: 0; -} - -.tags-list li { - margin: 0; -} - -.tag-link { - display: inline-block; - background: #1a7f1a !important; - color: #ffffff !important; - padding: 0.5rem 1rem; - border-radius: 2rem; - text-decoration: none !important; - transition: all 300ms ease-out; - border: none !important; - box-shadow: none !important; - outline: none !important; - border-bottom: none !important; -} - -.tag-link:hover, -.tag-link:focus, -.tag-link:active { - background: #00d9ff !important; - color: #000000 !important; - text-shadow: none !important; - transform: translateY(-2px); - box-shadow: 0 6px 12px rgba(0, 217, 255, 0.4) !important; - outline: none !important; - text-decoration: none !important; - border: none !important; - border-bottom: none !important; -} - -.tag-count { - color: #ffffff !important; - font-size: 0.875rem; - font-weight: 700; - margin-left: 0.25rem; - text-shadow: 0 1px 2px rgba(0,0,0,0.3) !important; -} - -.tag-link:hover .tag-count, -.tag-link:focus .tag-count, -.tag-link:active .tag-count { - color: #000000 !important; - text-shadow: none !important; -} - -.tag-header { - text-align: center; - margin-bottom: 4rem; - padding-bottom: 1.5rem; - border-bottom: 2px solid #1a7f1a; -} - -.back-link { - display: inline-block; - color: #00d9ff; - text-decoration: none; - margin-bottom: 1.5rem; -} - -.back-link:hover { - text-decoration: underline; -} - -.tag-header h1 { - color: #00d9ff; - font-size: 2.5rem; - margin-bottom: 1rem; -} - - -.blog-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2rem; -} - - - - - - - -.post-excerpt { - color: #0a1f0a; - line-height: 1.6; - margin-bottom: 1.5rem; -} - -@media (max-width: 768px) { - .tag-header h1 { - font-size: 2rem; - } - - .tag-posts { - gap: 1.5rem; - } -} - -/* ===== PERCORSO TIMELINE ===== */ -.percorso-timeline { - display: flex; - justify-content: space-between; - align-items: flex-start; - max-width: 1200px; - margin: 0 auto; - position: relative; - gap: 2rem; - padding: 4rem 0; -} - -/* Linea che collega le tappe */ -.percorso-timeline::before { - content: ''; - position: absolute; - top: 100px; - left: 15%; - right: 15%; - height: 4px; - background: linear-gradient(90deg, #1a7f1a 0%, #00d9ff 100%); - z-index: 0; -} - -/* Tappa del percorso */ -.percorso-tappa { - flex: 1; - display: flex; - flex-direction: column; - align-items: center; - position: relative; - z-index: 1; - max-width: 320px; -} - -/* Card stessa altezza sulla stessa riga */ -.percorso-timeline { - align-items: stretch; -} - -.tappa-icon { - width: 80px; - height: 80px; - border-radius: 50%; - background: #1a7f1a; - border: 4px solid #00d9ff; - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 1.5rem; - position: relative; - z-index: 2; - transition: transform 300ms ease-out; -} - -/* Colori specifici per branca */ -.percorso-tappa:nth-child(1) .tappa-icon { - background: #1a7f1a; /* Verde - EG */ - border-color: #00d9ff; -} - -.percorso-tappa:nth-child(2) .tappa-icon { - background: #cc0000; /* Rosso - RS */ - border-color: #ff6b6b; -} - -.percorso-tappa:nth-child(3) .tappa-icon { - background: #7b2d8e; /* Viola - Coca */ - border-color: #da70d6; -} - -.percorso-tappa:hover .tappa-icon { - transform: scale(1.1); -} - -.percorso-tappa:nth-child(1):hover .tappa-icon { - box-shadow: 0 0 30px rgba(0, 217, 255, 0.5); -} - -.percorso-tappa:nth-child(2):hover .tappa-icon { - box-shadow: 0 0 30px rgba(255, 107, 107, 0.5); -} - -.percorso-tappa:nth-child(3):hover .tappa-icon { - box-shadow: 0 0 30px rgba(218, 112, 214, 0.5); -} - -.tappa-icon img { - width: 60px; - height: 60px; - object-fit: contain; -} - -.tappa-card { - background: #ffffff; - border-radius: 8px; - padding: 1.5rem; - border: 2px solid #1a7f1a; - transition: all 300ms ease-out; - display: flex; - flex-direction: column; - flex: 1; -} - -.percorso-tappa:hover .tappa-card { - transform: translateY(-8px); - box-shadow: 0 8px 24px rgba(26, 127, 26, 0.3); - border-color: #00d9ff; -} - -.tappa-label { - text-align: center; - margin-bottom: 1rem; - font-family: JetBrains Mono, Courier New, monospace; - font-weight: 700; - font-size: 1.5rem; - color: #ffffff; - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.tappa-eta { - text-align: center; - font-size: 0.875rem; - color: #00d9ff; - margin-bottom: 1rem; - font-family: JetBrains Mono, Courier New, monospace; -} - -.tappa-card h3 { - font-size: 1.25rem; - color: #0a3d0a; - margin-bottom: 1rem; - text-align: center; -} - -.tappa-card p { - font-size: 0.95rem; - color: #666666; - margin-bottom: 1.5rem; - text-align: center; - line-height: 1.5; -} - -.tappa-card .btn-primary { - width: 100%; - font-size: 0.9rem; - margin-top: auto; -} - -/* Responsive Tablet */ -@media (max-width: 1024px) and (min-width: 769px) { - .percorso-timeline { - gap: 1rem; - padding: 4rem 1rem; - align-items: stretch; - } - - .percorso-tappa { - max-width: 280px; - } - - .percorso-timeline::before { - left: 10%; - right: 10%; - } -} - -/* Responsive Mobile */ -@media (max-width: 768px) { - .percorso-timeline { - flex-direction: column; - align-items: center; - gap: 4rem; - padding: 1.5rem 0; - } - - .percorso-timeline::before { - left: 50%; - top: 0; - bottom: 0; - width: 4px; - height: auto; - transform: translateX(-50%); - } - - .percorso-tappa { - max-width: 100%; - } - - .tappa-icon { - margin-bottom: 1rem; - } -} - -/* ===== ACCESSIBILITY: FOCUS INDICATORS ===== */ -/* Focus styles for ALL interactive elements - WCAG 2.4.7 */ - -a:focus, -button:focus, -[tabindex]:focus { - outline: 3px solid #00d9ff !important; - outline-offset: 2px !important; - box-shadow: 0 0 0 4px rgba(0, 217, 255, 0.3) !important; -} - -/* Button focus overrides - CRITICAL FIX */ -.btn:focus, -.btn-primary:focus, -.btn-event:focus, -.btn-card:focus, -.btn-cta:focus, -.btn-tag:focus { - outline: 3px solid #00d9ff !important; - outline-offset: 2px !important; - box-shadow: 0 0 0 4px rgba(0, 217, 255, 0.3) !important; -} - -/* Navigation focus */ -.navbar-brand:focus, -.navbar-nav a:focus { - background: rgba(26, 127, 26, 0.3) !important; - outline: 3px solid #00d9ff !important; - outline-offset: 2px !important; -} - -/* Footer focus */ -footer a:focus { - outline: 3px solid #00d9ff !important; - outline-offset: 2px !important; - background: rgba(26, 127, 26, 0.3) !important; -} - -/* Tag link focus */ -.tag-link:focus { - outline: 3px solid #00d9ff !important; - outline-offset: 2px !important; - box-shadow: 0 0 0 4px rgba(0, 217, 255, 0.3) !important; -} - -/* ===== SOFTWARE GRID ===== */ -.software-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); - gap: 1.5rem; - margin-top: 2rem; -} - -.software-item { - display: flex; - align-items: flex-start; - gap: 1rem; - padding: 1.25rem; - background: #ffffff; - border: 2px solid #1a7f1a; - border-radius: 8px; - transition: all 300ms ease-out; -} - -.software-item:hover { - transform: translateY(-4px); - box-shadow: 0 8px 24px rgba(26, 127, 26, 0.3); - border-color: #00d9ff; -} - -.software-icon img { - width: 64px; - height: 64px; - object-fit: contain; - flex-shrink: 0; -} - -.software-info { - flex: 1; - min-width: 0; -} - -.software-name { - margin-bottom: 0.5rem; -} - -.software-name a { - font-size: 1.25rem; - font-weight: 600; - color: #0a3d0a; - text-decoration: none; - transition: color 150ms ease-out; -} - -.software-name a:hover { - color: #00d9ff; -} - -.software-description { - font-size: 0.95rem; - color: #0a1f0a; - line-height: 1.5; -} - -/* ===== HERO MOBILE ===== */ -@media (max-width: 768px) { - .hero { - padding: 4.5rem 1rem 1.5rem 1rem; - } - - .hero-title { - font-size: 1.75rem; - margin-bottom: 0.5rem; - } - - .hero-subtitle { - font-size: 0.95rem; - } -} - -@media (max-width: 640px) { - .software-grid { - grid-template-columns: 1fr; - } - - .software-item { - flex-direction: column; - text-align: center; - } - - .software-icon { - margin: 0 auto; - } -} - -/* ===== EDIT BUTTON (Development Only) ===== */ -.evento-edit-icon { - background: #ffffff; - color: #0a3d0a; - border: 2px solid #0a3d0a; - border-radius: 4px; - width: 50px; - height: 50px; - font-size: 20px; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - box-shadow: 0 4px 12px rgba(0,0,0,0.15); - transition: all 300ms ease; -} - -.evento-edit-icon:hover { - background: #f5f5f5; - border-color: #0a5d0a; - transform: translateY(-2px); -} - -/* Edit button positioning */ -#edit-btn { - position: fixed !important; - top: 20px !important; - right: 20px !important; - z-index: 10000 !important; -} diff --git a/assets/js/html5shiv.js b/assets/js/html5shiv.js deleted file mode 100644 index dcf351c..0000000 --- a/assets/js/html5shiv.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); -a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; -c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| -"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); -for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d' - } - }, - overlays: { - titleBar: { - breakpoints: 'mobile', - position: 'top-left', - height: 44, - width: '100%', - html: '' + - '' - } - } - } - - -}); diff --git a/assets/js/jquery.min.js b/assets/js/jquery.min.js deleted file mode 100644 index 73f33fb..0000000 --- a/assets/js/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f -}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="
a",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/\s*$/g,sb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?""!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("