diff --git a/aurora-livecam/index.php b/aurora-livecam/index.php
index 0352a2a..142a07d 100644
--- a/aurora-livecam/index.php
+++ b/aurora-livecam/index.php
@@ -1324,6 +1324,13 @@ class AdminManager {
// API-KEY FELD KOMPLETT ENTFERNT
+ $output .= '
';
$output .= '
Standort (Anzeigename) ';
$output .= '
';
diff --git a/photography-tools/css/style.css b/photography-tools/css/style.css
new file mode 100644
index 0000000..d9ec1f7
--- /dev/null
+++ b/photography-tools/css/style.css
@@ -0,0 +1,1757 @@
+/* ==================== CSS CUSTOM PROPERTIES ==================== */
+:root {
+ --bg-primary: #0a0a0f;
+ --bg-secondary: #12121a;
+ --bg-card: #1a1a28;
+ --bg-card-hover: #222236;
+ --bg-input: #15152a;
+ --text-primary: #eaeaf0;
+ --text-secondary: #9090a8;
+ --text-muted: #606078;
+ --accent: #6c5ce7;
+ --accent-light: #a29bfe;
+ --accent-dark: #4834d4;
+ --accent-glow: rgba(108, 92, 231, 0.3);
+ --success: #00cec9;
+ --success-glow: rgba(0, 206, 201, 0.2);
+ --warning: #fdcb6e;
+ --danger: #ff6b6b;
+ --danger-glow: rgba(255, 107, 107, 0.2);
+ --gradient-1: linear-gradient(135deg, #6c5ce7, #a29bfe);
+ --gradient-2: linear-gradient(135deg, #0a0a0f 0%, #1a1a28 100%);
+ --gradient-hero: linear-gradient(135deg, #0a0a12, #12122a 40%, #1a1040 70%, #0a0a12);
+ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3);
+ --shadow-md: 0 4px 20px rgba(0, 0, 0, 0.4);
+ --shadow-lg: 0 8px 40px rgba(0, 0, 0, 0.5);
+ --shadow-glow: 0 0 30px var(--accent-glow);
+ --radius-sm: 8px;
+ --radius-md: 12px;
+ --radius-lg: 20px;
+ --radius-xl: 28px;
+ --font-main: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
+ --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
+ --transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+/* ==================== RESET & BASE ==================== */
+*, *::before, *::after {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+html {
+ scroll-behavior: smooth;
+ font-size: 16px;
+}
+
+body {
+ font-family: var(--font-main);
+ background: var(--bg-primary);
+ color: var(--text-primary);
+ line-height: 1.7;
+ overflow-x: hidden;
+ -webkit-font-smoothing: antialiased;
+}
+
+::selection {
+ background: var(--accent);
+ color: white;
+}
+
+/* ==================== SCROLLBAR ==================== */
+::-webkit-scrollbar {
+ width: 8px;
+}
+::-webkit-scrollbar-track {
+ background: var(--bg-primary);
+}
+::-webkit-scrollbar-thumb {
+ background: var(--accent-dark);
+ border-radius: 4px;
+}
+::-webkit-scrollbar-thumb:hover {
+ background: var(--accent);
+}
+
+/* ==================== NAVIGATION ==================== */
+.navbar {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 1000;
+ padding: 1rem 0;
+ transition: var(--transition);
+ backdrop-filter: blur(0px);
+}
+
+.navbar.scrolled {
+ background: rgba(10, 10, 15, 0.9);
+ backdrop-filter: blur(20px);
+ padding: 0.6rem 0;
+ box-shadow: 0 1px 30px rgba(0, 0, 0, 0.5);
+ border-bottom: 1px solid rgba(108, 92, 231, 0.1);
+}
+
+.nav-container {
+ max-width: 1400px;
+ margin: 0 auto;
+ padding: 0 2rem;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+.nav-logo {
+ font-size: 1.3rem;
+ font-weight: 800;
+ color: var(--text-primary);
+ text-decoration: none;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ letter-spacing: -0.5px;
+}
+
+.logo-icon {
+ font-size: 1.6rem;
+ color: var(--accent-light);
+}
+
+.nav-menu {
+ list-style: none;
+ display: flex;
+ gap: 0.5rem;
+}
+
+.nav-link {
+ color: var(--text-secondary);
+ text-decoration: none;
+ padding: 0.5rem 1rem;
+ border-radius: var(--radius-sm);
+ font-size: 0.9rem;
+ font-weight: 500;
+ transition: var(--transition);
+}
+
+.nav-link:hover, .nav-link.active {
+ color: var(--text-primary);
+ background: rgba(108, 92, 231, 0.15);
+}
+
+/* ==================== LANGUAGE SWITCHER ==================== */
+.lang-switcher {
+ position: relative;
+ margin-left: auto;
+ margin-right: 1rem;
+}
+
+.lang-current {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.4rem 0.8rem;
+ background: rgba(108, 92, 231, 0.12);
+ border: 1px solid rgba(108, 92, 231, 0.2);
+ border-radius: 50px;
+ color: var(--text-primary);
+ cursor: pointer;
+ font-family: var(--font-main);
+ font-size: 0.85rem;
+ font-weight: 600;
+ transition: var(--transition);
+}
+
+.lang-current:hover {
+ background: rgba(108, 92, 231, 0.2);
+ border-color: rgba(108, 92, 231, 0.4);
+}
+
+.lang-current svg {
+ transition: transform 0.2s ease;
+}
+
+.lang-switcher.open .lang-current svg {
+ transform: rotate(180deg);
+}
+
+.lang-flag {
+ font-size: 0.8rem;
+ font-weight: 800;
+ letter-spacing: 1px;
+ color: var(--accent-light);
+}
+
+.lang-dropdown {
+ position: absolute;
+ top: calc(100% + 8px);
+ right: 0;
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.2);
+ border-radius: var(--radius-md);
+ padding: 0.4rem;
+ min-width: 180px;
+ box-shadow: var(--shadow-lg);
+ opacity: 0;
+ visibility: hidden;
+ transform: translateY(-8px);
+ transition: all 0.2s ease;
+ z-index: 1002;
+}
+
+.lang-switcher.open .lang-dropdown {
+ opacity: 1;
+ visibility: visible;
+ transform: translateY(0);
+}
+
+.lang-option {
+ display: flex;
+ align-items: center;
+ gap: 0.6rem;
+ width: 100%;
+ padding: 0.6rem 0.8rem;
+ background: none;
+ border: none;
+ color: var(--text-secondary);
+ cursor: pointer;
+ font-family: var(--font-main);
+ font-size: 0.85rem;
+ border-radius: var(--radius-sm);
+ transition: var(--transition);
+ text-align: left;
+}
+
+.lang-option:hover {
+ background: rgba(108, 92, 231, 0.12);
+ color: var(--text-primary);
+}
+
+.lang-option.active {
+ background: rgba(108, 92, 231, 0.2);
+ color: var(--accent-light);
+ font-weight: 600;
+}
+
+.lang-code {
+ font-weight: 800;
+ font-size: 0.75rem;
+ letter-spacing: 0.5px;
+ color: var(--accent-light);
+ min-width: 24px;
+}
+
+.nav-toggle {
+ display: none;
+ flex-direction: column;
+ gap: 5px;
+ background: none;
+ border: none;
+ cursor: pointer;
+ padding: 5px;
+}
+
+.nav-toggle span {
+ width: 24px;
+ height: 2px;
+ background: var(--text-primary);
+ transition: var(--transition);
+ border-radius: 2px;
+}
+
+/* ==================== HERO ==================== */
+.hero {
+ min-height: 100vh;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ background: var(--gradient-hero);
+ overflow: hidden;
+}
+
+.hero-bg {
+ position: absolute;
+ inset: 0;
+ overflow: hidden;
+}
+
+.hero-particles {
+ position: absolute;
+ inset: 0;
+}
+
+.particle {
+ position: absolute;
+ width: 3px;
+ height: 3px;
+ background: var(--accent-light);
+ border-radius: 50%;
+ opacity: 0;
+ animation: particleFloat 8s ease-in-out infinite;
+}
+
+@keyframes particleFloat {
+ 0% { opacity: 0; transform: translateY(100vh) scale(0); }
+ 20% { opacity: 0.6; }
+ 80% { opacity: 0.3; }
+ 100% { opacity: 0; transform: translateY(-100px) scale(1.5); }
+}
+
+.hero-content {
+ text-align: center;
+ z-index: 2;
+ padding: 2rem;
+ max-width: 800px;
+}
+
+.hero-subtitle {
+ display: block;
+ font-size: 1rem;
+ font-weight: 500;
+ color: var(--accent-light);
+ letter-spacing: 3px;
+ text-transform: uppercase;
+ margin-bottom: 0.5rem;
+}
+
+.hero-title {
+ font-size: clamp(2.5rem, 6vw, 5rem);
+ font-weight: 900;
+ line-height: 1.1;
+ letter-spacing: -2px;
+ background: linear-gradient(135deg, #fff 0%, var(--accent-light) 50%, var(--accent) 100%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+ margin-bottom: 1.5rem;
+}
+
+.hero-description {
+ font-size: 1.15rem;
+ color: var(--text-secondary);
+ max-width: 600px;
+ margin: 0 auto 2.5rem;
+ line-height: 1.8;
+}
+
+.hero-stats {
+ display: flex;
+ justify-content: center;
+ gap: 3rem;
+ margin-bottom: 2.5rem;
+}
+
+.stat {
+ text-align: center;
+}
+
+.stat-number {
+ display: block;
+ font-size: 2.5rem;
+ font-weight: 900;
+ color: var(--accent-light);
+ font-family: var(--font-mono);
+}
+
+.stat-label {
+ font-size: 0.85rem;
+ color: var(--text-muted);
+ text-transform: uppercase;
+ letter-spacing: 2px;
+}
+
+.hero-cta {
+ display: inline-block;
+ padding: 1rem 3rem;
+ background: var(--gradient-1);
+ color: white;
+ text-decoration: none;
+ border-radius: 50px;
+ font-weight: 700;
+ font-size: 1.05rem;
+ letter-spacing: 0.5px;
+ transition: var(--transition);
+ box-shadow: var(--shadow-glow);
+}
+
+.hero-cta:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 0 50px var(--accent-glow);
+}
+
+.scroll-indicator {
+ position: absolute;
+ bottom: 2rem;
+ left: 50%;
+ transform: translateX(-50%);
+ z-index: 2;
+}
+
+.scroll-arrow {
+ width: 24px;
+ height: 38px;
+ border: 2px solid var(--text-muted);
+ border-radius: 12px;
+ position: relative;
+}
+
+.scroll-arrow::after {
+ content: '';
+ position: absolute;
+ top: 6px;
+ left: 50%;
+ width: 4px;
+ height: 8px;
+ background: var(--accent-light);
+ border-radius: 2px;
+ transform: translateX(-50%);
+ animation: scrollBounce 2s ease-in-out infinite;
+}
+
+@keyframes scrollBounce {
+ 0%, 100% { transform: translateX(-50%) translateY(0); opacity: 1; }
+ 50% { transform: translateX(-50%) translateY(10px); opacity: 0.3; }
+}
+
+/* ==================== SECTIONS ==================== */
+.section {
+ padding: 6rem 0;
+ position: relative;
+}
+
+.section-dark {
+ background: var(--bg-secondary);
+}
+
+.container {
+ max-width: 1400px;
+ margin: 0 auto;
+ padding: 0 2rem;
+}
+
+.section-header {
+ text-align: center;
+ margin-bottom: 4rem;
+}
+
+.section-tag {
+ display: inline-block;
+ padding: 0.4rem 1.2rem;
+ background: rgba(108, 92, 231, 0.15);
+ color: var(--accent-light);
+ border-radius: 50px;
+ font-size: 0.8rem;
+ font-weight: 600;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+ margin-bottom: 1rem;
+ border: 1px solid rgba(108, 92, 231, 0.2);
+}
+
+.section-title {
+ font-size: clamp(2rem, 4vw, 3rem);
+ font-weight: 800;
+ letter-spacing: -1px;
+ margin-bottom: 1rem;
+}
+
+.section-desc {
+ font-size: 1.1rem;
+ color: var(--text-secondary);
+ max-width: 600px;
+ margin: 0 auto;
+}
+
+/* ==================== CALCULATOR TABS ==================== */
+.calc-tabs {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ margin-bottom: 2rem;
+ justify-content: center;
+}
+
+.calc-tab {
+ padding: 0.7rem 1.4rem;
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ color: var(--text-secondary);
+ border-radius: 50px;
+ cursor: pointer;
+ font-size: 0.9rem;
+ font-weight: 500;
+ font-family: var(--font-main);
+ transition: var(--transition);
+}
+
+.calc-tab:hover {
+ background: var(--bg-card-hover);
+ color: var(--text-primary);
+}
+
+.calc-tab.active {
+ background: var(--gradient-1);
+ color: white;
+ border-color: transparent;
+ box-shadow: var(--shadow-glow);
+}
+
+/* ==================== CALCULATOR PANELS ==================== */
+.calc-panel {
+ display: none;
+ animation: fadeSlideUp 0.4s ease;
+}
+
+.calc-panel.active {
+ display: block;
+}
+
+@keyframes fadeSlideUp {
+ from { opacity: 0; transform: translateY(20px); }
+ to { opacity: 1; transform: translateY(0); }
+}
+
+.calc-grid {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 2.5rem;
+ align-items: start;
+}
+
+.calc-inputs {
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-lg);
+ padding: 2rem;
+}
+
+.calc-inputs h3 {
+ font-size: 1.3rem;
+ margin-bottom: 0.5rem;
+ font-weight: 700;
+}
+
+.calc-info {
+ color: var(--text-secondary);
+ font-size: 0.9rem;
+ margin-bottom: 1.5rem;
+ line-height: 1.6;
+}
+
+.input-group {
+ margin-bottom: 1.2rem;
+}
+
+.input-group label {
+ display: block;
+ font-size: 0.85rem;
+ font-weight: 600;
+ color: var(--text-secondary);
+ margin-bottom: 0.4rem;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+.input-group input[type="number"],
+.input-group select {
+ width: 100%;
+ padding: 0.8rem 1rem;
+ background: var(--bg-input);
+ border: 1px solid rgba(108, 92, 231, 0.15);
+ border-radius: var(--radius-sm);
+ color: var(--text-primary);
+ font-size: 1rem;
+ font-family: var(--font-mono);
+ transition: var(--transition);
+ outline: none;
+}
+
+.input-group input[type="number"]:focus,
+.input-group select:focus {
+ border-color: var(--accent);
+ box-shadow: 0 0 0 3px var(--accent-glow);
+}
+
+.input-group input[type="range"] {
+ width: 100%;
+ margin-top: 0.5rem;
+ -webkit-appearance: none;
+ appearance: none;
+ height: 6px;
+ background: var(--bg-input);
+ border-radius: 3px;
+ outline: none;
+}
+
+.input-group input[type="range"]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ width: 18px;
+ height: 18px;
+ background: var(--accent);
+ border-radius: 50%;
+ cursor: pointer;
+ box-shadow: 0 0 10px var(--accent-glow);
+}
+
+.btn-calculate {
+ width: 100%;
+ padding: 1rem;
+ background: var(--gradient-1);
+ color: white;
+ border: none;
+ border-radius: var(--radius-sm);
+ font-size: 1rem;
+ font-weight: 700;
+ font-family: var(--font-main);
+ cursor: pointer;
+ transition: var(--transition);
+ margin-top: 0.5rem;
+ letter-spacing: 0.5px;
+}
+
+.btn-calculate:hover {
+ transform: translateY(-2px);
+ box-shadow: var(--shadow-glow);
+}
+
+/* ==================== RESULTS ==================== */
+.calc-results {
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-lg);
+ padding: 2rem;
+}
+
+.calc-results h3 {
+ font-size: 1.3rem;
+ margin-bottom: 1.5rem;
+ font-weight: 700;
+}
+
+.result-card {
+ display: flex;
+ flex-direction: column;
+ gap: 0.8rem;
+ margin-bottom: 1.5rem;
+}
+
+.result-item {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 1rem 1.2rem;
+ background: var(--bg-input);
+ border-radius: var(--radius-sm);
+ border: 1px solid rgba(108, 92, 231, 0.05);
+}
+
+.result-item.highlight {
+ border-color: var(--accent);
+ background: rgba(108, 92, 231, 0.08);
+}
+
+.result-label {
+ font-size: 0.9rem;
+ color: var(--text-secondary);
+}
+
+.result-value {
+ font-family: var(--font-mono);
+ font-size: 1.1rem;
+ font-weight: 600;
+ color: var(--accent-light);
+}
+
+.result-value.small {
+ font-size: 0.8rem;
+ font-family: var(--font-main);
+ text-align: right;
+ max-width: 250px;
+ color: var(--text-secondary);
+}
+
+/* DOF Visualization */
+.dof-visualization {
+ margin-top: 1rem;
+}
+
+.dof-bar {
+ height: 40px;
+ background: var(--bg-input);
+ border-radius: 20px;
+ position: relative;
+ overflow: hidden;
+}
+
+.dof-sharp {
+ position: absolute;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, var(--success), transparent);
+ opacity: 0.4;
+ border-radius: 20px;
+ transition: all 0.5s ease;
+}
+
+.dof-subject {
+ position: absolute;
+ top: 50%;
+ width: 12px;
+ height: 12px;
+ background: var(--accent-light);
+ border-radius: 50%;
+ transform: translate(-50%, -50%);
+ box-shadow: 0 0 10px var(--accent-glow);
+ transition: left 0.5s ease;
+}
+
+.dof-labels {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 0.5rem;
+ font-size: 0.8rem;
+ color: var(--text-muted);
+ font-family: var(--font-mono);
+}
+
+/* FOV Canvas */
+.fov-visualization {
+ margin-top: 1rem;
+ text-align: center;
+}
+
+.fov-visualization canvas {
+ width: 100%;
+ max-width: 400px;
+ border-radius: var(--radius-sm);
+}
+
+/* Crop Comparison */
+.crop-comparison {
+ position: relative;
+ width: 100%;
+ aspect-ratio: 3/2;
+ margin-top: 1rem;
+ border: 2px solid var(--text-muted);
+ border-radius: var(--radius-sm);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ overflow: hidden;
+ background: var(--bg-input);
+}
+
+.crop-frame {
+ position: absolute;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.5s ease;
+}
+
+.crop-frame.fullframe {
+ inset: 0;
+ border: 2px dashed var(--text-muted);
+}
+
+.crop-frame.fullframe span {
+ position: absolute;
+ top: 5px;
+ left: 8px;
+ font-size: 0.7rem;
+ color: var(--text-muted);
+}
+
+.crop-frame.cropped {
+ border: 2px solid var(--accent-light);
+ background: rgba(108, 92, 231, 0.1);
+}
+
+.crop-frame.cropped span {
+ font-size: 0.75rem;
+ color: var(--accent-light);
+ font-weight: 600;
+}
+
+/* ==================== COMPOSITION RULES ==================== */
+.rules-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
+ gap: 2rem;
+}
+
+.rule-card {
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-lg);
+ overflow: hidden;
+ transition: var(--transition);
+}
+
+.rule-card:hover {
+ transform: translateY(-5px);
+ border-color: rgba(108, 92, 231, 0.3);
+ box-shadow: var(--shadow-lg);
+}
+
+.rule-canvas-container {
+ position: relative;
+ background: var(--bg-input);
+ aspect-ratio: 4/3;
+}
+
+.rule-canvas {
+ width: 100%;
+ height: 100%;
+ display: block;
+}
+
+.rule-overlay {
+ position: absolute;
+ top: 1rem;
+ right: 1rem;
+}
+
+.rule-number {
+ font-size: 0.8rem;
+ font-weight: 800;
+ font-family: var(--font-mono);
+ color: var(--accent-light);
+ background: rgba(10, 10, 15, 0.7);
+ padding: 0.3rem 0.6rem;
+ border-radius: var(--radius-sm);
+}
+
+.rule-content {
+ padding: 1.5rem;
+}
+
+.rule-content h3 {
+ font-size: 1.2rem;
+ font-weight: 700;
+ margin-bottom: 0.5rem;
+}
+
+.rule-content p {
+ color: var(--text-secondary);
+ font-size: 0.95rem;
+ margin-bottom: 1rem;
+}
+
+.rule-tips {
+ list-style: none;
+ margin-bottom: 1.2rem;
+}
+
+.rule-tips li {
+ padding: 0.3rem 0;
+ padding-left: 1.5rem;
+ position: relative;
+ font-size: 0.85rem;
+ color: var(--text-secondary);
+}
+
+.rule-tips li::before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0.7rem;
+ width: 6px;
+ height: 6px;
+ background: var(--accent);
+ border-radius: 50%;
+}
+
+.btn-demo {
+ padding: 0.6rem 1.5rem;
+ background: transparent;
+ border: 1px solid var(--accent);
+ color: var(--accent-light);
+ border-radius: 50px;
+ cursor: pointer;
+ font-size: 0.85rem;
+ font-weight: 600;
+ font-family: var(--font-main);
+ transition: var(--transition);
+}
+
+.btn-demo:hover {
+ background: var(--accent);
+ color: white;
+}
+
+/* ==================== MOTIF SECTION ==================== */
+.motif-filter {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ justify-content: center;
+ margin-bottom: 2.5rem;
+}
+
+.motif-filter-btn {
+ padding: 0.6rem 1.3rem;
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ color: var(--text-secondary);
+ border-radius: 50px;
+ cursor: pointer;
+ font-size: 0.85rem;
+ font-weight: 500;
+ font-family: var(--font-main);
+ transition: var(--transition);
+}
+
+.motif-filter-btn:hover {
+ background: var(--bg-card-hover);
+ color: var(--text-primary);
+}
+
+.motif-filter-btn.active {
+ background: var(--gradient-1);
+ color: white;
+ border-color: transparent;
+}
+
+.motif-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
+ gap: 1.5rem;
+}
+
+.motif-card {
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-lg);
+ overflow: hidden;
+ transition: var(--transition);
+ cursor: pointer;
+}
+
+.motif-card:hover {
+ transform: translateY(-4px);
+ border-color: rgba(108, 92, 231, 0.3);
+}
+
+.motif-card.hidden {
+ display: none;
+}
+
+.motif-icon {
+ height: 160px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 4rem;
+ background: linear-gradient(135deg, var(--bg-input), var(--bg-card));
+}
+
+.motif-info {
+ padding: 1.5rem;
+}
+
+.motif-info h3 {
+ font-size: 1.15rem;
+ font-weight: 700;
+ margin-bottom: 0.5rem;
+}
+
+.motif-info p {
+ color: var(--text-secondary);
+ font-size: 0.9rem;
+ margin-bottom: 1rem;
+}
+
+.motif-settings {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 0.5rem;
+}
+
+.motif-setting {
+ padding: 0.5rem;
+ background: var(--bg-input);
+ border-radius: var(--radius-sm);
+ text-align: center;
+}
+
+.motif-setting-label {
+ display: block;
+ font-size: 0.7rem;
+ color: var(--text-muted);
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+.motif-setting-value {
+ display: block;
+ font-size: 0.9rem;
+ font-weight: 600;
+ font-family: var(--font-mono);
+ color: var(--accent-light);
+}
+
+.motif-tags {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.3rem;
+ margin-top: 0.8rem;
+}
+
+.motif-tag {
+ padding: 0.2rem 0.6rem;
+ background: rgba(108, 92, 231, 0.1);
+ color: var(--accent-light);
+ border-radius: 50px;
+ font-size: 0.7rem;
+ font-weight: 500;
+}
+
+/* ==================== EXPOSURE TRIANGLE ==================== */
+.exposure-interactive {
+ display: grid;
+ grid-template-columns: 1fr 1.2fr;
+ gap: 3rem;
+ align-items: center;
+}
+
+.exposure-triangle-visual {
+ text-align: center;
+}
+
+.exposure-triangle-visual canvas {
+ width: 100%;
+ max-width: 500px;
+}
+
+.exposure-controls {
+ display: flex;
+ flex-direction: column;
+ gap: 1.5rem;
+}
+
+.exposure-param {
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-md);
+ padding: 1.5rem;
+}
+
+.param-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 0.8rem;
+}
+
+.param-header h3 {
+ font-size: 1rem;
+ font-weight: 700;
+}
+
+.param-value {
+ font-family: var(--font-mono);
+ font-size: 1.1rem;
+ font-weight: 600;
+ color: var(--accent-light);
+ background: rgba(108, 92, 231, 0.1);
+ padding: 0.3rem 0.8rem;
+ border-radius: var(--radius-sm);
+}
+
+.exposure-param input[type="range"] {
+ width: 100%;
+ -webkit-appearance: none;
+ appearance: none;
+ height: 8px;
+ background: var(--bg-input);
+ border-radius: 4px;
+ outline: none;
+ margin: 0.5rem 0;
+}
+
+.exposure-param input[type="range"]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ width: 22px;
+ height: 22px;
+ background: var(--gradient-1);
+ border-radius: 50%;
+ cursor: pointer;
+ box-shadow: 0 0 12px var(--accent-glow);
+}
+
+.param-scale {
+ display: flex;
+ justify-content: space-between;
+ font-size: 0.65rem;
+ color: var(--text-muted);
+ font-family: var(--font-mono);
+ margin-bottom: 0.5rem;
+}
+
+.param-desc {
+ font-size: 0.85rem;
+ color: var(--text-secondary);
+ font-style: italic;
+}
+
+.exposure-result {
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-md);
+ padding: 1.5rem;
+ text-align: center;
+}
+
+.ev-meter {
+ margin-bottom: 0.8rem;
+}
+
+.ev-bar {
+ height: 12px;
+ background: linear-gradient(90deg, #0984e3, #00cec9, #00b894, #fdcb6e, #e17055, #d63031);
+ border-radius: 6px;
+ position: relative;
+ margin-bottom: 0.5rem;
+}
+
+.ev-indicator {
+ position: absolute;
+ top: -4px;
+ width: 20px;
+ height: 20px;
+ background: white;
+ border: 3px solid var(--bg-primary);
+ border-radius: 50%;
+ transform: translateX(-50%);
+ left: 50%;
+ transition: left 0.4s ease;
+ box-shadow: 0 0 8px rgba(255, 255, 255, 0.5);
+}
+
+.ev-labels {
+ display: flex;
+ justify-content: space-between;
+ font-size: 0.7rem;
+ color: var(--text-muted);
+ font-family: var(--font-mono);
+}
+
+.ev-text {
+ font-size: 0.95rem;
+ font-weight: 600;
+ color: var(--success);
+}
+
+/* ==================== QUIZ ==================== */
+.quiz-categories {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ justify-content: center;
+ margin-bottom: 2rem;
+}
+
+.quiz-cat-btn {
+ padding: 0.6rem 1.3rem;
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ color: var(--text-secondary);
+ border-radius: 50px;
+ cursor: pointer;
+ font-size: 0.85rem;
+ font-weight: 500;
+ font-family: var(--font-main);
+ transition: var(--transition);
+}
+
+.quiz-cat-btn:hover {
+ background: var(--bg-card-hover);
+}
+
+.quiz-cat-btn.active {
+ background: var(--gradient-1);
+ color: white;
+ border-color: transparent;
+}
+
+.quiz-container {
+ max-width: 800px;
+ margin: 0 auto;
+}
+
+.quiz-start {
+ text-align: center;
+ padding: 4rem 2rem;
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-lg);
+}
+
+.quiz-start-icon {
+ font-size: 4rem;
+ margin-bottom: 1rem;
+}
+
+.quiz-start h3 {
+ font-size: 1.5rem;
+ margin-bottom: 0.5rem;
+}
+
+.quiz-start p {
+ color: var(--text-secondary);
+ margin-bottom: 0.5rem;
+}
+
+.quiz-info {
+ font-size: 0.85rem;
+ color: var(--text-muted);
+ margin-bottom: 1.5rem;
+}
+
+.btn-quiz-start, .btn-quiz-restart {
+ padding: 0.9rem 2.5rem;
+ background: var(--gradient-1);
+ color: white;
+ border: none;
+ border-radius: 50px;
+ font-size: 1rem;
+ font-weight: 700;
+ font-family: var(--font-main);
+ cursor: pointer;
+ transition: var(--transition);
+}
+
+.btn-quiz-start:hover, .btn-quiz-restart:hover {
+ transform: translateY(-2px);
+ box-shadow: var(--shadow-glow);
+}
+
+.quiz-progress {
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+ margin-bottom: 1rem;
+}
+
+.quiz-progress-bar {
+ flex: 1;
+ height: 6px;
+ background: var(--bg-input);
+ border-radius: 3px;
+ overflow: hidden;
+}
+
+.quiz-progress-fill {
+ height: 100%;
+ background: var(--gradient-1);
+ border-radius: 3px;
+ transition: width 0.4s ease;
+ width: 10%;
+}
+
+.quiz-progress-text {
+ font-family: var(--font-mono);
+ font-size: 0.85rem;
+ color: var(--text-muted);
+ white-space: nowrap;
+}
+
+.quiz-score-bar {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 1.5rem;
+}
+
+.quiz-score {
+ font-weight: 700;
+ color: var(--accent-light);
+ font-family: var(--font-mono);
+}
+
+.quiz-timer {
+ font-family: var(--font-mono);
+ color: var(--text-muted);
+}
+
+.quiz-question-card {
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-lg);
+ padding: 2rem;
+}
+
+.quiz-category-badge {
+ display: inline-block;
+ padding: 0.3rem 0.8rem;
+ background: rgba(108, 92, 231, 0.15);
+ color: var(--accent-light);
+ border-radius: 50px;
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ margin-bottom: 1rem;
+}
+
+.quiz-question {
+ font-size: 1.2rem;
+ margin-bottom: 1.5rem;
+ line-height: 1.6;
+}
+
+.quiz-options {
+ display: flex;
+ flex-direction: column;
+ gap: 0.8rem;
+ margin-bottom: 1.5rem;
+}
+
+.quiz-option {
+ padding: 1rem 1.2rem;
+ background: var(--bg-input);
+ border: 2px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-md);
+ cursor: pointer;
+ transition: var(--transition);
+ font-size: 0.95rem;
+ display: flex;
+ align-items: center;
+ gap: 0.8rem;
+}
+
+.quiz-option:hover:not(.disabled) {
+ border-color: var(--accent);
+ background: rgba(108, 92, 231, 0.08);
+}
+
+.quiz-option .option-letter {
+ width: 32px;
+ height: 32px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(108, 92, 231, 0.15);
+ border-radius: 50%;
+ font-weight: 700;
+ font-size: 0.85rem;
+ color: var(--accent-light);
+ flex-shrink: 0;
+}
+
+.quiz-option.correct {
+ border-color: var(--success);
+ background: var(--success-glow);
+}
+
+.quiz-option.correct .option-letter {
+ background: var(--success);
+ color: white;
+}
+
+.quiz-option.wrong {
+ border-color: var(--danger);
+ background: var(--danger-glow);
+}
+
+.quiz-option.wrong .option-letter {
+ background: var(--danger);
+ color: white;
+}
+
+.quiz-option.disabled {
+ cursor: default;
+ opacity: 0.6;
+}
+
+.quiz-explanation {
+ padding: 1rem 1.2rem;
+ background: rgba(0, 206, 201, 0.08);
+ border: 1px solid rgba(0, 206, 201, 0.2);
+ border-radius: var(--radius-sm);
+ margin-bottom: 1rem;
+}
+
+.quiz-explanation p {
+ font-size: 0.9rem;
+ color: var(--text-secondary);
+ line-height: 1.6;
+}
+
+.btn-quiz-next {
+ width: 100%;
+ padding: 0.9rem;
+ background: var(--gradient-1);
+ color: white;
+ border: none;
+ border-radius: var(--radius-sm);
+ font-size: 1rem;
+ font-weight: 700;
+ font-family: var(--font-main);
+ cursor: pointer;
+ transition: var(--transition);
+}
+
+.btn-quiz-next:hover {
+ transform: translateY(-2px);
+ box-shadow: var(--shadow-glow);
+}
+
+/* Quiz Results */
+.quiz-results {
+ text-align: center;
+ padding: 3rem 2rem;
+ background: var(--bg-card);
+ border: 1px solid rgba(108, 92, 231, 0.1);
+ border-radius: var(--radius-lg);
+}
+
+.results-circle {
+ width: 150px;
+ height: 150px;
+ margin: 0 auto 1.5rem;
+ position: relative;
+}
+
+.results-circle svg {
+ width: 100%;
+ height: 100%;
+ transform: rotate(-90deg);
+}
+
+.results-circle-bg {
+ fill: none;
+ stroke: var(--bg-input);
+ stroke-width: 8;
+}
+
+.results-circle-fill {
+ fill: none;
+ stroke: var(--accent);
+ stroke-width: 8;
+ stroke-linecap: round;
+ stroke-dasharray: 339.292;
+ stroke-dashoffset: 339.292;
+ transition: stroke-dashoffset 1.5s ease;
+}
+
+.results-percent {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ font-size: 2rem;
+ font-weight: 900;
+ font-family: var(--font-mono);
+ color: var(--accent-light);
+}
+
+.results-title {
+ font-size: 1.5rem;
+ margin-bottom: 0.5rem;
+}
+
+.results-text {
+ color: var(--text-secondary);
+ margin-bottom: 1.5rem;
+}
+
+.results-breakdown {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.8rem;
+ justify-content: center;
+ margin-bottom: 2rem;
+}
+
+.results-actions {
+ display: flex;
+ gap: 1rem;
+ justify-content: center;
+ flex-wrap: wrap;
+}
+
+.btn-quiz-review {
+ padding: 0.9rem 2.5rem;
+ background: transparent;
+ border: 2px solid var(--accent);
+ color: var(--accent-light);
+ border-radius: 50px;
+ font-size: 1rem;
+ font-weight: 700;
+ font-family: var(--font-main);
+ cursor: pointer;
+ transition: var(--transition);
+}
+
+.btn-quiz-review:hover {
+ background: var(--accent);
+ color: white;
+}
+
+/* ==================== FOOTER ==================== */
+.footer {
+ background: var(--bg-secondary);
+ border-top: 1px solid rgba(108, 92, 231, 0.1);
+ padding: 4rem 0 2rem;
+}
+
+.footer-grid {
+ display: grid;
+ grid-template-columns: 2fr 1fr 1fr;
+ gap: 3rem;
+ margin-bottom: 3rem;
+}
+
+.footer-brand {
+ font-size: 1.2rem;
+ font-weight: 700;
+}
+
+.footer-brand p {
+ font-size: 0.9rem;
+ font-weight: 400;
+ color: var(--text-secondary);
+ margin-top: 0.8rem;
+ line-height: 1.6;
+}
+
+.footer-links h4 {
+ font-size: 0.85rem;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ color: var(--text-muted);
+ margin-bottom: 1rem;
+}
+
+.footer-links a {
+ display: block;
+ color: var(--text-secondary);
+ text-decoration: none;
+ font-size: 0.9rem;
+ padding: 0.3rem 0;
+ transition: var(--transition);
+}
+
+.footer-links a:hover {
+ color: var(--accent-light);
+}
+
+.footer-bottom {
+ text-align: center;
+ padding-top: 2rem;
+ border-top: 1px solid rgba(108, 92, 231, 0.1);
+}
+
+.footer-bottom p {
+ font-size: 0.85rem;
+ color: var(--text-muted);
+}
+
+/* ==================== RESPONSIVE ==================== */
+@media (max-width: 1024px) {
+ .calc-grid {
+ grid-template-columns: 1fr;
+ }
+ .exposure-interactive {
+ grid-template-columns: 1fr;
+ }
+ .footer-grid {
+ grid-template-columns: 1fr 1fr;
+ }
+}
+
+@media (max-width: 768px) {
+ .nav-menu {
+ position: fixed;
+ top: 0;
+ right: -100%;
+ width: 280px;
+ height: 100vh;
+ background: var(--bg-secondary);
+ flex-direction: column;
+ padding: 5rem 2rem 2rem;
+ transition: right 0.3s ease;
+ box-shadow: var(--shadow-lg);
+ border-left: 1px solid rgba(108, 92, 231, 0.1);
+ }
+ .nav-menu.open {
+ right: 0;
+ }
+ .nav-toggle {
+ display: flex;
+ z-index: 1001;
+ }
+ .lang-switcher {
+ margin-right: 0.5rem;
+ }
+ .rules-grid {
+ grid-template-columns: 1fr;
+ }
+ .motif-grid {
+ grid-template-columns: 1fr;
+ }
+ .hero-stats {
+ gap: 1.5rem;
+ }
+ .stat-number {
+ font-size: 2rem;
+ }
+ .footer-grid {
+ grid-template-columns: 1fr;
+ gap: 2rem;
+ }
+ .section {
+ padding: 4rem 0;
+ }
+}
+
+/* ==================== SIMULATION TOOLS ==================== */
+.sim-tabs {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ justify-content: center;
+ margin-bottom: 2rem;
+}
+
+.sim-tab {
+ padding: 0.6rem 1.2rem;
+ background: var(--bg-card);
+ border: 1px solid var(--border-color);
+ border-radius: 8px;
+ color: var(--text-secondary);
+ cursor: pointer;
+ font-size: 0.9rem;
+ font-weight: 500;
+ transition: all 0.3s ease;
+}
+
+.sim-tab:hover {
+ border-color: var(--accent);
+ color: var(--text-primary);
+}
+
+.sim-tab.active {
+ background: var(--accent);
+ border-color: var(--accent);
+ color: #fff;
+}
+
+.sim-panel {
+ display: none;
+ animation: fadeIn 0.3s ease;
+}
+
+.sim-panel.active {
+ display: block;
+}
+
+.sim-grid {
+ display: grid;
+ grid-template-columns: 1fr 1.4fr;
+ gap: 2rem;
+ align-items: start;
+}
+
+.sim-controls {
+ background: var(--bg-card);
+ padding: 1.5rem;
+ border-radius: 12px;
+ border: 1px solid var(--border-color);
+}
+
+.sim-controls h3 {
+ font-size: 1.2rem;
+ margin-bottom: 0.5rem;
+ color: var(--text-primary);
+}
+
+.sim-info {
+ color: var(--text-secondary);
+ font-size: 0.9rem;
+ margin-bottom: 1.5rem;
+ line-height: 1.5;
+}
+
+.sim-controls .input-group {
+ margin-bottom: 1.2rem;
+}
+
+.sim-controls .input-group label {
+ display: block;
+ font-size: 0.85rem;
+ color: var(--text-secondary);
+ margin-bottom: 0.4rem;
+}
+
+.sim-controls .input-group input[type="range"] {
+ width: 100%;
+}
+
+.sim-controls .range-value {
+ display: inline-block;
+ margin-top: 0.3rem;
+ font-family: 'JetBrains Mono', monospace;
+ font-size: 0.85rem;
+ color: var(--accent);
+ font-weight: 500;
+}
+
+.sim-controls .input-group select {
+ width: 100%;
+ padding: 0.5rem;
+ background: var(--bg-input);
+ border: 1px solid var(--border-color);
+ border-radius: 6px;
+ color: var(--text-primary);
+ font-size: 0.9rem;
+}
+
+.sim-canvas-wrap {
+ background: var(--bg-card);
+ border-radius: 12px;
+ border: 1px solid var(--border-color);
+ overflow: hidden;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 1rem;
+}
+
+.sim-canvas-wrap canvas {
+ width: 100%;
+ height: auto;
+ border-radius: 8px;
+}
+
+@media (max-width: 768px) {
+ .sim-grid {
+ grid-template-columns: 1fr;
+ }
+ .sim-tabs {
+ gap: 0.3rem;
+ }
+ .sim-tab {
+ padding: 0.5rem 0.8rem;
+ font-size: 0.8rem;
+ }
+}
+
+@media (max-width: 480px) {
+ .calc-tabs {
+ gap: 0.3rem;
+ }
+ .calc-tab {
+ padding: 0.5rem 1rem;
+ font-size: 0.8rem;
+ }
+ .param-scale {
+ display: none;
+ }
+ .sim-tab {
+ padding: 0.4rem 0.6rem;
+ font-size: 0.75rem;
+ }
+}
diff --git a/photography-tools/index.html b/photography-tools/index.html
new file mode 100644
index 0000000..49e349b
--- /dev/null
+++ b/photography-tools/index.html
@@ -0,0 +1,772 @@
+
+
+
+
+
+
PhotoPro Tools
+
+
+
+
+
+
+
+
+
+ ◉ PhotoPro Tools
+
+
+
+
+ DE
+
+
+
+ DE Deutsch
+ EN English
+ FR Français
+ IT Italiano
+ SR Srpski
+ SQ Shqip
+ TR Türkçe
+ SV Svenska
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Willkommen bei
+ PhotoPro Tools
+
+
+ Dein ultimativer Fotografie-Werkzeugkasten. Linsenberechnungen, Kompositionsregeln,
+ Motiverkennung und interaktive Quizze — alles an einem Ort.
+
+
+
+ 0
+ Rechner
+
+
+ 0
+ Regeln
+
+
+ 0
+ Quiz-Fragen
+
+
+
Jetzt starten
+
+
+
+
+
+
+
+
+
+
+ Scharfentiefe (DOF)
+ Bildwinkel (FOV)
+ Crop-Faktor
+ Hyperfokale Distanz
+ Blitz-Reichweite
+ Abbildungsmassstab
+
+
+
+
+
+
+
+
Ergebnisse
+
+
+ Scharfentiefe
+ --
+
+
+ Nahpunkt
+ --
+
+
+ Fernpunkt
+ --
+
+
+ Zerstreuungskreis
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+
Ergebnisse
+
+
+ Horizontaler Bildwinkel
+ --
+
+
+ Vertikaler Bildwinkel
+ --
+
+
+ Diagonaler Bildwinkel
+ --
+
+
+ Objektivtyp
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Ergebnisse
+
+
+ Äquivalente Brennweite (KB)
+ --
+
+
+ Äquivalente Blende (KB)
+ --
+
+
+ Crop-Faktor
+ --
+
+
+
+
+ Vollformat
+
+
+ APS-C
+
+
+
+
+
+
+
+
+
+
+
+
Ergebnisse
+
+
+ Hyperfokale Distanz
+ --
+
+
+ Nahpunkt (bei Fokus auf H)
+ --
+
+
+ Tipp
+ Fokussiere auf die hyperfokale Distanz für maximale Schärfe.
+
+
+
+
+
+
+
+
+
+
+
+
Ergebnisse
+
+
+ Maximale Reichweite
+ --
+
+
+ Bei ISO 100
+ --
+
+
+
+
+
+
+
+
+
+
+
+
Ergebnisse
+
+
+ Abbildungsmassstab
+ --
+
+
+ Erfasstes Feld (Breite)
+ --
+
+
+ Makro-Tauglichkeit
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ f/1.4 f/2 f/2.8 f/4 f/5.6 f/8 f/11 f/16 f/22 f/32
+
+
Mittlere Blende – guter Kompromiss aus Schärfe und Licht.
+
+
+
+
+
+ 30s 15s 1s 1/4 1/30 1/125 1/250 1/500 1/1000 1/2000 1/4000 1/8000
+
+
Standard-Verschlusszeit – friert die meisten Bewegungen ein.
+
+
+
+
+
+ 100 200 400 800 1600 3200 6400 12800 25600
+
+
Niedriges ISO – minimales Rauschen, beste Qualität.
+
+
+
+
+
+ -3 EV -2 -1 0 +1 +2 +3 EV
+
+
+
Korrekte Belichtung
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
🎥
+
Bereit für das Quiz?
+
Wähle eine Kategorie und teste dein Fotografie-Wissen!
+
10 Fragen pro Runde • Multiple Choice • Sofortiges Feedback
+
Quiz starten
+
+
+
+
+
+
+ 00:00
+
+
+
+
+
+
+
Nächste Frage
+
+
+
+
+
+
+
+
+
+ 0%
+
+
Quiz beendet!
+
+
+
+ Nochmal spielen
+ Antworten ansehen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/photography-tools/js/app.js b/photography-tools/js/app.js
new file mode 100644
index 0000000..6e4830a
--- /dev/null
+++ b/photography-tools/js/app.js
@@ -0,0 +1,1435 @@
+/* ==================== PhotoPro Tools - Main Application ==================== */
+(function() {
+'use strict';
+
+/* ==================== QUIZ QUESTIONS (all languages) ==================== */
+var quizDB = {
+de: [
+{q:"Was bedeutet die Abk\u00fcrzung DOF?",o:["Depth of Field","Direction of Focus","Diameter of Filter","Digital Optical Format"],c:0,cat:"basics",e:"DOF steht f\u00fcr Depth of Field (Sch\u00e4rfentiefe) \u2013 den Bereich, der im Bild scharf erscheint."},
+{q:"Was passiert, wenn man die Blende weiter \u00f6ffnet (kleinere f-Zahl)?",o:["Mehr Licht, geringere Sch\u00e4rfentiefe","Weniger Licht, gr\u00f6\u00dfere Sch\u00e4rfentiefe","Bild wird dunkler","Keine Ver\u00e4nderung"],c:0,cat:"basics",e:"Eine gr\u00f6\u00dfere Blenden\u00f6ffnung (z.B. f/1.8) l\u00e4sst mehr Licht ein und verringert die Sch\u00e4rfentiefe."},
+{q:"Welcher ISO-Wert erzeugt das wenigste Rauschen?",o:["ISO 100","ISO 800","ISO 3200","ISO 6400"],c:0,cat:"basics",e:"Je niedriger der ISO-Wert, desto weniger digitales Rauschen im Bild."},
+{q:"Was ist der Crop-Faktor?",o:["Verh\u00e4ltnis der Sensorgr\u00f6\u00dfe zum Vollformat","Maximale Vergr\u00f6\u00dferung","Bildkompression","Farbtiefe"],c:0,cat:"basics",e:"Der Crop-Faktor beschreibt das Verh\u00e4ltnis eines kleineren Sensors zum Vollformat (36x24mm)."},
+{q:"Was misst die Brennweite eines Objektivs?",o:["Abstand Linse-Sensor bei Fokus auf Unendlich","L\u00e4nge des Objektivs","Maximale Sch\u00e4rfe","Lichtst\u00e4rke"],c:0,cat:"basics",e:"Die Brennweite ist der Abstand zwischen der optischen Mitte der Linse und dem Sensor, wenn auf unendlich fokussiert wird."},
+{q:"Was ist ein Histogramm?",o:["Grafische Darstellung der Helligkeitsverteilung","Farbkreis","Sch\u00e4rfeanzeige","Weissabgleich-Kurve"],c:0,cat:"basics",e:"Das Histogramm zeigt die Verteilung von dunklen bis hellen Pixeln im Bild."},
+{q:"Was bedeutet RAW in der Fotografie?",o:["Unkomprimiertes Rohdatenformat","Rote Augen Werkzeug","Schneller Autofokus","Bildstabilisierung"],c:0,cat:"basics",e:"RAW ist ein unkomprimiertes Format, das alle Sensordaten beh\u00e4lt f\u00fcr maximale Nachbearbeitung."},
+{q:"Was ist der Wei\u00dfabgleich?",o:["Farbtemperatur-Anpassung","Belichtungskorrektur","Kontrasteinstellung","Sch\u00e4rfeoptimierung"],c:0,cat:"basics",e:"Der Wei\u00dfabgleich passt die Farbtemperatur an, damit Wei\u00df auch unter verschiedenen Lichtquellen wei\u00df erscheint."},
+{q:"Was beschreibt die Lichtwert-Skala (EV)?",o:["Kombination aus Blende und Verschlusszeit","Nur die Blende","Nur ISO","Sensorgr\u00f6\u00dfe"],c:0,cat:"basics",e:"EV (Exposure Value) beschreibt \u00e4quivalente Kombinationen von Blende und Verschlusszeit bei gleicher Belichtung."},
+{q:"Was ist Bokeh?",o:["\u00c4sthetische Qualit\u00e4t der Unsch\u00e4rfe","Ein Objektivtyp","Kamera-Marke","Bildformat"],c:0,cat:"basics",e:"Bokeh beschreibt die \u00e4sthetische Qualit\u00e4t der unscharfen Bereiche im Bild."},
+{q:"Was besagt die Drittel-Regel?",o:["Bild in 9 Felder teilen, Motive auf Linien platzieren","Immer 3 Motive fotografieren","Bild in 3 Farben teilen","3 Fotos pro Motiv machen"],c:0,cat:"composition",e:"Die Drittel-Regel teilt das Bild mit 2 horizontalen und 2 vertikalen Linien. Wichtige Elemente werden auf Linien oder Schnittpunkten platziert."},
+{q:"Was ist der Goldene Schnitt?",o:["Teilungsverh\u00e4ltnis von ca. 1:1,618","Exakt 1:2","Bilddiagonale","Farbharmonie"],c:0,cat:"composition",e:"Der Goldene Schnitt teilt eine Strecke so, dass das Verh\u00e4ltnis des Ganzen zum gr\u00f6\u00dferen Teil gleich dem des gr\u00f6\u00dferen zum kleineren Teil ist (~1:1,618)."},
+{q:"Was sind f\u00fchrende Linien in der Komposition?",o:["Linien die den Blick zum Motiv lenken","Gerade Horizonte","Rahmenlinien","Textlinien"],c:0,cat:"composition",e:"F\u00fchrende Linien sind visuelle Elemente (Stra\u00dfen, Fl\u00fcsse, Gel\u00e4nder), die den Blick des Betrachters zum Hauptmotiv leiten."},
+{q:"Was bewirkt negativer Raum?",o:["Erzeugt Wirkung und Fokus auf das Motiv","Macht das Bild langweilig","F\u00fcllt das Bild","Erh\u00f6ht die S\u00e4ttigung"],c:0,cat:"composition",e:"Negativer Raum gibt dem Motiv 'Luft zum Atmen' und lenkt die Aufmerksamkeit."},
+{q:"Welche Farben sind komplement\u00e4r?",o:["Gegen\u00fcberliegend im Farbkreis","Nebeneinander im Farbkreis","Nur Schwarz und Wei\u00df","Nur Prim\u00e4rfarben"],c:0,cat:"composition",e:"Komplement\u00e4rfarben liegen sich im Farbkreis gegen\u00fcber (z.B. Blau-Orange, Rot-Gr\u00fcn) und erzeugen starken Kontrast."},
+{q:"Was bewirken Diagonalen in der Bildkomposition?",o:["Dynamik und Spannung","Ruhe und Harmonie","Symmetrie","Tiefenunsch\u00e4rfe"],c:0,cat:"composition",e:"Diagonale Linien erzeugen ein Gef\u00fchl von Bewegung, Dynamik und Energie im Bild."},
+{q:"Was ist nat\u00fcrliches Framing?",o:["Motiv durch Szene-Elemente einrahmen","Bilderrahmen kaufen","Kamerageh\u00e4use","Crop-Funktion"],c:0,cat:"composition",e:"Nat\u00fcrliches Framing nutzt vorhandene Elemente (T\u00fcrb\u00f6gen, \u00c4ste, Fenster) um das Motiv einzurahmen."},
+{q:"Wann sollte man die Drittel-Regel brechen?",o:["Bei Symmetrie oder bewusstem Stilmittel","Nie","Immer","Nur bei Portr\u00e4ts"],c:0,cat:"composition",e:"Regeln sind Richtlinien. Bei perfekter Symmetrie oder gewolltem k\u00fcnstlerischem Ausdruck kann Zentrieren effektiver sein."},
+{q:"Was erzeugt Tiefe im Bild?",o:["Vordergrund, Mittelgrund, Hintergrund","Nur Weitwinkel","Nur Telelinsen","Hohe ISO"],c:0,cat:"composition",e:"Die Schichtung von Vordergrund, Mittelgrund und Hintergrund erzeugt r\u00e4umliche Tiefe im zweidimensionalen Bild."},
+{q:"Was ist die Bedeutung von Linien in der Fotografie?",o:["Sie f\u00fchren den Blick und strukturieren das Bild","Nur dekorativ","Technischer Fehler","Belichtungskorrektur"],c:0,cat:"composition",e:"Linien sind eines der st\u00e4rksten Kompositionselemente \u2013 sie f\u00fchren den Blick, teilen den Raum und erzeugen Stimmung."},
+{q:"Was ist ein Normalobjektiv?",o:["Ca. 50mm Brennweite (Vollformat)","Jedes Zoom","10mm","200mm"],c:0,cat:"lens",e:"Ein Normalobjektiv (~50mm am Vollformat) entspricht ungef\u00e4hr dem nat\u00fcrlichen Sichtfeld des menschlichen Auges."},
+{q:"Welche Brennweite eignet sich f\u00fcr Portr\u00e4ts?",o:["85\u2013135mm","10\u201316mm","400\u2013600mm","Fisheye"],c:0,cat:"lens",e:"85\u2013135mm erzeugt eine schmeichelhafte Perspektive und sch\u00f6nes Bokeh bei Portr\u00e4ts."},
+{q:"Was ist ein Weitwinkelobjektiv?",o:["Brennweite unter 35mm","Brennweite \u00fcber 200mm","Genau 50mm","Festbrennweite"],c:0,cat:"lens",e:"Weitwinkelobjektive haben Brennweiten unter ca. 35mm und erfassen einen gro\u00dfen Bildwinkel."},
+{q:"Was bedeutet 'Lichtst\u00e4rke' bei einem Objektiv?",o:["Maximale Blenden\u00f6ffnung","Gewicht des Objektivs","Brennweite","Autofokus-Geschwindigkeit"],c:0,cat:"lens",e:"Die Lichtst\u00e4rke gibt die maximale Blenden\u00f6ffnung an (z.B. f/1.4). Je kleiner die Zahl, desto lichtst\u00e4rker."},
+{q:"Was ist die hyperfokale Distanz?",o:["Fokuspunkt f\u00fcr maximale Sch\u00e4rfe bis Unendlich","K\u00fcrzeste Fokusdistanz","Maximale Brennweite","Blendenwert"],c:0,cat:"lens",e:"Die hyperfokale Distanz ist die Entfernung, bei der alles von der halben Distanz bis Unendlich scharf ist."},
+{q:"Was bewirkt ein Polfilter?",o:["Reduziert Reflexionen und erh\u00f6ht S\u00e4ttigung","Verst\u00e4rkt Reflexionen","Vergr\u00f6\u00dfert das Bild","Reduziert Rauschen"],c:0,cat:"lens",e:"Ein Polarisationsfilter reduziert Reflexionen auf nicht-metallischen Oberfl\u00e4chen und verst\u00e4rkt Farben (besonders Himmel)."},
+{q:"Was bedeutet IS/VR/OIS?",o:["Bildstabilisierung","Infrarot-Sensor","Video-Recording","ISO-Regulierung"],c:0,cat:"lens",e:"IS (Canon), VR (Nikon), OIS (andere) bezeichnen Bildstabilisierungssysteme im Objektiv."},
+{q:"Was ist der Abbildungsma\u00dfstab 1:1?",o:["Motiv wird in Originalgr\u00f6\u00dfe auf Sensor abgebildet","Doppelte Vergr\u00f6\u00dferung","Halbe Gr\u00f6\u00dfe","Panorama"],c:0,cat:"lens",e:"Bei 1:1 wird das Motiv in seiner tats\u00e4chlichen Gr\u00f6\u00dfe auf dem Sensor abgebildet \u2013 echtes Makro."},
+{q:"Wof\u00fcr eignet sich ein Teleobjektiv?",o:["Entfernte Motive, Sport, Wildlife","Innenr\u00e4ume","Makro","Architektur-Weitwinkel"],c:0,cat:"lens",e:"Teleobjektive (>70mm) eignen sich f\u00fcr entfernte Motive, komprimieren die Perspektive und erzeugen Freistellung."},
+{q:"Was ist ein Tilt-Shift-Objektiv?",o:["Perspektivkorrektur und Sch\u00e4rfeverlagerung","Zoom-Objektiv","Fischauge","Standard-Festbrennweite"],c:0,cat:"lens",e:"Tilt-Shift-Objektive erm\u00f6glichen Perspektivkorrektur (Shift) und selektive Sch\u00e4rfeverlagerung (Tilt)."},
+{q:"Was passiert bei l\u00e4ngerer Verschlusszeit?",o:["Mehr Licht, Bewegungsunsch\u00e4rfe m\u00f6glich","Weniger Licht","H\u00f6here Sch\u00e4rfe","Kleinerer Bildwinkel"],c:0,cat:"exposure",e:"L\u00e4ngere Verschlusszeiten lassen mehr Licht ein, k\u00f6nnen aber Bewegungsunsch\u00e4rfe verursachen."},
+{q:"Was ist die Belichtungskorrektur?",o:["Gezielte Über- oder Unterbelichtung","ISO-Einstellung","Wei\u00dfabgleich","Objektivkorrektur"],c:0,cat:"exposure",e:"Die Belichtungskorrektur (\u00b1EV) erlaubt bewusste Abweichung von der gemessenen Belichtung."},
+{q:"Was ist Matrixmessung?",o:["Belichtungsmessung \u00fcber das gesamte Bild","Messung nur im Zentrum","Spotmessung","Manuelle Messung"],c:0,cat:"exposure",e:"Die Matrixmessung (Nikon) / Mehrfeldmessung bewertet die Helligkeit des gesamten Bildes f\u00fcr die Belichtung."},
+{q:"Wann verwendet man Spotmessung?",o:["Bei starkem Kontrast, Gegenlicht","Bei gleichm\u00e4\u00dfigem Licht","Immer","Nur bei Landschaften"],c:0,cat:"exposure",e:"Spotmessung misst nur einen kleinen Bereich (~2-5%) und eignet sich bei kontrastreichen Szenen."},
+{q:"Was ist Belichtungsreihe (Bracketing)?",o:["Mehrere Aufnahmen mit verschiedenen Belichtungen","Serienbildmodus","Einzelaufnahme","Langzeitbelichtung"],c:0,cat:"exposure",e:"Bracketing erstellt mehrere Aufnahmen mit unterschiedlicher Belichtung, oft f\u00fcr HDR verwendet."},
+{q:"Was bedeutet 'Blitzen auf den zweiten Verschlussvorhang'?",o:["Blitz z\u00fcndet am Ende der Belichtung","Blitz am Anfang","Dauerlicht","Kein Blitz"],c:0,cat:"exposure",e:"Der Blitz z\u00fcndet kurz vor dem Schlie\u00dfen des Verschlusses, sodass Bewegungsspuren hinter dem Motiv erscheinen."},
+{q:"Was ist die Sunny-16-Regel?",o:["Bei Sonne: f/16, Verschlusszeit = 1/ISO","Immer f/16 verwenden","ISO 16","16mm Brennweite"],c:0,cat:"exposure",e:"Die Sunny-16-Regel: Bei hellem Sonnenlicht ergibt f/16 mit 1/ISO als Verschlusszeit eine korrekte Belichtung."},
+{q:"Was ist High-Key-Fotografie?",o:["Bewusst helle, \u00fcberbelichtete Bildstimmung","Sehr dunkle Bilder","Nur Schwarz-Wei\u00df","Makrofotografie"],c:0,cat:"exposure",e:"High-Key nutzt bewusst helle T\u00f6ne und \u00dcberbelichtung f\u00fcr eine leichte, luftige Stimmung."},
+{q:"Was bewirkt ein ND-Filter?",o:["Reduziert die Lichtmenge f\u00fcr lange Belichtungszeiten","Erh\u00f6ht die Lichtmenge","Polfilter-Effekt","UV-Schutz"],c:0,cat:"exposure",e:"ND-Filter (Neutraldichte) reduzieren das einfallende Licht, erm\u00f6glichen l\u00e4ngere Verschlusszeiten bei Tageslicht."},
+{q:"Was ist die Reziprozit\u00e4tsregel?",o:["Verschlusszeit mindestens 1/Brennweite f\u00fcr Freihand","Blende = Brennweite","ISO = Verschlusszeit","Nur f\u00fcr Stativ"],c:0,cat:"exposure",e:"F\u00fcr verwacklungsfreie Freihandaufnahmen sollte die Verschlusszeit mindestens 1/Brennweite betragen."},
+{q:"Welche Einstellungen f\u00fcr Portr\u00e4tfotografie?",o:["f/1.4\u2013f/2.8, 85mm, niedriger ISO","f/16, 16mm, ISO 6400","f/22, 200mm, ISO 100","f/8, 24mm, ISO 3200"],c:0,cat:"genres",e:"Portr\u00e4ts: Offene Blende f\u00fcr Hintergrundunsch\u00e4rfe, mittlere Telebrennweite, niedriger ISO."},
+{q:"Welche Einstellungen f\u00fcr Landschaftsfotografie?",o:["f/8\u2013f/16, Weitwinkel, Stativ, niedriger ISO","f/1.4, 200mm, ISO 6400","f/2.8, 50mm, hoher ISO","Automatik"],c:0,cat:"genres",e:"Landschaften: Geschlossene Blende f\u00fcr durchgehende Sch\u00e4rfe, Weitwinkel, Stativ."},
+{q:"Was ist wichtig bei Sportfotografie?",o:["Schnelle Verschlusszeit, Serienbildmodus","Lange Belichtung, Stativ","Kleine Blende, niedriger ISO","Nur Weitwinkel"],c:0,cat:"genres",e:"Sport erfordert schnelle Verschlusszeiten (1/500+), guten Autofokus und oft Teleobjektive."},
+{q:"Welches Objektiv f\u00fcr Architekturfotografie?",o:["Weitwinkel oder Tilt-Shift","Fisheye","500mm Tele","50mm Normal"],c:0,cat:"genres",e:"Weitwinkelobjektive oder Tilt-Shift-Objektive f\u00fcr st\u00fcrzende Linien und gro\u00dfe Geb\u00e4ude."},
+{q:"Was ist wichtig bei Nachtfotografie?",o:["Stativ, offene Blende, hoher ISO, lange Belichtung","Blitz verwenden","Kleiner ISO, kurze Belichtung","Nur bei Vollmond"],c:0,cat:"genres",e:"Nachtfotografie erfordert Stativ, offene Blende (f/1.4\u2013f/2.8), erh\u00f6hten ISO und lange Belichtungszeiten."},
+{q:"Was zeichnet Makrofotografie aus?",o:["Abbildungsma\u00dfstab 1:1 oder gr\u00f6\u00dfer","Nur Landschaften","Weitwinkelaufnahmen","Schnelle Verschlusszeit"],c:0,cat:"genres",e:"Makrofotografie bildet kleine Motive im Ma\u00dfstab 1:1 oder gr\u00f6\u00dfer ab. Erfordert spezielle Makro-Objektive."},
+{q:"Welche Technik f\u00fcr Wildlife-Fotografie?",o:["Langes Tele, schneller AF, Geduld","Weitwinkel, langsamer AF","Blitz, Nahaufnahme","Nur Smartphone"],c:0,cat:"genres",e:"Wildlife erfordert lange Telebrennweiten (200\u2013600mm), schnellen Autofokus und viel Geduld."},
+{q:"Was ist Light Painting?",o:["Malen mit Licht bei Langzeitbelichtung","Bilder am Computer bearbeiten","Blitzfotografie","HDR-Technik"],c:0,cat:"genres",e:"Light Painting nutzt Langzeitbelichtung und bewegte Lichtquellen um 'mit Licht zu malen'."},
+{q:"Was ist Street Photography?",o:["Spontane Dokumentation des Alltagslebens","Nur Stra\u00dfen fotografieren","Studio-Portr\u00e4ts","Landschaftsfotografie"],c:0,cat:"genres",e:"Street Photography dokumentiert spontan und authentisch das Alltagsleben im \u00f6ffentlichen Raum."},
+{q:"Welche Kameraeinstellung f\u00fcr Feuerwerk?",o:["Stativ, f/8\u2013f/11, 2\u20134 Sek., ISO 100","Automatik","f/1.4, 1/4000s, ISO 6400","Nur mit Blitz"],c:0,cat:"genres",e:"Feuerwerk: Stativ, mittlere Blende (f/8\u2013f/11), mehrere Sekunden Belichtung, niedriger ISO."}
+],
+en: [
+{q:"What does the abbreviation DOF stand for?",o:["Depth of Field","Direction of Focus","Diameter of Filter","Digital Optical Format"],c:0,cat:"basics",e:"DOF stands for Depth of Field \u2013 the range that appears sharp in the image."},
+{q:"What happens when you open the aperture wider (smaller f-number)?",o:["More light, shallower depth of field","Less light, greater depth of field","Image becomes darker","No change"],c:0,cat:"basics",e:"A larger aperture opening (e.g., f/1.8) lets in more light and reduces depth of field."},
+{q:"Which ISO value produces the least noise?",o:["ISO 100","ISO 800","ISO 3200","ISO 6400"],c:0,cat:"basics",e:"The lower the ISO value, the less digital noise in the image."},
+{q:"What is the crop factor?",o:["Ratio of sensor size to full frame","Maximum magnification","Image compression","Color depth"],c:0,cat:"basics",e:"The crop factor describes the ratio of a smaller sensor to full frame (36x24mm)."},
+{q:"What does the focal length of a lens measure?",o:["Distance from lens to sensor at infinity focus","Length of the lens","Maximum sharpness","Light intensity"],c:0,cat:"basics",e:"Focal length is the distance between the optical center of the lens and the sensor when focused at infinity."},
+{q:"What is a histogram?",o:["Graphical display of brightness distribution","Color wheel","Sharpness indicator","White balance curve"],c:0,cat:"basics",e:"The histogram shows the distribution of pixels from dark to bright in the image."},
+{q:"What does RAW mean in photography?",o:["Uncompressed raw data format","Red eye tool","Rapid autofocus","Image stabilization"],c:0,cat:"basics",e:"RAW is an uncompressed format that retains all sensor data for maximum post-processing."},
+{q:"What is white balance?",o:["Color temperature adjustment","Exposure correction","Contrast setting","Sharpness optimization"],c:0,cat:"basics",e:"White balance adjusts color temperature so white appears white under various light sources."},
+{q:"What does the EV (Exposure Value) scale describe?",o:["Combination of aperture and shutter speed","Only aperture","Only ISO","Sensor size"],c:0,cat:"basics",e:"EV describes equivalent combinations of aperture and shutter speed at the same exposure."},
+{q:"What is bokeh?",o:["Aesthetic quality of blur","A lens type","Camera brand","Image format"],c:0,cat:"basics",e:"Bokeh describes the aesthetic quality of the out-of-focus areas in an image."},
+{q:"What does the Rule of Thirds state?",o:["Divide image into 9 parts, place subjects on lines","Always photograph 3 subjects","Divide image into 3 colors","Take 3 photos per subject"],c:0,cat:"composition",e:"The Rule of Thirds divides the image with 2 horizontal and 2 vertical lines. Key elements are placed on lines or intersections."},
+{q:"What is the Golden Ratio?",o:["Division ratio of approximately 1:1.618","Exactly 1:2","Image diagonal","Color harmony"],c:0,cat:"composition",e:"The Golden Ratio divides a line so the ratio of the whole to the larger part equals the larger to the smaller (~1:1.618)."},
+{q:"What are leading lines in composition?",o:["Lines that guide the eye to the subject","Straight horizons","Frame lines","Text lines"],c:0,cat:"composition",e:"Leading lines are visual elements (roads, rivers, railings) that guide the viewer's eye to the main subject."},
+{q:"What does negative space achieve?",o:["Creates impact and focus on the subject","Makes the image boring","Fills the image","Increases saturation"],c:0,cat:"composition",e:"Negative space gives the subject 'room to breathe' and draws attention."},
+{q:"Which colors are complementary?",o:["Opposite on the color wheel","Adjacent on the color wheel","Only black and white","Only primary colors"],c:0,cat:"composition",e:"Complementary colors are opposite each other on the color wheel (e.g., blue-orange) and create strong contrast."},
+{q:"What do diagonals create in composition?",o:["Dynamics and tension","Calm and harmony","Symmetry","Depth of field"],c:0,cat:"composition",e:"Diagonal lines create a sense of movement, dynamism and energy in the image."},
+{q:"What is natural framing?",o:["Frame subject with scene elements","Buy picture frames","Camera body","Crop function"],c:0,cat:"composition",e:"Natural framing uses existing elements (archways, branches, windows) to frame the subject."},
+{q:"When should you break the Rule of Thirds?",o:["For symmetry or deliberate artistic effect","Never","Always","Only for portraits"],c:0,cat:"composition",e:"Rules are guidelines. With perfect symmetry or intentional artistic expression, centering can be more effective."},
+{q:"What creates depth in an image?",o:["Foreground, middle ground, background","Only wide-angle","Only telephoto","High ISO"],c:0,cat:"composition",e:"Layering foreground, middle ground and background creates spatial depth in the two-dimensional image."},
+{q:"What is the importance of lines in photography?",o:["They guide the eye and structure the image","Only decorative","Technical error","Exposure correction"],c:0,cat:"composition",e:"Lines are one of the strongest compositional elements \u2013 they guide the eye, divide space and create mood."},
+{q:"What is a normal lens?",o:["Approximately 50mm focal length (full frame)","Any zoom","10mm","200mm"],c:0,cat:"lens",e:"A normal lens (~50mm on full frame) roughly matches the natural field of view of the human eye."},
+{q:"Which focal length is best for portraits?",o:["85\u2013135mm","10\u201316mm","400\u2013600mm","Fisheye"],c:0,cat:"lens",e:"85\u2013135mm creates a flattering perspective and beautiful bokeh for portraits."},
+{q:"What is a wide-angle lens?",o:["Focal length under 35mm","Focal length over 200mm","Exactly 50mm","Prime lens"],c:0,cat:"lens",e:"Wide-angle lenses have focal lengths below about 35mm and capture a wide field of view."},
+{q:"What does 'fast lens' mean?",o:["Large maximum aperture","Lightweight lens","Fast autofocus","Short focal length"],c:0,cat:"lens",e:"A fast lens has a large maximum aperture (e.g., f/1.4). The smaller the number, the faster the lens."},
+{q:"What is hyperfocal distance?",o:["Focus point for maximum sharpness to infinity","Shortest focus distance","Maximum focal length","Aperture value"],c:0,cat:"lens",e:"Hyperfocal distance is where everything from half that distance to infinity appears sharp."},
+{q:"What does a polarizing filter do?",o:["Reduces reflections and increases saturation","Increases reflections","Magnifies the image","Reduces noise"],c:0,cat:"lens",e:"A polarizing filter reduces reflections on non-metallic surfaces and enhances colors (especially sky)."},
+{q:"What does IS/VR/OIS mean?",o:["Image stabilization","Infrared sensor","Video recording","ISO regulation"],c:0,cat:"lens",e:"IS (Canon), VR (Nikon), OIS (others) denote image stabilization systems in lenses."},
+{q:"What is 1:1 magnification ratio?",o:["Subject projected at actual size on sensor","Double magnification","Half size","Panorama"],c:0,cat:"lens",e:"At 1:1, the subject is reproduced at its actual size on the sensor \u2013 true macro."},
+{q:"What is a telephoto lens best for?",o:["Distant subjects, sports, wildlife","Interiors","Macro","Wide-angle architecture"],c:0,cat:"lens",e:"Telephoto lenses (>70mm) suit distant subjects, compress perspective and create subject isolation."},
+{q:"What is a tilt-shift lens?",o:["Perspective correction and focus plane control","Zoom lens","Fisheye","Standard prime"],c:0,cat:"lens",e:"Tilt-shift lenses allow perspective correction (shift) and selective focus plane control (tilt)."},
+{q:"What happens with longer shutter speed?",o:["More light, possible motion blur","Less light","Higher sharpness","Smaller field of view"],c:0,cat:"exposure",e:"Longer shutter speeds let in more light but can cause motion blur."},
+{q:"What is exposure compensation?",o:["Deliberate over- or underexposure","ISO setting","White balance","Lens correction"],c:0,cat:"exposure",e:"Exposure compensation (\u00b1EV) allows deliberate deviation from the metered exposure."},
+{q:"What is matrix metering?",o:["Exposure metering across the entire image","Center-only metering","Spot metering","Manual metering"],c:0,cat:"exposure",e:"Matrix/evaluative metering evaluates brightness across the entire image for exposure."},
+{q:"When should you use spot metering?",o:["In high contrast or backlit situations","In even lighting","Always","Only for landscapes"],c:0,cat:"exposure",e:"Spot metering measures only a small area (~2-5%) and suits high-contrast scenes."},
+{q:"What is exposure bracketing?",o:["Multiple shots at different exposures","Burst mode","Single shot","Long exposure"],c:0,cat:"exposure",e:"Bracketing takes multiple shots at different exposures, often used for HDR."},
+{q:"What is rear-curtain sync flash?",o:["Flash fires at end of exposure","Flash at beginning","Continuous light","No flash"],c:0,cat:"exposure",e:"Flash fires just before the shutter closes, so motion trails appear behind the subject."},
+{q:"What is the Sunny 16 rule?",o:["In sun: f/16, shutter = 1/ISO","Always use f/16","ISO 16","16mm focal length"],c:0,cat:"exposure",e:"Sunny 16: In bright sunlight, f/16 with 1/ISO as shutter speed gives correct exposure."},
+{q:"What is high-key photography?",o:["Deliberately bright, overexposed mood","Very dark images","Only B&W","Macro photography"],c:0,cat:"exposure",e:"High-key uses deliberately bright tones and overexposure for a light, airy mood."},
+{q:"What does an ND filter do?",o:["Reduces light for longer exposures","Increases light","Polarizer effect","UV protection"],c:0,cat:"exposure",e:"ND (neutral density) filters reduce incoming light, enabling longer shutter speeds in daylight."},
+{q:"What is the reciprocal rule?",o:["Shutter speed at least 1/focal length for handheld","Aperture = focal length","ISO = shutter speed","Tripod only"],c:0,cat:"exposure",e:"For sharp handheld shots, shutter speed should be at least 1/focal length."},
+{q:"What settings for portrait photography?",o:["f/1.4\u2013f/2.8, 85mm, low ISO","f/16, 16mm, ISO 6400","f/22, 200mm, ISO 100","f/8, 24mm, ISO 3200"],c:0,cat:"genres",e:"Portraits: Wide aperture for background blur, medium telephoto, low ISO."},
+{q:"What settings for landscape photography?",o:["f/8\u2013f/16, wide-angle, tripod, low ISO","f/1.4, 200mm, ISO 6400","f/2.8, 50mm, high ISO","Auto mode"],c:0,cat:"genres",e:"Landscapes: Narrow aperture for front-to-back sharpness, wide-angle, tripod."},
+{q:"What matters in sports photography?",o:["Fast shutter speed, burst mode","Long exposure, tripod","Small aperture, low ISO","Only wide-angle"],c:0,cat:"genres",e:"Sports require fast shutter speeds (1/500+), good autofocus and often telephoto lenses."},
+{q:"Which lens for architecture?",o:["Wide-angle or tilt-shift","Fisheye","500mm telephoto","50mm normal"],c:0,cat:"genres",e:"Wide-angle or tilt-shift lenses for correcting converging lines and capturing large buildings."},
+{q:"What matters in night photography?",o:["Tripod, wide aperture, high ISO, long exposure","Use flash","Low ISO, short exposure","Only at full moon"],c:0,cat:"genres",e:"Night photography needs tripod, wide aperture (f/1.4\u2013f/2.8), higher ISO and long exposures."},
+{q:"What characterizes macro photography?",o:["Magnification ratio 1:1 or greater","Only landscapes","Wide-angle shots","Fast shutter"],c:0,cat:"genres",e:"Macro photography reproduces small subjects at 1:1 or greater. Requires dedicated macro lenses."},
+{q:"What technique for wildlife photography?",o:["Long telephoto, fast AF, patience","Wide-angle, slow AF","Flash, close-up","Smartphone only"],c:0,cat:"genres",e:"Wildlife requires long telephotos (200\u2013600mm), fast autofocus and lots of patience."},
+{q:"What is light painting?",o:["Painting with light during long exposure","Editing on computer","Flash photography","HDR technique"],c:0,cat:"genres",e:"Light painting uses long exposure and moving light sources to 'paint with light'."},
+{q:"What is street photography?",o:["Spontaneous documentation of everyday life","Only photographing streets","Studio portraits","Landscape photography"],c:0,cat:"genres",e:"Street photography spontaneously and authentically documents everyday life in public spaces."},
+{q:"What camera settings for fireworks?",o:["Tripod, f/8\u2013f/11, 2\u20134 sec, ISO 100","Auto mode","f/1.4, 1/4000s, ISO 6400","Only with flash"],c:0,cat:"genres",e:"Fireworks: Tripod, medium aperture (f/8\u2013f/11), several seconds exposure, low ISO."}
+]
+};
+// Copy EN to other langs as fallback (quiz content stays same structure)
+quizDB.fr = quizDB.en; quizDB.it = quizDB.en; quizDB.sr = quizDB.en; quizDB.sq = quizDB.en;
+
+/* ==================== GLOBALS ==================== */
+var quizState = { questions: [], current: 0, score: 0, answers: [], timer: null, seconds: 0 };
+var RULES = ['thirds','golden','leading','symmetry','framing','negative','diagonal','color'];
+var MOTIFS = [
+ {id:'portrait',icon:'\ud83d\udc64',lens:'85mm',aperture:'f/1.4\u2013f/2.8',iso:'100\u2013400',shutter:'1/125\u20131/250'},
+ {id:'landscape',icon:'\ud83c\udfd4\ufe0f',lens:'16\u201335mm',aperture:'f/8\u2013f/16',iso:'100',shutter:'1/30\u2013s'},
+ {id:'street',icon:'\ud83c\udfd9\ufe0f',lens:'35\u201350mm',aperture:'f/5.6\u2013f/8',iso:'400\u20131600',shutter:'1/125\u20131/500'},
+ {id:'macro',icon:'\ud83d\udd0d',lens:'90\u2013105mm',aperture:'f/8\u2013f/16',iso:'100\u2013400',shutter:'1/200+'},
+ {id:'night',icon:'\ud83c\udf19',lens:'14\u201324mm',aperture:'f/1.4\u2013f/2.8',iso:'1600\u20136400',shutter:'15\u201330s'},
+ {id:'sport',icon:'\u26a1',lens:'70\u2013200mm',aperture:'f/2.8\u2013f/4',iso:'800\u20133200',shutter:'1/500\u20131/2000'},
+ {id:'architecture',icon:'\ud83c\udfdb\ufe0f',lens:'14\u201324mm',aperture:'f/8\u2013f/11',iso:'100',shutter:'1/60\u2013s'},
+ {id:'wildlife',icon:'\ud83e\udd81',lens:'200\u2013600mm',aperture:'f/4\u2013f/5.6',iso:'400\u20133200',shutter:'1/500\u20131/2000'}
+];
+
+/* ==================== INIT ==================== */
+document.addEventListener('DOMContentLoaded', function() {
+ initNav();
+ initLangSwitcher();
+ setLanguage(window.currentLang || 'de');
+ initParticles();
+ initCalcTabs();
+ initRangeSync();
+ initCounters();
+ renderRules();
+ renderMotifs();
+ renderQuizCategories();
+ drawExposureTriangle();
+ initExposureControls();
+ setTimeout(function(){ drawAllRuleDemos(); }, 300);
+ document.addEventListener('languageChanged', function() {
+ renderRules();
+ renderMotifs();
+ renderQuizCategories();
+ setTimeout(drawAllRuleDemos, 200);
+ drawExposureTriangle();
+ });
+});
+
+/* ==================== NAVIGATION ==================== */
+function initNav() {
+ window.addEventListener('scroll', function() {
+ var nb = document.getElementById('navbar');
+ if (nb) nb.classList.toggle('scrolled', window.scrollY > 50);
+ });
+ var toggle = document.getElementById('navToggle');
+ var menu = document.getElementById('navMenu');
+ if (toggle && menu) {
+ toggle.addEventListener('click', function() { menu.classList.toggle('open'); });
+ menu.querySelectorAll('.nav-link').forEach(function(a) {
+ a.addEventListener('click', function() { menu.classList.remove('open'); });
+ });
+ }
+}
+
+function initLangSwitcher() {
+ var sw = document.getElementById('langSwitcher');
+ var cur = document.getElementById('langCurrent');
+ if (!sw || !cur) return;
+ cur.addEventListener('click', function(e) { e.stopPropagation(); sw.classList.toggle('open'); });
+ sw.querySelectorAll('.lang-option').forEach(function(btn) {
+ btn.addEventListener('click', function() {
+ setLanguage(btn.getAttribute('data-lang'));
+ sw.classList.remove('open');
+ });
+ });
+ document.addEventListener('click', function() { sw.classList.remove('open'); });
+}
+
+/* ==================== PARTICLES ==================== */
+function initParticles() {
+ var container = document.getElementById('heroParticles');
+ if (!container) return;
+ for (var i = 0; i < 30; i++) {
+ var p = document.createElement('div');
+ p.className = 'particle';
+ p.style.left = Math.random() * 100 + '%';
+ p.style.animationDelay = Math.random() * 8 + 's';
+ p.style.animationDuration = (6 + Math.random() * 6) + 's';
+ container.appendChild(p);
+ }
+}
+
+/* ==================== COUNTERS ==================== */
+function initCounters() {
+ var stats = document.querySelectorAll('.stat-number');
+ if (!stats.length) return;
+ var observed = false;
+ var obs = new IntersectionObserver(function(entries) {
+ entries.forEach(function(entry) {
+ if (entry.isIntersecting && !observed) {
+ observed = true;
+ stats.forEach(function(el) { animateCounter(el); });
+ }
+ });
+ }, { threshold: 0.5 });
+ stats.forEach(function(el) { obs.observe(el); });
+}
+function animateCounter(el) {
+ var target = parseInt(el.getAttribute('data-target')) || 0;
+ var duration = 1500, start = 0, startTime = null;
+ function step(ts) {
+ if (!startTime) startTime = ts;
+ var progress = Math.min((ts - startTime) / duration, 1);
+ el.textContent = Math.floor(progress * target);
+ if (progress < 1) requestAnimationFrame(step);
+ else el.textContent = target;
+ }
+ requestAnimationFrame(step);
+}
+
+/* ==================== CALC TABS ==================== */
+function initCalcTabs() {
+ document.querySelectorAll('.calc-tab').forEach(function(tab) {
+ tab.addEventListener('click', function() {
+ document.querySelectorAll('.calc-tab').forEach(function(t) { t.classList.remove('active'); });
+ document.querySelectorAll('.calc-panel').forEach(function(p) { p.classList.remove('active'); });
+ tab.classList.add('active');
+ var panel = document.getElementById('calc-' + tab.getAttribute('data-calc'));
+ if (panel) panel.classList.add('active');
+ });
+ });
+}
+
+/* ==================== RANGE SYNC ==================== */
+function initRangeSync() {
+ var pairs = [
+ ['dof-focal','dof-focal-range'],['dof-aperture','dof-aperture-range'],['dof-distance','dof-distance-range'],
+ ['fov-focal','fov-focal-range']
+ ];
+ pairs.forEach(function(p) {
+ var num = document.getElementById(p[0]), rng = document.getElementById(p[1]);
+ if (!num || !rng) return;
+ num.addEventListener('input', function() { rng.value = num.value; });
+ rng.addEventListener('input', function() { num.value = rng.value; });
+ });
+}
+
+/* ==================== DOF CALCULATOR ==================== */
+window.calculateDOF = function() {
+ var f = parseFloat(document.getElementById('dof-focal').value);
+ var N = parseFloat(document.getElementById('dof-aperture').value);
+ var s = parseFloat(document.getElementById('dof-distance').value) * 1000;
+ var cocDiag = parseFloat(document.getElementById('dof-sensor').value);
+ var CoC = cocDiag / 1.5;
+ var H = (f * f) / (N * CoC) + f;
+ var nearDist = (s * (H - f)) / (H + s - 2 * f);
+ var farDist = (H > s) ? (s * (H - f)) / (H - s) : Infinity;
+ var dofTotal = farDist - nearDist;
+ var fmt = function(v) { return isFinite(v) ? (v/1000).toFixed(2) + ' m' : '\u221e'; };
+ document.getElementById('dof-total').textContent = fmt(dofTotal);
+ document.getElementById('dof-near').textContent = fmt(nearDist);
+ document.getElementById('dof-far').textContent = fmt(farDist);
+ document.getElementById('dof-coc').textContent = CoC.toFixed(4) + ' mm';
+ // Visualization
+ var maxRange = Math.min(farDist * 1.5, s * 3);
+ if (!isFinite(maxRange)) maxRange = s * 3;
+ var bar = document.getElementById('dof-sharp-zone');
+ var marker = document.getElementById('dof-subject-marker');
+ var leftPct = Math.max(0, (nearDist / maxRange) * 100);
+ var rightPct = isFinite(farDist) ? Math.min(100, (farDist / maxRange) * 100) : 100;
+ bar.style.left = leftPct + '%'; bar.style.width = (rightPct - leftPct) + '%';
+ marker.style.left = ((s / maxRange) * 100) + '%';
+ document.getElementById('dof-label-near').textContent = fmt(nearDist);
+ document.getElementById('dof-label-subject').textContent = (s/1000).toFixed(1) + 'm';
+ document.getElementById('dof-label-far').textContent = fmt(farDist);
+};
+
+/* ==================== FOV CALCULATOR ==================== */
+window.calculateFOV = function() {
+ var f = parseFloat(document.getElementById('fov-focal').value);
+ var dims = document.getElementById('fov-sensor').value.split('x');
+ var w = parseFloat(dims[0]), h = parseFloat(dims[1]);
+ var d = Math.sqrt(w*w + h*h);
+ var hAngle = 2 * Math.atan(w / (2 * f)) * 180 / Math.PI;
+ var vAngle = 2 * Math.atan(h / (2 * f)) * 180 / Math.PI;
+ var dAngle = 2 * Math.atan(d / (2 * f)) * 180 / Math.PI;
+ document.getElementById('fov-horizontal').textContent = hAngle.toFixed(1) + '\u00b0';
+ document.getElementById('fov-vertical').textContent = vAngle.toFixed(1) + '\u00b0';
+ document.getElementById('fov-diagonal').textContent = dAngle.toFixed(1) + '\u00b0';
+ var type;
+ if (f < 24) type = t('lenstype.superwide');
+ else if (f < 35) type = t('lenstype.wide');
+ else if (f < 70) type = t('lenstype.normal');
+ else if (f < 200) type = t('lenstype.tele');
+ else type = t('lenstype.supertele');
+ document.getElementById('fov-type').textContent = type;
+ // Draw FOV cone
+ var canvas = document.getElementById('fov-canvas');
+ if (!canvas) return;
+ var ctx = canvas.getContext('2d');
+ ctx.clearRect(0, 0, 400, 300);
+ var cx = 200, cy = 280, angle = hAngle * Math.PI / 180;
+ ctx.fillStyle = 'rgba(108,92,231,0.15)';
+ ctx.beginPath(); ctx.moveTo(cx, cy);
+ ctx.arc(cx, cy, 250, -Math.PI/2 - angle/2, -Math.PI/2 + angle/2);
+ ctx.closePath(); ctx.fill();
+ ctx.strokeStyle = '#a29bfe'; ctx.lineWidth = 2;
+ ctx.beginPath(); ctx.moveTo(cx, cy);
+ ctx.lineTo(cx + 250 * Math.sin(-angle/2), cy - 250 * Math.cos(angle/2));
+ ctx.moveTo(cx, cy);
+ ctx.lineTo(cx + 250 * Math.sin(angle/2), cy - 250 * Math.cos(angle/2));
+ ctx.stroke();
+ ctx.fillStyle = '#a29bfe'; ctx.font = '14px Inter';
+ ctx.textAlign = 'center';
+ ctx.fillText(hAngle.toFixed(1) + '\u00b0', cx, cy - 260 + 20);
+};
+
+/* ==================== CROP CALCULATOR ==================== */
+window.calculateCrop = function() {
+ var f = parseFloat(document.getElementById('crop-focal').value);
+ var a = parseFloat(document.getElementById('crop-aperture').value);
+ var crop = parseFloat(document.getElementById('crop-sensor').value);
+ var ef = f * crop, ea = a * crop;
+ document.getElementById('crop-equiv-focal').textContent = ef.toFixed(0) + ' mm';
+ document.getElementById('crop-equiv-aperture').textContent = 'f/' + ea.toFixed(1);
+ document.getElementById('crop-factor-result').textContent = crop.toFixed(1) + 'x';
+ var overlay = document.getElementById('crop-overlay');
+ if (overlay) {
+ var pct = 100 / crop;
+ overlay.style.width = pct + '%'; overlay.style.height = pct + '%';
+ overlay.style.top = ((100 - pct) / 2) + '%'; overlay.style.left = ((100 - pct) / 2) + '%';
+ }
+};
+
+/* ==================== HYPERFOCAL CALCULATOR ==================== */
+window.calculateHyperfocal = function() {
+ var f = parseFloat(document.getElementById('hyper-focal').value);
+ var N = parseFloat(document.getElementById('hyper-aperture').value);
+ var CoC = parseFloat(document.getElementById('hyper-sensor').value);
+ var H = (f * f) / (N * CoC) + f;
+ document.getElementById('hyper-distance').textContent = (H / 1000).toFixed(2) + ' m';
+ document.getElementById('hyper-near').textContent = (H / 2000).toFixed(2) + ' m';
+};
+
+/* ==================== FLASH CALCULATOR ==================== */
+window.calculateFlash = function() {
+ var gn = parseFloat(document.getElementById('flash-gn').value);
+ var a = parseFloat(document.getElementById('flash-aperture').value);
+ var iso = parseFloat(document.getElementById('flash-iso').value);
+ var range = (gn / a) * Math.sqrt(iso / 100);
+ var range100 = gn / a;
+ document.getElementById('flash-range').textContent = range.toFixed(1) + ' m';
+ document.getElementById('flash-range-100').textContent = range100.toFixed(1) + ' m';
+};
+
+/* ==================== MAGNIFICATION CALCULATOR ==================== */
+window.calculateMagnification = function() {
+ var f = parseFloat(document.getElementById('mag-focal').value);
+ var minD = parseFloat(document.getElementById('mag-min-focus').value) * 10;
+ var sw = parseFloat(document.getElementById('mag-sensor-w').value);
+ var mag = f / (minD - f);
+ var fieldW = sw / mag;
+ document.getElementById('mag-ratio').textContent = mag >= 1 ? '1:1' : '1:' + (1/mag).toFixed(1);
+ document.getElementById('mag-field').textContent = fieldW.toFixed(1) + ' mm';
+ var label;
+ if (mag >= 1) label = t('macro.true');
+ else if (mag >= 0.5) label = t('macro.half');
+ else if (mag >= 0.25) label = t('macro.close');
+ else label = t('macro.no');
+ document.getElementById('mag-macro').textContent = label;
+};
+
+/* ==================== COMPOSITION RULES ==================== */
+function renderRules() {
+ var grid = document.getElementById('rulesGrid');
+ if (!grid) return;
+ grid.innerHTML = '';
+ RULES.forEach(function(rule, i) {
+ var num = String(i + 1).padStart(2, '0');
+ var card = document.createElement('div');
+ card.className = 'rule-card';
+ card.setAttribute('data-rule', rule);
+ card.innerHTML =
+ '
' +
+ '
' +
+ '
' + num + '
' +
+ '
' +
+ '
' +
+ '
' + t('rule.' + rule + '.name') + ' ' +
+ '
' + t('rule.' + rule + '.desc') + '
' +
+ '
' +
+ '' + t('rule.' + rule + '.tip1') + ' ' +
+ '' + t('rule.' + rule + '.tip2') + ' ' +
+ '' + t('rule.' + rule + '.tip3') + ' ' +
+ ' ' +
+ '
' + t('comp.demo') + ' ' +
+ '
';
+ grid.appendChild(card);
+ });
+}
+
+function drawAllRuleDemos() { RULES.forEach(function(r) { drawRuleDemo(r); }); }
+
+window.drawRuleDemo = function(rule) {
+ var canvas = document.getElementById('canvas-' + rule);
+ if (!canvas) return;
+ var ctx = canvas.getContext('2d');
+ var W = canvas.width, H = canvas.height;
+ // Background gradient
+ var bg = ctx.createLinearGradient(0, 0, W, H);
+ bg.addColorStop(0, '#1a1a2e'); bg.addColorStop(1, '#16213e');
+ ctx.fillStyle = bg; ctx.fillRect(0, 0, W, H);
+ ctx.lineWidth = 1.5;
+
+ switch(rule) {
+ case 'thirds':
+ ctx.strokeStyle = 'rgba(162,155,254,0.6)';
+ for (var i = 1; i <= 2; i++) {
+ ctx.beginPath(); ctx.moveTo(W*i/3, 0); ctx.lineTo(W*i/3, H); ctx.stroke();
+ ctx.beginPath(); ctx.moveTo(0, H*i/3); ctx.lineTo(W, H*i/3); ctx.stroke();
+ }
+ ctx.fillStyle = '#ff6b6b';
+ for (var x = 1; x <= 2; x++) for (var y = 1; y <= 2; y++) {
+ ctx.beginPath(); ctx.arc(W*x/3, H*y/3, 6, 0, Math.PI*2); ctx.fill();
+ }
+ break;
+ case 'golden':
+ var phi = 0.618;
+ ctx.strokeStyle = 'rgba(253,203,110,0.7)';
+ [phi, 1-phi].forEach(function(r) {
+ ctx.beginPath(); ctx.moveTo(W*r, 0); ctx.lineTo(W*r, H); ctx.stroke();
+ ctx.beginPath(); ctx.moveTo(0, H*r); ctx.lineTo(W, H*r); ctx.stroke();
+ });
+ ctx.fillStyle = '#fdcb6e';
+ ctx.beginPath(); ctx.arc(W*phi, H*phi, 8, 0, Math.PI*2); ctx.fill();
+ // Spiral hint
+ ctx.strokeStyle = 'rgba(253,203,110,0.4)'; ctx.lineWidth = 2;
+ ctx.beginPath();
+ var cx=W*phi, cy=H*phi, rad=80;
+ for (var a=0; a
' + m.icon + ' ' +
+ '
' +
+ '
' + t('motif.' + m.id + '.title') + ' ' +
+ '
' + t('motif.' + m.id + '.desc') + '
' +
+ '
' +
+ '
' + t('motif.setting.lens') + ' ' + m.lens + '
' +
+ '
' + t('motif.setting.aperture') + ' ' + m.aperture + '
' +
+ '
' + t('motif.setting.iso') + ' ' + m.iso + '
' +
+ '
' + t('motif.setting.shutter') + ' ' + m.shutter + '
' +
+ '
' +
+ '
' + t('motif.' + m.id) + '
' +
+ '
';
+ grid.appendChild(card);
+ });
+}
+
+function filterMotifs(cat) {
+ document.querySelectorAll('.motif-filter-btn').forEach(function(b) {
+ b.classList.toggle('active', b.getAttribute('data-filter') === cat);
+ });
+ document.querySelectorAll('.motif-card').forEach(function(card) {
+ if (cat === 'all') card.classList.remove('hidden');
+ else card.classList.toggle('hidden', card.getAttribute('data-category') !== cat);
+ });
+}
+
+/* ==================== EXPOSURE TRIANGLE ==================== */
+var apertureVals = [1.4,2,2.8,4,5.6,8,11,16,22,32];
+var shutterLabels = ['30s','15s','1s','1/4','1/30','1/125','1/250','1/500','1/1000','1/2000','1/4000','1/8000'];
+var isoVals = [100,200,400,800,1600,3200,6400,12800,25600];
+
+function drawExposureTriangle() {
+ var canvas = document.getElementById('exposure-canvas');
+ if (!canvas) return;
+ var ctx = canvas.getContext('2d');
+ var W = canvas.width, H = canvas.height;
+ ctx.clearRect(0, 0, W, H);
+ var cx = W/2, topY = 40, botY = H - 60;
+ var leftX = 60, rightX = W - 60;
+ // Triangle
+ ctx.beginPath(); ctx.moveTo(cx, topY); ctx.lineTo(leftX, botY); ctx.lineTo(rightX, botY); ctx.closePath();
+ ctx.fillStyle = 'rgba(108,92,231,0.08)'; ctx.fill();
+ ctx.strokeStyle = 'rgba(108,92,231,0.4)'; ctx.lineWidth = 2; ctx.stroke();
+ // Labels
+ ctx.font = '600 14px Inter'; ctx.fillStyle = '#a29bfe'; ctx.textAlign = 'center';
+ ctx.fillText(t('exp.aperture').split(' ')[0] || 'Aperture', cx, topY - 12);
+ ctx.fillText('ISO', rightX + 10, botY + 30);
+ ctx.fillText(t('exp.shutter').split(' ')[0] || 'Shutter', leftX - 10, botY + 30);
+ // Icons in triangle
+ ctx.font = '28px serif'; ctx.textAlign = 'center';
+ ctx.fillText('\ud83d\udd73\ufe0f', cx, topY + 55);
+ ctx.fillText('\u23f1\ufe0f', leftX + 50, botY - 25);
+ ctx.fillText('\ud83c\udf1f', rightX - 50, botY - 25);
+}
+
+function initExposureControls() {
+ ['exp-aperture','exp-shutter','exp-iso'].forEach(function(id) {
+ var el = document.getElementById(id);
+ if (el) el.addEventListener('input', updateExposure);
+ });
+ updateExposure();
+}
+
+function updateExposure() {
+ var ai = parseInt(document.getElementById('exp-aperture').value);
+ var si = parseInt(document.getElementById('exp-shutter').value);
+ var ii = parseInt(document.getElementById('exp-iso').value);
+ document.getElementById('exp-aperture-val').textContent = 'f/' + apertureVals[ai];
+ document.getElementById('exp-shutter-val').textContent = shutterLabels[si];
+ document.getElementById('exp-iso-val').textContent = 'ISO ' + isoVals[ii];
+ // EV offset (simplified)
+ var ev = (ai - 4) + (si - 5) - (ii - 2);
+ var pct = 50 + ev * 8.33;
+ pct = Math.max(0, Math.min(100, pct));
+ document.getElementById('ev-indicator').style.left = pct + '%';
+ var evText = document.getElementById('ev-text');
+ if (Math.abs(ev) <= 0.5) { evText.textContent = t('exp.correct'); evText.style.color = '#00cec9'; }
+ else if (ev < -2) { evText.textContent = t('exp.under'); evText.style.color = '#0984e3'; }
+ else if (ev < 0) { evText.textContent = t('exp.slightunder'); evText.style.color = '#74b9ff'; }
+ else if (ev > 2) { evText.textContent = t('exp.over'); evText.style.color = '#d63031'; }
+ else { evText.textContent = t('exp.slightover'); evText.style.color = '#e17055'; }
+}
+
+/* ==================== QUIZ CATEGORIES ==================== */
+function renderQuizCategories() {
+ var container = document.getElementById('quizCategories');
+ if (!container) return;
+ container.innerHTML = '';
+ var cats = [
+ {id:'all',key:'quiz.all'},{id:'basics',key:'quiz.basics'},{id:'composition',key:'quiz.composition'},
+ {id:'lens',key:'quiz.lenses'},{id:'exposure',key:'quiz.exposure'},{id:'genres',key:'quiz.genres'}
+ ];
+ cats.forEach(function(c, i) {
+ var btn = document.createElement('button');
+ btn.className = 'quiz-cat-btn' + (i === 0 ? ' active' : '');
+ btn.setAttribute('data-category', c.id);
+ btn.textContent = t(c.key);
+ btn.addEventListener('click', function() { startQuiz(c.id); });
+ container.appendChild(btn);
+ });
+}
+
+/* ==================== QUIZ SYSTEM ==================== */
+window.startQuiz = function(category) {
+ var lang = window.currentLang || 'de';
+ var questions = quizDB[lang] || quizDB.de;
+ if (category && category !== 'all') questions = questions.filter(function(q) { return q.cat === category; });
+ // Shuffle & pick 10
+ questions = questions.slice().sort(function() { return Math.random() - 0.5; }).slice(0, 10);
+ quizState.questions = questions;
+ quizState.current = 0; quizState.score = 0; quizState.answers = [];
+ quizState.seconds = 0;
+ // Update UI
+ document.querySelectorAll('.quiz-cat-btn').forEach(function(b) {
+ b.classList.toggle('active', b.getAttribute('data-category') === category);
+ });
+ document.getElementById('quizStart').style.display = 'none';
+ document.getElementById('quizResults').style.display = 'none';
+ document.getElementById('quizActive').style.display = 'block';
+ // Timer
+ if (quizState.timer) clearInterval(quizState.timer);
+ quizState.timer = setInterval(function() {
+ quizState.seconds++;
+ var m = Math.floor(quizState.seconds / 60), s = quizState.seconds % 60;
+ document.getElementById('quizTimer').textContent = String(m).padStart(2,'0') + ':' + String(s).padStart(2,'0');
+ }, 1000);
+ showQuestion(0);
+};
+
+function showQuestion(idx) {
+ var q = quizState.questions[idx];
+ if (!q) return;
+ document.getElementById('quizProgress').style.width = ((idx + 1) / quizState.questions.length * 100) + '%';
+ document.getElementById('quizProgressText').textContent = (idx + 1) + ' / ' + quizState.questions.length;
+ document.getElementById('quizScore').textContent = t('quiz.score') + ': ' + quizState.score;
+ var catMap = {basics:'quiz.basics',composition:'quiz.composition',lens:'quiz.lenses',exposure:'quiz.exposure',genres:'quiz.genres'};
+ document.getElementById('quizCategoryBadge').textContent = t(catMap[q.cat] || q.cat);
+ document.getElementById('quizQuestion').textContent = q.q;
+ var optContainer = document.getElementById('quizOptions');
+ optContainer.innerHTML = '';
+ var letters = ['A','B','C','D'];
+ q.o.forEach(function(opt, i) {
+ var div = document.createElement('div');
+ div.className = 'quiz-option';
+ div.innerHTML = '
' + letters[i] + ' ' + opt + ' ';
+ div.addEventListener('click', function() { selectAnswer(i); });
+ optContainer.appendChild(div);
+ });
+ document.getElementById('quizExplanation').style.display = 'none';
+ document.getElementById('quizNextBtn').style.display = 'none';
+}
+
+function selectAnswer(idx) {
+ var q = quizState.questions[quizState.current];
+ var options = document.querySelectorAll('#quizOptions .quiz-option');
+ options.forEach(function(o, i) {
+ o.classList.add('disabled');
+ o.style.pointerEvents = 'none';
+ if (i === q.c) o.classList.add('correct');
+ if (i === idx && idx !== q.c) o.classList.add('wrong');
+ });
+ if (idx === q.c) quizState.score++;
+ quizState.answers.push({ question: q, selected: idx, correct: q.c });
+ document.getElementById('quizScore').textContent = t('quiz.score') + ': ' + quizState.score;
+ document.getElementById('quizExplanationText').textContent = q.e;
+ document.getElementById('quizExplanation').style.display = 'block';
+ document.getElementById('quizNextBtn').style.display = 'block';
+}
+
+window.nextQuestion = function() {
+ quizState.current++;
+ if (quizState.current < quizState.questions.length) {
+ showQuestion(quizState.current);
+ } else {
+ showResults();
+ }
+};
+
+function showResults() {
+ if (quizState.timer) clearInterval(quizState.timer);
+ document.getElementById('quizActive').style.display = 'none';
+ document.getElementById('quizResults').style.display = 'block';
+ var total = quizState.questions.length;
+ var pct = Math.round((quizState.score / total) * 100);
+ document.getElementById('resultsPercent').textContent = pct + '%';
+ // Animate circle
+ var circle = document.getElementById('resultsCircle');
+ var circumference = 2 * Math.PI * 54;
+ circle.style.strokeDasharray = circumference;
+ circle.style.strokeDashoffset = circumference;
+ setTimeout(function() {
+ circle.style.strokeDashoffset = circumference - (circumference * pct / 100);
+ }, 100);
+ // Color based on score
+ if (pct >= 80) circle.style.stroke = '#00cec9';
+ else if (pct >= 50) circle.style.stroke = '#fdcb6e';
+ else circle.style.stroke = '#ff6b6b';
+ var resultText = t('quiz.resulttext').replace('{0}', quizState.score).replace('{1}', total);
+ document.getElementById('resultsText').textContent = resultText;
+ var feedbackKey;
+ if (pct >= 90) feedbackKey = 'quiz.excellent';
+ else if (pct >= 70) feedbackKey = 'quiz.good';
+ else if (pct >= 50) feedbackKey = 'quiz.ok';
+ else feedbackKey = 'quiz.needwork';
+ document.getElementById('resultsTitle').textContent = t(feedbackKey);
+}
+
+window.reviewAnswers = function() {
+ var bd = document.getElementById('resultsBreakdown');
+ if (!bd) return;
+ bd.innerHTML = '';
+ quizState.answers.forEach(function(a, i) {
+ var div = document.createElement('div');
+ div.style.cssText = 'text-align:left;padding:0.8rem;margin:0.5rem 0;background:var(--bg-input);border-radius:8px;border-left:3px solid ' + (a.selected === a.correct ? '#00cec9' : '#ff6b6b');
+ div.innerHTML = '
' + (i+1) + '. ' + a.question.q + ' ' +
+ '
' +
+ (a.selected === a.correct ? '\u2713' : '\u2717') + ' ' + a.question.o[a.selected] + ' ' +
+ (a.selected !== a.correct ? '
\u2713 ' + a.question.o[a.correct] + ' ' : '');
+ bd.appendChild(div);
+ });
+};
+
+/* ==================== SIMULATION TOOLS ==================== */
+
+// Sim tab switching
+document.querySelectorAll('.sim-tab').forEach(function(tab) {
+ tab.addEventListener('click', function() {
+ document.querySelectorAll('.sim-tab').forEach(function(t) { t.classList.remove('active'); });
+ document.querySelectorAll('.sim-panel').forEach(function(p) { p.classList.remove('active'); });
+ tab.classList.add('active');
+ var panel = document.getElementById('sim-' + tab.getAttribute('data-sim'));
+ if (panel) panel.classList.add('active');
+ // Trigger redraw for active sim
+ var simId = tab.getAttribute('data-sim');
+ if (simDrawFns[simId]) simDrawFns[simId]();
+ });
+});
+
+var simDrawFns = {};
+
+/* ----- Bokeh Simulator ----- */
+(function() {
+ var canvas = document.getElementById('sim-bokeh-canvas');
+ if (!canvas) return;
+ var ctx = canvas.getContext('2d');
+ var apSlider = document.getElementById('sim-bokeh-aperture');
+ var blSlider = document.getElementById('sim-bokeh-blades');
+ var intSlider = document.getElementById('sim-bokeh-intensity');
+
+ function drawBokeh() {
+ var ap = parseFloat(apSlider.value);
+ var blades = parseInt(blSlider.value);
+ var intensity = parseInt(intSlider.value);
+ document.getElementById('sim-bokeh-aperture-val').textContent = 'f/' + ap.toFixed(1);
+ document.getElementById('sim-bokeh-blades-val').textContent = blades;
+ document.getElementById('sim-bokeh-intensity-val').textContent = intensity + '%';
+
+ var w = canvas.width, h = canvas.height;
+ ctx.clearRect(0, 0, w, h);
+ // Dark scene background
+ var bg = ctx.createRadialGradient(w/2, h/2, 50, w/2, h/2, w*0.7);
+ bg.addColorStop(0, '#1a1a2e');
+ bg.addColorStop(1, '#0d0d1a');
+ ctx.fillStyle = bg;
+ ctx.fillRect(0, 0, w, h);
+
+ // Bokeh size inversely related to aperture
+ var maxRadius = Math.max(8, 45 - ap * 1.5);
+ var bokehCount = Math.floor(20 + (22 - ap) * 3);
+ var alpha = (intensity / 100) * 0.7;
+
+ // Seed random positions (fixed for consistency)
+ var rng = 42;
+ function seededRand() { rng = (rng * 16807 + 0) % 2147483647; return (rng - 1) / 2147483646; }
+
+ for (var i = 0; i < bokehCount; i++) {
+ var x = seededRand() * w;
+ var y = seededRand() * h;
+ var r = maxRadius * (0.4 + seededRand() * 0.6);
+ var hue = (seededRand() * 60 + 30) % 360; // warm tones
+ if (seededRand() > 0.5) hue = (seededRand() * 40 + 180) % 360; // or cool
+
+ ctx.save();
+ ctx.translate(x, y);
+ ctx.globalAlpha = alpha * (0.3 + seededRand() * 0.7);
+
+ if (blades >= 9) {
+ // Circle bokeh
+ var grad = ctx.createRadialGradient(0, 0, 0, 0, 0, r);
+ grad.addColorStop(0, 'hsla(' + hue + ',70%,70%,0.1)');
+ grad.addColorStop(0.6, 'hsla(' + hue + ',70%,65%,0.4)');
+ grad.addColorStop(0.85, 'hsla(' + hue + ',60%,60%,0.6)');
+ grad.addColorStop(1, 'hsla(' + hue + ',50%,50%,0)');
+ ctx.fillStyle = grad;
+ ctx.beginPath();
+ ctx.arc(0, 0, r, 0, Math.PI * 2);
+ ctx.fill();
+ } else {
+ // Polygon bokeh
+ ctx.fillStyle = 'hsla(' + hue + ',65%,65%,0.5)';
+ ctx.strokeStyle = 'hsla(' + hue + ',70%,75%,0.7)';
+ ctx.lineWidth = 1.5;
+ ctx.beginPath();
+ for (var j = 0; j < blades; j++) {
+ var angle = (Math.PI * 2 / blades) * j - Math.PI / 2;
+ var px = Math.cos(angle) * r;
+ var py = Math.sin(angle) * r;
+ if (j === 0) ctx.moveTo(px, py); else ctx.lineTo(px, py);
+ }
+ ctx.closePath();
+ ctx.fill();
+ ctx.stroke();
+ }
+ ctx.restore();
+ }
+ }
+
+ apSlider.addEventListener('input', drawBokeh);
+ blSlider.addEventListener('input', drawBokeh);
+ intSlider.addEventListener('input', drawBokeh);
+ simDrawFns.bokeh = drawBokeh;
+ drawBokeh();
+})();
+
+/* ----- Long Exposure Simulator ----- */
+(function() {
+ var canvas = document.getElementById('sim-longexp-canvas');
+ if (!canvas) return;
+ var ctx = canvas.getContext('2d');
+ var timeSlider = document.getElementById('sim-longexp-time');
+ var speedSlider = document.getElementById('sim-longexp-speed');
+ var times = ['1/1000s','1/500s','1/250s','1/30s','1/4s','1s','4s','15s','30s'];
+
+ function drawLongExp() {
+ var ti = parseInt(timeSlider.value);
+ var sp = parseInt(speedSlider.value);
+ document.getElementById('sim-longexp-time-val').textContent = times[ti] || '1s';
+ document.getElementById('sim-longexp-speed-val').textContent = sp;
+
+ var w = canvas.width, h = canvas.height;
+ ctx.clearRect(0, 0, w, h);
+
+ // Sky gradient
+ var sky = ctx.createLinearGradient(0, 0, 0, h * 0.6);
+ sky.addColorStop(0, '#0f0c29');
+ sky.addColorStop(0.5, '#302b63');
+ sky.addColorStop(1, '#24243e');
+ ctx.fillStyle = sky;
+ ctx.fillRect(0, 0, w, h * 0.6);
+
+ // Water
+ var water = ctx.createLinearGradient(0, h * 0.6, 0, h);
+ water.addColorStop(0, '#1a1a3e');
+ water.addColorStop(1, '#0d0d2b');
+ ctx.fillStyle = water;
+ ctx.fillRect(0, h * 0.6, w, h * 0.4);
+
+ // Blur amount based on time
+ var blur = ti * sp * 0.4;
+
+ // Stars / lights (become streaks with long exposure)
+ var rng = 77;
+ function sRand() { rng = (rng * 16807) % 2147483647; return (rng - 1) / 2147483646; }
+
+ // Draw light streaks/points
+ for (var i = 0; i < 30; i++) {
+ var sx = sRand() * w;
+ var sy = sRand() * h * 0.55;
+ var bright = 0.4 + sRand() * 0.6;
+ var hue = sRand() * 60 + 200;
+
+ ctx.save();
+ ctx.globalAlpha = bright;
+ ctx.strokeStyle = 'hsla(' + hue + ',60%,80%,' + bright + ')';
+ ctx.fillStyle = 'hsla(' + hue + ',60%,85%,' + bright + ')';
+ ctx.lineWidth = 1 + sRand() * 2;
+
+ if (blur < 3) {
+ // Sharp dots
+ ctx.beginPath();
+ ctx.arc(sx, sy, 1.5 + sRand() * 2, 0, Math.PI * 2);
+ ctx.fill();
+ } else {
+ // Streaks
+ var streakLen = blur * (2 + sRand() * 3);
+ var angle = -0.1 + sRand() * 0.2;
+ ctx.beginPath();
+ ctx.moveTo(sx - streakLen * 0.5 * Math.cos(angle), sy - streakLen * 0.5 * Math.sin(angle));
+ ctx.lineTo(sx + streakLen * 0.5 * Math.cos(angle), sy + streakLen * 0.5 * Math.sin(angle));
+ ctx.stroke();
+ }
+ ctx.restore();
+ }
+
+ // Draw water reflection streaks
+ for (var j = 0; j < 15; j++) {
+ var rx = sRand() * w;
+ var ry = h * 0.62 + sRand() * h * 0.35;
+ var rBright = 0.2 + sRand() * 0.3;
+ var rHue = sRand() * 60 + 200;
+
+ ctx.save();
+ ctx.globalAlpha = rBright;
+ ctx.fillStyle = 'hsla(' + rHue + ',50%,70%,' + rBright + ')';
+
+ if (blur < 3) {
+ ctx.beginPath();
+ ctx.arc(rx, ry, 1 + sRand(), 0, Math.PI * 2);
+ ctx.fill();
+ } else {
+ // Smooth water effect
+ var sLen = blur * (3 + sRand() * 4);
+ ctx.fillRect(rx - sLen / 2, ry - 0.5, sLen, 1 + blur * 0.1);
+ }
+ ctx.restore();
+ }
+
+ // Horizon line glow
+ ctx.save();
+ ctx.globalAlpha = 0.3;
+ var hGrad = ctx.createLinearGradient(0, h * 0.58, 0, h * 0.62);
+ hGrad.addColorStop(0, 'transparent');
+ hGrad.addColorStop(0.5, 'rgba(100,100,200,0.3)');
+ hGrad.addColorStop(1, 'transparent');
+ ctx.fillStyle = hGrad;
+ ctx.fillRect(0, h * 0.58, w, h * 0.04);
+ ctx.restore();
+
+ // Label
+ ctx.fillStyle = 'rgba(255,255,255,0.6)';
+ ctx.font = '13px Inter, sans-serif';
+ ctx.fillText(times[ti] || '1s', 15, h - 15);
+ }
+
+ timeSlider.addEventListener('input', drawLongExp);
+ speedSlider.addEventListener('input', drawLongExp);
+ simDrawFns.longexp = drawLongExp;
+ drawLongExp();
+})();
+
+/* ----- White Balance Simulator ----- */
+(function() {
+ var canvas = document.getElementById('sim-wb-canvas');
+ if (!canvas) return;
+ var ctx = canvas.getContext('2d');
+ var kelvinSlider = document.getElementById('sim-wb-kelvin');
+ var tintSlider = document.getElementById('sim-wb-tint');
+
+ function kelvinToRGB(k) {
+ k = k / 100;
+ var r, g, b;
+ if (k <= 66) {
+ r = 255;
+ g = 99.4708025861 * Math.log(k) - 161.1195681661;
+ b = k <= 19 ? 0 : 138.5177312231 * Math.log(k - 10) - 305.0447927307;
+ } else {
+ r = 329.698727446 * Math.pow(k - 60, -0.1332047592);
+ g = 288.1221695283 * Math.pow(k - 60, -0.0755148492);
+ b = 255;
+ }
+ return [Math.max(0, Math.min(255, r)), Math.max(0, Math.min(255, g)), Math.max(0, Math.min(255, b))];
+ }
+
+ function drawWB() {
+ var kelvin = parseInt(kelvinSlider.value);
+ var tint = parseInt(tintSlider.value);
+ document.getElementById('sim-wb-kelvin-val').textContent = kelvin + 'K';
+ document.getElementById('sim-wb-tint-val').textContent = tint;
+
+ var w = canvas.width, h = canvas.height;
+ ctx.clearRect(0, 0, w, h);
+
+ var rgb = kelvinToRGB(kelvin);
+ // Apply tint (green-magenta)
+ rgb[1] = Math.max(0, Math.min(255, rgb[1] + tint * 1.5));
+ rgb[0] = Math.max(0, Math.min(255, rgb[0] - tint * 0.5));
+
+ // Draw a sample scene with WB overlay
+ // Sky
+ var skyR = Math.min(255, 100 + rgb[0] * 0.3);
+ var skyG = Math.min(255, 140 + rgb[1] * 0.2);
+ var skyB = Math.min(255, 200 + rgb[2] * 0.15);
+ var skyGrad = ctx.createLinearGradient(0, 0, 0, h * 0.55);
+ skyGrad.addColorStop(0, 'rgb(' + Math.round(skyR*0.5) + ',' + Math.round(skyG*0.5) + ',' + Math.round(skyB) + ')');
+ skyGrad.addColorStop(1, 'rgb(' + Math.round(skyR*0.8) + ',' + Math.round(skyG*0.7) + ',' + Math.round(skyB*0.6) + ')');
+ ctx.fillStyle = skyGrad;
+ ctx.fillRect(0, 0, w, h * 0.55);
+
+ // Mountains
+ ctx.fillStyle = 'rgb(' + Math.round(rgb[0]*0.25) + ',' + Math.round(rgb[1]*0.3) + ',' + Math.round(rgb[2]*0.25) + ')';
+ ctx.beginPath();
+ ctx.moveTo(0, h * 0.5);
+ ctx.lineTo(w * 0.15, h * 0.3);
+ ctx.lineTo(w * 0.3, h * 0.45);
+ ctx.lineTo(w * 0.5, h * 0.25);
+ ctx.lineTo(w * 0.7, h * 0.4);
+ ctx.lineTo(w * 0.85, h * 0.2);
+ ctx.lineTo(w, h * 0.45);
+ ctx.lineTo(w, h * 0.55);
+ ctx.lineTo(0, h * 0.55);
+ ctx.fill();
+
+ // Ground
+ var gndR = Math.min(255, 80 + rgb[0] * 0.2);
+ var gndG = Math.min(255, 120 + rgb[1] * 0.25);
+ var gndB = Math.min(255, 40 + rgb[2] * 0.1);
+ ctx.fillStyle = 'rgb(' + Math.round(gndR) + ',' + Math.round(gndG) + ',' + Math.round(gndB) + ')';
+ ctx.fillRect(0, h * 0.55, w, h * 0.45);
+
+ // Color temperature overlay
+ ctx.save();
+ ctx.globalAlpha = 0.15;
+ ctx.fillStyle = 'rgb(' + Math.round(rgb[0]) + ',' + Math.round(rgb[1]) + ',' + Math.round(rgb[2]) + ')';
+ ctx.fillRect(0, 0, w, h);
+ ctx.restore();
+
+ // Temperature label with warm/cool indicator
+ var tempLabel = kelvin < 4000 ? 'Warm' : kelvin > 7000 ? 'Cool' : 'Neutral';
+ ctx.fillStyle = 'rgba(255,255,255,0.7)';
+ ctx.font = '13px Inter, sans-serif';
+ ctx.fillText(kelvin + 'K - ' + tempLabel, 15, h - 15);
+
+ // Color swatch
+ ctx.fillStyle = 'rgb(' + Math.round(rgb[0]) + ',' + Math.round(rgb[1]) + ',' + Math.round(rgb[2]) + ')';
+ ctx.fillRect(w - 50, h - 30, 35, 15);
+ ctx.strokeStyle = 'rgba(255,255,255,0.5)';
+ ctx.strokeRect(w - 50, h - 30, 35, 15);
+ }
+
+ kelvinSlider.addEventListener('input', drawWB);
+ tintSlider.addEventListener('input', drawWB);
+ simDrawFns.wb = drawWB;
+ drawWB();
+})();
+
+/* ----- ISO Noise Simulator ----- */
+(function() {
+ var canvas = document.getElementById('sim-noise-canvas');
+ if (!canvas) return;
+ var ctx = canvas.getContext('2d');
+ var isoSlider = document.getElementById('sim-noise-iso');
+ var levelSlider = document.getElementById('sim-noise-level');
+ var isoValues = [100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600];
+
+ function drawNoise() {
+ var isoIdx = parseInt(isoSlider.value);
+ var level = parseInt(levelSlider.value);
+ var iso = isoValues[isoIdx] || 400;
+ document.getElementById('sim-noise-iso-val').textContent = 'ISO ' + iso;
+ document.getElementById('sim-noise-level-val').textContent = level + '%';
+
+ var w = canvas.width, h = canvas.height;
+
+ // Draw base scene (gradient photo)
+ var base = ctx.createLinearGradient(0, 0, w, h);
+ base.addColorStop(0, '#2d3436');
+ base.addColorStop(0.3, '#636e72');
+ base.addColorStop(0.6, '#b2bec3');
+ base.addColorStop(1, '#dfe6e9');
+ ctx.fillStyle = base;
+ ctx.fillRect(0, 0, w, h);
+
+ // Circle subject
+ var cGrad = ctx.createRadialGradient(w * 0.4, h * 0.45, 20, w * 0.4, h * 0.45, 120);
+ cGrad.addColorStop(0, '#6c5ce7');
+ cGrad.addColorStop(0.5, '#a29bfe');
+ cGrad.addColorStop(1, 'transparent');
+ ctx.fillStyle = cGrad;
+ ctx.fillRect(0, 0, w, h);
+
+ // Noise overlay
+ var noiseIntensity = (isoIdx / 8) * (level / 100);
+ if (noiseIntensity > 0.02) {
+ var imageData = ctx.getImageData(0, 0, w, h);
+ var data = imageData.data;
+ var strength = noiseIntensity * 120;
+ for (var i = 0; i < data.length; i += 4) {
+ var noise = (Math.random() - 0.5) * strength;
+ data[i] = Math.max(0, Math.min(255, data[i] + noise));
+ data[i + 1] = Math.max(0, Math.min(255, data[i + 1] + noise * 0.9));
+ data[i + 2] = Math.max(0, Math.min(255, data[i + 2] + noise * 1.1));
+ }
+ ctx.putImageData(imageData, 0, 0);
+ }
+
+ // Color noise at high ISO
+ if (isoIdx >= 5 && level > 20) {
+ ctx.save();
+ ctx.globalAlpha = noiseIntensity * 0.3;
+ for (var j = 0; j < 200; j++) {
+ var nx = Math.random() * w;
+ var ny = Math.random() * h;
+ var nh = Math.random() * 360;
+ ctx.fillStyle = 'hsl(' + nh + ',80%,50%)';
+ ctx.fillRect(nx, ny, 2, 2);
+ }
+ ctx.restore();
+ }
+
+ // Label
+ ctx.fillStyle = 'rgba(255,255,255,0.7)';
+ ctx.font = '13px Inter, sans-serif';
+ ctx.fillText('ISO ' + iso, 15, h - 15);
+ }
+
+ isoSlider.addEventListener('input', drawNoise);
+ levelSlider.addEventListener('input', drawNoise);
+ simDrawFns.noise = drawNoise;
+ drawNoise();
+})();
+
+/* ----- Perspective Simulator ----- */
+(function() {
+ var canvas = document.getElementById('sim-perspective-canvas');
+ if (!canvas) return;
+ var ctx = canvas.getContext('2d');
+ var focalSlider = document.getElementById('sim-perspective-focal');
+ var typeSelect = document.getElementById('sim-perspective-type');
+
+ function drawPerspective() {
+ var focal = parseInt(focalSlider.value);
+ var distType = typeSelect.value;
+ document.getElementById('sim-perspective-focal-val').textContent = focal + 'mm';
+
+ var w = canvas.width, h = canvas.height;
+ ctx.clearRect(0, 0, w, h);
+
+ // Background
+ ctx.fillStyle = '#1a1a2e';
+ ctx.fillRect(0, 0, w, h);
+
+ // Perspective grid
+ var fov = Math.atan(18 / focal) * 2 * 180 / Math.PI;
+ var compression = 1 - (focal - 14) / 186 * 0.7;
+ var vanishY = h * (0.35 + (1 - compression) * 0.15);
+
+ // Floor grid
+ ctx.strokeStyle = 'rgba(108, 92, 231, 0.4)';
+ ctx.lineWidth = 1;
+ var gridLines = 12;
+ for (var i = 0; i <= gridLines; i++) {
+ var t = i / gridLines;
+ var y = vanishY + (h - vanishY) * t;
+ var spread = (t * t) * (w * compression);
+ ctx.beginPath();
+ ctx.moveTo(w / 2 - spread, y);
+ ctx.lineTo(w / 2 + spread, y);
+ ctx.stroke();
+ }
+
+ // Vertical converging lines
+ for (var j = -6; j <= 6; j++) {
+ var xBottom = w / 2 + j * (w / 14) * compression;
+ ctx.beginPath();
+ ctx.moveTo(w / 2, vanishY);
+ ctx.lineTo(xBottom, h);
+ ctx.stroke();
+ }
+
+ // Buildings (affected by perspective compression)
+ var buildingCount = 5;
+ var bWidth = (w * compression) / (buildingCount + 2);
+ for (var b = 0; b < buildingCount; b++) {
+ var bx = w / 2 - (buildingCount * bWidth) / 2 + b * bWidth + bWidth * 0.1;
+ var bh = (80 + Math.sin(b * 1.5) * 50) * (1 + (1 - compression) * 0.5);
+ var by = h - bh;
+
+ ctx.fillStyle = 'rgba(108, 92, 231, ' + (0.2 + b * 0.08) + ')';
+ ctx.fillRect(bx, by, bWidth * 0.8, bh);
+ ctx.strokeStyle = 'rgba(108, 92, 231, 0.6)';
+ ctx.strokeRect(bx, by, bWidth * 0.8, bh);
+
+ // Windows
+ ctx.fillStyle = 'rgba(255, 214, 100, 0.3)';
+ var winRows = Math.floor(bh / 20);
+ for (var wr = 0; wr < winRows; wr++) {
+ for (var wc = 0; wc < 2; wc++) {
+ ctx.fillRect(bx + 5 + wc * (bWidth * 0.4 - 5), by + 8 + wr * 20, bWidth * 0.25, 10);
+ }
+ }
+ }
+
+ // Barrel/Pincushion distortion overlay
+ if (distType !== 'none') {
+ ctx.save();
+ ctx.strokeStyle = 'rgba(255, 107, 107, 0.5)';
+ ctx.lineWidth = 1.5;
+ var cx = w / 2, cy = h / 2;
+ var gridSize = 8;
+ for (var gx = 0; gx <= gridSize; gx++) {
+ ctx.beginPath();
+ for (var gy = 0; gy <= gridSize * 4; gy++) {
+ var nx2 = (gx / gridSize) * 2 - 1;
+ var ny2 = (gy / (gridSize * 4)) * 2 - 1;
+ var r2 = nx2 * nx2 + ny2 * ny2;
+ var factor = distType === 'barrel' ? 1 + 0.3 * r2 : 1 - 0.2 * r2;
+ var dx = cx + nx2 * factor * w * 0.45;
+ var dy = cy + ny2 * factor * h * 0.45;
+ if (gy === 0) ctx.moveTo(dx, dy); else ctx.lineTo(dx, dy);
+ }
+ ctx.stroke();
+ }
+ for (var gy2 = 0; gy2 <= gridSize; gy2++) {
+ ctx.beginPath();
+ for (var gx2 = 0; gx2 <= gridSize * 4; gx2++) {
+ var nx3 = (gx2 / (gridSize * 4)) * 2 - 1;
+ var ny3 = (gy2 / gridSize) * 2 - 1;
+ var r3 = nx3 * nx3 + ny3 * ny3;
+ var factor2 = distType === 'barrel' ? 1 + 0.3 * r3 : 1 - 0.2 * r3;
+ var dx2 = cx + nx3 * factor2 * w * 0.45;
+ var dy2 = cy + ny3 * factor2 * h * 0.45;
+ if (gx2 === 0) ctx.moveTo(dx2, dy2); else ctx.lineTo(dx2, dy2);
+ }
+ ctx.stroke();
+ }
+ ctx.restore();
+ }
+
+ // FOV arc
+ ctx.save();
+ ctx.strokeStyle = 'rgba(0, 206, 201, 0.6)';
+ ctx.lineWidth = 2;
+ var fovRad = fov * Math.PI / 180;
+ ctx.beginPath();
+ ctx.arc(w / 2, h + 80, h * 0.5, -Math.PI / 2 - fovRad / 2, -Math.PI / 2 + fovRad / 2);
+ ctx.stroke();
+ ctx.restore();
+
+ // Label
+ ctx.fillStyle = 'rgba(255,255,255,0.7)';
+ ctx.font = '13px Inter, sans-serif';
+ ctx.fillText(focal + 'mm — FOV: ' + fov.toFixed(1) + '°', 15, h - 15);
+ }
+
+ focalSlider.addEventListener('input', drawPerspective);
+ typeSelect.addEventListener('change', drawPerspective);
+ simDrawFns.perspective = drawPerspective;
+ drawPerspective();
+})();
+
+/* ----- Histogram Simulator ----- */
+(function() {
+ var canvas = document.getElementById('sim-histogram-canvas');
+ if (!canvas) return;
+ var ctx = canvas.getContext('2d');
+ var apSlider = document.getElementById('sim-hist-aperture');
+ var shSlider = document.getElementById('sim-hist-shutter');
+ var isoSlider2 = document.getElementById('sim-hist-iso');
+ var apertureStops = [1.4, 2, 2.8, 4, 5.6, 8, 11, 16, 22, 32];
+ var shutterStops = ['30s','15s','1s','1/4','1/30','1/125','1/250','1/500','1/1000','1/2000','1/4000','1/8000'];
+ var isoStops = [100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600];
+
+ function drawHistogram() {
+ var apIdx = parseInt(apSlider.value);
+ var shIdx = parseInt(shSlider.value);
+ var isoIdx = parseInt(isoSlider2.value);
+ document.getElementById('sim-hist-aperture-val').textContent = 'f/' + apertureStops[apIdx];
+ document.getElementById('sim-hist-shutter-val').textContent = shutterStops[shIdx];
+ document.getElementById('sim-hist-iso-val').textContent = 'ISO ' + isoStops[isoIdx];
+
+ // Calculate EV (higher = more light)
+ var ev = (9 - apIdx) + (11 - shIdx) + isoIdx;
+ var brightness = ev / 28; // 0 to ~1
+ brightness = Math.max(0, Math.min(1, brightness));
+
+ var w = canvas.width, h = canvas.height;
+ ctx.clearRect(0, 0, w, h);
+
+ // Background
+ ctx.fillStyle = '#0d0d1a';
+ ctx.fillRect(0, 0, w, h);
+
+ // Generate histogram data
+ var bins = 64;
+ var histR = new Array(bins).fill(0);
+ var histG = new Array(bins).fill(0);
+ var histB = new Array(bins).fill(0);
+
+ // Generate mock distribution based on brightness
+ var mean = brightness * (bins - 1);
+ var stddev = bins * 0.15;
+ for (var i = 0; i < bins; i++) {
+ var v = Math.exp(-Math.pow(i - mean, 2) / (2 * stddev * stddev));
+ histR[i] = v * (0.8 + Math.sin(i * 0.2) * 0.2);
+ histG[i] = v * (0.9 + Math.cos(i * 0.15) * 0.1);
+ histB[i] = v * (0.85 + Math.sin(i * 0.3) * 0.15);
+ }
+
+ // Add secondary peak
+ var mean2 = mean + (bins * 0.2 * (Math.random() > 0.5 ? 1 : -1));
+ mean2 = Math.max(0, Math.min(bins - 1, mean2));
+ for (var i2 = 0; i2 < bins; i2++) {
+ var v2 = Math.exp(-Math.pow(i2 - mean2, 2) / (2 * (stddev * 0.6) * (stddev * 0.6))) * 0.5;
+ histR[i2] += v2;
+ histG[i2] += v2 * 0.8;
+ histB[i2] += v2 * 0.6;
+ }
+
+ // Normalize
+ var maxVal = 0;
+ for (var n = 0; n < bins; n++) {
+ maxVal = Math.max(maxVal, histR[n], histG[n], histB[n]);
+ }
+
+ var chartTop = 30, chartBottom = h - 50;
+ var chartLeft = 30, chartRight = w - 20;
+ var chartH = chartBottom - chartTop;
+ var chartW = chartRight - chartLeft;
+ var barW = chartW / bins;
+
+ // Draw histogram bars
+ var channels = [
+ { data: histR, color: 'rgba(255,100,100,' },
+ { data: histG, color: 'rgba(100,255,100,' },
+ { data: histB, color: 'rgba(100,150,255,' }
+ ];
+
+ channels.forEach(function(ch) {
+ ctx.beginPath();
+ ctx.moveTo(chartLeft, chartBottom);
+ for (var b = 0; b < bins; b++) {
+ var barH = (ch.data[b] / maxVal) * chartH;
+ ctx.lineTo(chartLeft + b * barW, chartBottom - barH);
+ }
+ ctx.lineTo(chartLeft + (bins - 1) * barW, chartBottom);
+ ctx.closePath();
+ ctx.fillStyle = ch.color + '0.25)';
+ ctx.fill();
+ ctx.strokeStyle = ch.color + '0.6)';
+ ctx.lineWidth = 1;
+ ctx.beginPath();
+ for (var b2 = 0; b2 < bins; b2++) {
+ var barH2 = (ch.data[b2] / maxVal) * chartH;
+ if (b2 === 0) ctx.moveTo(chartLeft + b2 * barW, chartBottom - barH2);
+ else ctx.lineTo(chartLeft + b2 * barW, chartBottom - barH2);
+ }
+ ctx.stroke();
+ });
+
+ // Luminance line (white)
+ ctx.strokeStyle = 'rgba(255,255,255,0.7)';
+ ctx.lineWidth = 2;
+ ctx.beginPath();
+ for (var l = 0; l < bins; l++) {
+ var lum = histR[l] * 0.299 + histG[l] * 0.587 + histB[l] * 0.114;
+ var lH = (lum / maxVal) * chartH;
+ if (l === 0) ctx.moveTo(chartLeft + l * barW, chartBottom - lH);
+ else ctx.lineTo(chartLeft + l * barW, chartBottom - lH);
+ }
+ ctx.stroke();
+
+ // Axis labels
+ ctx.fillStyle = 'rgba(255,255,255,0.4)';
+ ctx.font = '11px Inter, sans-serif';
+ ctx.fillText('Shadows', chartLeft, chartBottom + 20);
+ ctx.fillText('Midtones', chartLeft + chartW * 0.4, chartBottom + 20);
+ ctx.textAlign = 'right';
+ ctx.fillText('Highlights', chartRight, chartBottom + 20);
+ ctx.textAlign = 'left';
+
+ // EV indicator
+ var evText = brightness < 0.3 ? t('exp.under') : brightness > 0.7 ? t('exp.over') : t('exp.correct');
+ var evColor = brightness < 0.3 ? '#ff6b6b' : brightness > 0.7 ? '#fdcb6e' : '#00cec9';
+ ctx.fillStyle = evColor;
+ ctx.font = 'bold 14px Inter, sans-serif';
+ ctx.fillText(evText, chartLeft, chartTop - 10);
+
+ // Clipping warnings
+ if (brightness > 0.85) {
+ ctx.fillStyle = 'rgba(255,107,107,0.3)';
+ ctx.fillRect(chartRight - barW * 5, chartTop, barW * 5, chartH);
+ ctx.fillStyle = '#ff6b6b';
+ ctx.font = '10px Inter, sans-serif';
+ ctx.fillText('CLIP', chartRight - barW * 4, chartTop + 15);
+ }
+ if (brightness < 0.15) {
+ ctx.fillStyle = 'rgba(255,107,107,0.3)';
+ ctx.fillRect(chartLeft, chartTop, barW * 5, chartH);
+ ctx.fillStyle = '#ff6b6b';
+ ctx.font = '10px Inter, sans-serif';
+ ctx.fillText('CLIP', chartLeft + 5, chartTop + 15);
+ }
+ }
+
+ apSlider.addEventListener('input', drawHistogram);
+ shSlider.addEventListener('input', drawHistogram);
+ isoSlider2.addEventListener('input', drawHistogram);
+ simDrawFns.histogram = drawHistogram;
+ drawHistogram();
+})();
+
+})();
diff --git a/photography-tools/js/i18n.js b/photography-tools/js/i18n.js
new file mode 100644
index 0000000..06032af
--- /dev/null
+++ b/photography-tools/js/i18n.js
@@ -0,0 +1,371 @@
+/* ==================== i18n - Internationalization System ==================== */
+window.currentLang = 'de';
+
+window.I18N = {
+/* ===== DEUTSCH ===== */
+de: {
+"nav.lens":"Linsenrechner","nav.composition":"Komposition","nav.motif":"Motiverkennung","nav.exposure":"Belichtung","nav.quiz":"Quiz",
+"hero.welcome":"Willkommen bei","hero.desc":"Dein ultimativer Fotografie-Werkzeugkasten. Linsenberechnungen, Kompositionsregeln, Motiverkennung und interaktive Quizze \u2014 alles an einem Ort.","hero.calculators":"Rechner","hero.rules":"Regeln","hero.questions":"Quiz-Fragen","hero.cta":"Jetzt starten",
+"lens.tag":"Werkzeuge","lens.title":"Linsenrechner","lens.desc":"Berechne Sch\u00e4rfentiefe, Bildwinkel, Crop-Faktor und mehr.","lens.tab.dof":"Sch\u00e4rfentiefe (DOF)","lens.tab.fov":"Bildwinkel (FOV)","lens.tab.crop":"Crop-Faktor","lens.tab.hyper":"Hyperfokale Distanz","lens.tab.flash":"Blitz-Reichweite","lens.tab.mag":"Abbildungsma\u00dfstab",
+"calc.focal":"Brennweite (mm)","calc.aperture":"Blende (f/)","calc.sensor":"Sensorgr\u00f6\u00dfe","calc.calculate":"Berechnen","calc.results":"Ergebnisse",
+"dof.title":"Sch\u00e4rfentiefe berechnen","dof.info":"Die Sch\u00e4rfentiefe (Depth of Field) gibt den Bereich an, der im Bild scharf abgebildet wird.","dof.distance":"Entfernung zum Motiv (m)","dof.total":"Sch\u00e4rfentiefe","dof.near":"Nahpunkt","dof.far":"Fernpunkt","dof.coc":"Zerstreuungskreis",
+"fov.title":"Bildwinkel berechnen","fov.info":"Der Bildwinkel bestimmt, wie viel der Szene die Kamera erfasst.","fov.horizontal":"Horizontaler Bildwinkel","fov.vertical":"Vertikaler Bildwinkel","fov.diagonal":"Diagonaler Bildwinkel","fov.lenstype":"Objektivtyp",
+"crop.title":"Crop-Faktor berechnen","crop.info":"Der Crop-Faktor zeigt den \u00e4quivalenten Bildausschnitt im Vergleich zum Vollformat.","crop.lensfocal":"Brennweite am Objektiv (mm)","crop.lensaperture":"Blende am Objektiv (f/)","crop.camerasensor":"Kamerasensor","crop.equivfocal":"\u00c4quivalente Brennweite (KB)","crop.equivaperture":"\u00c4quivalente Blende (KB)","crop.factor":"Crop-Faktor","crop.fullframe":"Vollformat",
+"hyper.title":"Hyperfokale Distanz","hyper.info":"Die Entfernung, ab der alles bis unendlich scharf ist.","hyper.distance":"Hyperfokale Distanz","hyper.near":"Nahpunkt (bei Fokus auf H)","hyper.tiplabel":"Tipp","hyper.tip":"Fokussiere auf die hyperfokale Distanz f\u00fcr maximale Sch\u00e4rfe.",
+"flash.title":"Blitz-Reichweite","flash.info":"Berechne die maximale Blitzreichweite basierend auf Leitzahl und Einstellungen.","flash.gn":"Leitzahl (GN)","flash.maxrange":"Maximale Reichweite","flash.at100":"Bei ISO 100",
+"mag.title":"Abbildungsma\u00dfstab","mag.info":"Berechne den Abbildungsma\u00dfstab f\u00fcr Makrofotografie.","mag.mindist":"Naheinstellgrenze (cm)","mag.sensorwidth":"Sensorbreite (mm)","mag.ratio":"Abbildungsma\u00dfstab","mag.field":"Erfasstes Feld (Breite)","mag.macro":"Makro-Tauglichkeit",
+"comp.tag":"Komposition","comp.title":"Fotografie-Regeln","comp.desc":"Beherrsche die wichtigsten Kompositionsregeln f\u00fcr beeindruckende Fotos.","comp.demo":"Demo anzeigen",
+"motif.tag":"Motiverkennung","motif.title":"Motiverkennung & Genres","motif.desc":"Lerne verschiedene Fotografie-Genres und ihre optimalen Einstellungen kennen.","motif.all":"Alle","motif.portrait":"Portr\u00e4t","motif.landscape":"Landschaft","motif.street":"Street","motif.macro":"Makro","motif.night":"Nacht","motif.sport":"Sport","motif.architecture":"Architektur","motif.wildlife":"Wildlife",
+"exp.tag":"Grundlagen","exp.title":"Belichtungsdreieck","exp.desc":"Verstehe das Zusammenspiel von Blende, Verschlusszeit und ISO.","exp.aperture":"Blende (Aperture)","exp.shutter":"Verschlusszeit (Shutter)","exp.aperture.mid":"Mittlere Blende \u2013 guter Kompromiss aus Sch\u00e4rfe und Licht.","exp.shutter.mid":"Standard-Verschlusszeit \u2013 friert die meisten Bewegungen ein.","exp.iso.low":"Niedriges ISO \u2013 minimales Rauschen, beste Qualit\u00e4t.","exp.correct":"Korrekte Belichtung","exp.under":"Unterbelichtet","exp.over":"\u00dcberbelichtet","exp.slightunder":"Leicht unterbelichtet","exp.slightover":"Leicht \u00fcberbelichtet",
+"quiz.tag":"Lernkontrolle","quiz.title":"Fotografie-Quiz","quiz.desc":"Teste dein Wissen mit interaktiven Quizfragen zu allen Themen.","quiz.all":"Alle Themen","quiz.basics":"Grundlagen","quiz.composition":"Komposition","quiz.lenses":"Objektive","quiz.exposure":"Belichtung","quiz.genres":"Genres","quiz.ready":"Bereit f\u00fcr das Quiz?","quiz.choose":"W\u00e4hle eine Kategorie und teste dein Fotografie-Wissen!","quiz.info":"10 Fragen pro Runde \u2022 Multiple Choice \u2022 Sofortiges Feedback","quiz.start":"Quiz starten","quiz.next":"N\u00e4chste Frage","quiz.finished":"Quiz beendet!","quiz.playagain":"Nochmal spielen","quiz.review":"Antworten ansehen","quiz.score":"Punkte","quiz.resulttext":"Du hast {0} von {1} Fragen richtig beantwortet.","quiz.excellent":"Ausgezeichnet! Du bist ein Fotografie-Profi!","quiz.good":"Gut gemacht! Solides Wissen!","quiz.ok":"Nicht schlecht! Weiter \u00fcben!","quiz.needwork":"Da geht noch mehr! Lerne die Grundlagen nochmal.",
+"footer.brand":"Dein kostenloser Fotografie-Werkzeugkasten f\u00fcr bessere Bilder.","footer.tools":"Werkzeuge","footer.calcs":"Rechner","footer.comprules":"Kompositionsregeln","footer.exptriangle":"Belichtungsdreieck","footer.copy":"\u00a9 2026 PhotoPro Tools \u2014 Erstellt mit Leidenschaft f\u00fcr die Fotografie.",
+"sensor.ff":"Vollformat (36x24mm)","sensor.apsc":"APS-C (23.5x15.6mm)","sensor.apsc_canon":"APS-C Canon (22.3x14.9mm)","sensor.m43":"Micro 4/3 (17.3x13mm)","sensor.1inch":"1 Zoll (13.2x8.8mm)","sensor.small":"1/2.3 Zoll (6.17x4.55mm)","sensor.ff_short":"Vollformat","sensor.apsc_short":"APS-C","sensor.m43_short":"Micro 4/3","sensor.ff_1x":"Vollformat (1.0x)","sensor.apsc_nikon":"APS-C Nikon/Sony (1.5x)","sensor.apsc_canon_1_6":"APS-C Canon (1.6x)","sensor.m43_2x":"Micro 4/3 (2.0x)","sensor.1inch_2_7":"1 Zoll (2.7x)","sensor.small_5_6":"1/2.3 Zoll (5.6x)",
+"lenstype.superwide":"Super-Weitwinkel","lenstype.wide":"Weitwinkel","lenstype.normal":"Normalobjektiv","lenstype.tele":"Teleobjektiv","lenstype.supertele":"Super-Teleobjektiv",
+"macro.true":"Echtes Makro (1:1+)","macro.half":"Halbes Makro (~1:2)","macro.close":"Nahaufnahme","macro.no":"Kein Makro",
+"rule.thirds.name":"Drittel-Regel","rule.thirds.desc":"Teile das Bild in 9 gleiche Felder. Platziere wichtige Elemente auf den Linien oder Schnittpunkten.","rule.thirds.tip1":"Horizont auf obere oder untere Drittellinie","rule.thirds.tip2":"Augen des Motivs auf obere Schnittpunkte","rule.thirds.tip3":"Hauptmotiv nie genau in die Mitte",
+"rule.golden.name":"Goldener Schnitt","rule.golden.desc":"Das Verh\u00e4ltnis von 1:1,618 \u2013 die perfekte Proportion der Natur.","rule.golden.tip1":"Teilt das Bild im Verh\u00e4ltnis ca. 62% zu 38%","rule.golden.tip2":"Wirkt harmonischer als die Drittelregel","rule.golden.tip3":"In der Natur \u00fcberall zu finden (Muscheln, Blumen)",
+"rule.leading.name":"F\u00fchrende Linien","rule.leading.desc":"Nat\u00fcrliche Linien leiten den Blick des Betrachters zum Hauptmotiv.","rule.leading.tip1":"Stra\u00dfen, Fl\u00fcsse, Z\u00e4une als Linien nutzen","rule.leading.tip2":"Linien sollten ins Bild hineinf\u00fchren","rule.leading.tip3":"Konvergierende Linien erzeugen Tiefe",
+"rule.symmetry.name":"Symmetrie & Muster","rule.symmetry.desc":"Symmetrische Kompositionen strahlen Ruhe und Perfektion aus.","rule.symmetry.tip1":"Spiegelungen in Wasser perfekt f\u00fcr Symmetrie","rule.symmetry.tip2":"Architektur bietet nat\u00fcrliche Symmetrie","rule.symmetry.tip3":"Bewusstes Brechen der Symmetrie als Stilmittel",
+"rule.framing.name":"Nat\u00fcrlicher Rahmen","rule.framing.desc":"Verwende Elemente in der Szene, um dein Motiv einzurahmen.","rule.framing.tip1":"T\u00fcrb\u00f6gen, Fenster, \u00c4ste als Rahmen","rule.framing.tip2":"Lenkt den Blick auf das Hauptmotiv","rule.framing.tip3":"Erzeugt Tiefe und Kontext",
+"rule.negative.name":"Negativer Raum","rule.negative.desc":"Leerer Raum um das Motiv erzeugt Wirkung und Dramatik.","rule.negative.tip1":"Weniger ist mehr \u2013 Minimalismus nutzen","rule.negative.tip2":"Gibt dem Motiv Luft zum Atmen","rule.negative.tip3":"Besonders wirkungsvoll bei Portr\u00e4ts",
+"rule.diagonal.name":"Diagonalen","rule.diagonal.desc":"Diagonale Linien erzeugen Dynamik und Spannung im Bild.","rule.diagonal.tip1":"Von Ecke zu Ecke f\u00fcr maximale Dynamik","rule.diagonal.tip2":"Schr\u00e4ge Perspektiven nutzen","rule.diagonal.tip3":"Bewegungsrichtung entlang der Diagonale",
+"rule.color.name":"Farbtheorie","rule.color.desc":"Komplement\u00e4rfarben und Farbharmonien f\u00fcr starke Bildwirkung.","rule.color.tip1":"Komplement\u00e4rfarben f\u00fcr Kontrast (Blau/Orange)","rule.color.tip2":"Analoge Farben f\u00fcr Harmonie","rule.color.tip3":"Warme Farben im Vordergrund, kalte im Hintergrund",
+"motif.portrait.title":"Portr\u00e4tfotografie","motif.portrait.desc":"Menschen und Gesichter perfekt in Szene setzen.","motif.landscape.title":"Landschaftsfotografie","motif.landscape.desc":"Weite Landschaften und Naturszenen einfangen.","motif.street.title":"Street Photography","motif.street.desc":"Das Leben auf der Stra\u00dfe authentisch dokumentieren.","motif.macro.title":"Makrofotografie","motif.macro.desc":"Kleine Dinge ganz gro\u00df darstellen.","motif.night.title":"Nachtfotografie","motif.night.desc":"Sterne, Stadtlichter und n\u00e4chtliche Szenen.","motif.sport.title":"Sportfotografie","motif.sport.desc":"Schnelle Bewegungen und Action einfrieren.","motif.architecture.title":"Architekturfotografie","motif.architecture.desc":"Geb\u00e4ude und Strukturen in Perfektion.","motif.wildlife.title":"Tierfotografie","motif.wildlife.desc":"Tiere in ihrer nat\u00fcrlichen Umgebung.",
+"motif.setting.lens":"Objektiv","motif.setting.aperture":"Blende","motif.setting.iso":"ISO","motif.setting.shutter":"Verschluss",
+"nav.simtools":"Simulation","sim.tag":"Simulation","sim.title":"Foto-Simulationen","sim.desc":"Simuliere verschiedene Foto-Effekte in Echtzeit.",
+"sim.bokeh":"Bokeh","sim.longexp":"Langzeitbelichtung","sim.wb":"Weißabgleich","sim.noise":"ISO-Rauschen","sim.perspective":"Perspektive","sim.histogram":"Histogramm",
+"sim.bokeh.title":"Bokeh-Simulator","sim.bokeh.info":"Sieh wie sich Bokeh mit verschiedenen Blenden und Brennweiten verändert.","sim.bokeh.blades":"Blendenlamellen","sim.bokeh.intensity":"Bokeh-Intensität",
+"sim.longexp.title":"Langzeitbelichtungs-Simulator","sim.longexp.info":"Sieh den Effekt verschiedener Belichtungszeiten auf Bewegung.","sim.longexp.speed":"Bewegungsgeschwindigkeit","sim.longexp.time":"Belichtungszeit (s)",
+"sim.wb.title":"Weißabgleich-Simulator","sim.wb.info":"Sieh wie die Farbtemperatur dein Bild beeinflusst.","sim.wb.kelvin":"Temperatur (K)","sim.wb.tint":"Tönung",
+"sim.noise.title":"ISO-Rausch-Simulator","sim.noise.info":"Sieh wie digitales Rauschen mit höheren ISO-Werten zunimmt.","sim.noise.level":"Rausch-Level",
+"sim.perspective.title":"Perspektiv-Simulator","sim.perspective.info":"Sieh wie die Brennweite die Perspektive beeinflusst.","sim.perspective.type":"Verzerrungstyp",
+"sim.histogram.title":"Histogramm-Simulator","sim.histogram.info":"Sieh das Histogramm basierend auf Belichtungseinstellungen."
+},
+
+/* ===== ENGLISH ===== */
+en: {
+"nav.lens":"Lens Calculator","nav.composition":"Composition","nav.motif":"Subject Recognition","nav.exposure":"Exposure","nav.quiz":"Quiz",
+"hero.welcome":"Welcome to","hero.desc":"Your ultimate photography toolkit. Lens calculations, composition rules, subject recognition and interactive quizzes \u2014 all in one place.","hero.calculators":"Calculators","hero.rules":"Rules","hero.questions":"Quiz Questions","hero.cta":"Get Started",
+"lens.tag":"Tools","lens.title":"Lens Calculator","lens.desc":"Calculate depth of field, field of view, crop factor and more.","lens.tab.dof":"Depth of Field (DOF)","lens.tab.fov":"Field of View (FOV)","lens.tab.crop":"Crop Factor","lens.tab.hyper":"Hyperfocal Distance","lens.tab.flash":"Flash Range","lens.tab.mag":"Magnification",
+"calc.focal":"Focal Length (mm)","calc.aperture":"Aperture (f/)","calc.sensor":"Sensor Size","calc.calculate":"Calculate","calc.results":"Results",
+"dof.title":"Calculate Depth of Field","dof.info":"Depth of Field (DOF) describes the range that appears sharp in the image.","dof.distance":"Distance to Subject (m)","dof.total":"Depth of Field","dof.near":"Near Point","dof.far":"Far Point","dof.coc":"Circle of Confusion",
+"fov.title":"Calculate Field of View","fov.info":"The field of view determines how much of the scene the camera captures.","fov.horizontal":"Horizontal FOV","fov.vertical":"Vertical FOV","fov.diagonal":"Diagonal FOV","fov.lenstype":"Lens Type",
+"crop.title":"Calculate Crop Factor","crop.info":"The crop factor shows the equivalent field of view compared to full frame.","crop.lensfocal":"Lens Focal Length (mm)","crop.lensaperture":"Lens Aperture (f/)","crop.camerasensor":"Camera Sensor","crop.equivfocal":"Equivalent Focal Length (FF)","crop.equivaperture":"Equivalent Aperture (FF)","crop.factor":"Crop Factor","crop.fullframe":"Full Frame",
+"hyper.title":"Hyperfocal Distance","hyper.info":"The distance at which everything from half that distance to infinity is sharp.","hyper.distance":"Hyperfocal Distance","hyper.near":"Near Point (focused at H)","hyper.tiplabel":"Tip","hyper.tip":"Focus at the hyperfocal distance for maximum sharpness.",
+"flash.title":"Flash Range","flash.info":"Calculate maximum flash range based on guide number and settings.","flash.gn":"Guide Number (GN)","flash.maxrange":"Maximum Range","flash.at100":"At ISO 100",
+"mag.title":"Magnification","mag.info":"Calculate the magnification ratio for macro photography.","mag.mindist":"Minimum Focus Distance (cm)","mag.sensorwidth":"Sensor Width (mm)","mag.ratio":"Magnification Ratio","mag.field":"Captured Field (Width)","mag.macro":"Macro Capability",
+"comp.tag":"Composition","comp.title":"Photography Rules","comp.desc":"Master the most important composition rules for stunning photos.","comp.demo":"Show Demo",
+"motif.tag":"Subject Recognition","motif.title":"Subject Recognition & Genres","motif.desc":"Learn different photography genres and their optimal settings.","motif.all":"All","motif.portrait":"Portrait","motif.landscape":"Landscape","motif.street":"Street","motif.macro":"Macro","motif.night":"Night","motif.sport":"Sport","motif.architecture":"Architecture","motif.wildlife":"Wildlife",
+"exp.tag":"Basics","exp.title":"Exposure Triangle","exp.desc":"Understand the interplay of aperture, shutter speed and ISO.","exp.aperture":"Aperture","exp.shutter":"Shutter Speed","exp.aperture.mid":"Medium aperture \u2013 good compromise between sharpness and light.","exp.shutter.mid":"Standard shutter speed \u2013 freezes most motion.","exp.iso.low":"Low ISO \u2013 minimal noise, best quality.","exp.correct":"Correct Exposure","exp.under":"Underexposed","exp.over":"Overexposed","exp.slightunder":"Slightly underexposed","exp.slightover":"Slightly overexposed",
+"quiz.tag":"Knowledge Check","quiz.title":"Photography Quiz","quiz.desc":"Test your knowledge with interactive quiz questions on all topics.","quiz.all":"All Topics","quiz.basics":"Basics","quiz.composition":"Composition","quiz.lenses":"Lenses","quiz.exposure":"Exposure","quiz.genres":"Genres","quiz.ready":"Ready for the Quiz?","quiz.choose":"Choose a category and test your photography knowledge!","quiz.info":"10 questions per round \u2022 Multiple choice \u2022 Instant feedback","quiz.start":"Start Quiz","quiz.next":"Next Question","quiz.finished":"Quiz Complete!","quiz.playagain":"Play Again","quiz.review":"Review Answers","quiz.score":"Score","quiz.resulttext":"You answered {0} of {1} questions correctly.","quiz.excellent":"Excellent! You are a photography pro!","quiz.good":"Well done! Solid knowledge!","quiz.ok":"Not bad! Keep practicing!","quiz.needwork":"Room for improvement! Review the basics.",
+"footer.brand":"Your free photography toolkit for better images.","footer.tools":"Tools","footer.calcs":"Calculators","footer.comprules":"Composition Rules","footer.exptriangle":"Exposure Triangle","footer.copy":"\u00a9 2026 PhotoPro Tools \u2014 Made with passion for photography.",
+"sensor.ff":"Full Frame (36x24mm)","sensor.apsc":"APS-C (23.5x15.6mm)","sensor.apsc_canon":"APS-C Canon (22.3x14.9mm)","sensor.m43":"Micro 4/3 (17.3x13mm)","sensor.1inch":"1 Inch (13.2x8.8mm)","sensor.small":"1/2.3 Inch (6.17x4.55mm)","sensor.ff_short":"Full Frame","sensor.apsc_short":"APS-C","sensor.m43_short":"Micro 4/3","sensor.ff_1x":"Full Frame (1.0x)","sensor.apsc_nikon":"APS-C Nikon/Sony (1.5x)","sensor.apsc_canon_1_6":"APS-C Canon (1.6x)","sensor.m43_2x":"Micro 4/3 (2.0x)","sensor.1inch_2_7":"1 Inch (2.7x)","sensor.small_5_6":"1/2.3 Inch (5.6x)",
+"lenstype.superwide":"Super Wide-Angle","lenstype.wide":"Wide-Angle","lenstype.normal":"Normal Lens","lenstype.tele":"Telephoto","lenstype.supertele":"Super Telephoto",
+"macro.true":"True Macro (1:1+)","macro.half":"Half Macro (~1:2)","macro.close":"Close-up","macro.no":"Not Macro",
+"rule.thirds.name":"Rule of Thirds","rule.thirds.desc":"Divide the image into 9 equal parts. Place key elements on the lines or intersections.","rule.thirds.tip1":"Place the horizon on the upper or lower third line","rule.thirds.tip2":"Position subject's eyes on upper intersections","rule.thirds.tip3":"Never place the main subject dead center",
+"rule.golden.name":"Golden Ratio","rule.golden.desc":"The ratio of 1:1.618 \u2013 nature's perfect proportion.","rule.golden.tip1":"Divides the image at approximately 62% to 38%","rule.golden.tip2":"More harmonious than the rule of thirds","rule.golden.tip3":"Found everywhere in nature (shells, flowers)",
+"rule.leading.name":"Leading Lines","rule.leading.desc":"Natural lines in the image guide the viewer's eye to the main subject.","rule.leading.tip1":"Use roads, rivers, fences as lines","rule.leading.tip2":"Lines should lead into the image","rule.leading.tip3":"Converging lines create depth",
+"rule.symmetry.name":"Symmetry & Patterns","rule.symmetry.desc":"Symmetric compositions radiate calm and perfection.","rule.symmetry.tip1":"Reflections in water perfect for symmetry","rule.symmetry.tip2":"Architecture offers natural symmetry","rule.symmetry.tip3":"Deliberately breaking symmetry as a style element",
+"rule.framing.name":"Natural Framing","rule.framing.desc":"Use elements in the scene to frame your subject.","rule.framing.tip1":"Archways, windows, branches as frames","rule.framing.tip2":"Directs attention to the main subject","rule.framing.tip3":"Creates depth and context",
+"rule.negative.name":"Negative Space","rule.negative.desc":"Empty space around the subject creates impact and drama.","rule.negative.tip1":"Less is more \u2013 use minimalism","rule.negative.tip2":"Give the subject room to breathe","rule.negative.tip3":"Especially effective in portraits",
+"rule.diagonal.name":"Diagonals","rule.diagonal.desc":"Diagonal lines create dynamics and tension in the image.","rule.diagonal.tip1":"Corner to corner for maximum dynamics","rule.diagonal.tip2":"Use tilted perspectives","rule.diagonal.tip3":"Direction of movement along the diagonal",
+"rule.color.name":"Color Theory","rule.color.desc":"Complementary colors and color harmonies for strong visual impact.","rule.color.tip1":"Complementary colors for contrast (blue/orange)","rule.color.tip2":"Analogous colors for harmony","rule.color.tip3":"Warm colors foreground, cool colors background",
+"motif.portrait.title":"Portrait Photography","motif.portrait.desc":"Perfectly capture people and faces.","motif.landscape.title":"Landscape Photography","motif.landscape.desc":"Capture wide landscapes and nature scenes.","motif.street.title":"Street Photography","motif.street.desc":"Authentically document life on the streets.","motif.macro.title":"Macro Photography","motif.macro.desc":"Make small things appear large.","motif.night.title":"Night Photography","motif.night.desc":"Stars, city lights and nighttime scenes.","motif.sport.title":"Sports Photography","motif.sport.desc":"Freeze fast movements and action.","motif.architecture.title":"Architecture Photography","motif.architecture.desc":"Buildings and structures in perfection.","motif.wildlife.title":"Wildlife Photography","motif.wildlife.desc":"Animals in their natural habitat.",
+"motif.setting.lens":"Lens","motif.setting.aperture":"Aperture","motif.setting.iso":"ISO","motif.setting.shutter":"Shutter",
+"nav.simtools":"Simulation","sim.tag":"Simulation","sim.title":"Photo Simulations","sim.desc":"Simulate various photo effects in real-time.",
+"sim.bokeh":"Bokeh","sim.longexp":"Long Exposure","sim.wb":"White Balance","sim.noise":"ISO Noise","sim.perspective":"Perspective","sim.histogram":"Histogram",
+"sim.bokeh.title":"Bokeh Simulator","sim.bokeh.info":"See how bokeh changes with different apertures and focal lengths.","sim.bokeh.blades":"Aperture Blades","sim.bokeh.intensity":"Bokeh Intensity",
+"sim.longexp.title":"Long Exposure Simulator","sim.longexp.info":"See the effect of different exposure times on motion.","sim.longexp.speed":"Motion Speed","sim.longexp.time":"Exposure Time (s)",
+"sim.wb.title":"White Balance Simulator","sim.wb.info":"See how color temperature affects your image.","sim.wb.kelvin":"Temperature (K)","sim.wb.tint":"Tint",
+"sim.noise.title":"ISO Noise Simulator","sim.noise.info":"See how digital noise increases with higher ISO values.","sim.noise.level":"Noise Level",
+"sim.perspective.title":"Perspective Simulator","sim.perspective.info":"See how focal length affects perspective.","sim.perspective.type":"Distortion Type",
+"sim.histogram.title":"Histogram Simulator","sim.histogram.info":"View the histogram based on exposure settings."
+},
+
+/* ===== FRAN\u00c7AIS ===== */
+fr: {
+"nav.lens":"Calculateur","nav.composition":"Composition","nav.motif":"Reconnaissance","nav.exposure":"Exposition","nav.quiz":"Quiz",
+"hero.welcome":"Bienvenue sur","hero.desc":"Votre bo\u00eete \u00e0 outils photo ultime. Calculs d'objectifs, r\u00e8gles de composition, reconnaissance de sujets et quiz interactifs \u2014 tout en un seul endroit.","hero.calculators":"Calculateurs","hero.rules":"R\u00e8gles","hero.questions":"Questions Quiz","hero.cta":"Commencer",
+"lens.tag":"Outils","lens.title":"Calculateur d'Objectifs","lens.desc":"Calculez la profondeur de champ, l'angle de vue, le facteur de recadrage et plus.","lens.tab.dof":"Profondeur de Champ","lens.tab.fov":"Angle de Vue","lens.tab.crop":"Facteur de Recadrage","lens.tab.hyper":"Distance Hyperfocale","lens.tab.flash":"Port\u00e9e du Flash","lens.tab.mag":"Grossissement",
+"calc.focal":"Distance Focale (mm)","calc.aperture":"Ouverture (f/)","calc.sensor":"Taille du Capteur","calc.calculate":"Calculer","calc.results":"R\u00e9sultats",
+"dof.title":"Calculer la Profondeur de Champ","dof.info":"La profondeur de champ d\u00e9crit la zone qui appara\u00eet nette dans l'image.","dof.distance":"Distance au Sujet (m)","dof.total":"Profondeur de Champ","dof.near":"Point Proche","dof.far":"Point \u00c9loign\u00e9","dof.coc":"Cercle de Confusion",
+"fov.title":"Calculer l'Angle de Vue","fov.info":"L'angle de vue d\u00e9termine la portion de sc\u00e8ne captur\u00e9e.","fov.horizontal":"Angle Horizontal","fov.vertical":"Angle Vertical","fov.diagonal":"Angle Diagonal","fov.lenstype":"Type d'Objectif",
+"crop.title":"Calculer le Facteur de Recadrage","crop.info":"Le facteur de recadrage montre l'\u00e9quivalent par rapport au plein format.","crop.lensfocal":"Focale de l'Objectif (mm)","crop.lensaperture":"Ouverture de l'Objectif (f/)","crop.camerasensor":"Capteur","crop.equivfocal":"Focale \u00c9quivalente (FF)","crop.equivaperture":"Ouverture \u00c9quivalente (FF)","crop.factor":"Facteur de Recadrage","crop.fullframe":"Plein Format",
+"hyper.title":"Distance Hyperfocale","hyper.info":"La distance \u00e0 partir de laquelle tout est net jusqu'\u00e0 l'infini.","hyper.distance":"Distance Hyperfocale","hyper.near":"Point Proche (\u00e0 H)","hyper.tiplabel":"Conseil","hyper.tip":"Faites la mise au point sur la distance hyperfocale pour une nettet\u00e9 maximale.",
+"flash.title":"Port\u00e9e du Flash","flash.info":"Calculez la port\u00e9e maximale du flash selon le nombre guide.","flash.gn":"Nombre Guide (NG)","flash.maxrange":"Port\u00e9e Maximale","flash.at100":"\u00c0 ISO 100",
+"mag.title":"Grossissement","mag.info":"Calculez le rapport de grossissement pour la macrophotographie.","mag.mindist":"Distance Min. de Mise au Point (cm)","mag.sensorwidth":"Largeur du Capteur (mm)","mag.ratio":"Rapport de Grossissement","mag.field":"Champ Captur\u00e9 (Largeur)","mag.macro":"Capacit\u00e9 Macro",
+"comp.tag":"Composition","comp.title":"R\u00e8gles de Photographie","comp.desc":"Ma\u00eetrisez les r\u00e8gles de composition les plus importantes.","comp.demo":"Voir la D\u00e9mo",
+"motif.tag":"Reconnaissance","motif.title":"Reconnaissance de Sujets & Genres","motif.desc":"D\u00e9couvrez les diff\u00e9rents genres photo et leurs r\u00e9glages optimaux.","motif.all":"Tous","motif.portrait":"Portrait","motif.landscape":"Paysage","motif.street":"Street","motif.macro":"Macro","motif.night":"Nuit","motif.sport":"Sport","motif.architecture":"Architecture","motif.wildlife":"Animalier",
+"exp.tag":"Bases","exp.title":"Triangle d'Exposition","exp.desc":"Comprenez l'interaction entre ouverture, vitesse d'obturation et ISO.","exp.aperture":"Ouverture","exp.shutter":"Vitesse d'Obturation","exp.aperture.mid":"Ouverture moyenne \u2013 bon compromis nettet\u00e9/lumi\u00e8re.","exp.shutter.mid":"Vitesse standard \u2013 fige la plupart des mouvements.","exp.iso.low":"ISO bas \u2013 bruit minimal, meilleure qualit\u00e9.","exp.correct":"Exposition Correcte","exp.under":"Sous-expos\u00e9","exp.over":"Surexpos\u00e9","exp.slightunder":"L\u00e9g\u00e8rement sous-expos\u00e9","exp.slightover":"L\u00e9g\u00e8rement surexpos\u00e9",
+"quiz.tag":"Contr\u00f4le","quiz.title":"Quiz Photo","quiz.desc":"Testez vos connaissances avec des questions interactives.","quiz.all":"Tous les Th\u00e8mes","quiz.basics":"Bases","quiz.composition":"Composition","quiz.lenses":"Objectifs","quiz.exposure":"Exposition","quiz.genres":"Genres","quiz.ready":"Pr\u00eat pour le Quiz ?","quiz.choose":"Choisissez une cat\u00e9gorie et testez vos connaissances !","quiz.info":"10 questions par tour \u2022 Choix multiples \u2022 Feedback instantan\u00e9","quiz.start":"Lancer le Quiz","quiz.next":"Question Suivante","quiz.finished":"Quiz Termin\u00e9 !","quiz.playagain":"Rejouer","quiz.review":"Voir les R\u00e9ponses","quiz.score":"Points","quiz.resulttext":"Vous avez r\u00e9pondu correctement \u00e0 {0} questions sur {1}.","quiz.excellent":"Excellent ! Vous \u00eates un pro de la photo !","quiz.good":"Bien jou\u00e9 ! Connaissances solides !","quiz.ok":"Pas mal ! Continuez \u00e0 pratiquer !","quiz.needwork":"Des progr\u00e8s \u00e0 faire ! R\u00e9visez les bases.",
+"footer.brand":"Votre bo\u00eete \u00e0 outils photo gratuite pour de meilleures images.","footer.tools":"Outils","footer.calcs":"Calculateurs","footer.comprules":"R\u00e8gles de Composition","footer.exptriangle":"Triangle d'Exposition","footer.copy":"\u00a9 2026 PhotoPro Tools \u2014 Cr\u00e9\u00e9 avec passion pour la photographie.",
+"sensor.ff":"Plein Format (36x24mm)","sensor.apsc":"APS-C (23.5x15.6mm)","sensor.apsc_canon":"APS-C Canon (22.3x14.9mm)","sensor.m43":"Micro 4/3 (17.3x13mm)","sensor.1inch":"1 Pouce (13.2x8.8mm)","sensor.small":"1/2.3 Pouce (6.17x4.55mm)","sensor.ff_short":"Plein Format","sensor.apsc_short":"APS-C","sensor.m43_short":"Micro 4/3","sensor.ff_1x":"Plein Format (1.0x)","sensor.apsc_nikon":"APS-C Nikon/Sony (1.5x)","sensor.apsc_canon_1_6":"APS-C Canon (1.6x)","sensor.m43_2x":"Micro 4/3 (2.0x)","sensor.1inch_2_7":"1 Pouce (2.7x)","sensor.small_5_6":"1/2.3 Pouce (5.6x)",
+"lenstype.superwide":"Super Grand-Angle","lenstype.wide":"Grand-Angle","lenstype.normal":"Objectif Normal","lenstype.tele":"T\u00e9l\u00e9objectif","lenstype.supertele":"Super T\u00e9l\u00e9objectif",
+"macro.true":"Vrai Macro (1:1+)","macro.half":"Demi Macro (~1:2)","macro.close":"Gros Plan","macro.no":"Pas Macro",
+"rule.thirds.name":"R\u00e8gle des Tiers","rule.thirds.desc":"Divisez l'image en 9 parties \u00e9gales. Placez les \u00e9l\u00e9ments cl\u00e9s sur les lignes ou intersections.","rule.thirds.tip1":"Placez l'horizon sur la ligne du tiers sup\u00e9rieur ou inf\u00e9rieur","rule.thirds.tip2":"Yeux du sujet sur les intersections sup\u00e9rieures","rule.thirds.tip3":"Ne jamais placer le sujet principal au centre exact",
+"rule.golden.name":"Nombre d'Or","rule.golden.desc":"Le rapport de 1:1,618 \u2013 la proportion parfaite de la nature.","rule.golden.tip1":"Divise l'image \u00e0 environ 62% / 38%","rule.golden.tip2":"Plus harmonieux que la r\u00e8gle des tiers","rule.golden.tip3":"Pr\u00e9sent partout dans la nature (coquillages, fleurs)",
+"rule.leading.name":"Lignes Directrices","rule.leading.desc":"Les lignes naturelles guident le regard du spectateur vers le sujet.","rule.leading.tip1":"Utilisez routes, rivi\u00e8res, cl\u00f4tures comme lignes","rule.leading.tip2":"Les lignes doivent mener dans l'image","rule.leading.tip3":"Les lignes convergentes cr\u00e9ent de la profondeur",
+"rule.symmetry.name":"Sym\u00e9trie & Motifs","rule.symmetry.desc":"Les compositions sym\u00e9triques rayonnent de calme et perfection.","rule.symmetry.tip1":"Reflets dans l'eau parfaits pour la sym\u00e9trie","rule.symmetry.tip2":"L'architecture offre une sym\u00e9trie naturelle","rule.symmetry.tip3":"Briser d\u00e9lib\u00e9r\u00e9ment la sym\u00e9trie comme effet de style",
+"rule.framing.name":"Cadrage Naturel","rule.framing.desc":"Utilisez des \u00e9l\u00e9ments de la sc\u00e8ne pour encadrer votre sujet.","rule.framing.tip1":"Arches, fen\u00eatres, branches comme cadres","rule.framing.tip2":"Dirige l'attention vers le sujet principal","rule.framing.tip3":"Cr\u00e9e profondeur et contexte",
+"rule.negative.name":"Espace N\u00e9gatif","rule.negative.desc":"L'espace vide autour du sujet cr\u00e9e impact et dramatisme.","rule.negative.tip1":"Moins c'est plus \u2013 utilisez le minimalisme","rule.negative.tip2":"Donnez au sujet de l'espace pour respirer","rule.negative.tip3":"Particuli\u00e8rement efficace en portrait",
+"rule.diagonal.name":"Diagonales","rule.diagonal.desc":"Les lignes diagonales cr\u00e9ent dynamisme et tension dans l'image.","rule.diagonal.tip1":"D'un coin \u00e0 l'autre pour un maximum de dynamisme","rule.diagonal.tip2":"Utilisez des perspectives inclin\u00e9es","rule.diagonal.tip3":"Direction du mouvement le long de la diagonale",
+"rule.color.name":"Th\u00e9orie des Couleurs","rule.color.desc":"Couleurs compl\u00e9mentaires et harmonies pour un fort impact visuel.","rule.color.tip1":"Couleurs compl\u00e9mentaires pour le contraste (bleu/orange)","rule.color.tip2":"Couleurs analogues pour l'harmonie","rule.color.tip3":"Couleurs chaudes au premier plan, froides \u00e0 l'arri\u00e8re",
+"motif.portrait.title":"Photographie de Portrait","motif.portrait.desc":"Mettre parfaitement en sc\u00e8ne les personnes.","motif.landscape.title":"Photographie de Paysage","motif.landscape.desc":"Capturer de vastes paysages et sc\u00e8nes naturelles.","motif.street.title":"Photographie de Rue","motif.street.desc":"Documenter la vie urbaine de mani\u00e8re authentique.","motif.macro.title":"Macrophotographie","motif.macro.desc":"Montrer les petites choses en grand.","motif.night.title":"Photographie de Nuit","motif.night.desc":"\u00c9toiles, lumi\u00e8res de la ville et sc\u00e8nes nocturnes.","motif.sport.title":"Photographie Sportive","motif.sport.desc":"Figer les mouvements rapides et l'action.","motif.architecture.title":"Photographie d'Architecture","motif.architecture.desc":"B\u00e2timents et structures en perfection.","motif.wildlife.title":"Photographie Animalier","motif.wildlife.desc":"Animaux dans leur habitat naturel.",
+"motif.setting.lens":"Objectif","motif.setting.aperture":"Ouverture","motif.setting.iso":"ISO","motif.setting.shutter":"Obturation",
+"nav.simtools":"Simulation","sim.tag":"Simulation","sim.title":"Simulations Photo","sim.desc":"Simulez divers effets photo en temps réel.",
+"sim.bokeh":"Bokeh","sim.longexp":"Longue Exposition","sim.wb":"Balance des Blancs","sim.noise":"Bruit ISO","sim.perspective":"Perspective","sim.histogram":"Histogramme",
+"sim.bokeh.title":"Simulateur de Bokeh","sim.bokeh.info":"Voyez comment le bokeh change avec différentes ouvertures et focales.","sim.bokeh.blades":"Lamelles d'Ouverture","sim.bokeh.intensity":"Intensité du Bokeh",
+"sim.longexp.title":"Simulateur de Longue Exposition","sim.longexp.info":"Voyez l'effet de différents temps d'exposition sur le mouvement.","sim.longexp.speed":"Vitesse de Mouvement","sim.longexp.time":"Temps d'Exposition (s)",
+"sim.wb.title":"Simulateur de Balance des Blancs","sim.wb.info":"Voyez comment la température de couleur affecte votre image.","sim.wb.kelvin":"Température (K)","sim.wb.tint":"Teinte",
+"sim.noise.title":"Simulateur de Bruit ISO","sim.noise.info":"Voyez comment le bruit numérique augmente avec des valeurs ISO élevées.","sim.noise.level":"Niveau de Bruit",
+"sim.perspective.title":"Simulateur de Perspective","sim.perspective.info":"Voyez comment la focale affecte la perspective.","sim.perspective.type":"Type de Distorsion",
+"sim.histogram.title":"Simulateur d'Histogramme","sim.histogram.info":"Voyez l'histogramme selon les réglages d'exposition."
+},
+
+/* ===== ITALIANO ===== */
+it: {
+"nav.lens":"Calcolatore","nav.composition":"Composizione","nav.motif":"Riconoscimento","nav.exposure":"Esposizione","nav.quiz":"Quiz",
+"hero.welcome":"Benvenuto su","hero.desc":"Il tuo toolkit fotografico definitivo. Calcoli degli obiettivi, regole di composizione, riconoscimento soggetti e quiz interattivi \u2014 tutto in un unico posto.","hero.calculators":"Calcolatori","hero.rules":"Regole","hero.questions":"Domande Quiz","hero.cta":"Inizia Ora",
+"lens.tag":"Strumenti","lens.title":"Calcolatore Obiettivi","lens.desc":"Calcola profondit\u00e0 di campo, angolo di campo, fattore di crop e altro.","lens.tab.dof":"Profondit\u00e0 di Campo","lens.tab.fov":"Angolo di Campo","lens.tab.crop":"Fattore di Crop","lens.tab.hyper":"Distanza Iperfocale","lens.tab.flash":"Portata Flash","lens.tab.mag":"Ingrandimento",
+"calc.focal":"Lunghezza Focale (mm)","calc.aperture":"Apertura (f/)","calc.sensor":"Dimensione Sensore","calc.calculate":"Calcola","calc.results":"Risultati",
+"dof.title":"Calcola Profondit\u00e0 di Campo","dof.info":"La profondit\u00e0 di campo descrive la zona che appare nitida nell'immagine.","dof.distance":"Distanza dal Soggetto (m)","dof.total":"Profondit\u00e0 di Campo","dof.near":"Punto Vicino","dof.far":"Punto Lontano","dof.coc":"Cerchio di Confusione",
+"fov.title":"Calcola Angolo di Campo","fov.info":"L'angolo di campo determina quanta scena cattura la fotocamera.","fov.horizontal":"Angolo Orizzontale","fov.vertical":"Angolo Verticale","fov.diagonal":"Angolo Diagonale","fov.lenstype":"Tipo di Obiettivo",
+"crop.title":"Calcola Fattore di Crop","crop.info":"Il fattore di crop mostra l'equivalente rispetto al pieno formato.","crop.lensfocal":"Focale dell'Obiettivo (mm)","crop.lensaperture":"Apertura dell'Obiettivo (f/)","crop.camerasensor":"Sensore Fotocamera","crop.equivfocal":"Focale Equivalente (FF)","crop.equivaperture":"Apertura Equivalente (FF)","crop.factor":"Fattore di Crop","crop.fullframe":"Pieno Formato",
+"hyper.title":"Distanza Iperfocale","hyper.info":"La distanza dalla quale tutto \u00e8 nitido fino all'infinito.","hyper.distance":"Distanza Iperfocale","hyper.near":"Punto Vicino (a fuoco su H)","hyper.tiplabel":"Consiglio","hyper.tip":"Metti a fuoco sulla distanza iperfocale per la massima nitidezza.",
+"flash.title":"Portata Flash","flash.info":"Calcola la portata massima del flash in base al numero guida.","flash.gn":"Numero Guida (NG)","flash.maxrange":"Portata Massima","flash.at100":"A ISO 100",
+"mag.title":"Ingrandimento","mag.info":"Calcola il rapporto di ingrandimento per la macrofotografia.","mag.mindist":"Distanza Min. di Messa a Fuoco (cm)","mag.sensorwidth":"Larghezza Sensore (mm)","mag.ratio":"Rapporto di Ingrandimento","mag.field":"Campo Catturato (Larghezza)","mag.macro":"Capacit\u00e0 Macro",
+"comp.tag":"Composizione","comp.title":"Regole Fotografiche","comp.desc":"Padroneggia le regole di composizione pi\u00f9 importanti per foto straordinarie.","comp.demo":"Mostra Demo",
+"motif.tag":"Riconoscimento","motif.title":"Riconoscimento Soggetti & Generi","motif.desc":"Scopri i diversi generi fotografici e le loro impostazioni ottimali.","motif.all":"Tutti","motif.portrait":"Ritratto","motif.landscape":"Paesaggio","motif.street":"Street","motif.macro":"Macro","motif.night":"Notturna","motif.sport":"Sport","motif.architecture":"Architettura","motif.wildlife":"Natura",
+"exp.tag":"Basi","exp.title":"Triangolo dell'Esposizione","exp.desc":"Comprendi l'interazione tra apertura, tempo di posa e ISO.","exp.aperture":"Apertura","exp.shutter":"Tempo di Posa","exp.aperture.mid":"Apertura media \u2013 buon compromesso tra nitidezza e luce.","exp.shutter.mid":"Tempo di posa standard \u2013 congela la maggior parte dei movimenti.","exp.iso.low":"ISO basso \u2013 rumore minimo, migliore qualit\u00e0.","exp.correct":"Esposizione Corretta","exp.under":"Sottoesposto","exp.over":"Sovraesposto","exp.slightunder":"Leggermente sottoesposto","exp.slightover":"Leggermente sovraesposto",
+"quiz.tag":"Verifica","quiz.title":"Quiz Fotografico","quiz.desc":"Metti alla prova le tue conoscenze con domande interattive.","quiz.all":"Tutti i Temi","quiz.basics":"Basi","quiz.composition":"Composizione","quiz.lenses":"Obiettivi","quiz.exposure":"Esposizione","quiz.genres":"Generi","quiz.ready":"Pronto per il Quiz?","quiz.choose":"Scegli una categoria e metti alla prova le tue conoscenze!","quiz.info":"10 domande per turno \u2022 Scelta multipla \u2022 Feedback istantaneo","quiz.start":"Inizia Quiz","quiz.next":"Prossima Domanda","quiz.finished":"Quiz Completato!","quiz.playagain":"Gioca Ancora","quiz.review":"Rivedi Risposte","quiz.score":"Punti","quiz.resulttext":"Hai risposto correttamente a {0} domande su {1}.","quiz.excellent":"Eccellente! Sei un professionista della fotografia!","quiz.good":"Ben fatto! Conoscenze solide!","quiz.ok":"Non male! Continua a esercitarti!","quiz.needwork":"C'\u00e8 margine di miglioramento! Ripassa le basi.",
+"footer.brand":"Il tuo toolkit fotografico gratuito per immagini migliori.","footer.tools":"Strumenti","footer.calcs":"Calcolatori","footer.comprules":"Regole di Composizione","footer.exptriangle":"Triangolo dell'Esposizione","footer.copy":"\u00a9 2026 PhotoPro Tools \u2014 Creato con passione per la fotografia.",
+"sensor.ff":"Pieno Formato (36x24mm)","sensor.apsc":"APS-C (23.5x15.6mm)","sensor.apsc_canon":"APS-C Canon (22.3x14.9mm)","sensor.m43":"Micro 4/3 (17.3x13mm)","sensor.1inch":"1 Pollice (13.2x8.8mm)","sensor.small":"1/2.3 Pollice (6.17x4.55mm)","sensor.ff_short":"Pieno Formato","sensor.apsc_short":"APS-C","sensor.m43_short":"Micro 4/3","sensor.ff_1x":"Pieno Formato (1.0x)","sensor.apsc_nikon":"APS-C Nikon/Sony (1.5x)","sensor.apsc_canon_1_6":"APS-C Canon (1.6x)","sensor.m43_2x":"Micro 4/3 (2.0x)","sensor.1inch_2_7":"1 Pollice (2.7x)","sensor.small_5_6":"1/2.3 Pollice (5.6x)",
+"lenstype.superwide":"Super Grandangolo","lenstype.wide":"Grandangolo","lenstype.normal":"Obiettivo Normale","lenstype.tele":"Teleobiettivo","lenstype.supertele":"Super Teleobiettivo",
+"macro.true":"Vero Macro (1:1+)","macro.half":"Mezzo Macro (~1:2)","macro.close":"Primo Piano","macro.no":"Non Macro",
+"rule.thirds.name":"Regola dei Terzi","rule.thirds.desc":"Dividi l'immagine in 9 parti uguali. Posiziona gli elementi chiave sulle linee o intersezioni.","rule.thirds.tip1":"Posiziona l'orizzonte sulla linea del terzo superiore o inferiore","rule.thirds.tip2":"Occhi del soggetto sulle intersezioni superiori","rule.thirds.tip3":"Mai posizionare il soggetto principale esattamente al centro",
+"rule.golden.name":"Sezione Aurea","rule.golden.desc":"Il rapporto 1:1,618 \u2013 la proporzione perfetta della natura.","rule.golden.tip1":"Divide l'immagine circa 62% a 38%","rule.golden.tip2":"Pi\u00f9 armonioso della regola dei terzi","rule.golden.tip3":"Presente ovunque in natura (conchiglie, fiori)",
+"rule.leading.name":"Linee Guida","rule.leading.desc":"Le linee naturali guidano lo sguardo dello spettatore verso il soggetto.","rule.leading.tip1":"Usa strade, fiumi, recinzioni come linee","rule.leading.tip2":"Le linee devono condurre dentro l'immagine","rule.leading.tip3":"Le linee convergenti creano profondit\u00e0",
+"rule.symmetry.name":"Simmetria & Motivi","rule.symmetry.desc":"Le composizioni simmetriche irradiano calma e perfezione.","rule.symmetry.tip1":"Riflessi nell'acqua perfetti per la simmetria","rule.symmetry.tip2":"L'architettura offre simmetria naturale","rule.symmetry.tip3":"Rompere deliberatamente la simmetria come elemento stilistico",
+"rule.framing.name":"Cornice Naturale","rule.framing.desc":"Usa elementi della scena per incorniciare il soggetto.","rule.framing.tip1":"Archi, finestre, rami come cornici","rule.framing.tip2":"Dirige l'attenzione sul soggetto principale","rule.framing.tip3":"Crea profondit\u00e0 e contesto",
+"rule.negative.name":"Spazio Negativo","rule.negative.desc":"Lo spazio vuoto intorno al soggetto crea impatto e drammaticit\u00e0.","rule.negative.tip1":"Meno \u00e8 di pi\u00f9 \u2013 usa il minimalismo","rule.negative.tip2":"Dai al soggetto spazio per respirare","rule.negative.tip3":"Particolarmente efficace nei ritratti",
+"rule.diagonal.name":"Diagonali","rule.diagonal.desc":"Le linee diagonali creano dinamismo e tensione nell'immagine.","rule.diagonal.tip1":"Da angolo ad angolo per il massimo dinamismo","rule.diagonal.tip2":"Usa prospettive inclinate","rule.diagonal.tip3":"Direzione del movimento lungo la diagonale",
+"rule.color.name":"Teoria del Colore","rule.color.desc":"Colori complementari e armonie cromatiche per un forte impatto visivo.","rule.color.tip1":"Colori complementari per il contrasto (blu/arancione)","rule.color.tip2":"Colori analoghi per l'armonia","rule.color.tip3":"Colori caldi in primo piano, freddi sullo sfondo",
+"motif.portrait.title":"Fotografia Ritrattistica","motif.portrait.desc":"Mettere perfettamente in scena le persone.","motif.landscape.title":"Fotografia Paesaggistica","motif.landscape.desc":"Catturare vasti paesaggi e scene naturali.","motif.street.title":"Street Photography","motif.street.desc":"Documentare autenticamente la vita di strada.","motif.macro.title":"Macrofotografia","motif.macro.desc":"Mostrare le piccole cose in grande.","motif.night.title":"Fotografia Notturna","motif.night.desc":"Stelle, luci della citt\u00e0 e scene notturne.","motif.sport.title":"Fotografia Sportiva","motif.sport.desc":"Congelare movimenti veloci e azione.","motif.architecture.title":"Fotografia d'Architettura","motif.architecture.desc":"Edifici e strutture alla perfezione.","motif.wildlife.title":"Fotografia Naturalistica","motif.wildlife.desc":"Animali nel loro habitat naturale.",
+"motif.setting.lens":"Obiettivo","motif.setting.aperture":"Apertura","motif.setting.iso":"ISO","motif.setting.shutter":"Otturatore",
+"nav.simtools":"Simulazione","sim.tag":"Simulazione","sim.title":"Simulazioni Foto","sim.desc":"Simula vari effetti fotografici in tempo reale.",
+"sim.bokeh":"Bokeh","sim.longexp":"Lunga Esposizione","sim.wb":"Bilanciamento del Bianco","sim.noise":"Rumore ISO","sim.perspective":"Prospettiva","sim.histogram":"Istogramma",
+"sim.bokeh.title":"Simulatore Bokeh","sim.bokeh.info":"Guarda come cambia il bokeh con diverse aperture e focali.","sim.bokeh.blades":"Lamelle del Diaframma","sim.bokeh.intensity":"Intensità del Bokeh",
+"sim.longexp.title":"Simulatore Lunga Esposizione","sim.longexp.info":"Guarda l'effetto di diversi tempi di esposizione sul movimento.","sim.longexp.speed":"Velocità di Movimento","sim.longexp.time":"Tempo di Esposizione (s)",
+"sim.wb.title":"Simulatore Bilanciamento del Bianco","sim.wb.info":"Guarda come la temperatura del colore influenza la tua immagine.","sim.wb.kelvin":"Temperatura (K)","sim.wb.tint":"Tonalità",
+"sim.noise.title":"Simulatore Rumore ISO","sim.noise.info":"Guarda come il rumore digitale aumenta con valori ISO più alti.","sim.noise.level":"Livello di Rumore",
+"sim.perspective.title":"Simulatore di Prospettiva","sim.perspective.info":"Guarda come la focale influenza la prospettiva.","sim.perspective.type":"Tipo di Distorsione",
+"sim.histogram.title":"Simulatore di Istogramma","sim.histogram.info":"Visualizza l'istogramma in base alle impostazioni di esposizione."
+},
+
+/* ===== SRPSKI (Latin) ===== */
+sr: {
+"nav.lens":"Kalkulator","nav.composition":"Kompozicija","nav.motif":"Prepoznavanje","nav.exposure":"Ekspozicija","nav.quiz":"Kviz",
+"hero.welcome":"Dobrodo\u0161li na","hero.desc":"Va\u0161 ultimativni fotografski alat. Prora\u010duni objektiva, pravila kompozicije, prepoznavanje motiva i interaktivni kvizovi \u2014 sve na jednom mestu.","hero.calculators":"Kalkulatori","hero.rules":"Pravila","hero.questions":"Pitanja","hero.cta":"Po\u010dni",
+"lens.tag":"Alati","lens.title":"Kalkulator Objektiva","lens.desc":"Izra\u010dunajte dubinu o\u0161trine, ugao snimanja, crop faktor i vi\u0161e.","lens.tab.dof":"Dubina O\u0161trine","lens.tab.fov":"Ugao Snimanja","lens.tab.crop":"Crop Faktor","lens.tab.hyper":"Hiperfokalna Daljina","lens.tab.flash":"Domet Blica","lens.tab.mag":"Uve\u0107anje",
+"calc.focal":"\u017di\u017ena Daljina (mm)","calc.aperture":"Otvor Blende (f/)","calc.sensor":"Veli\u010dina Senzora","calc.calculate":"Izra\u010dunaj","calc.results":"Rezultati",
+"dof.title":"Izra\u010dunaj Dubinu O\u0161trine","dof.info":"Dubina o\u0161trine opisuje opseg koji se pojavljuje o\u0161tar na slici.","dof.distance":"Udaljenost do Motiva (m)","dof.total":"Dubina O\u0161trine","dof.near":"Bli\u017ea Ta\u010dka","dof.far":"Dalja Ta\u010dka","dof.coc":"Krug Konfuzije",
+"fov.title":"Izra\u010dunaj Ugao Snimanja","fov.info":"Ugao snimanja odre\u0111uje koliko scene kamera obuhvata.","fov.horizontal":"Horizontalni Ugao","fov.vertical":"Vertikalni Ugao","fov.diagonal":"Dijagonalni Ugao","fov.lenstype":"Tip Objektiva",
+"crop.title":"Izra\u010dunaj Crop Faktor","crop.info":"Crop faktor pokazuje ekvivalentni ise\u010dak u pore\u0111enju sa punim formatom.","crop.lensfocal":"\u017di\u017ena Daljina Objektiva (mm)","crop.lensaperture":"Blenda Objektiva (f/)","crop.camerasensor":"Senzor Kamere","crop.equivfocal":"Ekvivalentna \u017di\u017ena Daljina","crop.equivaperture":"Ekvivalentna Blenda","crop.factor":"Crop Faktor","crop.fullframe":"Pun Format",
+"hyper.title":"Hiperfokalna Daljina","hyper.info":"Udaljenost od koje je sve o\u0161tro do beskona\u010dnosti.","hyper.distance":"Hiperfokalna Daljina","hyper.near":"Bli\u017ea Ta\u010dka (fokus na H)","hyper.tiplabel":"Savet","hyper.tip":"Fokusirajte na hiperfokalnu daljinu za maksimalnu o\u0161trinu.",
+"flash.title":"Domet Blica","flash.info":"Izra\u010dunajte maksimalni domet blica na osnovu vodenog broja.","flash.gn":"Vode\u0107i Broj (GN)","flash.maxrange":"Maksimalni Domet","flash.at100":"Pri ISO 100",
+"mag.title":"Uve\u0107anje","mag.info":"Izra\u010dunajte odnos uve\u0107anja za makro fotografiju.","mag.mindist":"Min. Udaljenost Fokusa (cm)","mag.sensorwidth":"\u0160irina Senzora (mm)","mag.ratio":"Odnos Uve\u0107anja","mag.field":"Obuhva\u0107eno Polje (\u0160irina)","mag.macro":"Makro Sposobnost",
+"comp.tag":"Kompozicija","comp.title":"Pravila Fotografije","comp.desc":"Savladajte najva\u017enija pravila kompozicije za impresivne fotografije.","comp.demo":"Prika\u017ei Demo",
+"motif.tag":"Prepoznavanje","motif.title":"Prepoznavanje Motiva & \u017danrovi","motif.desc":"Nau\u010dite razli\u010dite fotografske \u017eanrove i njihova optimalna pode\u0161avanja.","motif.all":"Svi","motif.portrait":"Portret","motif.landscape":"Pejza\u017e","motif.street":"Ulica","motif.macro":"Makro","motif.night":"No\u0107","motif.sport":"Sport","motif.architecture":"Arhitektura","motif.wildlife":"Divljina",
+"exp.tag":"Osnove","exp.title":"Trougao Ekspozicije","exp.desc":"Razumite interakciju izme\u0111u blende, brzine zatva\u010da i ISO.","exp.aperture":"Blenda","exp.shutter":"Brzina Zatva\u010da","exp.aperture.mid":"Srednja blenda \u2013 dobar kompromis izme\u0111u o\u0161trine i svetlosti.","exp.shutter.mid":"Standardna brzina \u2013 zamrzava ve\u0107inu pokreta.","exp.iso.low":"Nizak ISO \u2013 minimalan \u0161um, najbolji kvalitet.","exp.correct":"Korektna Ekspozicija","exp.under":"Podeksponirana","exp.over":"Preeksponirana","exp.slightunder":"Blago podeksponirana","exp.slightover":"Blago preeksponirana",
+"quiz.tag":"Provera Znanja","quiz.title":"Fotografski Kviz","quiz.desc":"Testirajte svoje znanje sa interaktivnim pitanjima.","quiz.all":"Sve Teme","quiz.basics":"Osnove","quiz.composition":"Kompozicija","quiz.lenses":"Objektivi","quiz.exposure":"Ekspozicija","quiz.genres":"\u017danrovi","quiz.ready":"Spremni za Kviz?","quiz.choose":"Izaberite kategoriju i testirajte svoje znanje!","quiz.info":"10 pitanja po rundi \u2022 Vi\u0161estruki izbor \u2022 Trenutni feedback","quiz.start":"Po\u010dni Kviz","quiz.next":"Slede\u0107e Pitanje","quiz.finished":"Kviz Zavr\u0161en!","quiz.playagain":"Igraj Ponovo","quiz.review":"Pregled Odgovora","quiz.score":"Poeni","quiz.resulttext":"Ta\u010dno ste odgovorili na {0} od {1} pitanja.","quiz.excellent":"Odli\u010dno! Vi ste foto profesionalac!","quiz.good":"Bravo! Solidno znanje!","quiz.ok":"Nije lo\u0161e! Nastavite da ve\u017ebate!","quiz.needwork":"Ima prostora za napredak! Ponovite osnove.",
+"footer.brand":"Va\u0161 besplatni fotografski alat za bolje slike.","footer.tools":"Alati","footer.calcs":"Kalkulatori","footer.comprules":"Pravila Kompozicije","footer.exptriangle":"Trougao Ekspozicije","footer.copy":"\u00a9 2026 PhotoPro Tools \u2014 Napravljeno sa stra\u0161\u0107u za fotografiju.",
+"sensor.ff":"Pun Format (36x24mm)","sensor.apsc":"APS-C (23.5x15.6mm)","sensor.apsc_canon":"APS-C Canon (22.3x14.9mm)","sensor.m43":"Micro 4/3 (17.3x13mm)","sensor.1inch":"1 In\u010d (13.2x8.8mm)","sensor.small":"1/2.3 In\u010d (6.17x4.55mm)","sensor.ff_short":"Pun Format","sensor.apsc_short":"APS-C","sensor.m43_short":"Micro 4/3","sensor.ff_1x":"Pun Format (1.0x)","sensor.apsc_nikon":"APS-C Nikon/Sony (1.5x)","sensor.apsc_canon_1_6":"APS-C Canon (1.6x)","sensor.m43_2x":"Micro 4/3 (2.0x)","sensor.1inch_2_7":"1 In\u010d (2.7x)","sensor.small_5_6":"1/2.3 In\u010d (5.6x)",
+"lenstype.superwide":"Super \u0160iroki Ugao","lenstype.wide":"\u0160iroki Ugao","lenstype.normal":"Normalni Objektiv","lenstype.tele":"Teleobjektiv","lenstype.supertele":"Super Teleobjektiv",
+"macro.true":"Pravi Makro (1:1+)","macro.half":"Polu Makro (~1:2)","macro.close":"Krupni Plan","macro.no":"Nije Makro",
+"rule.thirds.name":"Pravilo Tre\u0107ina","rule.thirds.desc":"Podelite sliku na 9 jednakih delova. Postavite klju\u010dne elemente na linije ili preseke.","rule.thirds.tip1":"Horizont na gornju ili donju liniju tre\u0107ine","rule.thirds.tip2":"O\u010di subjekta na gornje preseke","rule.thirds.tip3":"Nikad ne postavljajte glavni motiv ta\u010dno u centar",
+"rule.golden.name":"Zlatni Presek","rule.golden.desc":"Odnos 1:1,618 \u2013 savr\u0161ena proporcija prirode.","rule.golden.tip1":"Deli sliku u odnosu pribli\u017eno 62% / 38%","rule.golden.tip2":"Harmoni\u010dniji od pravila tre\u0107ina","rule.golden.tip3":"Prisutan svuda u prirodi (\u0161koljke, cve\u0107e)",
+"rule.leading.name":"Vode\u0107e Linije","rule.leading.desc":"Prirodne linije vode pogled posmatra\u010da ka glavnom motivu.","rule.leading.tip1":"Koristite puteve, reke, ograde kao linije","rule.leading.tip2":"Linije treba da vode u sliku","rule.leading.tip3":"Konvergentne linije stvaraju dubinu",
+"rule.symmetry.name":"Simetrija & Obrasci","rule.symmetry.desc":"Simetri\u010dne kompozicije zra\u010de mirom i savr\u0161enstvom.","rule.symmetry.tip1":"Odraz u vodi savr\u0161en za simetriju","rule.symmetry.tip2":"Arhitektura nudi prirodnu simetriju","rule.symmetry.tip3":"Svesno kr\u0161enje simetrije kao stilsko sredstvo",
+"rule.framing.name":"Prirodni Okvir","rule.framing.desc":"Koristite elemente scene da uokvirite motiv.","rule.framing.tip1":"Lukovi, prozori, grane kao okviri","rule.framing.tip2":"Usmerava pa\u017enju na glavni motiv","rule.framing.tip3":"Stvara dubinu i kontekst",
+"rule.negative.name":"Negativan Prostor","rule.negative.desc":"Prazan prostor oko motiva stvara efekat i dramatiku.","rule.negative.tip1":"Manje je vi\u0161e \u2013 koristite minimalizam","rule.negative.tip2":"Dajte motivu prostor da di\u0161e","rule.negative.tip3":"Posebno efikasno kod portreta",
+"rule.diagonal.name":"Dijagonale","rule.diagonal.desc":"Dijagonalne linije stvaraju dinamiku i napetost u slici.","rule.diagonal.tip1":"Od ugla do ugla za maksimalnu dinamiku","rule.diagonal.tip2":"Koristite nagnute perspektive","rule.diagonal.tip3":"Smer kretanja du\u017e dijagonale",
+"rule.color.name":"Teorija Boja","rule.color.desc":"Komplementarne boje i harmonije za sna\u017ean vizuelni efekat.","rule.color.tip1":"Komplementarne boje za kontrast (plava/narand\u017easta)","rule.color.tip2":"Analogne boje za harmoniju","rule.color.tip3":"Tople boje u prvom planu, hladne u pozadini",
+"motif.portrait.title":"Portretna Fotografija","motif.portrait.desc":"Savr\u0161eno prikazati ljude i lica.","motif.landscape.title":"Pejza\u017ena Fotografija","motif.landscape.desc":"Uhvatiti \u0161iroke pejza\u017ee i prirodne scene.","motif.street.title":"Uli\u010dna Fotografija","motif.street.desc":"Autenti\u010dno dokumentovati \u017eivot na ulici.","motif.macro.title":"Makro Fotografija","motif.macro.desc":"Male stvari prikazati veliko.","motif.night.title":"No\u0107na Fotografija","motif.night.desc":"Zvezde, gradska svetla i no\u0107ne scene.","motif.sport.title":"Sportska Fotografija","motif.sport.desc":"Zamrznuti brze pokrete i akciju.","motif.architecture.title":"Arhitektonska Fotografija","motif.architecture.desc":"Zgrade i strukture u savr\u0161enstvu.","motif.wildlife.title":"Fotografija Divljine","motif.wildlife.desc":"\u017divotinje u prirodnom stani\u0161tu.",
+"motif.setting.lens":"Objektiv","motif.setting.aperture":"Blenda","motif.setting.iso":"ISO","motif.setting.shutter":"Zatva\u010d",
+"nav.simtools":"Simulacija","sim.tag":"Simulacija","sim.title":"Foto Simulacije","sim.desc":"Simulirajte razli\u010dite foto efekte u realnom vremenu.",
+"sim.bokeh":"Bokeh","sim.longexp":"Duga Ekspozicija","sim.wb":"Balans Belog","sim.noise":"ISO \u0160um","sim.perspective":"Perspektiva","sim.histogram":"Histogram",
+"sim.bokeh.title":"Bokeh Simulator","sim.bokeh.info":"Pogledajte kako se bokeh menja sa razli\u010ditim blendama i \u017ei\u017enim daljinama.","sim.bokeh.blades":"Lamele Blende","sim.bokeh.intensity":"Intenzitet Bokeh-a",
+"sim.longexp.title":"Simulator Duge Ekspozicije","sim.longexp.info":"Pogledajte efekat razli\u010ditih vremena ekspozicije na pokret.","sim.longexp.speed":"Brzina Pokreta","sim.longexp.time":"Vreme Ekspozicije (s)",
+"sim.wb.title":"Simulator Balansa Belog","sim.wb.info":"Pogledajte kako temperatura boje uti\u010de na va\u0161u sliku.","sim.wb.kelvin":"Temperatura (K)","sim.wb.tint":"Nijansa",
+"sim.noise.title":"Simulator ISO \u0160uma","sim.noise.info":"Pogledajte kako digitalni \u0161um raste sa vi\u0161im ISO vrednostima.","sim.noise.level":"Nivo \u0160uma",
+"sim.perspective.title":"Simulator Perspektive","sim.perspective.info":"Pogledajte kako \u017ei\u017ena daljina uti\u010de na perspektivu.","sim.perspective.type":"Tip Distorzije",
+"sim.histogram.title":"Simulator Histograma","sim.histogram.info":"Pogledajte histogram na osnovu pode\u0161avanja ekspozicije."
+},
+
+/* ===== SHQIP (Albanian) ===== */
+sq: {
+"nav.lens":"Kalkulatori","nav.composition":"Kompozicioni","nav.motif":"Njohja e Motivit","nav.exposure":"Ekspozimi","nav.quiz":"Kuiz",
+"hero.welcome":"Mir\u00eb se vini n\u00eb","hero.desc":"Paketa juaj e fundit p\u00ebr fotografi. Llogaritjet e thjerrrave, rregullat e kompozicionit, njohja e motivit dhe kuize interaktive \u2014 t\u00eb gjitha n\u00eb nj\u00eb vend.","hero.calculators":"Kalkulatori","hero.rules":"Rregulla","hero.questions":"Pyetje Kuizi","hero.cta":"Fillo Tani",
+"lens.tag":"Mjete","lens.title":"Kalkulatori i Thjerrrave","lens.desc":"Llogaritni thell\u00ebsin\u00eb e fushes, k\u00ebndin e pamjes, faktorin e prerjes dhe m\u00eb shum\u00eb.","lens.tab.dof":"Thell\u00ebsia e Fush\u00ebs","lens.tab.fov":"K\u00ebndi i Pamjes","lens.tab.crop":"Faktori i Prerjes","lens.tab.hyper":"Distanca Hiperfokale","lens.tab.flash":"Rrezja e Blicit","lens.tab.mag":"Zmadhimi",
+"calc.focal":"Gjat\u00ebsia Fokale (mm)","calc.aperture":"Hap\u00ebsira (f/)","calc.sensor":"Madh\u00ebsia e Sensorit","calc.calculate":"Llogarit","calc.results":"Rezultatet",
+"dof.title":"Llogarit Thell\u00ebsin\u00eb e Fush\u00ebs","dof.info":"Thell\u00ebsia e fush\u00ebs p\u00ebrshkruan zon\u00ebn q\u00eb duket e mpreft\u00eb n\u00eb imazh.","dof.distance":"Distanca deri te Motivi (m)","dof.total":"Thell\u00ebsia e Fush\u00ebs","dof.near":"Pika e Af\u00ebrt","dof.far":"Pika e Larg\u00ebt","dof.coc":"Rrethi i Konfuzionit",
+"fov.title":"Llogarit K\u00ebndin e Pamjes","fov.info":"K\u00ebndi i pamjes p\u00ebrcakton sa sken\u00eb kap kamera.","fov.horizontal":"K\u00ebndi Horizontal","fov.vertical":"K\u00ebndi Vertikal","fov.diagonal":"K\u00ebndi Diagonal","fov.lenstype":"Tipi i Thjerr\u00ebs",
+"crop.title":"Llogarit Faktorin e Prerjes","crop.info":"Faktori i prerjes tregon ekuivalentin n\u00eb krahasim me formatin e plot\u00eb.","crop.lensfocal":"Gjat\u00ebsia Fokale e Thjerr\u00ebs (mm)","crop.lensaperture":"Hap\u00ebsira e Thjerr\u00ebs (f/)","crop.camerasensor":"Sensori i Kamer\u00ebs","crop.equivfocal":"Gjat\u00ebsia Fokale Ekuivalente","crop.equivaperture":"Hap\u00ebsira Ekuivalente","crop.factor":"Faktori i Prerjes","crop.fullframe":"Formati i Plot\u00eb",
+"hyper.title":"Distanca Hiperfokale","hyper.info":"Distanca nga e cila \u00e7do gj\u00eb \u00ebsht\u00eb e mpreft\u00eb deri n\u00eb pafund\u00ebsi.","hyper.distance":"Distanca Hiperfokale","hyper.near":"Pika e Af\u00ebrt (fokus n\u00eb H)","hyper.tiplabel":"K\u00ebshill\u00eb","hyper.tip":"Fokusoni n\u00eb distanc\u00ebn hiperfokale p\u00ebr mpreftimin maksimal.",
+"flash.title":"Rrezja e Blicit","flash.info":"Llogaritni rrezen maksimale t\u00eb blicit bazuar n\u00eb numrin udh\u00ebzues.","flash.gn":"Numri Udh\u00ebzues (GN)","flash.maxrange":"Rrezja Maksimale","flash.at100":"N\u00eb ISO 100",
+"mag.title":"Zmadhimi","mag.info":"Llogaritni raportin e zmadhimit p\u00ebr makrofotografi.","mag.mindist":"Distanca Min. e Fokusit (cm)","mag.sensorwidth":"Gjer\u00ebsia e Sensorit (mm)","mag.ratio":"Raporti i Zmadhimit","mag.field":"Fusha e Kapur (Gjer\u00ebsia)","mag.macro":"Aft\u00ebsia Makro",
+"comp.tag":"Kompozicioni","comp.title":"Rregullat e Fotografis\u00eb","comp.desc":"Z\u00ebt\u00ebroni rregullat m\u00eb t\u00eb r\u00ebd\u00ebsishme t\u00eb kompozicionit p\u00ebr foto mahnitese.","comp.demo":"Shfaq Demo",
+"motif.tag":"Njohja","motif.title":"Njohja e Motivit & Zhanret","motif.desc":"M\u00ebsoni zhanre t\u00eb ndryshme t\u00eb fotografis\u00eb dhe cilesimet e tyre optimale.","motif.all":"T\u00eb Gjitha","motif.portrait":"Portret","motif.landscape":"Peizazh","motif.street":"Rrug\u00eb","motif.macro":"Makro","motif.night":"Nat\u00eb","motif.sport":"Sport","motif.architecture":"Arkitektur\u00eb","motif.wildlife":"Kafsh\u00eb",
+"exp.tag":"Bazat","exp.title":"Trekend\u00ebshi i Ekspozimit","exp.desc":"Kuptoni nd\u00ebrveprimin midis hap\u00ebsir\u00ebs, shpejt\u00ebsis\u00eb s\u00eb shkrepjes dhe ISO.","exp.aperture":"Hap\u00ebsira","exp.shutter":"Shpejt\u00ebsia e Shkrepjes","exp.aperture.mid":"Hap\u00ebsir\u00eb mesatare \u2013 kompromis i mir\u00eb midis mpreftimit dhe drit\u00ebs.","exp.shutter.mid":"Shpejt\u00ebsi standarde \u2013 ngrijn shumic\u00ebn e l\u00ebvizjeve.","exp.iso.low":"ISO i ul\u00ebt \u2013 zhurm\u00eb minimale, cil\u00ebsia m\u00eb e mir\u00eb.","exp.correct":"Ekspozim i Sakt\u00eb","exp.under":"N\u00ebnekspozuar","exp.over":"Mbiekspozuar","exp.slightunder":"Leht\u00ebsisht n\u00ebnekspozuar","exp.slightover":"Leht\u00ebsisht mbiekspozuar",
+"quiz.tag":"Kontroll Dije","quiz.title":"Kuiz Fotografik","quiz.desc":"Testoni njohurit\u00eb tuaja me pyetje interaktive.","quiz.all":"T\u00eb Gjitha Temat","quiz.basics":"Bazat","quiz.composition":"Kompozicioni","quiz.lenses":"Thjerrrat","quiz.exposure":"Ekspozimi","quiz.genres":"Zhanret","quiz.ready":"Gati p\u00ebr Kuizin?","quiz.choose":"Zgjidhni nj\u00eb kategori dhe testoni njohurit\u00eb tuaja!","quiz.info":"10 pyetje p\u00ebr raund \u2022 Zgjedhje e shumefisht\u00eb \u2022 Feedback i menj\u00ehersh\u00ebm","quiz.start":"Fillo Kuizin","quiz.next":"Pyetja Tjet\u00ebr","quiz.finished":"Kuizi P\u00ebrfundoi!","quiz.playagain":"Luaj P\u00ebrs\u00ebri","quiz.review":"Shiko P\u00ebrgjigjet","quiz.score":"Pik\u00eb","quiz.resulttext":"Ju u p\u00ebrgjigj\u00ebt sakt\u00eb {0} nga {1} pyetje.","quiz.excellent":"Shk\u00eblqyesh\u00ebm! Jeni profesionist i fotografis\u00eb!","quiz.good":"Shum\u00eb mir\u00eb! Njohuri solide!","quiz.ok":"Jo keq! Vazhdoni t\u00eb praktikoni!","quiz.needwork":"Ka vend p\u00ebr p\u00ebrmir\u00ebsim! Rishikoni bazat.",
+"footer.brand":"Paketa juaj falas e fotografis\u00eb p\u00ebr imazhe m\u00eb t\u00eb mira.","footer.tools":"Mjete","footer.calcs":"Kalkulatori","footer.comprules":"Rregullat e Kompozicionit","footer.exptriangle":"Trekend\u00ebshi i Ekspozimit","footer.copy":"\u00a9 2026 PhotoPro Tools \u2014 Krijuar me pasion p\u00ebr fotografin\u00eb.",
+"sensor.ff":"Formati i Plot\u00eb (36x24mm)","sensor.apsc":"APS-C (23.5x15.6mm)","sensor.apsc_canon":"APS-C Canon (22.3x14.9mm)","sensor.m43":"Micro 4/3 (17.3x13mm)","sensor.1inch":"1 In\u00e7 (13.2x8.8mm)","sensor.small":"1/2.3 In\u00e7 (6.17x4.55mm)","sensor.ff_short":"Formati i Plot\u00eb","sensor.apsc_short":"APS-C","sensor.m43_short":"Micro 4/3","sensor.ff_1x":"Formati i Plot\u00eb (1.0x)","sensor.apsc_nikon":"APS-C Nikon/Sony (1.5x)","sensor.apsc_canon_1_6":"APS-C Canon (1.6x)","sensor.m43_2x":"Micro 4/3 (2.0x)","sensor.1inch_2_7":"1 In\u00e7 (2.7x)","sensor.small_5_6":"1/2.3 In\u00e7 (5.6x)",
+"lenstype.superwide":"Super K\u00ebnd i Gjer\u00eb","lenstype.wide":"K\u00ebnd i Gjer\u00eb","lenstype.normal":"Thjerr\u00eb Normale","lenstype.tele":"Teleobjektiv","lenstype.supertele":"Super Teleobjektiv",
+"macro.true":"Makro e V\u00ebrtet\u00eb (1:1+)","macro.half":"Gjys\u00ebm Makro (~1:2)","macro.close":"Plan i Af\u00ebrt","macro.no":"Jo Makro",
+"rule.thirds.name":"Rregulli i t\u00eb Tretave","rule.thirds.desc":"Ndani imazhin n\u00eb 9 pjes\u00eb t\u00eb barabarta. Vendosni elementet kryesore n\u00eb vijat ose kryq\u00ebzimet.","rule.thirds.tip1":"Vendosni horizontin n\u00eb vij\u00ebn e t\u00eb tret\u00ebs s\u00eb sip\u00ebrme ose t\u00eb posht\u00ebme","rule.thirds.tip2":"Syt\u00eb e subjektit n\u00eb kryq\u00ebzimet e sip\u00ebrme","rule.thirds.tip3":"Kurr\u00eb mos vendosni motivin kryesor n\u00eb qend\u00ebr t\u00eb sakt\u00eb",
+"rule.golden.name":"Prerja e Art\u00eb","rule.golden.desc":"Raporti 1:1.618 \u2013 proporcioni i p\u00ebrsosur i natyres.","rule.golden.tip1":"Ndan imazhin afersisht 62% me 38%","rule.golden.tip2":"M\u00eb harmonik se rregulli i t\u00eb tretave","rule.golden.tip3":"Gjendet kudo n\u00eb natyr\u00eb (guaska, lule)",
+"rule.leading.name":"Vijat Udh\u00ebzuese","rule.leading.desc":"Vijat natyrale udh\u00ebzojn\u00eb shikimin e v\u00ebzhguesit te motivi kryesor.","rule.leading.tip1":"P\u00ebrdorni rruge, lumenj, gardhe si vija","rule.leading.tip2":"Vijat duhet t\u00eb \u00e7ojn\u00eb brenda imazhit","rule.leading.tip3":"Vijat konvergjente krijojn\u00eb thell\u00ebsi",
+"rule.symmetry.name":"Simetria & Motivet","rule.symmetry.desc":"Kompozicionet simetrike rrezatojn\u00eb qet\u00ebsi dhe perfekcion.","rule.symmetry.tip1":"Pasqyrimet n\u00eb uj\u00eb perfekte p\u00ebr simetri","rule.symmetry.tip2":"Arkitektura ofron simetri natyrale","rule.symmetry.tip3":"Thyerja e qellimshme e simetrise si element stili",
+"rule.framing.name":"Korniza Natyrale","rule.framing.desc":"P\u00ebrdorni elemente t\u00eb sken\u00ebs p\u00ebr t\u00eb kornizuar motivin.","rule.framing.tip1":"Harqe, dritare, deg\u00eb si korniza","rule.framing.tip2":"Drejton v\u00ebmendjen te motivi kryesor","rule.framing.tip3":"Krijon thell\u00ebsi dhe kontekst",
+"rule.negative.name":"Hap\u00ebsira Negative","rule.negative.desc":"Hap\u00ebsira bosh rreth motivit krijon ndikim dhe dramatizm.","rule.negative.tip1":"M\u00eb pak \u00ebsht\u00eb m\u00eb shum\u00eb \u2013 p\u00ebrdorni minimalizmin","rule.negative.tip2":"Jepini motivit hap\u00ebsir\u00eb p\u00ebr t\u00eb marr\u00eb frym\u00eb","rule.negative.tip3":"Ve\u00e7an\u00ebrisht efektive n\u00eb portrete",
+"rule.diagonal.name":"Diagonalet","rule.diagonal.desc":"Vijat diagonale krijojn\u00eb dinamizm\u00eb dhe tension n\u00eb imazh.","rule.diagonal.tip1":"Nga k\u00ebndi n\u00eb k\u00ebnd p\u00ebr dinamizm\u00eb maksimale","rule.diagonal.tip2":"P\u00ebrdorni perspektiva t\u00eb pjerrta","rule.diagonal.tip3":"Drejtimi i l\u00ebvizjes p\u00ebrgjat\u00eb diagonales",
+"rule.color.name":"Teoria e Ngjyrave","rule.color.desc":"Ngjyrat plot\u00ebsuese dhe harmonit\u00eb p\u00ebr ndikim t\u00eb fort\u00eb vizual.","rule.color.tip1":"Ngjyra plot\u00ebsuese p\u00ebr kontrast (blu/portokalli)","rule.color.tip2":"Ngjyra analoge p\u00ebr harmoni","rule.color.tip3":"Ngjyra t\u00eb ngrohta p\u00ebrpara, t\u00eb ftohta n\u00eb sfond",
+"motif.portrait.title":"Fotografia e Portretit","motif.portrait.desc":"Paraqitja perfekte e njer\u00ebzve dhe fytyrave.","motif.landscape.title":"Fotografia e Peizazhit","motif.landscape.desc":"Kapja e peizazheve t\u00eb gjera dhe skenave natyrale.","motif.street.title":"Fotografia e Rrug\u00ebs","motif.street.desc":"Dokumentimi autentik i jet\u00ebs n\u00eb rrug\u00eb.","motif.macro.title":"Makrofotografia","motif.macro.desc":"Paraqitja e gjerave t\u00eb vogla n\u00eb madh\u00ebsi.","motif.night.title":"Fotografia e Nat\u00ebs","motif.night.desc":"Yjet, dritat e qytetit dhe skenat e nat\u00ebs.","motif.sport.title":"Fotografia Sportive","motif.sport.desc":"Ngrirja e l\u00ebvizjeve t\u00eb shpejta dhe aksionit.","motif.architecture.title":"Fotografia e Arkitektur\u00ebs","motif.architecture.desc":"Nd\u00ebrtesat dhe strukturat n\u00eb perfekcion.","motif.wildlife.title":"Fotografia e Kafsh\u00ebve","motif.wildlife.desc":"Kafsh\u00ebt n\u00eb habitatin e tyre natyral.",
+"motif.setting.lens":"Thjerrza","motif.setting.aperture":"Hap\u00ebsira","motif.setting.iso":"ISO","motif.setting.shutter":"Shkrepja",
+"nav.simtools":"Simulimi","sim.tag":"Simulimi","sim.title":"Foto-Simulime","sim.desc":"Simuloni efekte t\u00eb ndryshme fotografike n\u00eb koh\u00eb reale.",
+"sim.bokeh":"Bokeh","sim.longexp":"Ekspozim i Gjat\u00eb","sim.wb":"Balanca e Bardh\u00ebs","sim.noise":"Zhurma ISO","sim.perspective":"Perspektiva","sim.histogram":"Histogrami",
+"sim.bokeh.title":"Simulatori i Bokeh-ut","sim.bokeh.info":"Shikoni si ndryshon bokeh-u me hap\u00ebsir\u00eb dhe gjat\u00ebsi fokale t\u00eb ndryshme.","sim.bokeh.blades":"Fleta t\u00eb Hap\u00ebsir\u00ebs","sim.bokeh.intensity":"Intensiteti i Bokeh-ut",
+"sim.longexp.title":"Simulatori i Ekspozimit t\u00eb Gjat\u00eb","sim.longexp.info":"Shikoni efektin e koheve t\u00eb ndryshme t\u00eb ekspozimit n\u00eb l\u00ebvizje.","sim.longexp.speed":"Shpejt\u00ebsia e L\u00ebvizjes","sim.longexp.time":"Koha e Ekspozimit (s)",
+"sim.wb.title":"Simulatori i Balanc\u00ebs s\u00eb Bardh\u00ebs","sim.wb.info":"Shikoni si ndikon temperatura e ngjyr\u00ebs n\u00eb imazhin tuaj.","sim.wb.kelvin":"Temperatura (K)","sim.wb.tint":"Nuanc\u00eb",
+"sim.noise.title":"Simulatori i Zhurm\u00ebs ISO","sim.noise.info":"Shikoni si rritet zhurma dixhitale me vlera m\u00eb t\u00eb larta ISO.","sim.noise.level":"Niveli i Zhurm\u00ebs",
+"sim.perspective.title":"Simulatori i Perspektiv\u00ebs","sim.perspective.info":"Shikoni si ndikon gjat\u00ebsia fokale n\u00eb perspektiv\u00eb.","sim.perspective.type":"Tipi i Deformimit",
+"sim.histogram.title":"Simulatori i Histogramit","sim.histogram.info":"Shikoni histogramin bazuar n\u00eb cil\u00ebsimet e ekspozimit."
+},
+
+/* ===== T\u00dcRK\u00c7E ===== */
+tr: {
+"nav.lens":"Lens Hesaplay\u0131c\u0131","nav.composition":"Kompozisyon","nav.motif":"Konu Tan\u0131ma","nav.exposure":"Pozlama","nav.quiz":"Quiz",
+"hero.welcome":"Ho\u015f Geldiniz","hero.desc":"En kapsaml\u0131 foto\u011fraf\u00e7\u0131l\u0131k ara\u00e7 setiniz. Lens hesaplamalar\u0131, kompozisyon kurallar\u0131, konu tan\u0131ma ve interaktif quizler \u2014 hepsi bir arada.","hero.calculators":"Hesaplay\u0131c\u0131lar","hero.rules":"Kurallar","hero.questions":"Quiz Sorular\u0131","hero.cta":"Ba\u015fla",
+"lens.tag":"Ara\u00e7lar","lens.title":"Lens Hesaplay\u0131c\u0131","lens.desc":"Alan derinli\u011fi, g\u00f6r\u00fc\u015f a\u00e7\u0131s\u0131, crop fakt\u00f6r\u00fc ve daha fazlas\u0131n\u0131 hesaplay\u0131n.","lens.tab.dof":"Alan Derinli\u011fi (DOF)","lens.tab.fov":"G\u00f6r\u00fc\u015f A\u00e7\u0131s\u0131 (FOV)","lens.tab.crop":"Crop Fakt\u00f6r\u00fc","lens.tab.hyper":"Hiperfokal Mesafe","lens.tab.flash":"Fla\u015f Menzili","lens.tab.mag":"B\u00fcy\u00fctme",
+"calc.focal":"Odak Uzakl\u0131\u011f\u0131 (mm)","calc.aperture":"Diyafram (f/)","calc.sensor":"Sens\u00f6r Boyutu","calc.calculate":"Hesapla","calc.results":"Sonu\u00e7lar",
+"dof.title":"Alan Derinli\u011fi Hesapla","dof.info":"Alan derinli\u011fi (DOF), g\u00f6r\u00fcnt\u00fcde net g\u00f6r\u00fcnen alan\u0131 tan\u0131mlar.","dof.distance":"Konuya Mesafe (m)","dof.total":"Alan Derinli\u011fi","dof.near":"Yak\u0131n Nokta","dof.far":"Uzak Nokta","dof.coc":"Bulan\u0131kl\u0131k \u00c7emberi",
+"fov.title":"G\u00f6r\u00fc\u015f A\u00e7\u0131s\u0131 Hesapla","fov.info":"G\u00f6r\u00fc\u015f a\u00e7\u0131s\u0131 kameran\u0131n ne kadar sahne yakalad\u0131\u011f\u0131n\u0131 belirler.","fov.horizontal":"Yatay G\u00f6r\u00fc\u015f A\u00e7\u0131s\u0131","fov.vertical":"Dikey G\u00f6r\u00fc\u015f A\u00e7\u0131s\u0131","fov.diagonal":"\u00c7apraz G\u00f6r\u00fc\u015f A\u00e7\u0131s\u0131","fov.lenstype":"Lens T\u00fcr\u00fc",
+"crop.title":"Crop Fakt\u00f6r\u00fc Hesapla","crop.info":"Crop fakt\u00f6r\u00fc, tam kareye k\u0131yasla e\u015fde\u011fer g\u00f6r\u00fcn\u00fcm\u00fc g\u00f6sterir.","crop.lensfocal":"Lens Odak Uzakl\u0131\u011f\u0131 (mm)","crop.lensaperture":"Lens Diyafram\u0131 (f/)","crop.camerasensor":"Kamera Sens\u00f6r\u00fc","crop.equivfocal":"E\u015fde\u011fer Odak Uzakl\u0131\u011f\u0131 (FF)","crop.equivaperture":"E\u015fde\u011fer Diyafram (FF)","crop.factor":"Crop Fakt\u00f6r\u00fc","crop.fullframe":"Tam Kare",
+"hyper.title":"Hiperfokal Mesafe","hyper.info":"Her \u015feyin sonsuza kadar net g\u00f6r\u00fcnd\u00fc\u011f\u00fc mesafe.","hyper.distance":"Hiperfokal Mesafe","hyper.near":"Yak\u0131n Nokta (H'ye odaklanma)","hyper.tiplabel":"\u0130pucu","hyper.tip":"Maksimum netlik i\u00e7in hiperfokal mesafeye odaklan\u0131n.",
+"flash.title":"Fla\u015f Menzili","flash.info":"K\u0131lavuz say\u0131s\u0131na g\u00f6re maksimum fla\u015f menzilini hesaplay\u0131n.","flash.gn":"K\u0131lavuz Say\u0131s\u0131 (GN)","flash.maxrange":"Maksimum Menzil","flash.at100":"ISO 100'de",
+"mag.title":"B\u00fcy\u00fctme","mag.info":"Makro foto\u011fraf\u00e7\u0131l\u0131k i\u00e7in b\u00fcy\u00fctme oran\u0131n\u0131 hesaplay\u0131n.","mag.mindist":"Min. Odaklama Mesafesi (cm)","mag.sensorwidth":"Sens\u00f6r Geni\u015fli\u011fi (mm)","mag.ratio":"B\u00fcy\u00fctme Oran\u0131","mag.field":"Yakalanan Alan (Geni\u015flik)","mag.macro":"Makro Yetene\u011fi",
+"comp.tag":"Kompozisyon","comp.title":"Foto\u011fraf Kurallar\u0131","comp.desc":"Etkileyici foto\u011fraflar i\u00e7in en \u00f6nemli kompozisyon kurallar\u0131n\u0131 \u00f6\u011frenin.","comp.demo":"Demo G\u00f6ster",
+"motif.tag":"Konu Tan\u0131ma","motif.title":"Konu Tan\u0131ma & T\u00fcrler","motif.desc":"Farkl\u0131 foto\u011fraf t\u00fcrlerini ve optimal ayarlar\u0131n\u0131 \u00f6\u011frenin.","motif.all":"T\u00fcm\u00fc","motif.portrait":"Portre","motif.landscape":"Manzara","motif.street":"Sokak","motif.macro":"Makro","motif.night":"Gece","motif.sport":"Spor","motif.architecture":"Mimari","motif.wildlife":"Do\u011fa",
+"exp.tag":"Temel Bilgiler","exp.title":"Pozlama \u00dc\u00e7geni","exp.desc":"Diyafram, enstantane ve ISO aras\u0131ndaki etkile\u015fimi anlay\u0131n.","exp.aperture":"Diyafram","exp.shutter":"Enstantane","exp.aperture.mid":"Orta diyafram \u2013 netlik ve \u0131\u015f\u0131k aras\u0131nda iyi uzla\u015fma.","exp.shutter.mid":"Standart enstantane \u2013 \u00e7o\u011fu hareketi dondurur.","exp.iso.low":"D\u00fc\u015f\u00fck ISO \u2013 minimum g\u00fcr\u00fclt\u00fc, en iyi kalite.","exp.correct":"Do\u011fru Pozlama","exp.under":"Az Pozlanm\u0131\u015f","exp.over":"Fazla Pozlanm\u0131\u015f","exp.slightunder":"Hafif az pozlanm\u0131\u015f","exp.slightover":"Hafif fazla pozlanm\u0131\u015f",
+"quiz.tag":"Bilgi Testi","quiz.title":"Foto\u011fraf Quiz'i","quiz.desc":"T\u00fcm konularda interaktif sorularla bilginizi test edin.","quiz.all":"T\u00fcm Konular","quiz.basics":"Temel","quiz.composition":"Kompozisyon","quiz.lenses":"Lensler","quiz.exposure":"Pozlama","quiz.genres":"T\u00fcrler","quiz.ready":"Quiz'e Haz\u0131r m\u0131s\u0131n\u0131z?","quiz.choose":"Bir kategori se\u00e7in ve bilginizi test edin!","quiz.info":"Tur ba\u015f\u0131na 10 soru \u2022 \u00c7oktan se\u00e7meli \u2022 Anl\u0131k geri bildirim","quiz.start":"Quiz'e Ba\u015fla","quiz.next":"Sonraki Soru","quiz.finished":"Quiz Tamamland\u0131!","quiz.playagain":"Tekrar Oyna","quiz.review":"Cevaplar\u0131 G\u00f6r","quiz.score":"Puan","quiz.resulttext":"{1} sorudan {0} tanesini do\u011fru yan\u0131tlad\u0131n\u0131z.","quiz.excellent":"M\u00fckemmel! Foto\u011fraf\u00e7\u0131l\u0131k ustas\u0131s\u0131n\u0131z!","quiz.good":"Aferin! Sa\u011flam bilgi!","quiz.ok":"Fena de\u011fil! Pratik yapmaya devam edin!","quiz.needwork":"Geli\u015ftirmeye yer var! Temelleri tekrarlay\u0131n.",
+"footer.brand":"\u00dccretsiz foto\u011fraf\u00e7\u0131l\u0131k ara\u00e7 setiniz.","footer.tools":"Ara\u00e7lar","footer.calcs":"Hesaplay\u0131c\u0131lar","footer.comprules":"Kompozisyon Kurallar\u0131","footer.exptriangle":"Pozlama \u00dc\u00e7geni","footer.copy":"\u00a9 2026 PhotoPro Tools \u2014 Foto\u011fraf\u00e7\u0131l\u0131k tutkusuyla yap\u0131ld\u0131.",
+"sensor.ff":"Tam Kare (36x24mm)","sensor.apsc":"APS-C (23.5x15.6mm)","sensor.apsc_canon":"APS-C Canon (22.3x14.9mm)","sensor.m43":"Micro 4/3 (17.3x13mm)","sensor.1inch":"1 In\u00e7 (13.2x8.8mm)","sensor.small":"1/2.3 In\u00e7 (6.17x4.55mm)","sensor.ff_short":"Tam Kare","sensor.apsc_short":"APS-C","sensor.m43_short":"Micro 4/3","sensor.ff_1x":"Tam Kare (1.0x)","sensor.apsc_nikon":"APS-C Nikon/Sony (1.5x)","sensor.apsc_canon_1_6":"APS-C Canon (1.6x)","sensor.m43_2x":"Micro 4/3 (2.0x)","sensor.1inch_2_7":"1 In\u00e7 (2.7x)","sensor.small_5_6":"1/2.3 In\u00e7 (5.6x)",
+"lenstype.superwide":"S\u00fcper Geni\u015f A\u00e7\u0131","lenstype.wide":"Geni\u015f A\u00e7\u0131","lenstype.normal":"Normal Lens","lenstype.tele":"Telefoto","lenstype.supertele":"S\u00fcper Telefoto",
+"macro.true":"Ger\u00e7ek Makro (1:1+)","macro.half":"Yar\u0131m Makro (~1:2)","macro.close":"Yak\u0131n \u00c7ekim","macro.no":"Makro De\u011fil",
+"rule.thirds.name":"\u00dc\u00e7ler Kural\u0131","rule.thirds.desc":"G\u00f6r\u00fcnt\u00fcy\u00fc 9 e\u015fit par\u00e7aya b\u00f6l\u00fcn. Kilit \u00f6\u011feleri \u00e7izgilere veya kesi\u015fim noktalar\u0131na yerle\u015ftirin.","rule.thirds.tip1":"Ufku \u00fcst veya alt \u00fc\u00e7te bir \u00e7izgisine yerle\u015ftirin","rule.thirds.tip2":"Konunun g\u00f6zlerini \u00fcst kesi\u015fim noktalar\u0131na yerle\u015ftirin","rule.thirds.tip3":"Ana konuyu asla tam ortaya koymay\u0131n",
+"rule.golden.name":"Alt\u0131n Oran","rule.golden.desc":"1:1.618 oran\u0131 \u2013 do\u011fan\u0131n m\u00fckemmel oran\u0131.","rule.golden.tip1":"G\u00f6r\u00fcnt\u00fcy\u00fc yakla\u015f\u0131k %62 / %38 oran\u0131nda b\u00f6ler","rule.golden.tip2":"\u00dc\u00e7ler kural\u0131ndan daha uyumlu","rule.golden.tip3":"Do\u011fada her yerde bulunur (kabuklar, \u00e7i\u00e7ekler)",
+"rule.leading.name":"Y\u00f6nlendirici \u00c7izgiler","rule.leading.desc":"Do\u011fal \u00e7izgiler izleyicinin g\u00f6z\u00fcn\u00fc ana konuya y\u00f6nlendirir.","rule.leading.tip1":"Yollar\u0131, nehirleri, \u00e7itleri \u00e7izgi olarak kullan\u0131n","rule.leading.tip2":"\u00c7izgiler g\u00f6r\u00fcnt\u00fcn\u00fcn i\u00e7ine y\u00f6nlendirmeli","rule.leading.tip3":"Birle\u015fen \u00e7izgiler derinlik yarat\u0131r",
+"rule.symmetry.name":"Simetri & Desenler","rule.symmetry.desc":"Simetrik kompozisyonlar huzur ve m\u00fckemmellik yayar.","rule.symmetry.tip1":"Sudaki yans\u0131malar simetri i\u00e7in m\u00fckemmel","rule.symmetry.tip2":"Mimari do\u011fal simetri sunar","rule.symmetry.tip3":"Simetriyi bilin\u00e7li k\u0131rmak stil unsuru olarak",
+"rule.framing.name":"Do\u011fal \u00c7er\u00e7eveleme","rule.framing.desc":"Sahne unsurlar\u0131n\u0131 konuyu \u00e7er\u00e7evelemek i\u00e7in kullan\u0131n.","rule.framing.tip1":"Kemerler, pencereler, dallar \u00e7er\u00e7eve olarak","rule.framing.tip2":"Dikkati ana konuya y\u00f6nlendirir","rule.framing.tip3":"Derinlik ve ba\u011flam yarat\u0131r",
+"rule.negative.name":"Negatif Alan","rule.negative.desc":"Konunun etraf\u0131ndaki bo\u015f alan etki ve dramatizm yarat\u0131r.","rule.negative.tip1":"Az \u00e7oktur \u2013 minimalizmi kullan\u0131n","rule.negative.tip2":"Konuya nefes alacak alan verin","rule.negative.tip3":"\u00d6zellikle portrelerde etkili",
+"rule.diagonal.name":"Diyagonaller","rule.diagonal.desc":"Diyagonal \u00e7izgiler g\u00f6r\u00fcnt\u00fcde dinamizm ve gerilim yarat\u0131r.","rule.diagonal.tip1":"K\u00f6\u015feden k\u00f6\u015feye maksimum dinamizm","rule.diagonal.tip2":"E\u011fik perspektifler kullan\u0131n","rule.diagonal.tip3":"Hareket y\u00f6n\u00fc diyagonal boyunca",
+"rule.color.name":"Renk Teorisi","rule.color.desc":"Tamamlay\u0131c\u0131 renkler ve renk uyumlar\u0131 g\u00fc\u00e7l\u00fc g\u00f6rsel etki i\u00e7in.","rule.color.tip1":"Tamamlay\u0131c\u0131 renkler kontrast i\u00e7in (mavi/turuncu)","rule.color.tip2":"Benzer renkler uyum i\u00e7in","rule.color.tip3":"S\u0131cak renkler \u00f6n planda, so\u011fuk renkler arka planda",
+"motif.portrait.title":"Portre Foto\u011fraf\u00e7\u0131l\u0131\u011f\u0131","motif.portrait.desc":"\u0130nsanlar\u0131 ve y\u00fczleri m\u00fckemmel yakala.","motif.landscape.title":"Manzara Foto\u011fraf\u00e7\u0131l\u0131\u011f\u0131","motif.landscape.desc":"Geni\u015f manzaralar\u0131 ve do\u011fa sahnelerini yakala.","motif.street.title":"Sokak Foto\u011fraf\u00e7\u0131l\u0131\u011f\u0131","motif.street.desc":"Sokak ya\u015fam\u0131n\u0131 otantik olarak belgele.","motif.macro.title":"Makro Foto\u011fraf\u00e7\u0131l\u0131k","motif.macro.desc":"K\u00fc\u00e7\u00fck \u015feyleri b\u00fcy\u00fck g\u00f6ster.","motif.night.title":"Gece Foto\u011fraf\u00e7\u0131l\u0131\u011f\u0131","motif.night.desc":"Y\u0131ld\u0131zlar, \u015fehir \u0131\u015f\u0131klar\u0131 ve gece sahneleri.","motif.sport.title":"Spor Foto\u011fraf\u00e7\u0131l\u0131\u011f\u0131","motif.sport.desc":"H\u0131zl\u0131 hareketleri ve aksiyonu dondur.","motif.architecture.title":"Mimari Foto\u011fraf\u00e7\u0131l\u0131k","motif.architecture.desc":"Binalar ve yap\u0131lar m\u00fckemmellikte.","motif.wildlife.title":"Do\u011fa Foto\u011fraf\u00e7\u0131l\u0131\u011f\u0131","motif.wildlife.desc":"Hayvanlar do\u011fal ya\u015fam alanlar\u0131nda.",
+"motif.setting.lens":"Lens","motif.setting.aperture":"Diyafram","motif.setting.iso":"ISO","motif.setting.shutter":"Enstantane",
+"nav.simtools":"Sim\u00fclasyon","sim.tag":"Sim\u00fclasyon","sim.title":"Foto Sim\u00fclasyonlar\u0131","sim.desc":"Farkl\u0131 foto\u011fraf efektlerini ger\u00e7ek zamanl\u0131 sim\u00fcle edin.",
+"sim.bokeh":"Bokeh","sim.longexp":"Uzun Pozlama","sim.wb":"Beyaz Dengesi","sim.noise":"ISO G\u00fcr\u00fclt\u00fc","sim.perspective":"Perspektif","sim.histogram":"Histogram",
+"sim.bokeh.title":"Bokeh Sim\u00fclat\u00f6r\u00fc","sim.bokeh.info":"Farkl\u0131 diyafram ve odak uzakl\u0131klar\u0131yla bokeh'in nas\u0131l de\u011fi\u015fti\u011fini g\u00f6r\u00fcn.","sim.bokeh.blades":"Diyafram Kanatlar\u0131","sim.bokeh.intensity":"Bokeh Yo\u011funlu\u011fu",
+"sim.longexp.title":"Uzun Pozlama Sim\u00fclat\u00f6r\u00fc","sim.longexp.info":"Farkl\u0131 pozlama s\u00fcrelerinin hareketli nesneler \u00fczerindeki etkisini g\u00f6r\u00fcn.","sim.longexp.speed":"Hareket H\u0131z\u0131","sim.longexp.time":"Pozlama S\u00fcresi (s)",
+"sim.wb.title":"Beyaz Dengesi Sim\u00fclat\u00f6r\u00fc","sim.wb.info":"Renk s\u0131cakl\u0131\u011f\u0131n\u0131n g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc nas\u0131l etkiledi\u011fini g\u00f6r\u00fcn.","sim.wb.kelvin":"S\u0131cakl\u0131k (K)","sim.wb.tint":"Ton",
+"sim.noise.title":"ISO G\u00fcr\u00fclt\u00fc Sim\u00fclat\u00f6r\u00fc","sim.noise.info":"Y\u00fcksek ISO de\u011ferlerinde dijital g\u00fcr\u00fclt\u00fcn\u00fcn nas\u0131l artt\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcn.","sim.noise.level":"G\u00fcr\u00fclt\u00fc Seviyesi",
+"sim.perspective.title":"Perspektif Sim\u00fclat\u00f6r\u00fc","sim.perspective.info":"Odak uzakl\u0131\u011f\u0131n\u0131n perspektifi nas\u0131l etkiledi\u011fini g\u00f6r\u00fcn.","sim.perspective.type":"Deformasyon Tipi",
+"sim.histogram.title":"Histogram Sim\u00fclat\u00f6r\u00fc","sim.histogram.info":"Pozlama ayarlar\u0131na g\u00f6re histograma bak\u0131n."
+},
+
+/* ===== SVENSKA ===== */
+sv: {
+"nav.lens":"Linskalkylator","nav.composition":"Komposition","nav.motif":"Motivigenk\u00e4nning","nav.exposure":"Exponering","nav.quiz":"Quiz",
+"hero.welcome":"V\u00e4lkommen till","hero.desc":"Din ultimata fotoverktygsl\u00e5da. Linber\u00e4kningar, kompositionsregler, motivigenk\u00e4nning och interaktiva quiz \u2014 allt p\u00e5 ett st\u00e4lle.","hero.calculators":"Kalkylatorer","hero.rules":"Regler","hero.questions":"Quizfr\u00e5gor","hero.cta":"Kom ig\u00e5ng",
+"lens.tag":"Verktyg","lens.title":"Linskalkylator","lens.desc":"Ber\u00e4kna sk\u00e4rpedjup, bildvinkel, cropfaktor och mer.","lens.tab.dof":"Sk\u00e4rpedjup (DOF)","lens.tab.fov":"Bildvinkel (FOV)","lens.tab.crop":"Cropfaktor","lens.tab.hyper":"Hyperfokal Distans","lens.tab.flash":"Blixtens R\u00e4ckvidd","lens.tab.mag":"F\u00f6rstoring",
+"calc.focal":"Br\u00e4nnvidd (mm)","calc.aperture":"Bl\u00e4ndare (f/)","calc.sensor":"Sensorstorlek","calc.calculate":"Ber\u00e4kna","calc.results":"Resultat",
+"dof.title":"Ber\u00e4kna Sk\u00e4rpedjup","dof.info":"Sk\u00e4rpedjupet beskriver det omr\u00e5de som framst\u00e5r skarpt i bilden.","dof.distance":"Avst\u00e5nd till Motivet (m)","dof.total":"Sk\u00e4rpedjup","dof.near":"N\u00e4rpunkt","dof.far":"Fj\u00e4rrpunkt","dof.coc":"F\u00f6rvirringscirkel",
+"fov.title":"Ber\u00e4kna Bildvinkel","fov.info":"Bildvinkeln avg\u00f6r hur mycket av scenen kameran f\u00e5ngar.","fov.horizontal":"Horisontell Bildvinkel","fov.vertical":"Vertikal Bildvinkel","fov.diagonal":"Diagonal Bildvinkel","fov.lenstype":"Linstyp",
+"crop.title":"Ber\u00e4kna Cropfaktor","crop.info":"Cropfaktorn visar motsvarande utsnitt j\u00e4mf\u00f6rt med fullformat.","crop.lensfocal":"Objektivets Br\u00e4nnvidd (mm)","crop.lensaperture":"Objektivets Bl\u00e4ndare (f/)","crop.camerasensor":"Kamerasensor","crop.equivfocal":"Motsvarande Br\u00e4nnvidd (FF)","crop.equivaperture":"Motsvarande Bl\u00e4ndare (FF)","crop.factor":"Cropfaktor","crop.fullframe":"Fullformat",
+"hyper.title":"Hyperfokal Distans","hyper.info":"Avst\u00e5ndet d\u00e4r allt fr\u00e5n halva avst\u00e5ndet till o\u00e4ndligheten \u00e4r skarpt.","hyper.distance":"Hyperfokal Distans","hyper.near":"N\u00e4rpunkt (fokus p\u00e5 H)","hyper.tiplabel":"Tips","hyper.tip":"Fokusera p\u00e5 hyperfokala distansen f\u00f6r maximal sk\u00e4rpa.",
+"flash.title":"Blixtens R\u00e4ckvidd","flash.info":"Ber\u00e4kna maximal blixtr\u00e4ckvidd baserat p\u00e5 ledsiffra.","flash.gn":"Ledsiffra (GN)","flash.maxrange":"Maximal R\u00e4ckvidd","flash.at100":"Vid ISO 100",
+"mag.title":"F\u00f6rstoring","mag.info":"Ber\u00e4kna f\u00f6rstoringsf\u00f6rh\u00e5llandet f\u00f6r makrofotografi.","mag.mindist":"Min. Fokusavst\u00e5nd (cm)","mag.sensorwidth":"Sensorbredd (mm)","mag.ratio":"F\u00f6rstoringsf\u00f6rh\u00e5llande","mag.field":"F\u00e5ngat F\u00e4lt (Bredd)","mag.macro":"Makrof\u00f6rm\u00e5ga",
+"comp.tag":"Komposition","comp.title":"Fotoregler","comp.desc":"Beh\u00e4rska de viktigaste kompositionsreglerna f\u00f6r fantastiska bilder.","comp.demo":"Visa Demo",
+"motif.tag":"Motivigenk\u00e4nning","motif.title":"Motivigenk\u00e4nning & Genrer","motif.desc":"L\u00e4r dig olika fotogenrer och deras optimala inst\u00e4llningar.","motif.all":"Alla","motif.portrait":"Portr\u00e4tt","motif.landscape":"Landskap","motif.street":"Gata","motif.macro":"Makro","motif.night":"Natt","motif.sport":"Sport","motif.architecture":"Arkitektur","motif.wildlife":"Vilt",
+"exp.tag":"Grunder","exp.title":"Exponerings\u00adtriangeln","exp.desc":"F\u00f6rst\u00e5 samspelet mellan bl\u00e4ndare, slutartid och ISO.","exp.aperture":"Bl\u00e4ndare","exp.shutter":"Slutartid","exp.aperture.mid":"Mellanbl\u00e4ndare \u2013 bra kompromiss mellan sk\u00e4rpa och ljus.","exp.shutter.mid":"Standardslutar\u00adtid \u2013 fryser de flesta r\u00f6relser.","exp.iso.low":"L\u00e5gt ISO \u2013 minimalt brus, b\u00e4sta kvalitet.","exp.correct":"Korrekt Exponering","exp.under":"Underexponerad","exp.over":"\u00d6verexponerad","exp.slightunder":"Lite underexponerad","exp.slightover":"Lite \u00f6verexponerad",
+"quiz.tag":"Kunskapskontroll","quiz.title":"Fotoquiz","quiz.desc":"Testa dina kunskaper med interaktiva fr\u00e5gor.","quiz.all":"Alla \u00c4mnen","quiz.basics":"Grunder","quiz.composition":"Komposition","quiz.lenses":"Objektiv","quiz.exposure":"Exponering","quiz.genres":"Genrer","quiz.ready":"Redo f\u00f6r Quiz?","quiz.choose":"V\u00e4lj en kategori och testa dina kunskaper!","quiz.info":"10 fr\u00e5gor per runda \u2022 Flerval \u2022 Omedelbar feedback","quiz.start":"Starta Quiz","quiz.next":"N\u00e4sta Fr\u00e5ga","quiz.finished":"Quiz Klar!","quiz.playagain":"Spela Igen","quiz.review":"Granska Svar","quiz.score":"Po\u00e4ng","quiz.resulttext":"Du svarade r\u00e4tt p\u00e5 {0} av {1} fr\u00e5gor.","quiz.excellent":"Utm\u00e4rkt! Du \u00e4r ett fotoprofs!","quiz.good":"Bra gjort! Solid kunskap!","quiz.ok":"Inte d\u00e5ligt! Forts\u00e4tt \u00f6va!","quiz.needwork":"Utrymme f\u00f6r f\u00f6rb\u00e4ttring! Repetera grunderna.",
+"footer.brand":"Din gratis fotoverktygsl\u00e5da f\u00f6r b\u00e4ttre bilder.","footer.tools":"Verktyg","footer.calcs":"Kalkylatorer","footer.comprules":"Kompositionsregler","footer.exptriangle":"Exponerings\u00adtriangeln","footer.copy":"\u00a9 2026 PhotoPro Tools \u2014 Skapat med passion f\u00f6r fotografi.",
+"sensor.ff":"Fullformat (36x24mm)","sensor.apsc":"APS-C (23.5x15.6mm)","sensor.apsc_canon":"APS-C Canon (22.3x14.9mm)","sensor.m43":"Micro 4/3 (17.3x13mm)","sensor.1inch":"1 Tum (13.2x8.8mm)","sensor.small":"1/2.3 Tum (6.17x4.55mm)","sensor.ff_short":"Fullformat","sensor.apsc_short":"APS-C","sensor.m43_short":"Micro 4/3","sensor.ff_1x":"Fullformat (1.0x)","sensor.apsc_nikon":"APS-C Nikon/Sony (1.5x)","sensor.apsc_canon_1_6":"APS-C Canon (1.6x)","sensor.m43_2x":"Micro 4/3 (2.0x)","sensor.1inch_2_7":"1 Tum (2.7x)","sensor.small_5_6":"1/2.3 Tum (5.6x)",
+"lenstype.superwide":"Supervidvinkel","lenstype.wide":"Vidvinkel","lenstype.normal":"Normalobjektiv","lenstype.tele":"Teleobjektiv","lenstype.supertele":"Superteleobjektiv",
+"macro.true":"\u00c4kta Makro (1:1+)","macro.half":"Halvmakro (~1:2)","macro.close":"N\u00e4rbild","macro.no":"Inte Makro",
+"rule.thirds.name":"Tredjedelsregeln","rule.thirds.desc":"Dela bilden i 9 lika delar. Placera viktiga element p\u00e5 linjerna eller sk\u00e4rningspunkterna.","rule.thirds.tip1":"Placera horisonten p\u00e5 \u00f6vre eller nedre tredjedelslinjen","rule.thirds.tip2":"Placera motivets \u00f6gon p\u00e5 \u00f6vre sk\u00e4rningspunkterna","rule.thirds.tip3":"Placera aldrig huvudmotivet exakt i mitten",
+"rule.golden.name":"Gyllene Snittet","rule.golden.desc":"F\u00f6rh\u00e5llandet 1:1.618 \u2013 naturens perfekta proportion.","rule.golden.tip1":"Delar bilden i ungef\u00e4r 62% / 38%","rule.golden.tip2":"Mer harmoniskt \u00e4n tredjedelsregeln","rule.golden.tip3":"Finns \u00f6verallt i naturen (snackor, blommor)",
+"rule.leading.name":"Ledande Linjer","rule.leading.desc":"Naturliga linjer leder betraktarens blick till huvudmotivet.","rule.leading.tip1":"Anv\u00e4nd v\u00e4gar, floder, staket som linjer","rule.leading.tip2":"Linjerna b\u00f6r leda in i bilden","rule.leading.tip3":"Konvergerande linjer skapar djup",
+"rule.symmetry.name":"Symmetri & M\u00f6nster","rule.symmetry.desc":"Symmetriska kompositioner utstrs\u00e5lar lugn och perfektion.","rule.symmetry.tip1":"Reflektioner i vatten perfekt f\u00f6r symmetri","rule.symmetry.tip2":"Arkitektur erbjuder naturlig symmetri","rule.symmetry.tip3":"Medvetet bryta symmetrin som stilgrepp",
+"rule.framing.name":"Naturlig Inramning","rule.framing.desc":"Anv\u00e4nd element i scenen f\u00f6r att rama in ditt motiv.","rule.framing.tip1":"B\u00e5gar, f\u00f6nster, grenar som ramar","rule.framing.tip2":"Styr uppm\u00e4rksamheten mot huvudmotivet","rule.framing.tip3":"Skapar djup och sammanhang",
+"rule.negative.name":"Negativt Utrymme","rule.negative.desc":"Tomt utrymme runt motivet skapar effekt och dramatik.","rule.negative.tip1":"Mindre \u00e4r mer \u2013 anv\u00e4nd minimalism","rule.negative.tip2":"Ge motivet utrymme att andas","rule.negative.tip3":"S\u00e4rskilt effektivt i portr\u00e4tt",
+"rule.diagonal.name":"Diagonaler","rule.diagonal.desc":"Diagonala linjer skapar dynamik och sp\u00e4nning i bilden.","rule.diagonal.tip1":"H\u00f6rn till h\u00f6rn f\u00f6r maximal dynamik","rule.diagonal.tip2":"Anv\u00e4nd lutande perspektiv","rule.diagonal.tip3":"R\u00f6relseriktning l\u00e4ngs diagonalen",
+"rule.color.name":"F\u00e4rgteori","rule.color.desc":"Komplement\u00e4rf\u00e4rger och f\u00e4rgharmonier f\u00f6r stark visuell effekt.","rule.color.tip1":"Komplement\u00e4rf\u00e4rger f\u00f6r kontrast (bl\u00e5/orange)","rule.color.tip2":"Analoga f\u00e4rger f\u00f6r harmoni","rule.color.tip3":"Varma f\u00e4rger i f\u00f6rgrunden, kalla i bakgrunden",
+"motif.portrait.title":"Portr\u00e4ttfotografi","motif.portrait.desc":"F\u00e5nga m\u00e4nniskor och ansikten perfekt.","motif.landscape.title":"Landskapsfotografi","motif.landscape.desc":"F\u00e5nga vida landskap och naturscener.","motif.street.title":"Gatufotografi","motif.street.desc":"Dokumentera gatulivet autentiskt.","motif.macro.title":"Makrofotografi","motif.macro.desc":"G\u00f6r sm\u00e5 saker stora.","motif.night.title":"Nattfotografi","motif.night.desc":"Stj\u00e4rnor, stadsljus och nattscener.","motif.sport.title":"Sportfotografi","motif.sport.desc":"Frys snabba r\u00f6relser och action.","motif.architecture.title":"Arkitekturfotografi","motif.architecture.desc":"Byggnader och strukturer i perfektion.","motif.wildlife.title":"Viltfotografi","motif.wildlife.desc":"Djur i deras naturliga milj\u00f6.",
+"motif.setting.lens":"Objektiv","motif.setting.aperture":"Bl\u00e4ndare","motif.setting.iso":"ISO","motif.setting.shutter":"Slutartid",
+"nav.simtools":"Simulering","sim.tag":"Simulering","sim.title":"Fotosimuleringar","sim.desc":"Simulera olika fotoeffekter i realtid.",
+"sim.bokeh":"Bokeh","sim.longexp":"L\u00e5ng Exponering","sim.wb":"Vitbalans","sim.noise":"ISO-brus","sim.perspective":"Perspektiv","sim.histogram":"Histogram",
+"sim.bokeh.title":"Bokeh-simulator","sim.bokeh.info":"Se hur bokeh f\u00f6r\u00e4ndras med olika bl\u00e4ndare och br\u00e4nnvidder.","sim.bokeh.blades":"Bl\u00e4ndarblad","sim.bokeh.intensity":"Bokeh-intensitet",
+"sim.longexp.title":"L\u00e5ngexponerings\u00adsimulator","sim.longexp.info":"Se effekten av olika exponeringstider p\u00e5 r\u00f6relse.","sim.longexp.speed":"R\u00f6relsehastighet","sim.longexp.time":"Exponeringstid (s)",
+"sim.wb.title":"Vitbalanssimulator","sim.wb.info":"Se hur f\u00e4rgtemperaturen p\u00e5verkar din bild.","sim.wb.kelvin":"Temperatur (K)","sim.wb.tint":"Nyans",
+"sim.noise.title":"ISO-brussimulator","sim.noise.info":"Se hur digitalt brus \u00f6kar med h\u00f6gre ISO-v\u00e4rden.","sim.noise.level":"Brusniv\u00e5",
+"sim.perspective.title":"Perspektivsimulator","sim.perspective.info":"Se hur br\u00e4nnvidden p\u00e5verkar perspektivet.","sim.perspective.type":"Distorsionstyp",
+"sim.histogram.title":"Histogramsimulator","sim.histogram.info":"Se histogrammet baserat p\u00e5 exponerings\u00adinst\u00e4llningar."
+}
+};
+
+/* ==================== i18n Functions ==================== */
+window.t = function(key) {
+ var lang = window.currentLang || 'de';
+ var tr = window.I18N[lang];
+ if (tr && tr[key] !== undefined) return tr[key];
+ if (window.I18N.de && window.I18N.de[key] !== undefined) return window.I18N.de[key];
+ return key;
+};
+
+window.setLanguage = function(lang) {
+ if (!window.I18N[lang]) return;
+ window.currentLang = lang;
+ try { localStorage.setItem('photopro-lang', lang); } catch(e) {}
+ document.documentElement.lang = lang;
+ // Update data-i18n elements
+ document.querySelectorAll('[data-i18n]').forEach(function(el) {
+ var key = el.getAttribute('data-i18n');
+ var val = t(key);
+ if (val !== key) el.textContent = val;
+ });
+ // Update data-i18n-opt elements (option elements)
+ document.querySelectorAll('[data-i18n-opt]').forEach(function(el) {
+ var key = el.getAttribute('data-i18n-opt');
+ var val = t(key);
+ if (val !== key) el.textContent = val;
+ });
+ // Update lang switcher button
+ var flag = document.getElementById('langFlag');
+ if (flag) flag.textContent = lang.toUpperCase();
+ // Update active state
+ document.querySelectorAll('.lang-option').forEach(function(btn) {
+ btn.classList.toggle('active', btn.getAttribute('data-lang') === lang);
+ });
+ // Dispatch event for dynamic content
+ document.dispatchEvent(new CustomEvent('languageChanged', { detail: { lang: lang }}));
+};
+
+// Init from localStorage
+(function() {
+ try {
+ var saved = localStorage.getItem('photopro-lang');
+ if (saved && window.I18N[saved]) window.currentLang = saved;
+ } catch(e) {}
+})();
+
+window.I18N_READY = true;