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 .= 'API Key (OpenWeatherMap, optional)'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + $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 + + + + + + + + + +
+
+
+
+
+

+ 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 +
+
+
+
+
+ + +
+
+
+ +

Linsenrechner

+

Berechne Scharfentiefe, Bildwinkel, Crop-Faktor und mehr.

+
+ +
+ + + + + + +
+ + +
+
+
+

Scharfentiefe berechnen

+

Die Scharfentiefe (Depth of Field) gibt den Bereich an, der im Bild scharf abgebildet wird.

+
+ + + +
+
+ + + +
+
+ + + +
+
+ + +
+ +
+
+

Ergebnisse

+
+
+ Scharfentiefe + -- +
+
+ Nahpunkt + -- +
+
+ Fernpunkt + -- +
+
+ Zerstreuungskreis + -- +
+
+
+
+
+
+
+
+ 0m + 5m + +
+
+
+
+
+ + +
+
+
+

Bildwinkel berechnen

+

Der Bildwinkel bestimmt, wie viel der Szene die Kamera erfasst.

+
+ + + +
+
+ + +
+ +
+
+

Ergebnisse

+
+
+ Horizontaler Bildwinkel + -- +
+
+ Vertikaler Bildwinkel + -- +
+
+ Diagonaler Bildwinkel + -- +
+
+ Objektivtyp + -- +
+
+
+ +
+
+
+
+ + +
+
+
+

Crop-Faktor berechnen

+

Der Crop-Faktor zeigt den äquivalenten Bildausschnitt im Vergleich zum Vollformat.

+
+ + +
+
+ + +
+
+ + +
+ +
+
+

Ergebnisse

+
+
+ Äquivalente Brennweite (KB) + -- +
+
+ Äquivalente Blende (KB) + -- +
+
+ Crop-Faktor + -- +
+
+
+
+ Vollformat +
+
+ APS-C +
+
+
+
+
+ + +
+
+
+

Hyperfokale Distanz

+

Die Entfernung, ab der alles bis unendlich scharf ist.

+
+ + +
+
+ + +
+
+ + +
+ +
+
+

Ergebnisse

+
+
+ Hyperfokale Distanz + -- +
+
+ Nahpunkt (bei Fokus auf H) + -- +
+
+ Tipp + Fokussiere auf die hyperfokale Distanz für maximale Schärfe. +
+
+
+
+
+ + +
+
+
+

Blitz-Reichweite

+

Berechne die maximale Blitzreichweite basierend auf Leitzahl und Einstellungen.

+
+ + +
+
+ + +
+
+ + +
+ +
+
+

Ergebnisse

+
+
+ Maximale Reichweite + -- +
+
+ Bei ISO 100 + -- +
+
+
+
+
+ + +
+
+
+

Abbildungsmassstab

+

Berechne den Abbildungsmassstab für Makrofotografie.

+
+ + +
+
+ + +
+
+ + +
+ +
+
+

Ergebnisse

+
+
+ Abbildungsmassstab + -- +
+
+ Erfasstes Feld (Breite) + -- +
+
+ Makro-Tauglichkeit + -- +
+
+
+
+
+
+
+ + +
+
+
+ +

Fotografie-Regeln

+

Beherrsche die wichtigsten Kompositionsregeln für beeindruckende Fotos.

+
+ +
+ +
+
+
+ + +
+
+
+ +

Motiverkennung & Genres

+

Lerne verschiedene Fotografie-Genres und ihre optimalen Einstellungen kennen.

+
+ +
+ +
+ +
+ +
+
+
+ + +
+
+
+ +

Belichtungsdreieck

+

Verstehe das Zusammenspiel von Blende, Verschlusszeit und ISO.

+
+ +
+
+ +
+
+
+
+

Blende (Aperture)

+ f/5.6 +
+ +
+ f/1.4f/2f/2.8f/4f/5.6f/8f/11f/16f/22f/32 +
+

Mittlere Blende – guter Kompromiss aus Schärfe und Licht.

+
+
+
+

Verschlusszeit (Shutter)

+ 1/125s +
+ +
+ 30s15s1s1/41/301/1251/2501/5001/10001/20001/40001/8000 +
+

Standard-Verschlusszeit – friert die meisten Bewegungen ein.

+
+
+
+

ISO

+ ISO 400 +
+ +
+ 1002004008001600320064001280025600 +
+

Niedriges ISO – minimales Rauschen, beste Qualität.

+
+
+
+
+
+
+
+ -3 EV-2-10+1+2+3 EV +
+
+

Korrekte Belichtung

+
+
+
+
+
+ + +
+
+
+ +

Fotografie-Quiz

+

Teste dein Wissen mit interaktiven Quizfragen zu allen Themen.

+
+ +
+ +
+ +
+
+
🎥
+

Bereit für das Quiz?

+

Wähle eine Kategorie und teste dein Fotografie-Wissen!

+

10 Fragen pro Runde • Multiple Choice • Sofortiges Feedback

+ +
+ + + + +
+
+
+ + +
+
+
+ +

Foto-Simulationen

+

Simuliere verschiedene Foto-Effekte in Echtzeit.

+
+ +
+ + + + + + +
+ + +
+
+
+

Bokeh-Simulator

+

Sieh wie sich Bokeh mit verschiedenen Blenden und Brennweiten verändert.

+
+ + + f/2.8 +
+
+ + + 7 +
+
+ + + 70% +
+
+
+ +
+
+
+ + +
+
+
+

Langzeitbelichtungs-Simulator

+

Sieh den Effekt verschiedener Belichtungszeiten auf Bewegung.

+
+ + + 1/4s +
+
+ + + 5 +
+
+
+ +
+
+
+ + +
+
+
+

Weißabgleich-Simulator

+

Sieh wie die Farbtemperatur dein Bild beeinflusst.

+
+ + + 5500K +
+
+ + + 0 +
+
+
+ +
+
+
+ + +
+
+
+

ISO-Rausch-Simulator

+

Sieh wie digitales Rauschen mit höheren ISO-Werten zunimmt.

+
+ + + ISO 400 +
+
+ + + 50% +
+
+
+ +
+
+
+ + +
+
+
+

Perspektiv-Simulator

+

Sieh wie die Brennweite die Perspektive beeinflusst.

+
+ + + 50mm +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+

Histogramm-Simulator

+

Sieh das Histogramm basierend auf Belichtungseinstellungen.

+
+ + + f/5.6 +
+
+ + + 1/125s +
+
+ + + ISO 400 +
+
+
+ +
+
+
+
+
+ + + + + + + + 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') + '
  • ' + + '
' + + '' + + '
'; + 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;