123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>IN-S63BTA — Component Characterization</title>
<style>
  @font-face { font-family: 'Familjen Grotesk'; src: url('https://adom.inc/fonts/familjen-grotesk/familjen-grotesk-latin-700-normal.woff2') format('woff2'); font-weight: 700; }
  @font-face { font-family: 'Familjen Grotesk'; src: url('https://adom.inc/fonts/familjen-grotesk/familjen-grotesk-latin-500-normal.woff2') format('woff2'); font-weight: 500; }
  @font-face { font-family: 'Satoshi'; src: url('https://adom.inc/fonts/satoshi/satoshi-400-normal.woff2') format('woff2'); font-weight: 400; }
  @font-face { font-family: 'Satoshi'; src: url('https://adom.inc/fonts/satoshi/satoshi-500-normal.woff2') format('woff2'); font-weight: 500; }
  @font-face { font-family: 'JetBrains Mono'; src: url('https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2') format('woff2'); font-weight: 400; }

  :root {
    --bg: #0d1117; --surface: #161b22; --elevated: #1c2128; --border: #30363d; --border-muted: #21262d;
    --text: #e6edf3; --text-muted: #8b949e; --text-dim: #484f58;
    --accent: #00b8b0; --accent-bright: #00e6dc; --accent-dim: rgba(0,184,176,0.12); --accent-border: rgba(0,184,176,0.25);
    --green: #3fb950; --orange: #d29922; --red: #f85149; --purple: #8C6BF7; --blue: #58a6ff;
    --led-color: #FF8C00; --led-dim: #FF8C001e; --led-border: #FF8C0059;
  }
  * { margin: 0; padding: 0; box-sizing: border-box; }
  body { font-family: 'Satoshi', sans-serif; background: var(--bg); color: var(--text); font-size: 13px; line-height: 1.6; overflow-y: auto; }
  h1,h2,h3 { font-family: 'Familjen Grotesk', sans-serif; font-weight: 700; }
  code { font-family: 'JetBrains Mono', monospace; font-size: 12px; }
  a { color: var(--accent); text-decoration: none; }
  a:hover { color: var(--accent-bright); text-decoration: underline; }

  .header { background: var(--surface); border-bottom: 1px solid var(--border-muted); padding: 20px 24px; }
  .header-top { display: flex; align-items: center; gap: 12px; margin-bottom: 4px; }
  .header .brand { color: var(--accent); font-family: 'Familjen Grotesk', sans-serif; font-size: 12px; font-weight: 600; }
  .header .vsep { width: 1px; height: 16px; background: var(--border); }
  .header .crumb { color: var(--text-dim); font-size: 12px; }
  .header h1 { font-size: 22px; margin-bottom: 2px; }
  .header h1 .val { color: #FF8C00; }
  .header .subtitle { color: var(--text-muted); font-size: 13px; }
  .header .tags { display: flex; gap: 6px; margin-top: 10px; flex-wrap: wrap; }
  .tag { display: inline-flex; align-items: center; gap: 4px; padding: 3px 10px; border-radius: 12px; font-size: 11px; font-weight: 500; }
  .tag.pkg { background: rgba(0,184,176,0.12); color: var(--accent); }
  .tag.mfr { background: rgba(88,166,255,0.12); color: var(--blue); }
  .tag.series { background: rgba(140,107,247,0.12); color: var(--purple); }
  .tag.rohs { background: rgba(63,185,80,0.12); color: var(--green); }
  .tag.app { background: var(--led-dim); color: var(--led-color); }

  .container { max-width: 1100px; margin: 0 auto; padding: 24px; }
  .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
  .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }
  @media (max-width: 800px) { .grid-2, .grid-3 { grid-template-columns: 1fr; } }

  .section { margin-bottom: 28px; }
  .section-title { font-size: 14px; color: var(--text); margin-bottom: 12px; padding-bottom: 6px; border-bottom: 1px solid var(--border-muted); display: flex; align-items: center; gap: 8px; }

  .card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 16px; }
  .card:hover { border-color: var(--accent-border); }

  .spec-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; }
  .spec-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 12px 14px; text-align: center; }
  .spec-card .sc-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-dim); margin-bottom: 4px; }
  .spec-card .sc-value { font-size: 22px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; }
  .spec-card .sc-detail { font-size: 11px; color: var(--text-muted); margin-top: 2px; }
  .spec-card.highlight { border-color: var(--led-border); background: linear-gradient(180deg, #FF8C000f, var(--surface)); }
  .spec-card.highlight .sc-value { color: var(--led-color); }

  .detail-table { width: 100%; border-collapse: collapse; }
  .detail-table tr { border-bottom: 1px solid var(--border-muted); }
  .detail-table tr:last-child { border-bottom: none; }
  .detail-table td { padding: 8px 0; }
  .detail-table td:first-child { color: var(--text-muted); font-size: 12px; width: 45%; }
  .detail-table td:last-child { font-family: 'JetBrains Mono', monospace; font-size: 13px; text-align: right; }

  .chart-wrap { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 16px; }
  .chart-wrap h3 { font-size: 13px; color: var(--text); margin-bottom: 12px; }
  .chart-wrap .chart-note { font-size: 11px; color: var(--text-dim); margin-top: 8px; }
  svg text { font-family: 'JetBrains Mono', monospace; }

  .pkg-drawing { display: flex; align-items: center; justify-content: center; padding: 20px; }

  .env-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  @media (max-width: 700px) { .env-grid { grid-template-columns: 1fr; } }
  .env-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 12px 14px; }
  .env-card .env-name { font-size: 12px; font-weight: 600; margin-bottom: 4px; }
  .env-card .env-spec { font-size: 11px; color: var(--text-muted); }
  .env-card .env-detail { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text); margin-top: 4px; }

  .vendor-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
  @media (max-width: 700px) { .vendor-cards { grid-template-columns: 1fr; } }
  .vendor-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 14px; }
  .vendor-card .vc-name { font-size: 12px; font-weight: 600; margin-bottom: 6px; }
  .vendor-card .vc-name.mouser { color: var(--blue); }
  .vendor-card .vc-name.digikey { color: var(--red); }
  .vendor-card .vc-name.jlcpcb { color: var(--green); }
  .vendor-card .vc-price { font-size: 20px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; }
  .vendor-card .vc-detail { font-size: 11px; color: var(--text-muted); margin-top: 4px; }
  .vendor-card .vc-link { display: inline-block; margin-top: 8px; font-size: 11px; color: var(--accent); }
  .vendor-card.recommended { border-color: var(--accent-border); }
  .vendor-card.recommended::before { content: 'RECOMMENDED'; display: block; font-size: 9px; letter-spacing: 1px; color: var(--accent); margin-bottom: 6px; font-weight: 600; }

  .copy-btn { background: none; border: 1px solid var(--border); color: var(--text-muted); border-radius: 4px; padding: 2px 6px; font-size: 13px; cursor: pointer; font-family: 'JetBrains Mono', monospace; vertical-align: middle; transition: border-color 0.15s, color 0.15s; }
  .copy-btn:hover { border-color: var(--accent); color: var(--accent); }

  .dl-btn { display: inline-block; margin-top: 10px; padding: 6px 14px; background: var(--accent-dim); border: 1px solid var(--accent-border); border-radius: 6px; color: var(--accent); font-size: 11px; font-weight: 500; font-family: 'Satoshi', sans-serif; text-decoration: none; transition: background 0.15s, border-color 0.15s; }
  .dl-btn:hover { background: rgba(0,184,176,0.2); border-color: var(--accent); text-decoration: none; color: var(--accent-bright); }

  .open-full-banner { display: flex; align-items: center; justify-content: center; padding: 12px 24px; background: linear-gradient(90deg, rgba(0,184,176,0.12), rgba(0,184,176,0.06)); border-bottom: 1px solid var(--accent-border); }
  .open-full-btn { display: inline-flex; align-items: center; gap: 8px; padding: 8px 20px; background: var(--accent); color: var(--bg); font-family: 'Familjen Grotesk', sans-serif; font-size: 13px; font-weight: 600; border-radius: 6px; text-decoration: none; transition: background 0.15s; cursor: pointer; border: none; }
  .open-full-btn:hover { background: var(--accent-bright); text-decoration: none; color: var(--bg); }

  .source { text-align: center; color: var(--text-dim); font-size: 11px; padding: 24px 0 12px; border-top: 1px solid var(--border-muted); margin-top: 20px; }

  .color-swatch { border-radius: 8px; padding: 20px; text-align: center; position: relative; overflow: hidden; }
  .color-swatch .swatch-block { width: 100%; height: 80px; border-radius: 6px; margin-bottom: 12px; position: relative; }
  .color-swatch .swatch-label { font-size: 14px; font-weight: 600; font-family: 'Familjen Grotesk', sans-serif; }
  .color-swatch .swatch-detail { font-size: 11px; color: var(--text-muted); margin-top: 4px; }

  .calc-card { background: var(--surface); border: 1px solid var(--led-border); border-radius: 8px; padding: 20px; }
  .calc-card h3 { font-size: 14px; color: var(--led-color); margin-bottom: 16px; font-family: 'Familjen Grotesk', sans-serif; }
  .calc-inputs { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }
  .calc-field label { display: block; font-size: 11px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; }
  .calc-field input { width: 100%; background: var(--bg); border: 1px solid var(--border); color: var(--text); border-radius: 6px; padding: 8px 12px; font-family: 'JetBrains Mono', monospace; font-size: 14px; outline: none; transition: border-color 0.15s; }
  .calc-field input:focus { border-color: var(--led-color); }
  .calc-field .unit { font-size: 11px; color: var(--text-dim); margin-top: 2px; }
  .calc-results { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .calc-result { background: var(--bg); border: 1px solid var(--border-muted); border-radius: 6px; padding: 10px 12px; }
  .calc-result .cr-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-dim); margin-bottom: 2px; }
  .calc-result .cr-value { font-size: 18px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; color: var(--led-color); }
  .calc-result .cr-detail { font-size: 11px; color: var(--text-muted); margin-top: 2px; }
  .calc-schematic { margin-top: 16px; text-align: center; }
</style>
</head>
<body>

<div class="open-full-banner" id="fullPageBanner" style="display:none">
  <span style="color:var(--text-muted);font-size:12px;margin-right:8px">Full page:</span>
  <code style="color:var(--accent);font-size:11px;background:var(--elevated);padding:4px 8px;border-radius:4px;user-select:all">https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s63bta/IN-S63BTA.html</code>
  <button class="open-full-btn" id="copyFullUrl" style="margin-left:8px">Copy Link</button>
</div>
<script>
if(window.self!==window.top){document.getElementById('fullPageBanner').style.display='flex'}
document.getElementById('copyFullUrl').addEventListener('click',function(){var t=document.createElement('textarea');t.value='https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s63bta/IN-S63BTA.html';document.body.appendChild(t);t.select();document.execCommand('copy');document.body.removeChild(t);this.textContent='Copied!';var b=this;setTimeout(function(){b.textContent='Copy Link'},1500)});
</script>

<div class="header">
  <div class="header-top">
    <div class="brand">Adom</div>
    <div class="vsep"></div>
    <div class="crumb">Components &rsaquo; LEDs &rsaquo; 0603</div>
  </div>
  <h1>IN-S63BTA &mdash; <span class="val">Amber</span></h1>
  <div class="subtitle">Inolux Corporation &middot; Top View SMD LED &middot; 0603 (1.6 &times; 0.8mm) &middot; AlInGaP</div>
  <div class="tags">
    <span class="tag pkg">0603</span>
    <span class="tag mfr">Inolux</span>
    <span class="tag series">IN-S63BT</span>
    <span class="tag rohs">RoHS</span>
    <span class="tag app">Amber LED</span>
  </div>
</div>

<div class="container">

  <!-- Key Specs -->
  <div class="section">
    <div class="spec-cards">
      <div class="spec-card highlight">
        <div class="sc-label">Wavelength</div>
        <div class="sc-value" style="color:#FF8C00">605nm</div>
        <div class="sc-detail">609nm peak</div>
      </div>
      <div class="spec-card">
        <div class="sc-label">Luminous Intensity</div>
        <div class="sc-value">140mcd</div>
        <div class="sc-detail">@ 20mA</div>
      </div>
      <div class="spec-card">
        <div class="sc-label">Forward Voltage</div>
        <div class="sc-value">2.0V</div>
        <div class="sc-detail">typical @ 20mA</div>
      </div>
      <div class="spec-card">
        <div class="sc-label">Forward Current</div>
        <div class="sc-value">25mA</div>
        <div class="sc-detail">20mA typical</div>
      </div>
      <div class="spec-card">
        <div class="sc-label">Viewing Angle</div>
        <div class="sc-value">120&deg;</div>
        <div class="sc-detail">2&theta;&frac12;</div>
      </div>
      <div class="spec-card">
        <div class="sc-label">Package</div>
        <div class="sc-value">0603</div>
        <div class="sc-detail">1.6&times;0.8&times;0.3mm</div>
      </div>
    </div>
  </div>

  <div class="grid-2">
    <!-- Left column -->
    <div>
      <!-- Electrical Characteristics -->
      <div class="section">
        <h2 class="section-title">Electrical Characteristics</h2>
        <div class="card">
          <table class="detail-table">
            <tr><td>Forward Voltage (typ)</td><td>2.0V @ 20mA</td></tr>
            <tr><td>Forward Voltage (max)</td><td>2.6V</td></tr>
            <tr><td>Reverse Voltage (max)</td><td>5V</td></tr>
            <tr><td>Forward Current (max)</td><td>25mA</td></tr>
            <tr><td>Peak Forward Current</td><td>70mA (1/10, 0.1ms)</td></tr>
            <tr><td>Power Dissipation</td><td>75mW</td></tr>
            <tr><td>Dominant Wavelength</td><td>605nm</td></tr>
            <tr><td>Peak Wavelength</td><td>609nm</td></tr>
            <tr><td>Luminous Intensity</td><td>140 mcd @ 20mA</td></tr>
            <tr><td>Viewing Angle (2&theta;&frac12;)</td><td>120&deg;</td></tr>
            <tr><td>Material</td><td>AlInGaP</td></tr>
            <tr><td>Lens Type</td><td>Clear</td></tr>
          </table>
        </div>
      </div>

      <!-- Operating Conditions -->
      <div class="section">
        <h2 class="section-title">Operating Conditions</h2>
        <div class="card">
          <table class="detail-table">
            <tr><td>Operating Temp</td><td>&minus;30&deg;C to +85&deg;C</td></tr>
            <tr><td>Storage Temp</td><td>&minus;40&deg;C to +90&deg;C</td></tr>
            <tr><td>ESD Sensitivity</td><td>AlInGaP &mdash; handle with care</td></tr>
            <tr><td>Polarity</td><td>Cathode marked on package</td></tr>
          </table>
          <div style="margin-top:10px;padding:8px 12px;background:rgba(248,81,73,0.08);border:1px solid rgba(248,81,73,0.2);border-radius:6px;font-size:11px;color:var(--red)">
            &#9888; ESD Sensitive Device &mdash; AlInGaP LEDs require proper ESD precautions during handling and assembly. Use grounded wrist straps and ESD-safe workstations.
          </div>
        </div>
      </div>
    </div>

    <!-- Right column -->
    <div>
      <!-- Package Drawing -->
      <div class="section">
        <h2 class="section-title">Package &amp; Dimensions</h2>
        <div class="card">
          <div class="pkg-drawing">
            <svg width="100%" height="200" viewBox="0 0 500 200">
              <!-- Top view -->
              <text x="120" y="14" fill="#8b949e" font-size="10" text-anchor="middle">Top View</text>
              <rect x="55" y="24" width="130" height="65" rx="3" fill="#1c2128" stroke="#30363d" stroke-width="1.5"/>
              <rect x="55" y="24" width="25" height="65" rx="1" fill="#FF8C0022" stroke="#FF8C00" stroke-width="1"/>
              <rect x="160" y="24" width="25" height="65" rx="1" fill="#FF8C0022" stroke="#FF8C00" stroke-width="1"/>
              <line x1="155" y1="28" x2="155" y2="85" stroke="#FF8C00" stroke-width="1.5" stroke-dasharray="3,2"/>
              <rect x="92" y="38" width="36" height="37" rx="1" fill="#FF8C0040" stroke="#FF8C0080" stroke-width="0.8"/>
              <path d="M110,47 Q125,35 135,47" stroke="#FF8C0099" stroke-width="0.6" fill="none"/>
              <text x="168" y="18" fill="#FF8C00" font-size="9" text-anchor="middle">K (cathode)</text>
              <text x="68" y="18" fill="#8b949e" font-size="9" text-anchor="middle">A</text>

              <line x1="55" y1="102" x2="185" y2="102" stroke="#484f58" stroke-width="0.5"/>
              <line x1="55" y1="98" x2="55" y2="106" stroke="#484f58" stroke-width="0.5"/>
              <line x1="185" y1="98" x2="185" y2="106" stroke="#484f58" stroke-width="0.5"/>
              <text x="120" y="118" fill="#e6edf3" font-size="10" text-anchor="middle">1.6 &plusmn; 0.1</text>

              <line x1="195" y1="24" x2="195" y2="89" stroke="#484f58" stroke-width="0.5"/>
              <line x1="191" y1="24" x2="199" y2="24" stroke="#484f58" stroke-width="0.5"/>
              <line x1="191" y1="89" x2="199" y2="89" stroke="#484f58" stroke-width="0.5"/>
              <text x="215" y="60" fill="#e6edf3" font-size="10">0.8 &plusmn; 0.1</text>

              <!-- Side view -->
              <text x="380" y="14" fill="#8b949e" font-size="10" text-anchor="middle">Side View</text>
              <rect x="315" y="48" width="130" height="30" rx="2" fill="#1c2128" stroke="#30363d" stroke-width="1.5"/>
              <path d="M320,48 Q380,40 445,48" stroke="#FF8C0080" stroke-width="1.5" fill="#FF8C0014"/>
              <rect x="315" y="48" width="20" height="30" rx="1" fill="#FF8C0022" stroke="#FF8C00" stroke-width="1"/>
              <rect x="425" y="48" width="20" height="30" rx="1" fill="#FF8C0022" stroke="#FF8C00" stroke-width="1"/>
              <line x1="455" y1="38" x2="455" y2="78" stroke="#484f58" stroke-width="0.5"/>
              <line x1="451" y1="38" x2="459" y2="38" stroke="#484f58" stroke-width="0.5"/>
              <line x1="451" y1="78" x2="459" y2="78" stroke="#484f58" stroke-width="0.5"/>
              <text x="465" y="62" fill="#e6edf3" font-size="10">0.3 &plusmn; 0.05</text>

              <text x="120" y="145" fill="#8b949e" font-size="10" text-anchor="middle">0603 (1608 metric)</text>
              <text x="380" y="100" fill="#8b949e" font-size="10" text-anchor="middle">Clear lens &middot; AlInGaP</text>

              <rect x="55" y="158" width="390" height="28" rx="4" fill="#FF8C000f" stroke="#FF8C0033" stroke-width="0.5"/>
              <text x="250" y="176" fill="#FF8C00" font-size="10" text-anchor="middle">&#9888; Polarized &mdash; cathode mark on package indicates negative terminal</text>
            </svg>
          </div>
        </div>
      </div>

      <!-- Land Pattern -->
      <div class="section">
        <h2 class="section-title">Recommended Land Pattern</h2>
        <div class="card">
          <table class="detail-table">
            <tr><td>Pad Width</td><td>0.7 &plusmn; 0.1mm</td></tr>
            <tr><td>Pad Height</td><td>0.7 &plusmn; 0.1mm</td></tr>
            <tr><td>Pad Spacing (center-to-center)</td><td>0.7 &plusmn; 0.1mm</td></tr>
            <tr><td>Polarity</td><td>Cathode marked on PCB</td></tr>
          </table>
        </div>
      </div>
    </div>
  </div>

  <!-- Color Swatch -->
  <div class="section">
    <h2 class="section-title">Emission Color</h2>
    <div class="card color-swatch">
      <div class="swatch-block" style="background: linear-gradient(135deg, #FF8C00, #FF6600); box-shadow: 0 4px 24px #FF8C0044; display:flex; align-items:center; justify-content:center;">
        <span style="font-size:28px;font-weight:700;font-family:'Familjen Grotesk',sans-serif;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,0.5)">Amber</span>
      </div>
      <div class="swatch-label" style="color:#FF8C00">605nm Dominant Wavelength</div>
      <div class="swatch-detail">Peak wavelength 609nm &middot; AlInGaP semiconductor &middot; CSS approximation: #FF8C00</div>
    </div>
  </div>

  <!-- Spectral Distribution -->
  <div class="section">
    <h2 class="section-title">Spectral Distribution</h2>
    <div class="chart-wrap">
      <h3>Emission Spectrum &mdash; Relative Intensity vs. Wavelength</h3>
      <svg id="spectral-chart" width="100%" height="280" viewBox="0 0 700 280">
        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>
        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="20" x2="660" y2="20" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>

        <defs>
          <linearGradient id="ledGrad" x1="0" y1="0" x2="0" y2="1">
            <stop offset="0%" stop-color="#FF8C00" stop-opacity="0.6"/>
            <stop offset="100%" stop-color="#FF8C00" stop-opacity="0.05"/>
          </linearGradient>
        </defs>
        <path d="M60,220 L60,220 L64,220 L68,220 L72,220 L76,220 L80,220 L84,220 L88,220 L92,220 L96,220 L100,220 L104,220 L108,220 L112,220 L116,220 L120,220 L124,220 L128,220 L132,220 L136,220 L140,220 L144,220 L148,220 L152,220 L156,220 L160,220 L164,220 L168,220 L172,220 L176,220 L180,220 L184,220 L188,220 L192,220 L196,220 L200,220 L204,220 L208,220 L212,220 L216,220 L220,220 L224,220 L228,220 L232,220 L236,220 L240,220 L244,220 L248,220 L252,220 L256,220 L260,220 L264,220 L268,220 L272,220 L276,220 L280,220 L284,220 L288,220 L292,220 L296,220 L300,220 L304,220 L308,220 L312,220 L316,220 L320,220 L324,220 L328,220 L332,220 L336,220 L340,220 L344,220 L348,220 L352,220 L356,220 L360,220 L364,220 L368,220 L372,220 L376,220 L380,220 L384,220 L388,220 L392,220 L396,220 L400,220 L404,220 L408,220 L412,220 L416,220 L420,220 L424,219 L428,217 L432,214 L436,208 L440,197 L444,180 L448,157 L452,128 L456,95 L460,63 L464,37 L468,22 L472,22 L476,37 L480,63 L484,95 L488,128 L492,157 L496,180 L500,197 L504,208 L508,214 L512,217 L516,219 L520,220 L524,220 L528,220 L532,220 L536,220 L540,220 L544,220 L548,220 L552,220 L556,220 L560,220 L564,220 L568,220 L572,220 L576,220 L580,220 L584,220 L588,220 L592,220 L596,220 L600,220 L604,220 L608,220 L612,220 L616,220 L620,220 L624,220 L628,220 L632,220 L636,220 L640,220 L644,220 L648,220 L652,220 L656,220 L660,220 L660,220 Z" fill="url(#ledGrad)" opacity="0.3"/>
        <path d="M60,220 L60,220 L64,220 L68,220 L72,220 L76,220 L80,220 L84,220 L88,220 L92,220 L96,220 L100,220 L104,220 L108,220 L112,220 L116,220 L120,220 L124,220 L128,220 L132,220 L136,220 L140,220 L144,220 L148,220 L152,220 L156,220 L160,220 L164,220 L168,220 L172,220 L176,220 L180,220 L184,220 L188,220 L192,220 L196,220 L200,220 L204,220 L208,220 L212,220 L216,220 L220,220 L224,220 L228,220 L232,220 L236,220 L240,220 L244,220 L248,220 L252,220 L256,220 L260,220 L264,220 L268,220 L272,220 L276,220 L280,220 L284,220 L288,220 L292,220 L296,220 L300,220 L304,220 L308,220 L312,220 L316,220 L320,220 L324,220 L328,220 L332,220 L336,220 L340,220 L344,220 L348,220 L352,220 L356,220 L360,220 L364,220 L368,220 L372,220 L376,220 L380,220 L384,220 L388,220 L392,220 L396,220 L400,220 L404,220 L408,220 L412,220 L416,220 L420,220 L424,219 L428,217 L432,214 L436,208 L440,197 L444,180 L448,157 L452,128 L456,95 L460,63 L464,37 L468,22 L472,22 L476,37 L480,63 L484,95 L488,128 L492,157 L496,180 L500,197 L504,208 L508,214 L512,217 L516,219 L520,220 L524,220 L528,220 L532,220 L536,220 L540,220 L544,220 L548,220 L552,220 L556,220 L560,220 L564,220 L568,220 L572,220 L576,220 L580,220 L584,220 L588,220 L592,220 L596,220 L600,220 L604,220 L608,220 L612,220 L616,220 L620,220 L624,220 L628,220 L632,220 L636,220 L640,220 L644,220 L648,220 L652,220 L656,220 L660,220" stroke="#FF8C00" stroke-width="2.5" fill="none"/>

        <!-- Peak annotation -->
        <circle cx="470" cy="22" r="4" fill="#FF8C00" opacity="0.9"/>
        <line x1="470" y1="22" x2="470" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>
        <text x="470" y="238" fill="#FF8C00" font-size="10" text-anchor="middle">605nm</text>

        <!-- FWHM indicator -->
        <line x1="453" y1="120" x2="487" y2="120" stroke="#FF8C00" stroke-width="1" stroke-dasharray="4,2" opacity="0.6"/>
        <text x="502" y="116" fill="#8b949e" font-size="9">FWHM ~17nm</text>

        <!-- Y axis labels -->
        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0%</text>
        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">25%</text>
        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">50%</text>
        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">75%</text>
        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">100%</text>
        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Relative Intensity</text>

        <!-- X axis labels -->
        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">400</text>
        <text x="180" y="255" fill="#484f58" font-size="9" text-anchor="middle">440</text>
        <text x="300" y="255" fill="#484f58" font-size="9" text-anchor="middle">480</text>
        <text x="420" y="255" fill="#484f58" font-size="9" text-anchor="middle">560</text>
        <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">640</text>
        <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">700</text>
        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Wavelength (nm)</text>
      </svg>
      <div class="chart-note">Amber emission centered at 605nm dominant wavelength (609nm peak). The spectral width (~17nm FWHM) is typical of AlInGaP LEDs.</div>
    </div>
  </div>

  <!-- IV Curve -->
  <div class="section">
    <h2 class="section-title">Forward Current vs. Forward Voltage</h2>
    <div class="chart-wrap">
      <h3>IV Characteristic &mdash; the essential curve for circuit design</h3>
      <svg id="iv-chart" width="100%" height="280" viewBox="0 0 700 280">
        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>
        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="20" x2="660" y2="20" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="231" y1="20" x2="231" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="403" y1="20" x2="403" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="574" y1="20" x2="574" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>

        <defs>
          <linearGradient id="ivGrad" x1="0" y1="0" x2="0" y2="1">
            <stop offset="0%" stop-color="#FF8C00" stop-opacity="0.6"/>
            <stop offset="100%" stop-color="#FF8C00" stop-opacity="0.05"/>
          </linearGradient>
        </defs>
        <path d="M60,220 L345,220 L352,220 L360,217 L368,210 L375,196 L390,140 L405,116 L420,92 L443,56 L465,20 L465,220 L60,220 Z" fill="url(#ivGrad)" opacity="0.15"/>
        <path d="M60,220 L345,220 L352,220 L360,217 L368,210 L375,196 L390,140 L405,116 L420,92 L443,56 L465,20" stroke="#FF8C00" stroke-width="2.5" fill="none"/>

        <!-- Operating point -->
        <circle cx="390" cy="140" r="5" fill="#FF8C00" opacity="0.9"/>
        <line x1="390" y1="140" x2="390" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.5"/>
        <line x1="60" y1="140" x2="390" y2="140" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.5"/>
        <rect x="395" y="126" width="110" height="28" rx="4" fill="#FF8C001e"/>
        <text x="450" y="139" fill="#FF8C00" font-size="10" text-anchor="middle">Typ: 2.0V, 20mA</text>
        <text x="450" y="150" fill="#8b949e" font-size="8" text-anchor="middle">Operating point</text>

        <!-- Max If line -->
        <line x1="60" y1="120" x2="660" y2="120" stroke="#f85149" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.3"/>
        <text x="100" y="114" fill="#f85149" font-size="9">25mA max</text>

        <!-- Y axis labels -->
        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>
        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">12.5</text>
        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">25</text>
        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">37.5</text>
        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">50</text>
        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Forward Current (mA)</text>

        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">0</text>
        <text x="231" y="255" fill="#484f58" font-size="9" text-anchor="middle">1.0</text>
        <text x="403" y="255" fill="#484f58" font-size="9" text-anchor="middle">2.0</text>
        <text x="574" y="255" fill="#484f58" font-size="9" text-anchor="middle">3.0</text>
        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Forward Voltage (V)</text>
      </svg>
      <div class="chart-note">Characteristic exponential IV curve for a AlInGaP amber LED. Design point: 2.0V typical at 20mA. Never exceed 25mA continuous forward current.</div>
    </div>
  </div>

  <!-- Derating -->
  <div class="section">
    <h2 class="section-title">Forward Current Derating</h2>
    <div class="chart-wrap">
      <h3>Maximum Forward Current vs. Ambient Temperature</h3>
      <svg id="derating-chart" width="100%" height="280" viewBox="0 0 700 280">
        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>
        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>

        <defs>
          <linearGradient id="derateGrad" x1="0" y1="0" x2="0" y2="1">
            <stop offset="0%" stop-color="#FF8C00" stop-opacity="0.6"/>
            <stop offset="100%" stop-color="#FF8C00" stop-opacity="0.05"/>
          </linearGradient>
        </defs>
        <!-- Derating: flat at 25mA until 25C, linear down to 0mA at ~89C -->
        <path d="M60,20 L210,20 L540,187 L565,220 L60,220 Z" fill="url(#derateGrad)" opacity="0.12"/>
        <path d="M60,20 L210,20" stroke="#FF8C00" stroke-width="2.5" fill="none"/>
        <path d="M210,20 L540,187" stroke="#FF8C00" stroke-width="2.5" fill="none"/>
        <path d="M540,187 L565,220" stroke="#FF8C00" stroke-width="2.5" fill="none" stroke-dasharray="4,3"/>

        <circle cx="210" cy="20" r="4" fill="#FF8C00" opacity="0.9"/>
        <text x="210" y="40" fill="#FF8C00" font-size="10" text-anchor="middle">25mA @ 25&deg;C</text>
        <circle cx="540" cy="187" r="4" fill="#FF8C00" opacity="0.9"/>
        <text x="540" y="178" fill="#FF8C00" font-size="10" text-anchor="middle">5mA @ 80&deg;C</text>

        <rect x="200" y="100" width="110" height="20" rx="4" fill="rgba(63,185,80,0.12)"/>
        <text x="255" y="114" fill="#3fb950" font-size="10" text-anchor="middle">Safe operating</text>

        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>
        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">7.5</text>
        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">15</text>
        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">22.5</text>
        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">30</text>
        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Max If (mA)</text>

        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">0</text>
        <text x="210" y="255" fill="#484f58" font-size="9" text-anchor="middle">25</text>
        <text x="360" y="255" fill="#484f58" font-size="9" text-anchor="middle">50</text>
        <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">80</text>
        <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">100</text>
        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Ambient Temperature (&deg;C)</text>
      </svg>
      <div class="chart-note">Maximum forward current decreases linearly with temperature above 25&deg;C. At 85&deg;C, significant derating is required. Design margin is critical in enclosed or high-temperature applications.</div>
    </div>
  </div>

  <!-- Brightness vs Current -->
  <div class="section">
    <h2 class="section-title">Luminous Intensity vs. Forward Current</h2>
    <div class="chart-wrap">
      <h3>Relative Brightness (normalized at 20mA)</h3>
      <svg id="brightness-current-chart" width="100%" height="280" viewBox="0 0 700 280">
        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>
        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>

        <path d="M60,220 Q120,168 180,155 Q240,135 300,120 Q360,106 420,95 Q480,78 540,64 Q600,52 660,40"
              stroke="#FF8C00" stroke-width="2.5" fill="none"/>
        <path d="M60,220 L660,20" stroke="#484f58" stroke-width="1" stroke-dasharray="5,4" opacity="0.4"/>
        <text x="600" y="50" fill="#484f58" font-size="9">Linear</text>

        <circle cx="300" cy="120" r="5" fill="#FF8C00" opacity="0.9"/>
        <line x1="60" y1="120" x2="300" y2="120" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>
        <line x1="300" y1="120" x2="300" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>
        <text x="310" y="114" fill="#FF8C00" font-size="10">1.0 @ 20mA</text>

        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>
        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">0.5</text>
        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">1.0</text>
        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">1.5</text>
        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">2.0</text>
        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Relative Brightness</text>

        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">0</text>
        <text x="180" y="255" fill="#484f58" font-size="9" text-anchor="middle">10</text>
        <text x="300" y="255" fill="#484f58" font-size="9" text-anchor="middle">20</text>
        <text x="420" y="255" fill="#484f58" font-size="9" text-anchor="middle">30</text>
        <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">40</text>
        <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">50</text>
        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Forward Current (mA)</text>
      </svg>
      <div class="chart-note">Brightness increases sublinearly with current. Diminishing returns at higher drive currents &mdash; optimize for efficiency at or below 20mA.</div>
    </div>
  </div>

  <!-- Brightness vs Temperature -->
  <div class="section">
    <h2 class="section-title">Luminous Intensity vs. Temperature</h2>
    <div class="chart-wrap">
      <h3>Relative Brightness vs. Ambient Temperature (normalized at 25&deg;C)</h3>
      <svg id="brightness-temp-chart" width="100%" height="280" viewBox="0 0 700 280">
        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>
        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>
        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
        <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>

        <path d="M60,70 L180,95 L240,105 L300,112 L390,120 L480,134 L540,142 L600,148 L660,150"
              stroke="#FF8C00" stroke-width="2.5" fill="none"/>
        <circle cx="390" cy="120" r="5" fill="#FF8C00" opacity="0.9"/>
        <line x1="60" y1="120" x2="390" y2="120" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>
        <line x1="390" y1="120" x2="390" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>
        <text x="400" y="114" fill="#FF8C00" font-size="10">1.0 @ 25&deg;C</text>

        <text x="100" y="62" fill="#58a6ff" font-size="9">Brighter when cold</text>
        <text x="570" y="165" fill="#f85149" font-size="9">Dimmer when hot</text>

        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>
        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">0.5</text>
        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">1.0</text>
        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">1.5</text>
        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">2.0</text>
        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Relative Brightness</text>

        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">-30</text>
        <text x="180" y="255" fill="#484f58" font-size="9" text-anchor="middle">-10</text>
        <text x="300" y="255" fill="#484f58" font-size="9" text-anchor="middle">10</text>
        <text x="390" y="255" fill="#484f58" font-size="9" text-anchor="middle">25</text>
        <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">50</text>
        <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">70</text>
        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Ambient Temperature (&deg;C)</text>
      </svg>
      <div class="chart-note">AlInGaP LEDs lose brightness at elevated temperatures. At 70&deg;C, expect ~30% reduction. Account for this in designs with wide temperature swings.</div>
    </div>
  </div>

  <!-- Resistor Calculator -->
  <div class="section">
    <h2 class="section-title">LED Resistor Calculator</h2>
    <div class="calc-card">
      <h3>&#9889; Series Resistor Selection</h3>
      <div class="calc-inputs">
        <div class="calc-field">
          <label>Supply Voltage</label>
          <input type="number" id="calc-vsupply" value="3.3" step="0.1" min="0">
          <div class="unit">Volts</div>
        </div>
        <div class="calc-field">
          <label>Desired Current</label>
          <input type="number" id="calc-iled" value="20" step="1" min="0">
          <div class="unit">Milliamps</div>
        </div>
      </div>
      <div class="calc-results">
        <div class="calc-result">
          <div class="cr-label">Calculated Resistor</div>
          <div class="cr-value" id="calc-r-exact">55.0 &Omega;</div>
          <div class="cr-detail" id="calc-r-formula">R = (3.3V - 2.0V) / 20mA</div>
        </div>
        <div class="calc-result">
          <div class="cr-label">Nearest E24 Value</div>
          <div class="cr-value" id="calc-r-e24">56.0 &Omega;</div>
          <div class="cr-detail" id="calc-r-actual">Actual If = 19.6mA</div>
        </div>
        <div class="calc-result">
          <div class="cr-label">Resistor Power</div>
          <div class="cr-value" id="calc-p-resistor">21.6 mW</div>
          <div class="cr-detail" id="calc-p-r-detail">P = (V<sub>supply</sub> - V<sub>f</sub>) &times; I<sub>f</sub></div>
        </div>
        <div class="calc-result">
          <div class="cr-label">LED Power</div>
          <div class="cr-value" id="calc-p-led">43.2 mW</div>
          <div class="cr-detail" id="calc-p-led-detail">P = V<sub>f</sub> &times; I<sub>f</sub> (max 75mW)</div>
        </div>
      </div>
      <div class="calc-schematic">
        <svg width="400" height="80" viewBox="0 0 400 80" style="max-width:100%">
          <text x="20" y="38" fill="#e6edf3" font-size="11" font-family="JetBrains Mono,monospace" id="calc-svg-vsupply">3.3V</text>
          <line x1="50" y1="35" x2="90" y2="35" stroke="#e6edf3" stroke-width="1.5"/>
          <path d="M90,35 L100,25 L110,45 L120,25 L130,45 L140,25 L150,45 L160,35" stroke="#00b8b0" stroke-width="2" fill="none"/>
          <text x="125" y="60" fill="#00b8b0" font-size="10" text-anchor="middle" font-family="JetBrains Mono,monospace" id="calc-svg-r">56.0Ω</text>
          <line x1="160" y1="35" x2="210" y2="35" stroke="#e6edf3" stroke-width="1.5"/>
          <polygon points="210,22 210,48 240,35" fill="none" stroke="#FF8C00" stroke-width="2"/>
          <line x1="240" y1="22" x2="240" y2="48" stroke="#FF8C00" stroke-width="2"/>
          <line x1="230" y1="18" x2="238" y2="10" stroke="#FF8C00" stroke-width="1"/>
          <line x1="235" y1="22" x2="243" y2="14" stroke="#FF8C00" stroke-width="1"/>
          <polygon points="238,10 234,13 237,14" fill="#FF8C00"/>
          <polygon points="243,14 239,17 242,18" fill="#FF8C00"/>
          <text x="225" y="65" fill="#FF8C00" font-size="10" text-anchor="middle" font-family="JetBrains Mono,monospace">LED</text>
          <line x1="240" y1="35" x2="300" y2="35" stroke="#e6edf3" stroke-width="1.5"/>
          <line x1="300" y1="28" x2="300" y2="42" stroke="#e6edf3" stroke-width="1.5"/>
          <line x1="290" y1="42" x2="310" y2="42" stroke="#e6edf3" stroke-width="1.5"/>
          <line x1="294" y1="47" x2="306" y2="47" stroke="#e6edf3" stroke-width="1.2"/>
          <line x1="297" y1="52" x2="303" y2="52" stroke="#e6edf3" stroke-width="0.8"/>
          <text x="320" y="42" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">GND</text>
          <text x="180" y="26" fill="#8b949e" font-size="9" text-anchor="middle" font-family="JetBrains Mono,monospace" id="calc-svg-if">20mA</text>
          <line x1="168" y1="30" x2="192" y2="30" stroke="#8b949e" stroke-width="0.5"/>
          <polygon points="192,30 187,27 187,33" fill="#8b949e"/>
        </svg>
      </div>
    </div>
  </div>

  <!-- Environmental -->
  <div class="section">
    <h2 class="section-title">Environmental &amp; Handling</h2>
    <div class="env-grid">
      <div class="env-card">
        <div class="env-name">ESD Sensitivity</div>
        <div class="env-spec">AlInGaP &mdash; ESD precautions required</div>
        <div class="env-detail">Use grounded wrist straps &amp; ESD-safe tools</div>
      </div>
      <div class="env-card">
        <div class="env-name">Operating Temperature</div>
        <div class="env-spec">Continuous operation range</div>
        <div class="env-detail">&minus;30&deg;C to +85&deg;C</div>
      </div>
      <div class="env-card">
        <div class="env-name">Storage Temperature</div>
        <div class="env-spec">Unbiased storage</div>
        <div class="env-detail">&minus;40&deg;C to +90&deg;C</div>
      </div>
      <div class="env-card">
        <div class="env-name">Moisture Sensitivity</div>
        <div class="env-spec">MSL noted in packaging</div>
        <div class="env-detail">Follow J-STD-020 bake requirements</div>
      </div>
    </div>
  </div>

  <!-- Symbol, Footprint & 3D View -->
  <div class="section">
    <h2 class="section-title">Symbol, Footprint &amp; 3D Model</h2>
    <div class="grid-2" style="margin-bottom:12px">
      <!-- Interactive SymView -->
      <div class="card" style="padding:0;overflow:hidden">
        <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Schematic Symbol</div>
        <iframe src="IN-S63BTA-symview.html" style="width:100%;height:340px;border:none;display:block" allow="fullscreen"></iframe>
      </div>
      <!-- Interactive FpView -->
      <div class="card" style="padding:0;overflow:hidden">
        <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Footprint (0603)</div>
        <iframe src="IN-S63BTA-fpview.html" style="width:100%;height:340px;border:none;display:block" allow="fullscreen"></iframe>
      </div>
    </div>
    <!-- 3D Model -->
    <div class="card" style="text-align:center;margin-bottom:12px">
      <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);margin-bottom:12px">3D Model (interactive)</div>
      <canvas id="viewer3d" width="600" height="300" style="width:100%;height:300px;border-radius:4px;cursor:grab"></canvas>
      <div style="font-size:10px;color:var(--text-dim);margin-top:6px">Click &amp; drag to rotate &middot; Scroll to zoom</div>
    </div>
    <!-- Download / Export Bar -->
    <div class="card" style="display:flex;align-items:center;gap:10px;flex-wrap:wrap">
      <span style="font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.5px">Export:</span>
      <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s63bta/IN-S63BTA.kicad_sym" download>KiCad Symbol (.kicad_sym)</a>
      <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s63bta/IN-S63BTA.kicad_mod" download>KiCad Footprint (.kicad_mod)</a>
      <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s63bta/IN-S63BTA.lbr" download>Fusion 360 (.lbr)</a>
      <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s63bta/IN-S63BTA.step" download>3D Model (.step)</a>
    </div>
  </div>

  <!-- Documents -->
  <div class="section">
    <h2 class="section-title">Documents</h2>
    <div class="card">
      <table class="detail-table">
        <tr><td>Datasheet</td><td><a href="http://www.inolux-corp.com/datasheet/SMDLED/Mono%20Color%20Top%20View/IN-S63BT%20Series.pdf" target="_blank">IN-S63BT Series (PDF) &rarr;</a></td></tr>
        <tr><td>Series</td><td>IN-S63BT</td></tr>
        <tr><td>Manufacturer</td><td>Inolux Corporation</td></tr>
      </table>
    </div>
  </div>

  <div class="source">
    IN-S63BTA characterization &middot; Data from Inolux IN-S63BT Series datasheet &middot; 2026-06-03
  </div>

</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/pmrem/PMREMGenerator.js"></script>
<script>
(function() {
  // ==================== 3D Viewer — IN-S63BTA (0603 LED, amber) ====================
  var canvas = document.getElementById('viewer3d');
  if (canvas && window.THREE) {
    var scene = new THREE.Scene();
    var renderer = new THREE.WebGLRenderer({ canvas: canvas, antialias: true, alpha: true, logarithmicDepthBuffer: true });
    renderer.setSize(canvas.width, canvas.height);
    renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
    renderer.outputEncoding = THREE.sRGBEncoding;
    renderer.toneMapping = THREE.ACESFilmicToneMapping;
    renderer.toneMappingExposure = 1.2;
    renderer.physicallyCorrectLights = true;
    canvas.style.background = 'linear-gradient(180deg, #5a6b7e 0%, #2a3340 100%)';

    var camera = new THREE.PerspectiveCamera(35, canvas.width / canvas.height, 0.01, 1000);

    var pmremGen = new THREE.PMREMGenerator(renderer);
    pmremGen.compileEquirectangularShader();
    var envScene = new THREE.Scene();
    envScene.background = new THREE.Color(0x3a4550);
    var envLight1 = new THREE.DirectionalLight(0xffffff, 2);
    envLight1.position.set(1, 3, 2); envScene.add(envLight1);
    var envLight2 = new THREE.DirectionalLight(0x8899bb, 1);
    envLight2.position.set(-2, 1, -1); envScene.add(envLight2);
    var envRT = pmremGen.fromScene(envScene, 0.04);
    scene.environment = envRT.texture;

    scene.add(new THREE.HemisphereLight(0xe6edf3, 0xb3a699, 0.5));
    var keyLight = new THREE.DirectionalLight(0xffffff, 1.5);
    keyLight.position.set(2, 5, 3); scene.add(keyLight);
    var fillLight = new THREE.DirectionalLight(0x8899aa, 0.5);
    fillLight.position.set(-3, 2, -2); scene.add(fillLight);
    var rimLight = new THREE.DirectionalLight(parseInt('#FF8C00'.slice(1), 16), 0.4);
    rimLight.position.set(0, -1, 3); scene.add(rimLight);

    var S = 1.5; // 0603 is bigger than 0402 so scale less
    var bodyW = 1.6, bodyD = 0.8, bodyH = 0.3;
    var lensH = 0.08;
    var termW = 0.25;

    var bodyMat = new THREE.MeshStandardMaterial({ color: 0x2a2018, metalness: 0.0, roughness: 0.4 });
    var lensMat = new THREE.MeshStandardMaterial({
      color: parseInt('#FF8C00'.slice(1), 16), metalness: 0.0, roughness: 0.15,
      transparent: true, opacity: 0.55,
      emissive: parseInt('#FF6600'.slice(1), 16), emissiveIntensity: 0.3
    });
    var termMat = new THREE.MeshStandardMaterial({ color: 0xc8ccd1, metalness: 1.0, roughness: 0.25 });
    var padMat = new THREE.MeshStandardMaterial({ color: 0xc9a04c, metalness: 1.0, roughness: 0.22 });
    var pcbMat = new THREE.MeshStandardMaterial({ color: 0x0a2a0a, metalness: 0.0, roughness: 0.6 });
    var cathodeMat = new THREE.MeshStandardMaterial({ color: parseInt('#FF8C00'.slice(1), 16), emissive: parseInt('#FF6600'.slice(1), 16), emissiveIntensity: 0.5, metalness: 0.0, roughness: 0.5 });

    var innerW = bodyW - termW * 2 + 0.02;
    var body = new THREE.Mesh(new THREE.BoxGeometry(innerW*S, bodyH*S, bodyD*S), bodyMat);
    body.position.y = bodyH*S/2; scene.add(body);

    var lens = new THREE.Mesh(new THREE.BoxGeometry(bodyW*0.85*S, lensH*S, bodyD*0.85*S), lensMat);
    lens.position.y = (bodyH + lensH/2)*S; scene.add(lens);

    function makeTerminal(xSign) {
      var group = new THREE.Group();
      var front = new THREE.Mesh(new THREE.BoxGeometry(termW*S, bodyH*S, bodyD*S*0.99), termMat);
      front.position.set(xSign*(bodyW/2 - termW/2)*S, bodyH*S/2, 0);
      group.add(front);
      var bot = new THREE.Mesh(new THREE.BoxGeometry((termW+0.03)*S, 0.04*S, bodyD*S*0.99), termMat);
      bot.position.set(xSign*(bodyW/2 - termW/2)*S, 0.02*S, 0);
      group.add(bot);
      return group;
    }
    scene.add(makeTerminal(-1));
    scene.add(makeTerminal(1));

    var cathMark = new THREE.Mesh(new THREE.BoxGeometry(0.02*S, 0.02*S, bodyD*0.7*S), cathodeMat);
    cathMark.position.set(0.4*S, (bodyH + lensH + 0.02)*S, 0); scene.add(cathMark);

    var pcb = new THREE.Mesh(new THREE.BoxGeometry(10*S, 0.08*S, 8*S), pcbMat);
    pcb.position.y = -0.04*S; scene.add(pcb);

    var pad1 = new THREE.Mesh(new THREE.BoxGeometry(0.7*S, 0.025*S, 0.7*S), padMat);
    pad1.position.set(-0.35*S, 0.005*S, 0); scene.add(pad1);
    var pad2 = new THREE.Mesh(new THREE.BoxGeometry(0.7*S, 0.025*S, 0.7*S), padMat);
    pad2.position.set(0.35*S, 0.005*S, 0); scene.add(pad2);

    var gridMat2 = new THREE.LineBasicMaterial({ color: 0x0d3d0d, transparent: true, opacity: 0.3 });
    for (var i = -8; i <= 8; i++) {
      var pts1 = [new THREE.Vector3(i*0.4*S, 0.045*S, -4*S), new THREE.Vector3(i*0.4*S, 0.045*S, 4*S)];
      scene.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts1), gridMat2));
      var pts2 = [new THREE.Vector3(-4*S, 0.045*S, i*0.4*S), new THREE.Vector3(4*S, 0.045*S, i*0.4*S)];
      scene.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts2), gridMat2));
    }

    var isDragging = false, prevX = 0, prevY = 0;
    var theta = Math.PI/4, phi = Math.PI/5.5, radius = 5.0;
    var target = new THREE.Vector3(0, 0.3, 0);

    function updateCamera() {
      camera.position.x = radius * Math.sin(theta) * Math.cos(phi);
      camera.position.y = radius * Math.sin(phi) + target.y;
      camera.position.z = radius * Math.cos(theta) * Math.cos(phi);
      camera.lookAt(target);
    }
    updateCamera();

    canvas.addEventListener('mousedown', function(e) { isDragging = true; prevX = e.clientX; prevY = e.clientY; canvas.style.cursor = 'grabbing'; });
    window.addEventListener('mouseup', function() { isDragging = false; canvas.style.cursor = 'grab'; });
    canvas.addEventListener('mousemove', function(e) {
      if (!isDragging) return;
      theta -= (e.clientX - prevX) * 0.008;
      phi = Math.max(0.05, Math.min(Math.PI/2.2, phi + (e.clientY - prevY) * 0.008));
      prevX = e.clientX; prevY = e.clientY;
      updateCamera();
    });
    canvas.addEventListener('wheel', function(e) {
      e.preventDefault();
      radius = Math.max(2, Math.min(12, radius + e.deltaY * 0.004));
      updateCamera();
    }, { passive: false });

    function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); }
    animate();
  }

  // ==================== Resistor Calculator ====================
  var VF_TYP = 2.0;
  var E24 = [10,11,12,13,15,16,18,20,22,24,27,30,33,36,39,43,47,51,56,62,68,75,82,91];

  function nearestE24(val) {
    if (val <= 0) return 0;
    var decade = 1;
    while (val >= 100) { val /= 10; decade *= 10; }
    while (val < 10) { val *= 10; decade /= 10; }
    var best = E24[0], bestDist = Math.abs(val - E24[0]);
    for (var i = 1; i < E24.length; i++) {
      var d = Math.abs(val - E24[i]);
      if (d < bestDist) { bestDist = d; best = E24[i]; }
    }
    return best * decade;
  }

  function formatResistance(r) {
    if (r >= 1e6) return (r/1e6).toFixed(1) + ' MΩ';
    if (r >= 1e3) return (r/1e3).toFixed(0) + ' kΩ';
    if (r >= 100) return r.toFixed(0) + ' Ω';
    if (r >= 10) return r.toFixed(1) + ' Ω';
    return r.toFixed(2) + ' Ω';
  }

  function updateCalculator() {
    var vSupply = parseFloat(document.getElementById('calc-vsupply').value) || 0;
    var iLed = parseFloat(document.getElementById('calc-iled').value) || 0;
    var iLedA = iLed / 1000;
    var vDrop = vSupply - VF_TYP;
    var rExact = vDrop > 0 && iLedA > 0 ? vDrop / iLedA : 0;
    var rE24 = nearestE24(rExact);
    var iActual = rE24 > 0 ? vDrop / rE24 : 0;
    var pResistor = vDrop * iActual;
    var pLed = VF_TYP * iActual;

    document.getElementById('calc-r-exact').innerHTML = rExact > 0 ? formatResistance(rExact) : '&mdash;';
    document.getElementById('calc-r-formula').textContent = 'R = (' + vSupply.toFixed(1) + 'V - ' + VF_TYP + 'V) / ' + iLed.toFixed(0) + 'mA';
    document.getElementById('calc-r-e24').innerHTML = rE24 > 0 ? formatResistance(rE24) : '&mdash;';
    document.getElementById('calc-r-actual').textContent = iActual > 0 ? 'Actual If = ' + (iActual * 1000).toFixed(1) + 'mA' : '';
    document.getElementById('calc-p-resistor').textContent = pResistor > 0 ? (pResistor * 1000).toFixed(1) + ' mW' : '—';
    document.getElementById('calc-p-led').textContent = pLed > 0 ? (pLed * 1000).toFixed(1) + ' mW' : '—';

    var svgVs = document.getElementById('calc-svg-vsupply');
    if (svgVs) svgVs.textContent = vSupply.toFixed(1) + 'V';
    var svgR = document.getElementById('calc-svg-r');
    if (svgR) svgR.textContent = rE24 > 0 ? formatResistance(rE24) : '—';
    var svgIf = document.getElementById('calc-svg-if');
    if (svgIf) svgIf.textContent = iActual > 0 ? (iActual * 1000).toFixed(1) + 'mA' : '';

    var pLedEl = document.getElementById('calc-p-led');
    if (pLed * 1000 > 75) { pLedEl.style.color = '#f85149'; } else { pLedEl.style.color = ''; }

    var rExactEl = document.getElementById('calc-r-exact');
    if (vDrop <= 0) { rExactEl.innerHTML = '<span style="color:#f85149">V<sub>supply</sub> too low</span>'; }
  }

  document.getElementById('calc-vsupply').addEventListener('input', updateCalculator);
  document.getElementById('calc-iled').addEventListener('input', updateCalculator);
  updateCalculator();
})();
</script>
</body>
</html>