PageSourceSearch

https://tumerdem.nl/about/

html tumerdem.nl collected 2026-10-03 20:08:54 UTC 93,950 bytes, 963 lines download raw bytes

1<!DOCTYPE html><html lang="en" data-beasties-container><head>
2    <meta charset="utf-8">
3    <title>About Doğu Tümerdem — Senior Software Architect, Netherlands</title>
4    <base href="/">
5    <meta name="viewport" content="width=device-width, initial-scale=1">
6    <meta name="description" content="Senior software architect with 10+ years on business-critical systems — ASML, Canon, and public-sector clients in the Netherlands and Turkey. Based in Someren, Netherlands.">
7    <meta name="theme-color" content="#172554">
8    <link rel="icon" type="image/x-icon" href="favicon.ico">
9    <link rel="preconnect" href="https://fonts.googleapis.com">
10    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11    <style>@font-face{font-family:'Raleway';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCAIT5lu.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Raleway';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCkIT5lu.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Raleway';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCIIT5lu.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Raleway';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCMIT5lu.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Raleway';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyC0ITw.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Raleway';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCAIT5lu.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Raleway';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCkIT5lu.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Raleway';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCIIT5lu.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Raleway';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCMIT5lu.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Raleway';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyC0ITw.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Raleway';font-style:normal;font-weight:500;font-display:swap;
11src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCAIT5lu.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Raleway';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCkIT5lu.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Raleway';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCIIT5lu.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Raleway';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCMIT5lu.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Raleway';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyC0ITw.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Raleway';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCAIT5lu.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Raleway';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCkIT5lu.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Raleway';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCIIT5lu.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Raleway';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCMIT5lu.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Raleway';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyC0ITw.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Raleway';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCAIT5lu.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Raleway';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCkIT5lu.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Raleway';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCIIT5lu.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Raleway';font-style:normal;font-weight:700;font-display:swap;
11src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCMIT5lu.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Raleway';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyC0ITw.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}</style>
12    <style>@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialicons/v145/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');}.material-icons{font-family:'Material Icons';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;}</style>
13  <style>@font-face{font-family:Roboto Condensed;src:url(/fonts/RobotoCondensed-VariableFont_wght.ttf) format("truetype");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Roboto Condensed;src:url(/fonts/RobotoCondensed-Italic-VariableFont_wght.ttf) format("truetype");font-weight:100 900;font-style:italic;font-display:swap}:root{--paper: #ffffff;--ink: #162032;--text: #334155;--accent: #2470bc;--accent-strong: #2470bc;--highlight: #636363;--muted: #64748b;--surface: #f8fafc;--line: #e5e7eb;--ink-soft: #475569;--maxw: 1180px;--radius: 12px;--radius-lg: 16px;--ease: cubic-bezier(.2, .7, .2, 1);--font-display: "Raleway", system-ui, sans-serif;--font-body: "Raleway", system-ui, -apple-system, sans-serif;--font-wordmark: "Roboto Condensed", system-ui, sans-serif}html{height:100%;--mat-sys-background: light-dark(#fcf8fd, #131316);--mat-sys-error: light-dark(#ba1a1a, #ffb4ab);--mat-sys-error-container: light-dark(#ffdad6, #93000a);--mat-sys-inverse-on-surface: light-dark(#f3eff4, #303034);--mat-sys-inverse-primary: light-dark(#bec2ff, #343dff);--mat-sys-inverse-surface: light-dark(#303034, #e5e1e6);--mat-sys-on-background: light-dark(#1b1b1f, #e5e1e6);--mat-sys-on-error: light-dark(#ffffff, #690005);--mat-sys-on-error-container: light-dark(#93000a, #ffdad6);--mat-sys-on-primary: light-dark(#ffffff, #0001ac);--mat-sys-on-primary-container: light-dark(#0000ef, #e0e0ff);--mat-sys-on-primary-fixed: light-dark(#00006e, #00006e);--mat-sys-on-primary-fixed-variant: light-dark(#0000ef, #0000ef);--mat-sys-on-secondary: light-dark(#ffffff, #2e2f42);--mat-sys-on-secondary-container: light-dark(#444559, #e1e0f9);--mat-sys-on-secondary-fixed: light-dark(#191a2c, #191a2c);--mat-sys-on-secondary-fixed-variant: light-dark(#444559, #444559);--mat-sys-on-surface: light-dark(#1b1b1f, #e5e1e6);--mat-sys-on-surface-variant: light-dark(#46464f, #e4e1ec);--mat-sys-on-tertiary: light-dark(#ffffff, #0001ac);--mat-sys-on-tertiary-container: light-dark(#0000ef, #e0e0ff);--mat-sys-on-tertiary-fixed: light-dark(#00006e, #00006e);--mat-sys-on-tertiary-fixed-variant: light-dark(#0000ef, #0000ef);--mat-sys-outline: light-dark(#777680, #91909a);--mat-sys-outline-variant: light-dark(#c7c5d0, #46464f);--mat-sys-primary: light-dark(#343dff, #bec2ff);--mat-sys-primary-container: light-dark(#e0e0ff, #0000ef);--mat-sys-primary-fixed: light-dark(#e0e0ff, #e0e0ff);--mat-sys-primary-fixed-dim: light-dark(#bec2ff, #bec2ff);--mat-sys-scrim: light-dark(#000000, #000000);--mat-sys-secondary: light-dark(#5c5d72, #c5c4dd);--mat-sys-secondary-container: light-dark(#e1e0f9, #444559);--mat-sys-secondary-fixed: light-dark(#e1e0f9, #e1e0f9);--mat-sys-secondary-fixed-dim: light-dark(#c5c4dd, #c5c4dd);--mat-sys-shadow: light-dark(#000000, #000000);--mat-sys-surface: light-dark(#fcf8fd, #131316);--mat-sys-surface-bright: light-dark(#fcf8fd, #3a393c);--mat-sys-surface-container: light-dark(#f0edf1, #201f22);--mat-sys-surface-container-high: light-dark(#ebe7eb, #2a292d);--mat-sys-surface-container-highest: light-dark(#e5e1e6, #353438);--mat-sys-surface-container-low: light-dark(#f6f2f7, #1b1b1f);--mat-sys-surface-container-lowest: light-dark(#ffffff, #0e0e11);--mat-sys-surface-dim: light-dark(#dcd9dd, #131316);--mat-sys-surface-tint: light-dark(#343dff, #bec2ff);--mat-sys-surface-variant: light-dark(#e4e1ec, #46464f);--mat-sys-tertiary: light-dark(#343dff, #bec2ff);--mat-sys-tertiary-container: light-dark(#e0e0ff, #0000ef);--mat-sys-tertiary-fixed: light-dark(#e0e0ff, #e0e0ff);--mat-sys-tertiary-fixed-dim: light-dark(#bec2ff, #bec2ff);--mat-sys-neutral-variant20: #303038;--mat-sys-neutral10: #1b1b1f;--mat-sys-level0: 0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-sys-level1: 0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-sys-level2: 0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-sys-level3: 0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-sys-level4: 0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-sys-level5: 0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-sys-body-large: 400 1rem / 1.5rem Raleway;--mat-sys-body-large-font: Raleway;--mat-sys-body-large-line-height: 1.5rem;--mat-sys-body-large-size: 1rem;--mat-sys-body-large-tracking: .031rem;--mat-sys-body-large-weight: 400;--mat-sys-body-medium: 400 .875rem / 1.25rem Raleway;--mat-sys-body-medium-font: Raleway;--mat-sys-body-medium-line-height: 1.25rem;--mat-sys-body-medium-size: .875rem;--mat-sys-body-medium-tracking: .016rem;--mat-sys-body-medium-weight: 400;
13--mat-sys-body-small: 400 .75rem / 1rem Raleway;--mat-sys-body-small-font: Raleway;--mat-sys-body-small-line-height: 1rem;--mat-sys-body-small-size: .75rem;--mat-sys-body-small-tracking: .025rem;--mat-sys-body-small-weight: 400;--mat-sys-display-large: 400 3.562rem / 4rem Raleway;--mat-sys-display-large-font: Raleway;--mat-sys-display-large-line-height: 4rem;--mat-sys-display-large-size: 3.562rem;--mat-sys-display-large-tracking: -.016rem;--mat-sys-display-large-weight: 400;--mat-sys-display-medium: 400 2.812rem / 3.25rem Raleway;--mat-sys-display-medium-font: Raleway;--mat-sys-display-medium-line-height: 3.25rem;--mat-sys-display-medium-size: 2.812rem;--mat-sys-display-medium-tracking: 0;--mat-sys-display-medium-weight: 400;--mat-sys-display-small: 400 2.25rem / 2.75rem Raleway;--mat-sys-display-small-font: Raleway;--mat-sys-display-small-line-height: 2.75rem;--mat-sys-display-small-size: 2.25rem;--mat-sys-display-small-tracking: 0;--mat-sys-display-small-weight: 400;--mat-sys-headline-large: 400 2rem / 2.5rem Raleway;--mat-sys-headline-large-font: Raleway;--mat-sys-headline-large-line-height: 2.5rem;--mat-sys-headline-large-size: 2rem;--mat-sys-headline-large-tracking: 0;--mat-sys-headline-large-weight: 400;--mat-sys-headline-medium: 400 1.75rem / 2.25rem Raleway;--mat-sys-headline-medium-font: Raleway;--mat-sys-headline-medium-line-height: 2.25rem;--mat-sys-headline-medium-size: 1.75rem;--mat-sys-headline-medium-tracking: 0;--mat-sys-headline-medium-weight: 400;--mat-sys-headline-small: 400 1.5rem / 2rem Raleway;--mat-sys-headline-small-font: Raleway;--mat-sys-headline-small-line-height: 2rem;--mat-sys-headline-small-size: 1.5rem;--mat-sys-headline-small-tracking: 0;--mat-sys-headline-small-weight: 400;--mat-sys-label-large: 500 .875rem / 1.25rem Raleway;--mat-sys-label-large-font: Raleway;--mat-sys-label-large-line-height: 1.25rem;--mat-sys-label-large-size: .875rem;--mat-sys-label-large-tracking: .006rem;--mat-sys-label-large-weight: 500;--mat-sys-label-large-weight-prominent: 700;--mat-sys-label-medium: 500 .75rem / 1rem Raleway;--mat-sys-label-medium-font: Raleway;--mat-sys-label-medium-line-height: 1rem;--mat-sys-label-medium-size: .75rem;--mat-sys-label-medium-tracking: .031rem;--mat-sys-label-medium-weight: 500;--mat-sys-label-medium-weight-prominent: 700;--mat-sys-label-small: 500 .688rem / 1rem Raleway;--mat-sys-label-small-font: Raleway;--mat-sys-label-small-line-height: 1rem;--mat-sys-label-small-size: .688rem;--mat-sys-label-small-tracking: .031rem;--mat-sys-label-small-weight: 500;--mat-sys-title-large: 400 1.375rem / 1.75rem Raleway;--mat-sys-title-large-font: Raleway;--mat-sys-title-large-line-height: 1.75rem;--mat-sys-title-large-size: 1.375rem;--mat-sys-title-large-tracking: 0;--mat-sys-title-large-weight: 400;--mat-sys-title-medium: 500 1rem / 1.5rem Raleway;--mat-sys-title-medium-font: Raleway;--mat-sys-title-medium-line-height: 1.5rem;--mat-sys-title-medium-size: 1rem;--mat-sys-title-medium-tracking: .009rem;--mat-sys-title-medium-weight: 500;--mat-sys-title-small: 500 .875rem / 1.25rem Raleway;--mat-sys-title-small-font: Raleway;--mat-sys-title-small-line-height: 1.25rem;--mat-sys-title-small-size: .875rem;--mat-sys-title-small-tracking: .006rem;--mat-sys-title-small-weight: 500;--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px;--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12;--mat-sys-primary: var(--accent);--mat-sys-on-primary: #ffffff;--mat-sys-primary-container: #dbeafe;--mat-sys-on-primary-container: #162032;--mat-sys-surface: var(--paper);--mat-sys-on-surface: var(--ink);--mat-sys-surface-container: var(--surface);--mat-sys-surface-container-low: var(--surface);--mat-sys-surface-container-high: #eef2f7;--mat-sys-on-surface-variant: var(--ink-soft);--mat-sys-outline: var(--muted);--mat-sys-outline-variant: var(--line);--mat-sys-background: var(--paper);--mat-sys-on-background: var(--ink);--mat-sys-error: #b3261e;--mat-sys-corner-medium: 12px;--mat-sys-corner-large: 16px}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;min-height:100%;background-color:var(--paper);background-image:linear-gradient(#fff9,#fff9),url(/art/bg.jpg);background-size:cover;background-position:center;background-repeat:no-repeat;background-attachment:fixed;color:var(--text);font-family:var(--font-body);font-size:clamp(1rem,.96rem + .2vw,1.0625rem);line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3{font-family:var(--font-display);font-weight:700;line-height:1.15;letter-spacing:-.01em;color:var(--ink);margin:0 0 .6em}p{margin:0 0 1rem}a{color:var(--accent-strong);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}img{max-width:100%;display:block}.wrap{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:clamp(1.25rem,4vw,2.5rem)}section{opacity:.7}.section{padding-block:clamp(3rem,6vw,5.5rem)}.section--surface{background:var(--surface);border-block:1px solid var(--line)}.section--ink{background:var(--ink);color:var(--paper)}.section--ink h2{color:var(--paper)}.eyebrow{font-family:var(--font-display);display:inline-block;font-size:.8rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-strong);margin:0 0 1rem}.section-title{font-size:clamp(1.6rem,1.2rem + 1.4vw,2.25rem)}.lede{font-size:clamp(1.05rem,1rem + .4vw,1.2rem);color:var(--ink-soft);max-width:60ch}.btn{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-body);font-weight:600;font-size:1rem;line-height:1;border-radius:var(--radius);padding:.85rem 1.4rem;cursor:pointer;border:1px solid transparent;transition:background-color .15s var(--ease),color .15s var(--ease),border-color .15s var(--ease)}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-strong);text-decoration:none}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}}
14</style><link rel="stylesheet" href="styles-A2L6BSMD.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-A2L6BSMD.css"></noscript><style ng-app-id="ng">[_nghost-ng-c2623730230]{display:flex;flex-direction:column;min-height:100dvh}main[_ngcontent-ng-c2623730230]{flex:1 0 auto}.skip-link[_ngcontent-ng-c2623730230]{position:absolute;
14left:-9999px;top:0;z-index:1000;background:var(--ink);color:var(--paper);padding:.6rem 1rem;border-radius:0 0 var(--radius) 0}.skip-link[_ngcontent-ng-c2623730230]:focus{left:0}</style><style ng-app-id="ng">.site-header[_ngcontent-ng-c20459858]{position:sticky;top:0;z-index:100;background:color-mix(in srgb,var(--paper) 88%,transparent);-webkit-backdrop-filter:saturate(140%) blur(8px);backdrop-filter:saturate(140%) blur(8px);border-bottom:1px solid var(--line)}.nav[_ngcontent-ng-c20459858]{display:flex;align-items:center;gap:1.5rem;padding-block:.9rem}.wordmark[_ngcontent-ng-c20459858]{display:inline-flex;align-items:center;gap:.55rem;font-family:var(--font-wordmark);font-size:2rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--highlight);margin-right:auto}.wordmark[_ngcontent-ng-c20459858]:hover{text-decoration:none}.wordmark-logo[_ngcontent-ng-c20459858]{height:1.6em;width:auto;display:block}.nav-links[_ngcontent-ng-c20459858]{display:flex;gap:1.5rem}.nav-links[_ngcontent-ng-c20459858]   a[_ngcontent-ng-c20459858]{color:var(--ink);font-weight:500;font-size:.95rem;padding-block:.25rem;border-bottom:2px solid transparent}.nav-link[_ngcontent-ng-c20459858]{display:inline-flex;align-items:center;gap:.4rem}.nav-logo[_ngcontent-ng-c20459858]{height:1.15em;width:auto;display:block}.nav-links[_ngcontent-ng-c20459858]   a[_ngcontent-ng-c20459858]:hover{color:var(--accent-strong);text-decoration:none}.nav-links[_ngcontent-ng-c20459858]   a.active[_ngcontent-ng-c20459858]{color:var(--accent-strong);border-bottom-color:var(--accent-strong)}.nav-item--parent[_ngcontent-ng-c20459858]{position:relative;display:inline-flex;align-items:center}.nav-parent[_ngcontent-ng-c20459858]{appearance:none;background:none;border:none;border-bottom:2px solid transparent;margin:0;padding:.25rem 0;cursor:pointer;color:var(--ink);font:inherit;font-weight:500;font-size:.95rem;gap:.25rem}.nav-parent[_ngcontent-ng-c20459858]:hover{color:var(--accent-strong)}.nav-caret[_ngcontent-ng-c20459858]{font-size:1.15rem;width:1.15rem;height:1.15rem;transition:transform .15s ease}.nav-item--parent[_ngcontent-ng-c20459858]:hover   .nav-caret[_ngcontent-ng-c20459858], .nav-item--parent[_ngcontent-ng-c20459858]:focus-within   .nav-caret[_ngcontent-ng-c20459858]{transform:rotate(180deg)}.nav-submenu[_ngcontent-ng-c20459858]{position:absolute;top:calc(100% + .35rem);left:0;z-index:10;min-width:12rem;max-width:min(16rem,100vw - 2rem);margin:0;padding:.35rem;list-style:none;display:flex;flex-direction:column;gap:.15rem;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 12px 28px -12px #00000059;opacity:0;visibility:hidden;transform:translateY(-.25rem);transition:opacity .15s ease,transform .15s ease,visibility .15s}.nav-item--parent[_ngcontent-ng-c20459858]:hover   .nav-submenu[_ngcontent-ng-c20459858], .nav-item--parent[_ngcontent-ng-c20459858]:focus-within   .nav-submenu[_ngcontent-ng-c20459858]{opacity:1;visibility:visible;transform:translateY(0)}.nav-submenu[_ngcontent-ng-c20459858]   li[_ngcontent-ng-c20459858]{display:flex}.nav-submenu[_ngcontent-ng-c20459858]   a[_ngcontent-ng-c20459858]{flex:1;padding:.5rem .6rem;border-radius:calc(var(--radius) - 4px);border-bottom:none;white-space:nowrap}.nav-submenu[_ngcontent-ng-c20459858]   a[_ngcontent-ng-c20459858]:hover{background:color-mix(in srgb,var(--accent-strong) 10%,transparent)}.nav-submenu[_ngcontent-ng-c20459858]   a.active[_ngcontent-ng-c20459858]{color:var(--accent-strong);border-bottom:none;background:color-mix(in srgb,var(--accent-strong) 12%,transparent)}.nav-actions[_ngcontent-ng-c20459858]{display:flex;align-items:center;gap:.5rem}.get-in-touch[_ngcontent-ng-c20459858]{padding:.6rem 1.05rem;font-size:.95rem}.menu-toggle[_ngcontent-ng-c20459858]{display:none}.mobile-nav[_ngcontent-ng-c20459858]{border-top:1px solid var(--line);background:var(--paper);padding-block:.5rem 1rem}.mobile-nav[_ngcontent-ng-c20459858]   .wrap[_ngcontent-ng-c20459858]{display:flex;flex-direction:column;gap:.25rem}.mobile-nav[_ngcontent-ng-c20459858]   a[_ngcontent-ng-c20459858]{color:var(--ink);font-weight:500;padding:.7rem 0;border-bottom:1px solid var(--line)}.mobile-nav[_ngcontent-ng-c20459858]   a.active[_ngcontent-ng-c20459858]{color:var(--accent-strong)}.mobile-group-label[_ngcontent-ng-c20459858]{color:var(--muted, var(--ink));font-weight:600;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;padding:.7rem 0 .2rem;opacity:.7}.mobile-nav[_ngcontent-ng-c20459858]   a.mobile-child[_ngcontent-ng-c20459858]{padding-left:.9rem}.mobile-nav[_ngcontent-ng-c20459858]   .btn[_ngcontent-ng-c20459858]{margin-top:.8rem;justify-content:center;border-bottom:none}@media(max-width:860px){.nav-links[_ngcontent-ng-c20459858], .get-in-touch[_ngcontent-ng-c20459858]{display:none}.menu-toggle[_ngcontent-ng-c20459858]{display:inline-flex}}@media(min-width:861px){.mobile-nav[_ngcontent-ng-c20459858]{display:none}}</style><style ng-app-id="ng">.site-footer[_ngcontent-ng-c1371357180]{background:var(--ink);color:color-mix(in srgb,var(--paper) 82%,transparent);padding-top:clamp(2.5rem,5vw,4rem);margin-top:auto}.footer-grid[_ngcontent-ng-c1371357180]{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:2rem;padding-bottom:2.5rem}.wordmark[_ngcontent-ng-c1371357180]{display:inline-flex;align-items:center;gap:.55rem;font-family:var(--font-wordmark);font-size:2rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;margin-bottom:.8rem}.wordmark-logo[_ngcontent-ng-c1371357180]{height:1.6em;width:auto;display:block}.footer-brand[_ngcontent-ng-c1371357180]   p[_ngcontent-ng-c1371357180]{max-width:36ch;font-size:.95rem;line-height:1.6}h3[_ngcontent-ng-c1371357180]{font-family:var(--font-display);font-size:.8rem;letter-spacing:.1em;text-transform:uppercase;color:var(--paper);margin:0 0 1rem}.footer-nav[_ngcontent-ng-c1371357180], .footer-contact[_ngcontent-ng-c1371357180], .footer-social[_ngcontent-ng-c1371357180]{display:flex;flex-direction:column;gap:.6rem}.site-footer[_ngcontent-ng-c1371357180]   a[_ngcontent-ng-c1371357180]{color:color-mix(in srgb,var(--paper) 82%,transparent);font-size:.95rem}.site-footer[_ngcontent-ng-c1371357180]   a[_ngcontent-ng-c1371357180]:hover{color:var(--accent);text-decoration:none}.muted[_ngcontent-ng-c1371357180]{color:var(--muted);font-size:.95rem}.footer-legal[_ngcontent-ng-c1371357180]{display:flex;justify-content:space-between;align-items:center;border-top:1px solid color-mix(in srgb,var(--paper) 16%,transparent);padding-block:1.25rem;font-size:.85rem;color:var(--muted)}@media(max-width:760px){.footer-grid[_ngcontent-ng-c1371357180]{grid-template-columns:1fr 1fr}}@media(max-width:460px){.footer-grid[_ngcontent-ng-c1371357180]{grid-template-columns:1fr}}</style><style ng-app-id="ng">.cookie-notice[_ngcontent-ng-c2254782119]{position:fixed;left:50%;bottom:clamp(.75rem,2vw,1.5rem);transform:translate(-50%);z-index:1000;width:min(100% - 1.5rem,560px);display:flex;align-items:center;gap:1rem;padding:.85rem 1.1rem;background:var(--ink);color:color-mix(in srgb,var(--paper) 88%,transparent);border:1px solid color-mix(in srgb,var(--paper) 16%,transparent);border-radius:var(--radius);box-shadow:0 8px 30px #00000038}.cookie-notice__text[_ngcontent-ng-c2254782119]{margin:0;font-size:.85rem;line-height:1.5}.cookie-notice__dismiss[_ngcontent-ng-c2254782119]{flex:0 0 auto;font-family:var(--font-body);font-weight:600;font-size:.85rem;line-height:1;color:var(--ink);background:var(--paper);border:0;border-radius:var(--radius);padding:.55rem .9rem;cursor:pointer;transition:background-color .15s var(--ease)}.cookie-notice__dismiss[_ngcontent-ng-c2254782119]:hover{background:var(--accent);color:#fff}@media(max-width:460px){.cookie-notice[_ngcontent-ng-c2254782119]{flex-direction:column;align-items:stretch;text-align:center}}</style><style ng-app-id="ng">.lang-trigger[_ngcontent-ng-c1005577388]{font-family:var(--font-body);font-weight:500}.lang-code[_ngcontent-ng-c1005577388]{margin-left:.3rem;letter-spacing:.02em}</style><style ng-app-id="ng">.mat-mdc-icon-button {
15  -webkit-user-select: none;
16  user-select: none;
17  display: inline-block;
18  position: relative;
19  box-sizing: border-box;
20  border: none;
21  outline: none;
22  background-color: transparent;
23  fill: currentColor;
24  text-decoration: none;
25  cursor: pointer;
26  z-index: 0;
27  overflow: visible;
28  border-radius: var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%));
29  flex-shrink: 0;
30  text-align: center;
31  width: var(--mat-icon-button-state-layer-size, 40px);
32  height: var(--mat-icon-button-state-layer-size, 40px);
33  padding: calc(calc(var(--mat-icon-button-state-layer-size, 40px) - var(--mat-icon-button-icon-size, 24px)) / 2);
34  font-size: var(--mat-icon-button-icon-size, 24px);
35  color: var(--mat-icon-button-icon-color, var(--mat-sys-on-surface-variant));
36  -webkit-tap-highlight-color: transparent;
37}
38.mat-mdc-icon-button .mat-mdc-button-ripple,
39.mat-mdc-icon-button .mat-mdc-button-persistent-ripple,
40.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before {
41  top: 0;
42  left: 0;
43  right: 0;
44  bottom: 0;
45  position: absolute;
46  pointer-events: none;
47  border-radius: inherit;
48}
49.mat-mdc-icon-button .mat-mdc-button-ripple {
50  overflow: hidden;
51}
52.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before {
53  content: "";
54  opacity: 0;
55}
56.mat-mdc-icon-button .mdc-button__label,
57.mat-mdc-icon-button .mat-icon {
58  z-index: 1;
59  position: relative;
60}
61.mat-mdc-icon-button .mat-focus-indicator {
62  top: 0;
63  left: 0;
64  right: 0;
65  bottom: 0;
66  position: absolute;
67  border-radius: inherit;
68}
69.mat-mdc-icon-button:focus-visible > .mat-focus-indicator::before {
70  content: "";
71  border-radius: inherit;
72}
73.mat-mdc-icon-button .mat-ripple-element {
74  background-color: var(--mat-icon-button-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface-variant) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent));
75}
76.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before {
77  background-color: var(--mat-icon-button-state-layer-color, var(--mat-sys-on-surface-variant));
78}
79.mat-mdc-icon-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before {
80  background-color: var(--mat-icon-button-disabled-state-layer-color, var(--mat-sys-on-surface-variant));
81}
82.mat-mdc-icon-button:hover > .mat-mdc-button-persistent-ripple::before {
83  opacity: var(--mat-icon-button-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
84}
85.mat-mdc-icon-button.cdk-program-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-icon-button.cdk-keyboard-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-icon-button.mat-mdc-button-disabled-interactive:focus > .mat-mdc-button-persistent-ripple::before {
86  opacity: var(--mat-icon-button-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
87}
88.mat-mdc-icon-button:active > .mat-mdc-button-persistent-ripple::before {
89  opacity: var(--mat-icon-button-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));
90}
91.mat-mdc-icon-button .mat-mdc-button-touch-target {
92  position: absolute;
93  top: 50%;
94  height: var(--mat-icon-button-touch-target-size, 48px);
95  display: var(--mat-icon-button-touch-target-display, block);
96  left: 50%;
97  width: var(--mat-icon-button-touch-target-size, 48px);
98  transform: translate(-50%, -50%);
99}
100.mat-mdc-icon-button._mat-animation-noopable {
101  transition: none !important;
102  animation: none !important;
103}
104.mat-mdc-icon-button[disabled], .mat-mdc-icon-button.mat-mdc-button-disabled {
105  cursor: default;
106  pointer-events: none;
107  color: var(--mat-icon-button-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
108}
109.mat-mdc-icon-button.mat-mdc-button-disabled-interactive {
110  pointer-events: auto;
111}
112.mat-mdc-icon-button img,
113.mat-mdc-icon-button svg {
114  width: var(--mat-icon-button-icon-size, 24px);
115  height: var(--mat-icon-button-icon-size, 24px);
116  vertical-align: baseline;
117}
118.mat-mdc-icon-button .mat-mdc-button-persistent-ripple {
119  border-radius: var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%));
120}
121.mat-mdc-icon-button[hidden] {
122  display: none;
123}
124.mat-mdc-icon-button.mat-unthemed:not(.mdc-ripple-upgraded):focus::before, .mat-mdc-icon-button.mat-primary:not(.mdc-ripple-upgraded):focus::before, .mat-mdc-icon-button.mat-accent:not(.mdc-ripple-upgraded):focus::before, .mat-mdc-icon-button.mat-warn:not(.mdc-ripple-upgraded):focus::before {
125  background: transparent;
126  opacity: 1;
127}
128</style><style ng-app-id="ng">@media (forced-colors: active) {
129  .mat-mdc-button:not(.mdc-button--outlined),
130  .mat-mdc-unelevated-button:not(.mdc-button--outlined),
131  .mat-mdc-raised-button:not(.mdc-button--outlined),
132  .mat-mdc-outlined-button:not(.mdc-button--outlined),
133  .mat-mdc-button-base.mat-tonal-button,
134  .mat-mdc-icon-button.mat-mdc-icon-button,
135  .mat-mdc-outlined-button .mdc-button__ripple {
136    outline: solid 1px;
137  }
138}
139</style><style ng-app-id="ng">.mat-focus-indicator {
140  position: relative;
141}
142.mat-focus-indicator::before {
143  top: 0;
144  left: 0;
145  right: 0;
146  bottom: 0;
147  position: absolute;
148  box-sizing: border-box;
149  pointer-events: none;
150  display: var(--mat-focus-indicator-display, none);
151  border-width: var(--mat-focus-indicator-border-width, 3px);
152  border-style: var(--mat-focus-indicator-border-style, solid);
153  border-color: var(--mat-focus-indicator-border-color, transparent);
154  border-radius: var(--mat-focus-indicator-border-radius, 4px);
155}
156.mat-focus-indicator:focus-visible::before {
157  content: "";
158}
159
160@media (forced-colors: active) {
161  html {
162    --mat-focus-indicator-display: block;
163  }
164}
165</style><style ng-app-id="ng">mat-icon, mat-icon.mat-primary, mat-icon.mat-accent, mat-icon.mat-warn {
166  color: var(--mat-icon-color, inherit);
167}
168
169.mat-icon {
170  -webkit-user-select: none;
171  user-select: none;
172  background-repeat: no-repeat;
173  display: inline-block;
174  fill: currentColor;
175  height: 24px;
176  width: 24px;
177  overflow: hidden;
178}
179.mat-icon.mat-icon-inline {
180  font-size: inherit;
181  height: inherit;
182  line-height: inherit;
183  width: inherit;
184}
185.mat-icon.mat-ligature-font[fontIcon]::before {
186  content: attr(fontIcon);
187}
188
189[dir=rtl] .mat-icon-rtl-mirror {
190  transform: scale(-1, 1);
191}
192
193.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,
194.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon {
195  display: block;
196}
197.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,
198.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon {
199  margin: auto;
200}
201</style><style ng-app-id="ng">.mat-mdc-button-base {
202  text-decoration: none;
203}
204.mat-mdc-button-base .mat-icon {
205  min-height: fit-content;
206  flex-shrink: 0;
207}
208@media (hover: none) {
209  .mat-mdc-button-base:hover > span.mat-mdc-button-persistent-ripple::before {
210    opacity: 0;
211  }
212}
213
214.mdc-button {
215  -webkit-user-select: none;
216  user-select: none;
217  position: relative;
218  display: inline-flex;
219  align-items: center;
220  justify-content: center;
221  box-sizing: border-box;
222  min-width: 64px;
223  border: none;
224  outline: none;
225  line-height: inherit;
226  -webkit-appearance: none;
227  overflow: visible;
228  vertical-align: middle;
229  background: transparent;
230  padding: 0 8px;
231}
232.mdc-button::-moz-focus-inner {
233  padding: 0;
234  border: 0;
235}
236.mdc-button:active {
237  outline: none;
238}
239.mdc-button:hover {
240  cursor: pointer;
241}
242.mdc-button:disabled {
243  cursor: default;
244  pointer-events: none;
245}
246.mdc-button[hidden] {
247  display: none;
248}
249.mdc-button .mdc-button__label {
250  position: relative;
251}
252
253.mat-mdc-button {
254  padding: 0 var(--mat-button-text-horizontal-padding, 12px);
255  height: var(--mat-button-text-container-height, 40px);
256  font-family: var(--mat-button-text-label-text-font, var(--mat-sys-label-large-font));
257  font-size: var(--mat-button-text-label-text-size, var(--mat-sys-label-large-size));
258  letter-spacing: var(--mat-button-text-label-text-tracking, var(--mat-sys-label-large-tracking));
259  text-transform: var(--mat-button-text-label-text-transform);
260  font-weight: var(--mat-button-text-label-text-weight, var(--mat-sys-label-large-weight));
261}
262.mat-mdc-button, .mat-mdc-button .mdc-button__ripple {
263  border-radius: var(--mat-button-text-container-shape, var(--mat-sys-corner-full));
264}
265.mat-mdc-button:not(:disabled) {
266  color: var(--mat-button-text-label-text-color, var(--mat-sys-primary));
267}
268.mat-mdc-button[disabled], .mat-mdc-button.mat-mdc-button-disabled {
269  cursor: default;
270  pointer-events: none;
271  color: var(--mat-button-text-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
272}
273.mat-mdc-button.mat-mdc-button-disabled-interactive {
274  pointer-events: auto;
275}
276.mat-mdc-button:has(.material-icons, mat-icon, [matButtonIcon]) {
277  padding: 0 var(--mat-button-text-with-icon-horizontal-padding, 16px);
278}
279.mat-mdc-button > .mat-icon {
280  margin-right: var(--mat-button-text-icon-spacing, 8px);
281  margin-left: var(--mat-button-text-icon-offset, -4px);
282}
283[dir=rtl] .mat-mdc-button > .mat-icon {
284  margin-right: var(--mat-button-text-icon-offset, -4px);
285  margin-left: var(--mat-button-text-icon-spacing, 8px);
286}
287.mat-mdc-button .mdc-button__label + .mat-icon {
288  margin-right: var(--mat-button-text-icon-offset, -4px);
289  margin-left: var(--mat-button-text-icon-spacing, 8px);
290}
291[dir=rtl] .mat-mdc-button .mdc-button__label + .mat-icon {
292  margin-right: var(--mat-button-text-icon-spacing, 8px);
293  margin-left: var(--mat-button-text-icon-offset, -4px);
294}
295.mat-mdc-button .mat-ripple-element {
296  background-color: var(--mat-button-text-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent));
297}
298.mat-mdc-button .mat-mdc-button-persistent-ripple::before {
299  background-color: var(--mat-button-text-state-layer-color, var(--mat-sys-primary));
300}
301.mat-mdc-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before {
302  background-color: var(--mat-button-text-disabled-state-layer-color, var(--mat-sys-on-surface-variant));
303}
304.mat-mdc-button:hover > .mat-mdc-button-persistent-ripple::before {
305  opacity: var(--mat-button-text-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
306}
307.mat-mdc-button.cdk-program-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-button.cdk-keyboard-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-button.mat-mdc-button-disabled-interactive:focus > .mat-mdc-button-persistent-ripple::before {
308  opacity: var(--mat-button-text-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
309}
310.mat-mdc-button:active > .mat-mdc-button-persistent-ripple::before {
311  opacity: var(--mat-button-text-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));
312}
313.mat-mdc-button .mat-mdc-button-touch-target {
314  position: absolute;
315  top: 50%;
316  height: var(--mat-button-text-touch-target-size, 48px);
317  display: var(--mat-button-text-touch-target-display, block);
318  left: 0;
319  right: 0;
320  transform: translateY(-50%);
321}
322
323.mat-mdc-unelevated-button {
324  transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
325  height: var(--mat-button-filled-container-height, 40px);
326  font-family: var(--mat-button-filled-label-text-font, var(--mat-sys-label-large-font));
327  font-size: var(--mat-button-filled-label-text-size, var(--mat-sys-label-large-size));
328  letter-spacing: var(--mat-button-filled-label-text-tracking, var(--mat-sys-label-large-tracking));
329  text-transform: var(--mat-button-filled-label-text-transform);
330  font-weight: var(--mat-button-filled-label-text-weight, var(--mat-sys-label-large-weight));
331  padding: 0 var(--mat-button-filled-horizontal-padding, 24px);
332}
333.mat-mdc-unelevated-button > .mat-icon {
334  margin-right: var(--mat-button-filled-icon-spacing, 8px);
335  margin-left: var(--mat-button-filled-icon-offset, -8px);
336}
337[dir=rtl] .mat-mdc-unelevated-button > .mat-icon {
338  margin-right: var(--mat-button-filled-icon-offset, -8px);
339  margin-left: var(--mat-button-filled-icon-spacing, 8px);
340}
341.mat-mdc-unelevated-button .mdc-button__label + .mat-icon {
342  margin-right: var(--mat-button-filled-icon-offset, -8px);
343  margin-left: var(--mat-button-filled-icon-spacing, 8px);
344}
345[dir=rtl] .mat-mdc-unelevated-button .mdc-button__label + .mat-icon {
346  margin-right: var(--mat-button-filled-icon-spacing, 8px);
347  margin-left: var(--mat-button-filled-icon-offset, -8px);
348}
349.mat-mdc-unelevated-button .mat-ripple-element {
350  background-color: var(--mat-button-filled-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent));
351}
352.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before {
353  background-color: var(--mat-button-filled-state-layer-color, var(--mat-sys-on-primary));
354}
355.mat-mdc-unelevated-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before {
356  background-color: var(--mat-button-filled-disabled-state-layer-color, var(--mat-sys-on-surface-variant));
357}
358.mat-mdc-unelevated-button:hover > .mat-mdc-button-persistent-ripple::before {
359  opacity: var(--mat-button-filled-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
360}
361.mat-mdc-unelevated-button.cdk-program-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-unelevated-button.cdk-keyboard-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive:focus > .mat-mdc-button-persistent-ripple::before {
362  opacity: var(--mat-button-filled-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
363}
364.mat-mdc-unelevated-button:active > .mat-mdc-button-persistent-ripple::before {
365  opacity: var(--mat-button-filled-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));
366}
367.mat-mdc-unelevated-button .mat-mdc-button-touch-target {
368  position: absolute;
369  top: 50%;
370  height: var(--mat-button-filled-touch-target-size, 48px);
371  display: var(--mat-button-filled-touch-target-display, block);
372  left: 0;
373  right: 0;
374  transform: translateY(-50%);
375}
376.mat-mdc-unelevated-button:not(:disabled) {
377  color: var(--mat-button-filled-label-text-color, var(--mat-sys-on-primary));
378  background-color: var(--mat-button-filled-container-color, var(--mat-sys-primary));
379}
380.mat-mdc-unelevated-button, .mat-mdc-unelevated-button .mdc-button__ripple {
381  border-radius: var(--mat-button-filled-container-shape, var(--mat-sys-corner-full));
382}
383.mat-mdc-unelevated-button[disabled], .mat-mdc-unelevated-button.mat-mdc-button-disabled {
384  cursor: default;
385  pointer-events: none;
386  color: var(--mat-button-filled-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
387  background-color: var(--mat-button-filled-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
388}
389.mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive {
390  pointer-events: auto;
391}
392
393.mat-mdc-raised-button {
394  transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
395  box-shadow: var(--mat-button-protected-container-elevation-shadow, var(--mat-sys-level1));
396  height: var(--mat-button-protected-container-height, 40px);
397  font-family: var(--mat-button-protected-label-text-font, var(--mat-sys-label-large-font));
398  font-size: var(--mat-button-protected-label-text-size, var(--mat-sys-label-large-size));
399  letter-spacing: var(--mat-button-protected-label-text-tracking, var(--mat-sys-label-large-tracking));
400  text-transform: var(--mat-button-protected-label-text-transform);
401  font-weight: var(--mat-button-protected-label-text-weight, var(--mat-sys-label-large-weight));
402  padding: 0 var(--mat-button-protected-horizontal-padding, 24px);
403}
404.mat-mdc-raised-button > .mat-icon {
405  margin-right: var(--mat-button-protected-icon-spacing, 8px);
406  margin-left: var(--mat-button-protected-icon-offset, -8px);
407}
408[dir=rtl] .mat-mdc-raised-button > .mat-icon {
409  margin-right: var(--mat-button-protected-icon-offset, -8px);
410  margin-left: var(--mat-button-protected-icon-spacing, 8px);
411}
412.mat-mdc-raised-button .mdc-button__label + .mat-icon {
413  margin-right: var(--mat-button-protected-icon-offset, -8px);
414  margin-left: var(--mat-button-protected-icon-spacing, 8px);
415}
416[dir=rtl] .mat-mdc-raised-button .mdc-button__label + .mat-icon {
417  margin-right: var(--mat-button-protected-icon-spacing, 8px);
418  margin-left: var(--mat-button-protected-icon-offset, -8px);
419}
420.mat-mdc-raised-button .mat-ripple-element {
421  background-color: var(--mat-button-protected-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent));
422}
423.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before {
424  background-color: var(--mat-button-protected-state-layer-color, var(--mat-sys-primary));
425}
426.mat-mdc-raised-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before {
427  background-color: var(--mat-button-protected-disabled-state-layer-color, var(--mat-sys-on-surface-variant));
428}
429.mat-mdc-raised-button:hover > .mat-mdc-button-persistent-ripple::before {
430  opacity: var(--mat-button-protected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
431}
432.mat-mdc-raised-button.cdk-program-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-raised-button.cdk-keyboard-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-raised-button.mat-mdc-button-disabled-interactive:focus > .mat-mdc-button-persistent-ripple::before {
433  opacity: var(--mat-button-protected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
434}
435.mat-mdc-raised-button:active > .mat-mdc-button-persistent-ripple::before {
436  opacity: var(--mat-button-protected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));
437}
438.mat-mdc-raised-button .mat-mdc-button-touch-target {
439  position: absolute;
440  top: 50%;
441  height: var(--mat-button-protected-touch-target-size, 48px);
442  display: var(--mat-button-protected-touch-target-display, block);
443  left: 0;
444  right: 0;
445  transform: translateY(-50%);
446}
447.mat-mdc-raised-button:not(:disabled) {
448  color: var(--mat-button-protected-label-text-color, var(--mat-sys-primary));
449  background-color: var(--mat-button-protected-container-color, var(--mat-sys-surface));
450}
451.mat-mdc-raised-button, .mat-mdc-raised-button .mdc-button__ripple {
452  border-radius: var(--mat-button-protected-container-shape, var(--mat-sys-corner-full));
453}
454@media (hover: hover) {
455  .mat-mdc-raised-button:hover {
456    box-shadow: var(--mat-button-protected-hover-container-elevation-shadow, var(--mat-sys-level2));
457  }
458}
459.mat-mdc-raised-button:focus {
460  box-shadow: var(--mat-button-protected-focus-container-elevation-shadow, var(--mat-sys-level1));
461}
462.mat-mdc-raised-button:active, .mat-mdc-raised-button:focus:active {
463  box-shadow: var(--mat-button-protected-pressed-container-elevation-shadow, var(--mat-sys-level1));
464}
465.mat-mdc-raised-button[disabled], .mat-mdc-raised-button.mat-mdc-button-disabled {
466  cursor: default;
467  pointer-events: none;
468  color: var(--mat-button-protected-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
469  background-color: var(--mat-button-protected-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
470}
471.mat-mdc-raised-button[disabled].mat-mdc-button-disabled, .mat-mdc-raised-button.mat-mdc-button-disabled.mat-mdc-button-disabled {
472  box-shadow: var(--mat-button-protected-disabled-container-elevation-shadow, var(--mat-sys-level0));
473}
474.mat-mdc-raised-button.mat-mdc-button-disabled-interactive {
475  pointer-events: auto;
476}
477
478.mat-mdc-outlined-button {
479  border-style: solid;
480  transition: border 280ms cubic-bezier(0.4, 0, 0.2, 1);
481  height: var(--mat-button-outlined-container-height, 40px);
482  font-family: var(--mat-button-outlined-label-text-font, var(--mat-sys-label-large-font));
483  font-size: var(--mat-button-outlined-label-text-size, var(--mat-sys-label-large-size));
484  letter-spacing: var(--mat-button-outlined-label-text-tracking, var(--mat-sys-label-large-tracking));
485  text-transform: var(--mat-button-outlined-label-text-transform);
486  font-weight: var(--mat-button-outlined-label-text-weight, var(--mat-sys-label-large-weight));
487  border-radius: var(--mat-button-outlined-container-shape, var(--mat-sys-corner-full));
488  border-width: var(--mat-button-outlined-outline-width, 1px);
489  padding: 0 var(--mat-button-outlined-horizontal-padding, 24px);
490}
491.mat-mdc-outlined-button > .mat-icon {
492  margin-right: var(--mat-button-outlined-icon-spacing, 8px);
493  margin-left: var(--mat-button-outlined-icon-offset, -8px);
494}
495[dir=rtl] .mat-mdc-outlined-button > .mat-icon {
496  margin-right: var(--mat-button-outlined-icon-offset, -8px);
497  margin-left: var(--mat-button-outlined-icon-spacing, 8px);
498}
499.mat-mdc-outlined-button .mdc-button__label + .mat-icon {
500  margin-right: var(--mat-button-outlined-icon-offset, -8px);
501  margin-left: var(--mat-button-outlined-icon-spacing, 8px);
502}
503[dir=rtl] .mat-mdc-outlined-button .mdc-button__label + .mat-icon {
504  margin-right: var(--mat-button-outlined-icon-spacing, 8px);
505  margin-left: var(--mat-button-outlined-icon-offset, -8px);
506}
507.mat-mdc-outlined-button .mat-ripple-element {
508  background-color: var(--mat-button-outlined-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent));
509}
510.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before {
511  background-color: var(--mat-button-outlined-state-layer-color, var(--mat-sys-primary));
512}
513.mat-mdc-outlined-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before {
514  background-color: var(--mat-button-outlined-disabled-state-layer-color, var(--mat-sys-on-surface-variant));
515}
516.mat-mdc-outlined-button:hover > .mat-mdc-button-persistent-ripple::before {
517  opacity: var(--mat-button-outlined-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
518}
519.mat-mdc-outlined-button.cdk-program-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-outlined-button.cdk-keyboard-focused > .mat-mdc-button-persistent-ripple::before, .mat-mdc-outlined-button.mat-mdc-button-disabled-interactive:focus > .mat-mdc-button-persistent-ripple::before {
520  opacity: var(--mat-button-outlined-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
521}
522.mat-mdc-outlined-button:active > .mat-mdc-button-persistent-ripple::before {
523  opacity: var(--mat-button-outlined-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));
524}
525.mat-mdc-outlined-button .mat-mdc-button-touch-target {
526  position: absolute;
527  top: 50%;
528  height: var(--mat-button-outlined-touch-target-size, 48px);
529  display: var(--mat-button-outlined-touch-target-display, block);
530  left: 0;
531  right: 0;
532  transform: translateY(-50%);
533}
534.mat-mdc-outlined-button:not(:disabled) {
535  color: var(--mat-button-outlined-label-text-color, var(--mat-sys-primary));
536  border-color: var(--mat-button-outlined-outline-color, var(--mat-sys-outline));
537}
538.mat-mdc-outlined-button[disabled], .mat-mdc-outlined-button.mat-mdc-button-disabled {
539  cursor: default;
540  pointer-events: none;
541  color: var(--mat-button-outlined-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
542  border-color: var(--mat-button-outlined-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
543}
544.mat-mdc-outlined-button.mat-mdc-button-disabled-interactive {
545  pointer-events: auto;
546}
547
548.mat-tonal-button {
549  transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
550  height: var(--mat-button-tonal-container-height, 40px);
551  font-family: var(--mat-button-tonal-label-text-font, var(--mat-sys-label-large-font));
552  font-size: var(--mat-button-tonal-label-text-size, var(--mat-sys-label-large-size));
553  lette
553r-spacing: var(--mat-button-tonal-label-text-tracking, var(--mat-sys-label-large-tracking));
554  text-transform: var(--mat-button-tonal-label-text-transform);
555  font-weight: var(--mat-button-tonal-label-text-weight, var(--mat-sys-label-large-weight));
556  padding: 0 var(--mat-button-tonal-horizontal-padding, 24px);
557}
558.mat-tonal-button:not(:disabled) {
559  color: var(--mat-button-tonal-label-text-color, var(--mat-sys-on-secondary-container));
560  background-color: var(--mat-button-tonal-container-color, var(--mat-sys-secondary-container));
561}
562.mat-tonal-button, .mat-tonal-button .mdc-button__ripple {
563  border-radius: var(--mat-button-tonal-container-shape, var(--mat-sys-corner-full));
564}
565.mat-tonal-button[disabled], .mat-tonal-button.mat-mdc-button-disabled {
566  cursor: default;
567  pointer-events: none;
568  color: var(--mat-button-tonal-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));
569  background-color: var(--mat-button-tonal-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
570}
571.mat-tonal-button.mat-mdc-button-disabled-interactive {
572  pointer-events: auto;
573}
574.mat-tonal-button > .mat-icon {
575  margin-right: var(--mat-button-tonal-icon-spacing, 8px);
576  margin-left: var(--mat-button-tonal-icon-offset, -8px);
577}
578[dir=rtl] .mat-tonal-button > .mat-icon {
579  margin-right: var(--mat-button-tonal-icon-offset, -8px);
580  margin-left: var(--mat-button-tonal-icon-spacing, 8px);
581}
582.mat-tonal-button .mdc-button__label + .mat-icon {
583  margin-right: var(--mat-button-tonal-icon-offset, -8px);
584  margin-left: var(--mat-button-tonal-icon-spacing, 8px);
585}
586[dir=rtl] .mat-tonal-button .mdc-button__label + .mat-icon {
587  margin-right: var(--mat-button-tonal-icon-spacing, 8px);
588  margin-left: var(--mat-button-tonal-icon-offset, -8px);
589}
590.mat-tonal-button .mat-ripple-element {
591  background-color: var(--mat-button-tonal-ripple-color, color-mix(in srgb, var(--mat-sys-on-secondary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent));
592}
593.mat-tonal-button .mat-mdc-button-persistent-ripple::before {
594  background-color: var(--mat-button-tonal-state-layer-color, var(--mat-sys-on-secondary-container));
595}
596.mat-tonal-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before {
597  background-color: var(--mat-button-tonal-disabled-state-layer-color, var(--mat-sys-on-surface-variant));
598}
599.mat-tonal-button:hover > .mat-mdc-button-persistent-ripple::before {
600  opacity: var(--mat-button-tonal-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));
601}
602.mat-tonal-button.cdk-program-focused > .mat-mdc-button-persistent-ripple::before, .mat-tonal-button.cdk-keyboard-focused > .mat-mdc-button-persistent-ripple::before, .mat-tonal-button.mat-mdc-button-disabled-interactive:focus > .mat-mdc-button-persistent-ripple::before {
603  opacity: var(--mat-button-tonal-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));
604}
605.mat-tonal-button:active > .mat-mdc-button-persistent-ripple::before {
606  opacity: var(--mat-button-tonal-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));
607}
608.mat-tonal-button .mat-mdc-button-touch-target {
609  position: absolute;
610  top: 50%;
611  height: var(--mat-button-tonal-touch-target-size, 48px);
612  display: var(--mat-button-tonal-touch-target-display, block);
613  left: 0;
614  right: 0;
615  transform: translateY(-50%);
616}
617
618.mat-mdc-button,
619.mat-mdc-unelevated-button,
620.mat-mdc-raised-button,
621.mat-mdc-outlined-button,
622.mat-tonal-button {
623  -webkit-tap-highlight-color: transparent;
624}
625.mat-mdc-button .mat-mdc-button-ripple,
626.mat-mdc-button .mat-mdc-button-persistent-ripple,
627.mat-mdc-button .mat-mdc-button-persistent-ripple::before,
628.mat-mdc-unelevated-button .mat-mdc-button-ripple,
629.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple,
630.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,
631.mat-mdc-raised-button .mat-mdc-button-ripple,
632.mat-mdc-raised-button .mat-mdc-button-persistent-ripple,
633.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,
634.mat-mdc-outlined-button .mat-mdc-button-ripple,
635.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple,
636.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,
637.mat-tonal-button .mat-mdc-button-ripple,
638.mat-tonal-button .mat-mdc-button-persistent-ripple,
639.mat-tonal-button .mat-mdc-button-persistent-ripple::before {
640  top: 0;
641  left: 0;
642  right: 0;
643  bottom: 0;
644  position: absolute;
645  pointer-events: none;
646  border-radius: inherit;
647}
648.mat-mdc-button .mat-mdc-button-ripple,
649.mat-mdc-unelevated-button .mat-mdc-button-ripple,
650.mat-mdc-raised-button .mat-mdc-button-ripple,
651.mat-mdc-outlined-button .mat-mdc-button-ripple,
652.mat-tonal-button .mat-mdc-button-ripple {
653  overflow: hidden;
654}
655.mat-mdc-button .mat-mdc-button-persistent-ripple::before,
656.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,
657.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,
658.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,
659.mat-tonal-button .mat-mdc-button-persistent-ripple::before {
660  content: "";
661  opacity: 0;
662}
663.mat-mdc-button .mdc-button__label,
664.mat-mdc-button .mat-icon,
665.mat-mdc-unelevated-button .mdc-button__label,
666.mat-mdc-unelevated-button .mat-icon,
667.mat-mdc-raised-button .mdc-button__label,
668.mat-mdc-raised-button .mat-icon,
669.mat-mdc-outlined-button .mdc-button__label,
670.mat-mdc-outlined-button .mat-icon,
671.mat-tonal-button .mdc-button__label,
672.mat-tonal-button .mat-icon {
673  z-index: 1;
674  position: relative;
675}
676.mat-mdc-button .mat-focus-indicator,
677.mat-mdc-unelevated-button .mat-focus-indicator,
678.mat-mdc-raised-button .mat-focus-indicator,
679.mat-mdc-outlined-button .mat-focus-indicator,
680.mat-tonal-button .mat-focus-indicator {
681  top: 0;
682  left: 0;
683  right: 0;
684  bottom: 0;
685  position: absolute;
686  border-radius: inherit;
687}
688.mat-mdc-button:focus-visible > .mat-focus-indicator::before,
689.mat-mdc-unelevated-button:focus-visible > .mat-focus-indicator::before,
690.mat-mdc-raised-button:focus-visible > .mat-focus-indicator::before,
691.mat-mdc-outlined-button:focus-visible > .mat-focus-indicator::before,
692.mat-tonal-button:focus-visible > .mat-focus-indicator::before {
693  content: "";
694  border-radius: inherit;
695}
696.mat-mdc-button._mat-animation-noopable,
697.mat-mdc-unelevated-button._mat-animation-noopable,
698.mat-mdc-raised-button._mat-animation-noopable,
699.mat-mdc-outlined-button._mat-animation-noopable,
700.mat-tonal-button._mat-animation-noopable {
701  transition: none !important;
702  animation: none !important;
703}
704.mat-mdc-button > .mat-icon,
705.mat-mdc-unelevated-button > .mat-icon,
706.mat-mdc-raised-button > .mat-icon,
707.mat-mdc-outlined-button > .mat-icon,
708.mat-tonal-button > .mat-icon {
709  display: inline-block;
710  position: relative;
711  vertical-align: top;
712  font-size: 1.125rem;
713  height: 1.125rem;
714  width: 1.125rem;
715}
716
717.mat-mdc-outlined-button .mat-mdc-button-ripple,
718.mat-mdc-outlined-button .mdc-button__ripple {
719  top: -1px;
720  left: -1px;
721  bottom: -1px;
722  right: -1px;
723}
724
725.mat-mdc-unelevated-button .mat-focus-indicator::before,
726.mat-tonal-button .mat-focus-indicator::before,
727.mat-mdc-raised-button .mat-focus-indicator::before {
728  margin: calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1);
729}
730
731.mat-mdc-outlined-button .mat-focus-indicator::before {
732  margin: calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px) * -1);
733}
734</style><style ng-app-id="ng">mat-menu {
735  display: none;
736}
737
738.mat-mdc-menu-content {
739  margin: 0;
740  padding: 8px 0;
741  outline: 0;
742}
743.mat-mdc-menu-content,
744.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text {
745  -moz-osx-font-smoothing: grayscale;
746  -webkit-font-smoothing: antialiased;
747  flex: 1;
748  white-space: normal;
749  font-family: var(--mat-menu-item-label-text-font, var(--mat-sys-label-large-font));
750  line-height: var(--mat-menu-item-label-text-line-height, var(--mat-sys-label-large-line-height));
751  font-size: var(--mat-menu-item-label-text-size, var(--mat-sys-label-large-size));
752  letter-spacing: var(--mat-menu-item-label-text-tracking, var(--mat-sys-label-large-tracking));
753  font-weight: var(--mat-menu-item-label-text-weight, var(--mat-sys-label-large-weight));
754}
755
756@keyframes _mat-menu-enter {
757  from {
758    opacity: 0;
759    transform: scale(0.8);
760  }
761  to {
762    opacity: 1;
763    transform: none;
764  }
765}
766@keyframes _mat-menu-exit {
767  from {
768    opacity: 1;
769  }
770  to {
771    opacity: 0;
772  }
773}
774.mat-mdc-menu-panel {
775  min-width: 112px;
776  max-width: 280px;
777  overflow: auto;
778  box-sizing: border-box;
779  outline: 0;
780  animation: _mat-menu-enter 120ms cubic-bezier(0, 0, 0.2, 1);
781  border-radius: var(--mat-menu-container-shape, var(--mat-sys-corner-extra-small));
782  background-color: var(--mat-menu-container-color, var(--mat-sys-surface-container));
783  box-shadow: var(--mat-menu-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));
784  will-change: transform, opacity;
785}
786.mat-mdc-menu-panel.mat-menu-panel-exit-animation {
787  animation: _mat-menu-exit 100ms 25ms linear forwards;
788}
789.mat-mdc-menu-panel.mat-menu-panel-animations-disabled {
790  animation: none;
791}
792.mat-mdc-menu-panel.mat-menu-panel-animating {
793  pointer-events: none;
794}
795.mat-mdc-menu-panel.mat-menu-panel-animating:has(.mat-mdc-menu-content:empty) {
796  display: none;
797}
798@media (forced-colors: active) {
799  .mat-mdc-menu-panel {
800    outline: solid 1px;
801  }
802}
803.mat-mdc-menu-panel .mat-divider {
804  border-top-color: var(--mat-menu-divider-color, var(--mat-sys-surface-variant));
805  margin-bottom: var(--mat-menu-divider-bottom-spacing, 8px);
806  margin-top: var(--mat-menu-divider-top-spacing, 8px);
807}
808
809.mat-mdc-menu-item {
810  display: flex;
811  position: relative;
812  align-items: center;
813  justify-content: flex-start;
814  overflow: hidden;
815  padding: 0;
816  cursor: pointer;
817  width: 100%;
818  text-align: left;
819  box-sizing: border-box;
820  color: inherit;
821  font-size: inherit;
822  background: none;
823  text-decoration: none;
824  margin: 0;
825  min-height: 48px;
826  padding-left: var(--mat-menu-item-leading-spacing, 12px);
827  padding-right: var(--mat-menu-item-trailing-spacing, 12px);
828  -webkit-user-select: none;
829  user-select: none;
830  cursor: pointer;
831  outline: none;
832  border: none;
833  -webkit-tap-highlight-color: transparent;
834}
835.mat-mdc-menu-item::-moz-focus-inner {
836  border: 0;
837}
838[dir=rtl] .mat-mdc-menu-item {
839  padding-left: var(--mat-menu-item-trailing-spacing, 12px);
840  padding-right: var(--mat-menu-item-leading-spacing, 12px);
841}
842.mat-mdc-menu-item:has(.material-icons, mat-icon, [matButtonIcon]) {
843  padding-left: var(--mat-menu-item-with-icon-leading-spacing, 12px);
844  padding-right: var(--mat-menu-item-with-icon-trailing-spacing, 12px);
845}
846[dir=rtl] .mat-mdc-menu-item:has(.material-icons, mat-icon, [matButtonIcon]) {
847  padding-left: var(--mat-menu-item-with-icon-trailing-spacing, 12px);
848  padding-right: var(--mat-menu-item-with-icon-leading-spacing, 12px);
849}
850.mat-mdc-menu-item, .mat-mdc-menu-item:visited, .mat-mdc-menu-item:link {
851  color: var(--mat-menu-item-label-text-color, var(--mat-sys-on-surface));
852}
853.mat-mdc-menu-item .mat-icon-no-color,
854.mat-mdc-menu-item .mat-mdc-menu-submenu-icon {
855  color: var(--mat-menu-item-icon-color, var(--mat-sys-on-surface-variant));
856}
857.mat-mdc-menu-item[disabled] {
858  cursor: default;
859  opacity: 0.38;
860}
861.mat-mdc-menu-item[disabled]::after {
862  display: block;
863  position: absolute;
864  content: "";
865  top: 0;
866  left: 0;
867  bottom: 0;
868  right: 0;
869}
870.mat-mdc-menu-item:focus {
871  outline: 0;
872}
873.mat-mdc-menu-item .mat-icon {
874  flex-shrink: 0;
875  margin-right: var(--mat-menu-item-spacing, 12px);
876  height: var(--mat-menu-item-icon-size, 24px);
877  width: var(--mat-menu-item-icon-size, 24px);
878}
879[dir=rtl] .mat-mdc-menu-item {
880  text-align: right;
881}
882[dir=rtl] .mat-mdc-menu-item .mat-icon {
883  margin-right: 0;
884  margin-left: var(--mat-menu-item-spacing, 12px);
885}
886.mat-mdc-menu-item:not([disabled]):hover {
887  background-color: var(--mat-menu-item-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent));
888}
889.mat-mdc-menu-item:not([disabled]).cdk-program-focused, .mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused, .mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted {
890  background-color: var(--mat-menu-item-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));
891}
892@media (forced-colors: active) {
893  .mat-mdc-menu-item {
894    margin-top: 1px;
895  }
896}
897
898.mat-mdc-menu-submenu-icon {
899  width: var(--mat-menu-item-icon-size, 24px);
900  height: 10px;
901  fill: currentColor;
902  padding-left: var(--mat-menu-item-spacing, 12px);
903}
904[dir=rtl] .mat-mdc-menu-submenu-icon {
905  padding-right: var(--mat-menu-item-spacing, 12px);
906  padding-left: 0;
907}
908[dir=rtl] .mat-mdc-menu-submenu-icon polygon {
909  transform: scaleX(-1);
910  transform-origin: center;
911}
912@media (forced-colors: active) {
913  .mat-mdc-menu-submenu-icon {
914    fill: CanvasText;
915  }
916}
917
918.mat-mdc-menu-item .mat-mdc-menu-ripple {
919  top: 0;
920  left: 0;
921  right: 0;
922  bottom: 0;
923  position: absolute;
924  pointer-events: none;
925}
926</style>
926<script id="ld-organization" type="application/ld+json">{"@context":"https://schema.org","@type":["ProfessionalService","LocalBusiness"],"name":"Tümerdem","description":"Netherlands-based software consultancy: architecture-led custom software, legacy modernization, cloud migration and digital transformation.","url":"https://tumerdem.nl","logo":"https://tumerdem.nl/art/tumerdem.png","email":"[email protected]","telephone":"+31621167920","areaServed":"Worldwide","address":{"@type":"PostalAddress","addressLocality":"Someren","addressCountry":"NL"},"founder":{"@type":"Person","name":"Doğu Tümerdem"},"sameAs":["https://www.linkedin.com/in/tumerdemnnl/","https://github.com/dogutumerdem"]}</script>
926<script id="ld-person" type="application/ld+json">{"@context":"https://schema.org","@type":"Person","name":"Doğu Tümerdem","jobTitle":"Senior Software Architect","url":"https://tumerdem.nl/about","sameAs":["https://www.linkedin.com/in/tumerdemnnl/","https://github.com/dogutumerdem"],"worksFor":{"@type":"Organization","name":"Tümerdem","url":"https://tumerdem.nl"}}</script>
926<script id="ld-website" type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Tümerdem","url":"https://tumerdem.nl","potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://tumerdem.nl/portfolio?q={search_term_string}"},"query-input":"required name=search_term_string"}}</script>
926<style ng-app-id="ng">.mat-ripple {
927  overflow: hidden;
928  position: relative;
929}
930.mat-ripple:not(:empty) {
931  transform: translateZ(0);
932}
933
934.mat-ripple.mat-ripple-unbounded {
935  overflow: visible;
936}
937
938.mat-ripple-element {
939  position: absolute;
940  border-radius: 50%;
941  pointer-events: none;
942  transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);
943  transform: scale3d(0, 0, 0);
944  background-color: var(--mat-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface) 10%, transparent));
945}
946@media (forced-colors: active) {
947  .mat-ripple-element {
948    display: none;
949  }
950}
951.cdk-drag-preview .mat-ripple-element, .cdk-drag-placeholder .mat-ripple-element {
952  display: none;
953}
954</style><style ng-app-id="ng">.about-intro[_ngcontent-ng-c1504834714]{display:grid;grid-template-columns:1.3fr .7fr;gap:clamp(2rem,5vw,4rem);align-items:start}.about-intro[_ngcontent-ng-c1504834714]   .lede[_ngcontent-ng-c1504834714]{margin-bottom:1.4rem}.about-intro[_ngcontent-ng-c1504834714]   p[_ngcontent-ng-c1504834714]{color:var(--ink-soft)}.portrait[_ngcontent-ng-c1504834714]{position:relative;aspect-ratio:4/5;border-radius:var(--radius-lg);overflow:hidden;margin:0;border:1px solid var(--line);display:flex;align-items:flex-end}.portrait-img[_ngcontent-ng-c1504834714]{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center top}.portrait[_ngcontent-ng-c1504834714]   .caption[_ngcontent-ng-c1504834714]{position:relative;width:100%;padding:1.1rem 1.2rem;background:linear-gradient(to top,rgba(28,26,23,.78),transparent);color:#fff}.portrait[_ngcontent-ng-c1504834714]   .caption[_ngcontent-ng-c1504834714]   .name[_ngcontent-ng-c1504834714]{font-family:var(--font-display);font-weight:600;font-size:1.05rem}.portrait[_ngcontent-ng-c1504834714]   .caption[_ngcontent-ng-c1504834714]   .role[_ngcontent-ng-c1504834714]{font-size:.85rem;opacity:.9}.values-grid[_ngcontent-ng-c1504834714]{display:grid;grid-template-columns:repeat(4,1fr);gap:1.5rem;margin-top:2rem}.value[_ngcontent-ng-c1504834714]   mat-icon[_ngcontent-ng-c1504834714]{color:var(--accent-strong);font-size:2rem;height:2rem;width:2rem;margin-bottom:.6rem}.value[_ngcontent-ng-c1504834714]   h3[_ngcontent-ng-c1504834714]{font-size:1.2rem;margin-bottom:.3rem}.value[_ngcontent-ng-c1504834714]   p[_ngcontent-ng-c1504834714]{color:var(--ink-soft);margin:0}.steps[_ngcontent-ng-c1504834714]{list-style:none;counter-reset:step;margin:2rem 0 0;padding:0;display:grid;gap:1.2rem;max-width:760px}.step[_ngcontent-ng-c1504834714]{display:flex;gap:1rem;align-items:flex-start;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:1.3rem 1.5rem}.step[_ngcontent-ng-c1504834714]   mat-icon[_ngcontent-ng-c1504834714]{color:var(--accent-strong);flex:none}.step[_ngcontent-ng-c1504834714]   h3[_ngcontent-ng-c1504834714]{font-size:1.15rem;margin-bottom:.2rem}.step[_ngcontent-ng-c1504834714]   p[_ngcontent-ng-c1504834714]{color:var(--ink-soft);margin:0}.weps[_ngcontent-ng-c1504834714]{max-width:760px}.weps-body[_ngcontent-ng-c1504834714]{margin-top:1.5rem}.weps-link[_ngcontent-ng-c1504834714]{margin:0 0 2rem}.weps-link[_ngcontent-ng-c1504834714]   a[_ngcontent-ng-c1504834714]{display:inline-flex;align-items:center;gap:.35rem;font-weight:600;color:var(--accent-strong)}.weps-link[_ngcontent-ng-c1504834714]   mat-icon[_ngcontent-ng-c1504834714]{font-size:1.1rem;height:1.1rem;width:1.1rem}.quote[_ngcontent-ng-c1504834714]{position:relative;margin:0;background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--accent-strong);border-radius:var(--radius-lg);padding:1.8rem 2rem}.quote[_ngcontent-ng-c1504834714]   .quote-mark[_ngcontent-ng-c1504834714]{color:var(--accent-strong);opacity:.35;font-size:2.4rem;height:2.4rem;width:2.4rem;margin-bottom:.4rem}.quote[_ngcontent-ng-c1504834714]   blockquote[_ngcontent-ng-c1504834714]{margin:0;font-family:var(--font-display);font-size:clamp(1.15rem,1rem + .7vw,1.5rem);line-height:1.5}.quote[_ngcontent-ng-c1504834714]   figcaption[_ngcontent-ng-c1504834714]{margin-top:1.2rem;display:flex;flex-direction:column}
954.quote[_ngcontent-ng-c1504834714]   .quote-name[_ngcontent-ng-c1504834714]{font-weight:600}.quote[_ngcontent-ng-c1504834714]   .quote-role[_ngcontent-ng-c1504834714]{color:var(--muted);font-size:.9rem}.contact-band[_ngcontent-ng-c1504834714]{display:grid;grid-template-columns:1.2fr .8fr;gap:clamp(2rem,5vw,4rem);align-items:start}.contact-lead[_ngcontent-ng-c1504834714]   h2[_ngcontent-ng-c1504834714]{font-size:clamp(1.4rem,1.1rem + 1.4vw,2rem);max-width:24ch;margin:.4rem 0 .8rem}.contact-lead[_ngcontent-ng-c1504834714]   .lede[_ngcontent-ng-c1504834714]{margin-bottom:1rem}.contact-lead[_ngcontent-ng-c1504834714]   .location[_ngcontent-ng-c1504834714]{color:var(--muted);margin:0}.contact-details[_ngcontent-ng-c1504834714]{list-style:none;margin:0 0 1.2rem;padding:0;display:grid;gap:.9rem}.contact-details[_ngcontent-ng-c1504834714]   li[_ngcontent-ng-c1504834714]{display:flex;align-items:center;gap:.7rem}.contact-details[_ngcontent-ng-c1504834714]   mat-icon[_ngcontent-ng-c1504834714]{color:var(--accent-strong)}.vat[_ngcontent-ng-c1504834714]{color:var(--muted);margin:0}.contact-social[_ngcontent-ng-c1504834714]{display:flex;gap:1.2rem;font-weight:600}@media(max-width:860px){.contact-band[_ngcontent-ng-c1504834714]{grid-template-columns:1fr}}@media(max-width:980px){.values-grid[_ngcontent-ng-c1504834714]{grid-template-columns:1fr 1fr}}@media(max-width:860px){.about-intro[_ngcontent-ng-c1504834714]{grid-template-columns:1fr}.portrait[_ngcontent-ng-c1504834714]{aspect-ratio:16/11;max-height:340px}}@media(max-width:520px){.values-grid[_ngcontent-ng-c1504834714]{grid-template-columns:1fr}}</style><meta property="og:type" content="website"><meta property="og:image" content="https://tumerdem.nl/og-image.png"><meta property="og:site_name" content="Tümerdem"><meta property="og:url" content="https://tumerdem.nl/about"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:image" content="https://tumerdem.nl/og-image.png"><link rel="canonical" href="https://tumerdem.nl/about"><link rel="alternate" hreflang="en" href="https://tumerdem.nl/about"><link rel="alternate" hreflang="x-default" href="https://tumerdem.nl/about"><meta name="geo.region" content="NL"><meta name="geo.placename" content="Someren, Netherlands"><meta name="geo.position" content="51.389;5.738"><meta name="ICBM" content="51.389, 5.738">
954<script id="ld-breadcrumb" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://tumerdem.nl"},{"@type":"ListItem","position":2,"name":"About","item":"https://tumerdem.nl/about"}]}</script>
954<meta property="og:title" content="About Doğu Tümerdem — Senior Software Architect, Netherlands"><meta property="og:description" content="Senior software architect with 10+ years on business-critical systems — ASML, Canon, and public-sector clients in the Netherlands and Turkey. Based in Someren, Netherlands."><meta name="twitter:title" content="About Doğu Tümerdem — Senior Software Architect, Netherlands"><meta name="twitter:description" content="Senior software architect with 10+ years on business-critical systems — ASML, Canon, and public-sector clients in the Netherlands and Turkey. Based in Someren, Netherlands."></head>
955  <body><!--nghm-->
955<script type="text/javascript" id="ng-event-dispatch-contract">(()=>{function p(t,n,r,o,e,i,f,m){return{eventType:t,event:n,targetElement:r,eic:o,timeStamp:e,eia:i,eirp:f,eiack:m}}function u(t){let n=[],r=e=>{n.push(e)};return{c:t,q:n,et:[],etc:[],d:r,h:e=>{r(p(e.type,e,e.target,t,Date.now()))}}}function s(t,n,r){for(let o=0;o<n.length;o++){let e=n[o];(r?t.etc:t.et).push(e),t.c.addEventListener(e,t.h,r)}}function c(t,n,r,o,e=window){let i=u(t);e._ejsas||(e._ejsas={}),e._ejsas[n]=i,s(i,r),s(i,o,!0)}window.__jsaction_bootstrap=c;})();
956</script>
956<script>window.__jsaction_bootstrap(document.body,"ng",["click","focusin","focusout","mousedown","keydown"],[]);</script>
956
957    <app-root ng-version="21.2.13" _nghost-ng-c2623730230 ngh="9" ng-server-context="ssg"><a _ngcontent-ng-c2623730230 href="#main" class="skip-link">Skip to content</a><app-header _ngcontent-ng-c2623730230 _nghost-ng-c20459858 ngh="5"><header _ngcontent-ng-c20459858 class="site-header"><div _ngcontent-ng-c20459858 class="wrap nav"><a _ngcontent-ng-c20459858 routerlink="/" class="wordmark" href="/" jsaction="click:;"><img _ngcontent-ng-c20459858 src="/art/tumerdem.png" alt aria-hidden="true" class="wordmark-logo"><span _ngcontent-ng-c20459858>tumerdem</span></a><nav _ngcontent-ng-c20459858 class="nav-links" aria-label="Primary"><!----><a _ngcontent-ng-c20459858 routerlinkactive="active" class="nav-link" href="/" jsaction="click:;"><!----> Home </a><!----><!----><a _ngcontent-ng-c20459858 routerlinkactive="active" class="nav-link active" href="/about" jsaction="click:;"><!----> About </a><!----><!----><a _ngcontent-ng-c20459858 routerlinkactive="active" class="nav-link" href="/services" jsaction="click:;"><!----> Services </a><!----><!----><a _ngcontent-ng-c20459858 routerlinkactive="active" class="nav-link" href="/portfolio" jsaction="click:;"><!----> Portfolio </a><!----><!----><a _ngcontent-ng-c20459858 routerlinkactive="active" class="nav-link" href="/partners" jsaction="click:;"><!----> Partners </a><!----><div _ngcontent-ng-c20459858 class="nav-item nav-item--parent" jsaction="focusin:;focusout:;"><button _ngcontent-ng-c20459858 type="button" aria-haspopup="true" class="nav-link nav-parent" aria-expanded="false"> Products <mat-icon _ngcontent-ng-c20459858 role="img" aria-hidden="true" class="mat-icon notranslate nav-caret material-icons mat-ligature-font mat-icon-no-color" data-mat-icon-type="font" ngh="0">expand_more</mat-icon></button><ul _ngcontent-ng-c20459858 class="nav-submenu"><li _ngcontent-ng-c20459858><a _ngcontent-ng-c20459858 routerlinkactive="active" class="nav-link" href="/veldpas" jsaction="click:;"><img _ngcontent-ng-c20459858 alt aria-hidden="true" class="nav-logo" src="/art/veldpas/Logo-1.svg"><!----> VeldPas </a></li><li _ngcontent-ng-c20459858><a _ngcontent-ng-c20459858 routerlinkactive="active" class="nav-link" href="/labelwright" jsaction="click:;"><img _ngcontent-ng-c20459858 alt aria-hidden="true" class="nav-logo" src="/art/labelwright/LabelWright.svg"><!----> LabelWright </a></li><li _ngcontent-ng-c20459858><a _ngcontent-ng-c20459858 routerlinkactive="active" class="nav-link" href="/hourwright" jsaction="click:;"><img _ngcontent-ng-c20459858 alt aria-hidden="true" class="nav-logo" src="/art/hourwright/hourwright-logo.svg"><!----> HourWright </a></li><li _ngcontent-ng-c20459858><a _ngcontent-ng-c20459858 routerlinkactive="active" class="nav-link" href="/vectorwright" jsaction="click:;"><img _ngcontent-ng-c20459858 alt aria-hidden="true" class="nav-logo" src="/art/vectorwright/vectorwright-logo.svg"><!----> VectorWright </a></li><!----></ul></div><!----><!----><!----></nav><div _ngcontent-ng-c20459858 class="nav-actions"><app-language-switcher _ngcontent-ng-c20459858 _nghost-ng-c1005577388 ngh="3"><button _ngcontent-ng-c1005577388 mat-button class="mdc-button mat-mdc-button-base mat-mdc-menu-trigger lang-trigger mat-mdc-button mat-unthemed _mat-animation-noopable" mat-ripple-loader-uninitialized mat-ripple-loader-class-name="mat-mdc-button-ripple" aria-label="Change language" aria-haspopup="menu" aria-expanded="false" ngh="1" jsaction="click:;mousedown:;keydown:;"><span class="mat-mdc-button-persistent-ripple mdc-button__ripple"></span><mat-icon _ngcontent-ng-c1005577388 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">language</mat-icon><span class="mdc-button__label"><span _ngcontent-ng-c1005577388 class="lang-code">EN</span></span><span class="mat-focus-indicator"></span><span class="mat-mdc-button-touch-target"></span></button><!----><mat-menu _ngcontent-ng-c1005577388 ngh="2"><!----></mat-menu></app-language-switcher><a _ngcontent-ng-c20459858 routerlink="/about" class="btn btn-primary get-in-touch" href="/about" jsaction="click:;">Get in touch</a><button _ngcontent-ng-c20459858 mat-icon-button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base menu-toggle mat-unthemed _mat-animation-noopable" mat-ripple-loader-uninitialized mat-ripple-loader-class-name="mat-mdc-button-ripple" mat-ripple-loader-centered aria-expanded="false" aria-label="Toggle menu" ngh="4" jsaction="click:;"><span class="mat-mdc-button-persistent-ripple mdc-icon-button__ripple"></span><mat-icon _ngcontent-ng-c20459858 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">menu</mat-icon>
957<span class="mat-focus-indicator"></span><span class="mat-mdc-button-touch-target"></span></button></div></div><!----></header></app-header><main _ngcontent-ng-c2623730230 id="main"><router-outlet _ngcontent-ng-c2623730230></router-outlet><app-about _nghost-ng-c1504834714 ngh="6"><section _ngcontent-ng-c1504834714 class="section"><div _ngcontent-ng-c1504834714 class="wrap about-intro"><div _ngcontent-ng-c1504834714><span _ngcontent-ng-c1504834714 class="eyebrow">About</span><h1 _ngcontent-ng-c1504834714>A senior architect, now your partner</h1><p _ngcontent-ng-c1504834714 class="lede">Doğu is a seasoned software architect with over ten years of experience designing scalable solutions that align technology with business objectives.</p><p _ngcontent-ng-c1504834714>His expertise spans microservices, DevOps, and cloud platforms, and he is recognized for leading collaborative teams to deliver impactful projects that drive innovation and growth. He has recently worked at ASML and Canon Production Printing.</p><p _ngcontent-ng-c1504834714>Tümerdem is the next step: an independent consultancy that brings enterprise-grade rigor directly to clients — without the overhead of a large agency.</p></div><figure _ngcontent-ng-c1504834714 class="portrait" aria-label="Founder portrait"><img _ngcontent-ng-c1504834714 src="/art/me.jpg" alt="Doğu Tümerdem" class="portrait-img"><figcaption _ngcontent-ng-c1504834714 class="caption"><div _ngcontent-ng-c1504834714 class="name">Doğu Tümerdem</div><div _ngcontent-ng-c1504834714 class="role">Founder · Senior Software Architect</div></figcaption></figure></div></section><section _ngcontent-ng-c1504834714 class="section section--surface"><div _ngcontent-ng-c1504834714 class="wrap"><span _ngcontent-ng-c1504834714 class="eyebrow">What we stand for</span><h2 _ngcontent-ng-c1504834714 class="section-title">Values we don't compromise on</h2><div _ngcontent-ng-c1504834714 class="values-grid"><div _ngcontent-ng-c1504834714 class="value"><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">autorenew</mat-icon><h3 _ngcontent-ng-c1504834714>Agile</h3><p _ngcontent-ng-c1504834714>Iterative, adaptable delivery that responds to what we learn.</p></div><div _ngcontent-ng-c1504834714 class="value"><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">visibility</mat-icon><h3 _ngcontent-ng-c1504834714>Transparent</h3><p _ngcontent-ng-c1504834714>Clear communication of strategy, benefits, and risks at every step.</p></div><div _ngcontent-ng-c1504834714 class="value"><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">trending_up</mat-icon><h3 _ngcontent-ng-c1504834714>Result-Oriented</h3><p _ngcontent-ng-c1504834714>Measurable outcomes, not activity for its own sake.</p></div><div _ngcontent-ng-c1504834714 class="value"><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">groups</mat-icon><h3 _ngcontent-ng-c1504834714>Strong Team</h3><p _ngcontent-ng-c1504834714>Senior-led, collaborative engineering you can rely on.</p></div><!----></div></div></section><section _ngcontent-ng-c1504834714 class="section"><div _ngcontent-ng-c1504834714 class="wrap"><span _ngcontent-ng-c1504834714 class="eyebrow">How we work</span><h2 _ngcontent-ng-c1504834714 class="section-title">From complexity to clarity</h2><ol _ngcontent-ng-c1504834714 class="steps"><li _ngcontent-ng-c1504834714 class="step"><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">search</mat-icon><div _ngcontent-ng-c1504834714><h3 _ngcontent-ng-c1504834714>Discovery</h3><p _ngcontent-ng-c1504834714>Understand the system, the constraints, and the business goal.</p></div></li><li _ngcontent-ng-c1504834714 class="step"><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">architecture</mat-icon><div _ngcontent-ng-c1504834714><h3 _ngcontent-ng-c1504834714>Pragmatic architecture</h3><p _ngcontent-ng-c1504834714>Design for scale and reliability without over-engineering.</p></div></li><li _ngcontent-ng-c1504834714 class="step"><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">cyclone</mat-icon><div _ngcontent-ng-c1504834714><h3 _ngcontent-ng-c1504834714>Iterative delivery</h3><p _ngcontent-ng-c1504834714>Ship in small, validated increments with clear communication.</p></div></li><li _ngcontent-ng-c1504834714 class="step"><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">school</mat-icon><div _ngcontent-ng-c1504834714><h3 _ngcontent-ng-c1504834714>Measurable results &amp; handover</h3><p _ngcontent-ng-c1504834714>Leave you with outcomes, documentation, and knowledge transfer.</p></div></li><!----></ol></div></section><section _ngcontent-ng-c1504834714 class="section section--surface"><div _ngcontent-ng-c1504834714 class="wrap weps"><span _ngcontent-ng-c1504834714 class="eyebrow">Our commitment</span><h2 _ngcontent-ng-c1504834714 class="section-title">Women's Empowerment Principles</h2><p _ngcontent-ng-c1504834714 class="lede weps-body">Tumerdem is a signatory of the Women's Empowerment Principles (WEPs) — the framework created by UN Women and the UN Global Compact to advance gender equality in the workplace, the marketplace, and the wider community. We hold ourselves to these principles as we build the company and every team within it.</p><p _ngcontent-ng-c1504834714 class="weps-link"><a _ngcontent-ng-c1504834714 href="https://www.weps.org/" target="_blank" rel="noopener"> Learn more at weps.org <mat-icon _ngcontent-ng-c1504834714 role="img" aria-hidden="true" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" data-mat-icon-type="font" ngh="0">open_in_new</mat-icon></a></p><figure _ngcontent-ng-c1504834714 class="quote"><mat-icon _ngcontent-ng-c1504834714 role="img" aria-hidden="true" class="mat-icon notranslate quote-mark material-icons mat-ligature-font mat-icon-no-color" data-mat-icon-type="font" ngh="0">format_quote</mat-icon><blockquote _ngcontent-ng-c1504834714>We are signing the Women's Empowerment Principles at the very start of our company's life, not at the end of it. Equality is not a policy we will add once we are big enough; it is part of how we intend to become that. Technology is built by the people we choose to include — and we intend to choose well.</blockquote><figcaption _ngcontent-ng-c1504834714><span _ngcontent-ng-c1504834714 class="quote-name">Doğu Tümerdem</span><span _ngcontent-ng-c1504834714 class="quote-role">Founder &amp; CEO, tumerdem</span></figcaption></figure></div></section><section _ngcontent-ng-c1504834714 class="section section--ink"><div _ngcontent-ng-c1504834714 class="wrap contact-band"><div _ngcontent-ng-c1504834714 class="contact-lead"><span _ngcontent-ng-c1504834714 class="eyebrow">Contact</span><h2 _ngcontent-ng-c1504834714>Tell us about your system, your challenge, or your idea.</h2><p _ngcontent-ng-c1504834714 class="lede">We'll get back to you.</p><p _ngcontent-ng-c1504834714 class="location">Based in the Netherlands, working internationally</p></div><div _ngcontent-ng-c1504834714 class="contact-info"><ul _ngcontent-ng-c1504834714 class="contact-details"><li _ngcontent-ng-c1504834714><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">person</mat-icon>
957<span _ngcontent-ng-c1504834714>Doğu Tümerdem</span></li><li _ngcontent-ng-c1504834714><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">mail</mat-icon><a _ngcontent-ng-c1504834714 href="mailto:[email protected]">[email protected]</a></li><li _ngcontent-ng-c1504834714><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">call</mat-icon><a _ngcontent-ng-c1504834714 href="tel:+31621167920">+31 6 21167920</a></li><li _ngcontent-ng-c1504834714><mat-icon _ngcontent-ng-c1504834714 role="img" class="mat-icon notranslate material-icons mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" ngh="0">place</mat-icon><span _ngcontent-ng-c1504834714>Someren, Netherlands</span></li></ul><p _ngcontent-ng-c1504834714 class="vat">VAT number: NL005491819B52</p><div _ngcontent-ng-c1504834714 class="contact-social"></div></div></div></section></app-about><!----></main><app-footer _ngcontent-ng-c2623730230 _nghost-ng-c1371357180 ngh="7"><footer _ngcontent-ng-c1371357180 class="site-footer"><div _ngcontent-ng-c1371357180 class="wrap footer-grid"><div _ngcontent-ng-c1371357180 class="footer-brand"><span _ngcontent-ng-c1371357180 class="wordmark"><img _ngcontent-ng-c1371357180 src="/art/tumerdem.png" alt aria-hidden="true" class="wordmark-logo"> tumerdem </span><p _ngcontent-ng-c1371357180>Netherlands-based software consultancy. Architecture-led custom software, modernization and digital transformation.</p></div><nav _ngcontent-ng-c1371357180 class="footer-nav" aria-label="Footer"><h3 _ngcontent-ng-c1371357180>Explore</h3><!----><a _ngcontent-ng-c1371357180 href="/" jsaction="click:;">Home</a><!----><!----><a _ngcontent-ng-c1371357180 href="/about" jsaction="click:;">About</a><!----><!----><a _ngcontent-ng-c1371357180 href="/services" jsaction="click:;">Services</a><!----><!----><a _ngcontent-ng-c1371357180 href="/portfolio" jsaction="click:;">Portfolio</a><!----><!----><a _ngcontent-ng-c1371357180 href="/partners" jsaction="click:;">Partners</a><!----><a _ngcontent-ng-c1371357180 href="/veldpas" jsaction="click:;">VeldPas</a><a _ngcontent-ng-c1371357180 href="/labelwright" jsaction="click:;">LabelWright</a><a _ngcontent-ng-c1371357180 href="/hourwright" jsaction="click:;">HourWright</a><a _ngcontent-ng-c1371357180 href="/vectorwright" jsaction="click:;">VectorWright</a><!----><!----><!----><!----></nav><div _ngcontent-ng-c1371357180 class="footer-contact"><h3 _ngcontent-ng-c1371357180>Contact</h3><a _ngcontent-ng-c1371357180 href="mailto:[email protected]">[email protected]</a><a _ngcontent-ng-c1371357180 href="tel:+31621167920">+31 6 21167920</a><span _ngcontent-ng-c1371357180 class="muted">Someren, Netherlands</span></div><div _ngcontent-ng-c1371357180 class="footer-social"><h3 _ngcontent-ng-c1371357180>Connect</h3><a _ngcontent-ng-c1371357180 target="_blank" rel="noopener" href="https://www.linkedin.com/in/tumerdemnnl/">LinkedIn</a><a _ngcontent-ng-c1371357180 target="_blank" rel="noopener" href="https://github.com/dogutumerdem">GitHub</a><a _ngcontent-ng-c1371357180 target="_blank" rel="noopener" href="https://www.youtube.com/channel/UCvtpj0cQHayNrU_TX8oP11Q">YouTube</a></div></div><div _ngcontent-ng-c1371357180 class="wrap footer-legal"><span _ngcontent-ng-c1371357180>© 2026 Tümerdem</span><a _ngcontent-ng-c1371357180 routerlink="/about" href="/about" jsaction="click:;">Privacy</a></div></footer></app-footer><app-cookie-notice _ngcontent-ng-c2623730230 _nghost-ng-c2254782119 ngh="8"><!----></app-cookie-notice></app-root>
958  <link rel="modulepreload" href="chunk-M6B2H3MP.js"><link rel="modulepreload" href="chunk-MQ77FCKM.js"><link rel="modulepreload" href="chunk-GYTO6JGQ.js"><link rel="modulepreload" href="chunk-45FKBS7K.js"><link rel="modulepreload" href="chunk-J3TMUNYT.js"><link rel="modulepreload" href="chunk-TMVELU25.js">
958<script src="main-5YRYHZKX.js" type="module"></script>
958
959<link rel="modulepreload" href="chunk-OEGIL76Y.js">
960<link rel="modulepreload" href="chunk-AIR3NF5K.js">
961
962
963<script id="ng-state" type="application/json">{"__nghData__":[{},{"n":{"2":"hfn2","5":"hfn3"}},{"t":{"0":"t6"},"c":{"0":[]}},{"n":{"2":"0fn","3":"2f","4":"0fn2f"},"c":{"0":[]},"d":[9],"t":{"9":"t7"}},{"n":{"2":"hfn2"}},{"t":{"9":"t0","19":"t8"},"c":{"9":[{"i":"t0","r":3,"t":{"0":"t1","1":"t2"},"c":{"0":[],"1":[{"i":"t2","r":1,"t":{"1":"t3"},"c":{"1":[]}}]},"x":5},{"i":"t0","r":3,"t":{"0":"t1","1":"t2"},"c":{"0":[{"i":"t1","r":1,"n":{"7":"6f"},"t":{"10":"t4"},"c":{"10":[{"i":"t4","r":1,"t":{"2":"t5"},"c":{"2":[{"i":"t5","r":1}]},"x":4}]}}],"1":[]}}],"19":[]},"n":{"17":"15fn","18":"17f"}},{"t":{"37":"t9","48":"t10"},"c":{"37":[{"i":"t9","r":1,"n":{"2":"1f"},"x":4}],"48":[{"i":"t10","r":1,"n":{"2":"1f"},"x":4}]},"n":{"65":"64f","68":"67f","97":"96f","102":"101f","107":"106f","112":"111f"}},{"t":{"15":"t11"},"c":{"15":[{"i":"t11","r":3,"t":{"0":"t12","1":"t13"},"c":{"0":[],"1":[{"i":"t13","r":1}]},"x":5},{"i":"t11","r":7,"t":{"0":"t12","1":"t13"},"c":{"0":[{"i":"t12","r":5,"t":{"1":"t14"},"c":{"1":[{"i":"t14","r":1,"x":4}]}}],"1":[]}}]}},{"t":{"0":"t15"},"c":{"0":[]}},{"c":{"5":[{"i":"c1504834714","r":1}]}}]}</script>
963</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.