:root,:root[data-theme=light]{--bg: #f7f7f9;--surface: #ffffff;--surface-2: #fafafc;--border: #e3e5ea;--border-strong: #c8ccd5;--text: #1a1d24;--text-muted: #5b6271;--primary: #ec008b;--primary-50: #fce4f1;--magenta: #ec008b;--cerulean: #d6ecf9;--warn-bg: #fff7e6;--warn-border: #f3c674;--code-bg: #f0f1f4;--shadow: 0 1px 2px rgba(0,0,0,.02);--shadow-lift: 0 6px 12px rgba(0,0,0,.22), 0 2px 4px rgba(0,0,0,.05);--code-pill-bg: #f257aa;--code-pill-fg: #ffffff;--axis-bases-des-tic-bg: #d6ecf9;--axis-bases-des-tic-fg: #1a4970;--axis-sciences-de-l-ingenierie-bg: #d6ecf9;--axis-sciences-de-l-ingenierie-fg: #1a4970;--axis-humanites-et-societe-bg: #d6ecf9;--axis-humanites-et-societe-fg: #1a4970;--axis-nouvelles-technologies-bg: #d6ecf9;--axis-nouvelles-technologies-fg: #1a4970;--axis-unknown-bg: #d6ecf9;--axis-unknown-fg: #1a4970;--axis-integration-bg: #e3edd8;--axis-integration-fg: #345820;--axis-orientation-bg: #faf0c8;--axis-orientation-fg: #6f5a0c;--axis-option-bg: #e0d8ee;--axis-option-fg: #3d2c6b}:root[data-theme=dark]{--bg: #15171c;--surface: #1d2027;--surface-2: #23262e;--border: #2e323b;--border-strong: #444a55;--text: #e6e8ee;--text-muted: #9aa0ab;--primary: #f04ea3;--primary-50: #4a1e36;--magenta: #f04ea3;--cerulean: #2a4a63;--warn-bg: #3d2f12;--warn-border: #6f5a1e;--code-bg: #2a2d35;--shadow: 0 1px 2px rgba(0,0,0,.45);--shadow-lift: 0 6px 18px rgba(0,0,0,.6), 0 2px 4px rgba(0,0,0,.4);--code-pill-bg: #f578bb;--code-pill-fg: #ffffff;--axis-bases-des-tic-bg: #93b4cc;--axis-bases-des-tic-fg: #11202c;--axis-sciences-de-l-ingenierie-bg: #93b4cc;--axis-sciences-de-l-ingenierie-fg: #11202c;--axis-humanites-et-societe-bg: #93b4cc;--axis-humanites-et-societe-fg: #11202c;--axis-nouvelles-technologies-bg: #93b4cc;--axis-nouvelles-technologies-fg: #11202c;--axis-unknown-bg: #93b4cc;--axis-unknown-fg: #11202c;--axis-integration-bg: #a9c094;--axis-integration-fg: #1a2912;--axis-orientation-bg: #d4c488;--axis-orientation-fg: #2a2412;--axis-option-bg: #ac98c8;--axis-option-fg: #1c142d}:root[data-color-scheme=axes]{--axis-bases-des-tic-bg: #d6ecf9;--axis-bases-des-tic-fg: #1a4970;--axis-sciences-de-l-ingenierie-bg: #e3edd8;--axis-sciences-de-l-ingenierie-fg: #345820;--axis-humanites-et-societe-bg: #fbe6cf;--axis-humanites-et-societe-fg: #7a3f0f;--axis-integration-bg: #f4dceb;--axis-integration-fg: #762954;--axis-orientation-bg: #e0d8ee;--axis-orientation-fg: #3d2c6b;--axis-nouvelles-technologies-bg: #ffe1d6;--axis-nouvelles-technologies-fg: #8a3618;--axis-unknown-bg: #ececf0;--axis-unknown-fg: #444}:root[data-color-scheme=axes][data-theme=dark]{--axis-bases-des-tic-bg: #93b4cc;--axis-bases-des-tic-fg: #11202c;--axis-sciences-de-l-ingenierie-bg: #a9c094;--axis-sciences-de-l-ingenierie-fg: #1a2912;--axis-humanites-et-societe-bg: #d4ac88;--axis-humanites-et-societe-fg: #2a1a0c;--axis-integration-bg: #d094b0;--axis-integration-fg: #2a141d;--axis-orientation-bg: #ac98c8;--axis-orientation-fg: #1c142d;--axis-nouvelles-technologies-bg: #d4a288;--axis-nouvelles-technologies-fg: #2a1a0e;--axis-unknown-bg: #a9adb8;--axis-unknown-fg: #25282f}:root{--font-body: "DM Sans", "Helvetica Neue", system-ui, -apple-system, "Segoe UI", Arial, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace}*{box-sizing:border-box}html,body,#app{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:15px;line-height:1.55}html{transition:background-color .2s ease,color .2s ease}a{color:var(--primary)}.layout{min-height:100vh;display:flex;flex-direction:column}[data-tooltip]{position:relative}[data-tooltip]:hover:after,[data-tooltip]:focus-visible:after{content:attr(data-tooltip);position:absolute;top:calc(100% + 10px);left:50%;transform:translate(-50%);background:var(--text);color:var(--surface);padding:6px 10px;border-radius:6px;font-size:.78rem;font-weight:500;line-height:1.4;letter-spacing:.01em;max-width:240px;width:max-content;white-space:normal;text-align:center;pointer-events:none;z-index:200;box-shadow:var(--shadow-lift);opacity:0;animation:tooltip-fade-in .15s ease forwards .35s}[data-tooltip]:hover:before,[data-tooltip]:focus-visible:before{content:"";position:absolute;top:calc(100% + 4px);left:50%;transform:translate(-50%);border:6px solid transparent;border-bottom-color:var(--text);pointer-events:none;z-index:201;opacity:0;animation:tooltip-fade-in .15s ease forwards .35s}[data-tooltip][data-tooltip-pos=top]:hover:after,[data-tooltip][data-tooltip-pos=top]:focus-visible:after{top:auto;bottom:calc(100% + 10px)}[data-tooltip][data-tooltip-pos=top]:hover:before,[data-tooltip][data-tooltip-pos=top]:focus-visible:before{top:auto;bottom:calc(100% + 4px);border-bottom-color:transparent;border-top-color:var(--text)}[data-tooltip][data-tooltip-pos=left]:hover:after,[data-tooltip][data-tooltip-pos=left]:focus-visible:after{top:50%;left:auto;right:calc(100% + 10px);bottom:auto;transform:translateY(-50%)}[data-tooltip][data-tooltip-pos=left]:hover:before,[data-tooltip][data-tooltip-pos=left]:focus-visible:before{top:50%;left:auto;right:calc(100% + 4px);bottom:auto;transform:translateY(-50%);border-bottom-color:transparent;border-left-color:var(--text)}@keyframes tooltip-fade-in{to{opacity:1}}.topbar [data-tooltip]:hover:after,.topbar [data-tooltip]:focus-visible:after{background:var(--surface);color:var(--text);border:1px solid var(--border);box-shadow:var(--shadow-lift)}.topbar [data-tooltip]:hover:before,.topbar [data-tooltip]:focus-visible:before{border-bottom-color:var(--surface)}.topbar [data-tooltip][data-tooltip-pos=top]:hover:before,.topbar [data-tooltip][data-tooltip-pos=top]:focus-visible:before{border-bottom-color:transparent;border-top-color:var(--surface)}.page-footer{margin-top:40px;padding-top:14px;border-top:1px solid var(--border);text-align:center;font-family:var(--font-mono);font-size:11px;color:var(--text-muted);letter-spacing:.02em;-webkit-user-select:none;user-select:none}.footer-build{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0;font:inherit;color:inherit;letter-spacing:inherit;cursor:pointer;transition:color .15s ease}.footer-build:hover{color:var(--primary)}.footer-heart{display:inline-block;color:#dd0069;font-size:9px;vertical-align:middle;margin:0 1px;animation:footer-heart-pulse 1.2s ease-in-out infinite}@keyframes footer-heart-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.3)}}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 28px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.brand{display:flex;align-items:center;gap:var(--brand-gap, 24px);min-width:0}.brand-sep{display:block;width:1px;height:28px;background:transparent;flex-shrink:0;align-self:center}.topbar.layout-stacked .brand-sep,.topbar.layout-centered .brand-sep,.topbar.layout-hero .brand-sep,.topbar.layout-tabs .brand-sep{display:none}.logo{height:40px;width:auto;flex-shrink:0;display:block}.title-block{min-width:0}.title-block h1{margin:0;font-size:1.95rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.subtitle{font-size:.82rem;color:var(--text-muted);margin-top:2px}.logo{cursor:pointer}.topbar.layout-reverse .brand{order:2}.topbar.layout-reverse .topbar-controls{order:1}.topbar.layout-reverse .title-block{text-align:right}.topbar.layout-centered{flex-direction:column;gap:8px;padding:12px 28px}.topbar.layout-centered .brand,.topbar.layout-centered .topbar-controls{justify-content:center}.topbar.layout-centered .title-block{text-align:center}.topbar.layout-stacked .brand{flex-direction:column;align-items:flex-start;gap:4px}.topbar.layout-stacked .logo{height:30px}.topbar.layout-inline .title-block{display:flex;align-items:baseline;gap:10px}.topbar.layout-inline .subtitle{margin-top:0;font-size:.85rem}.topbar.layout-inline .subtitle:before{content:"— ";margin-right:2px;opacity:.6}.topbar.layout-compact{padding:6px 20px;gap:12px}.topbar.layout-compact .logo{height:28px}.topbar.layout-compact .title-block h1{font-size:1.05rem}.topbar.layout-compact .subtitle{font-size:.75rem}.topbar.layout-compact .programme-switcher button,.topbar.layout-compact .view-switcher button{padding:4px 9px;font-size:.76rem}.topbar.layout-tabs{flex-wrap:wrap;padding-bottom:0}.topbar.layout-tabs .topbar-controls{order:99;width:100%;margin-top:8px;justify-content:center;border-top:1px solid var(--border);padding-top:8px}.topbar.layout-tabs .programme-switcher button,.topbar.layout-tabs .view-switcher button{border-radius:0;border-top:none;border-left:none;border-right:none;border-bottom:2px solid transparent;background:transparent;font-weight:600}.topbar.layout-tabs .programme-switcher button:first-child,.topbar.layout-tabs .view-switcher button:first-child{border-radius:0}.topbar.layout-tabs .programme-switcher button:last-child,.topbar.layout-tabs .view-switcher button:last-child{border-radius:0}.topbar.layout-tabs .programme-switcher button.active,.topbar.layout-tabs .view-switcher button.active{background:transparent;color:var(--primary);border-color:var(--primary)}.topbar.layout-hero{flex-direction:column;align-items:center;gap:10px;padding:16px 28px}.topbar.layout-hero .brand{flex-direction:row-reverse;gap:14px}.topbar.layout-hero .logo{height:32px}.topbar.layout-hero .title-block{text-align:center}.topbar.layout-hero .title-block h1{font-size:1.6rem;letter-spacing:.01em}.topbar.layout-hero .subtitle{font-size:.85rem;opacity:.85}.topbar.layout-hero .topbar-controls{justify-content:center}.topbar-controls{display:flex;align-items:flex-end;gap:14px;flex-shrink:0}.control-group{display:flex;flex-direction:column;align-items:stretch;gap:4px}.control-label{font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);line-height:1}.programme-switcher,.view-switcher,.lang-switcher{display:inline-flex;gap:0}.programme-switcher button,.view-switcher button,.lang-switcher button{border:1px solid var(--border-strong);background:var(--surface);padding:6px 12px;font-weight:600;font-size:.82rem;cursor:pointer;color:var(--text-muted)}.programme-switcher button:first-child,.view-switcher button:first-child,.lang-switcher button:first-child{border-radius:6px 0 0 6px}.programme-switcher button:last-child,.view-switcher button:last-child,.lang-switcher button:last-child{border-radius:0 6px 6px 0}.programme-switcher button+button,.view-switcher button+button,.lang-switcher button+button{border-left:none}.programme-switcher button.active,.view-switcher button.active,.lang-switcher button.active{background:var(--primary);color:#fff;border-color:var(--primary)}.theme-toggle{width:34px;height:34px;border:1px solid var(--border-strong);background:var(--surface);border-radius:6px;cursor:pointer;color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;padding:0}.theme-toggle .icon{width:18px;height:18px;display:block}.theme-toggle:hover{color:var(--primary)}.body{display:grid;grid-template-columns:270px 1fr;gap:0;flex:1}.content{padding:24px 28px 64px;width:100%;min-width:0}.loading,.empty{padding:60px;text-align:center;color:var(--text-muted)}.filters{border-right:1px solid var(--border);background:var(--surface);padding:20px 18px;position:sticky;top:60px;align-self:flex-start;height:calc(100vh - 60px);overflow-y:auto}.filter-group{margin-bottom:20px}.filter-group h3{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin:0 0 8px}.filter-group-collapsible>.filter-summary{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;-webkit-user-select:none;user-select:none;padding:6px 8px;margin:0 -8px;border-radius:6px}.filter-group-collapsible>.filter-summary::-webkit-details-marker{display:none}.filter-group-collapsible>.filter-summary>h3{margin:0;flex:1}.filter-group-collapsible>.filter-summary:hover{background:var(--surface-2)}.filter-group-collapsible[open]>.filter-summary{margin-bottom:8px}.filter-group-collapsible[open]>.filter-summary .caret{transform:rotate(180deg)}.filter-group-collapsible .caret{color:var(--text-muted);font-size:.85rem;transition:transform .15s ease}.filter-count{background:var(--primary);color:#fff;font-size:.7rem;font-weight:700;padding:1px 7px;border-radius:999px;min-width:18px;text-align:center;line-height:1.4}.pill-row{display:flex;flex-wrap:wrap;gap:6px}.pill{border:1px solid var(--border);background:var(--surface);padding:4px 10px;border-radius:999px;cursor:pointer;font-size:.82rem;color:var(--text)}.pill:hover{background:var(--surface-2)}.pill.active{background:var(--primary);color:#fff;border-color:var(--primary)}.check-list{display:flex;flex-direction:column;gap:4px}.check-list label{display:flex;align-items:center;gap:8px;font-size:.88rem;cursor:pointer;padding:2px 0;color:var(--text)}.check-list label .axis-swatch{width:14px;height:14px;border-radius:3px;background:var(--axis-bg, var(--surface-2));border:1px solid color-mix(in srgb,var(--axis-fg, var(--text-muted)) 35%,transparent);flex-shrink:0}.search-wrapper{position:relative;display:flex;align-items:center}.search-wrapper .search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:15px;height:15px;color:var(--text-muted);pointer-events:none}.search-box{width:100%;padding:8px 12px 8px 32px;border:1px solid var(--border-strong);border-radius:8px;font:inherit;font-size:.88rem;background:var(--surface);color:var(--text);outline:none;transition:border-color .15s ease,box-shadow .15s ease}.search-box::placeholder{color:var(--text-muted)}.search-box:focus{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 18%,transparent)}.search-box:focus+.search-icon,.search-wrapper:focus-within .search-icon{color:var(--primary)}.search-matches{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;margin-top:8px;font-size:12px;line-height:1.3}.search-matches-label{color:var(--text-muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}.search-match-chip{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:999px;padding:1px 8px;font-family:var(--font-mono, monospace);font-size:11.5px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}.year-section{margin-bottom:32px}.year-heading{display:flex;align-items:baseline;gap:12px;font-size:1rem;margin:0 0 14px;padding-bottom:6px;border-bottom:2px solid var(--primary)}.year-tag{background:var(--primary);color:#fff;font-weight:700;padding:2px 10px;border-radius:4px;font-size:.85rem}.year-label{font-weight:600}.year-count{margin-left:auto;color:var(--text-muted);font-size:.85rem;font-weight:400}.cards{display:flex;flex-direction:column;gap:12px}.module-card{display:flex;align-items:stretch;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow);overflow:hidden;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,border-color .15s ease;width:100%}.module-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lift);border-color:color-mix(in srgb,var(--primary) 50%,var(--border))}.module-card:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.card-main{flex:1;min-width:0;display:flex;flex-direction:column}.card-axis-strip{flex-shrink:0;width:44px;background:var(--axis-bg, var(--surface-2));color:var(--axis-fg, var(--text-muted));display:flex;flex-direction:column;align-items:center;padding:14px 4px 10px;font-size:.74rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;border-left:1px solid var(--border);gap:8px}.card-axis-strip .axis-name{flex:1;display:flex;align-items:center;writing-mode:vertical-rl;white-space:nowrap;text-align:center}.card-axis-strip .ects-pill{flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--surface);color:var(--text);border:1px solid color-mix(in srgb,var(--axis-fg) 25%,transparent);border-radius:6px;padding:4px 6px;text-transform:none;letter-spacing:0;line-height:1}.card-axis-strip .ects-pill .ects-num{font-size:13px;font-weight:700}.card-axis-strip .ects-pill .ects-lbl{font-size:8px;font-weight:600;opacity:.7;margin-top:2px;letter-spacing:.05em}.axis-bases-des-tic{--axis-bg: var(--axis-bases-des-tic-bg);--axis-fg: var(--axis-bases-des-tic-fg)}.axis-sciences-de-l-ingenierie{--axis-bg: var(--axis-sciences-de-l-ingenierie-bg);--axis-fg: var(--axis-sciences-de-l-ingenierie-fg)}.axis-humanites-et-societe{--axis-bg: var(--axis-humanites-et-societe-bg);--axis-fg: var(--axis-humanites-et-societe-fg)}.axis-integration{--axis-bg: var(--axis-integration-bg);--axis-fg: var(--axis-integration-fg)}.axis-orientation{--axis-bg: var(--axis-orientation-bg);--axis-fg: var(--axis-orientation-fg)}.axis-nouvelles-technologies{--axis-bg: var(--axis-nouvelles-technologies-bg);--axis-fg: var(--axis-nouvelles-technologies-fg)}.axis-unknown{--axis-bg: var(--axis-unknown-bg);--axis-fg: var(--axis-unknown-fg)}:root:not([data-color-scheme=axes]) .is-option{--axis-bg: var(--axis-option-bg);--axis-fg: var(--axis-option-fg)}.bucket-tronc-commun{--axis-bg: var(--axis-bases-des-tic-bg);--axis-fg: var(--axis-bases-des-tic-fg)}.bucket-integration{--axis-bg: var(--axis-integration-bg);--axis-fg: var(--axis-integration-fg)}.bucket-orientation{--axis-bg: var(--axis-orientation-bg);--axis-fg: var(--axis-orientation-fg)}.bucket-option{--axis-bg: var(--axis-option-bg);--axis-fg: var(--axis-option-fg)}.card-head{display:flex;align-items:center;gap:14px;padding:12px 16px;-webkit-user-select:none;user-select:none}.head-left{display:flex;gap:14px;align-items:center;flex:1;min-width:0}.head-titles{min-width:0}.code-badge{display:inline-flex;align-items:center;justify-content:center;background:var(--primary);color:#fff;font-weight:700;font-size:.95rem;padding:6px 10px;border-radius:6px;min-width:52px;flex-shrink:0}.card-title{margin:0 0 4px;font-size:1rem;font-weight:600;color:var(--text)}.head-meta{display:flex;flex-wrap:wrap;gap:6px}.chip{font-size:.75rem;padding:2px 8px;border-radius:999px;background:var(--surface-2);border:1px solid var(--border);color:var(--text-muted)}.chip.axis{background:var(--cerulean);border-color:transparent;color:var(--text)}.chip.ects{background:color-mix(in srgb,var(--primary) 12%,transparent);border-color:transparent;color:var(--primary)}.chip.cat.option{background:color-mix(in srgb,var(--magenta) 14%,transparent);border-color:transparent;color:var(--magenta)}.chip.block{background:var(--warn-bg);border-color:var(--warn-border);color:var(--text)}.chip.lang{background:var(--surface)}.card-arrow{font-size:1.4rem;color:var(--text-muted);flex-shrink:0;padding:0 4px}.card-body{padding:0 16px 14px 82px}.responsible{font-size:.85rem;color:var(--text-muted);margin-bottom:8px}.short-desc{font-size:.92rem;color:var(--text)}.short-desc :first-child{margin-top:0}.short-desc :last-child{margin-bottom:0}.ue-titles{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:5px 6px}.ue-titles li{font-size:.82rem;font-weight:500;color:var(--primary);background:color-mix(in srgb,var(--primary) 12%,transparent);border:1px solid color-mix(in srgb,var(--primary) 25%,transparent);padding:3px 10px;border-radius:4px;line-height:1.5}.module-detail{border-top:1px solid var(--border);background:var(--surface-2);padding:18px 16px 18px 82px}.module-detail .block{margin-bottom:18px;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:12px 14px}.module-detail .block.warn{background:var(--warn-bg);border-color:var(--warn-border)}.module-detail h4{margin:0 0 10px;font-size:.92rem;font-weight:700;color:var(--primary);text-transform:uppercase;letter-spacing:.04em}.module-detail .markdown{font-size:.9rem;color:var(--text)}.module-detail .markdown ul,.module-detail .markdown ol{padding-left:22px;margin:4px 0}.module-detail .markdown li{margin:2px 0}.module-detail .markdown p:first-child{margin-top:0}.module-detail .markdown p:last-child{margin-bottom:0}.module-detail .markdown code{background:var(--code-bg);padding:1px 5px;border-radius:3px;font-size:.86em}.ue-list{display:flex;flex-direction:column;gap:12px}.ue{border:1px solid var(--border);border-radius:6px;padding:10px 12px;background:var(--surface-2)}.ue.track{border-left:4px solid var(--magenta)}.ue-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding-bottom:6px;border-bottom:1px dashed var(--border);margin-bottom:8px}.ue-code{font-family:var(--font-mono);background:var(--primary-50);color:var(--primary);padding:2px 6px;border-radius:4px;font-size:.78rem;font-weight:700}.ue-name{margin:0;font-size:.95rem;font-weight:600;flex:1;min-width:0;color:var(--text)}.track-tag{display:inline-block;background:var(--magenta);color:#fff;padding:1px 7px;border-radius:3px;font-size:.68rem;font-weight:700;text-transform:uppercase;margin-right:6px;vertical-align:middle}.ue-short{color:var(--text-muted);font-weight:400;font-size:.86em}.ue-meta{display:flex;gap:10px;flex-wrap:wrap}.ue-meta-item{font-size:.76rem;color:var(--text-muted)}.ue-teacher{font-size:.83rem;color:var(--text-muted);margin-bottom:6px}.ue-section{margin-top:10px}.ue-section h6{margin:0 0 4px;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.summary-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,260px));gap:10px}.summary-card{display:flex;flex-direction:row;align-items:stretch;border-radius:8px;border:1px solid var(--border);background:var(--axis-bg, var(--surface));color:var(--axis-fg, var(--text));text-decoration:none;cursor:pointer;min-height:92px;text-align:left;font:inherit;transition:transform .18s ease,box-shadow .18s ease;position:relative;padding:0;box-shadow:var(--shadow);z-index:1}.summary-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;padding:12px 10px 12px 14px}.summary-main .summary-title{margin-bottom:0}.summary-strip{flex-shrink:0;width:38px;display:flex;flex-direction:column;align-items:center;padding:12px 0 10px;border-left:1px solid color-mix(in srgb,var(--axis-fg) 18%,transparent);gap:8px}.summary-strip .axis-name{flex:1;display:flex;align-items:center;writing-mode:vertical-rl;white-space:nowrap;text-align:center;font-size:.5rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;opacity:.75}.summary-strip .ects-pill{flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:color-mix(in srgb,var(--surface) 85%,transparent);color:var(--text);border:1px solid color-mix(in srgb,var(--axis-fg) 25%,transparent);border-radius:5px;padding:3px 5px;text-transform:none;letter-spacing:0;line-height:1}.summary-strip .ects-pill .ects-num{font-size:12px;font-weight:700}.summary-strip .ects-pill .ects-lbl{font-size:7.5px;font-weight:600;opacity:.7;margin-top:1px;letter-spacing:.05em}.summary-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lift)}.summary-card:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.summary-code{align-self:flex-start;background:var(--code-pill-bg);color:var(--code-pill-fg);font-family:var(--font-mono);font-size:.72rem;font-weight:700;padding:1px 6px;border-radius:4px;line-height:1.35;box-shadow:0 1px 2px #00000026;letter-spacing:.02em;margin-bottom:4px}.summary-title{font-size:1.04rem;font-weight:600;line-height:1.25;flex:1}.summary-ue-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:0;flex:1}.summary-ue-list li{font-size:.86rem;font-weight:500;line-height:1.2;opacity:.92;position:relative;padding-left:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.summary-ue-list li:before{content:"›";position:absolute;left:2px;opacity:.65}.summary-ue-list .more-indicator{font-style:italic;font-weight:600;opacity:.75;font-size:.8rem}.summary-ue-list .more-indicator:before{content:""}.summary-ue-list.clamped li:not(.more-indicator):nth-child(n+4){display:none}.summary-card:hover .summary-ue-list.clamped li:not(.more-indicator):nth-child(n+4){display:list-item}.summary-card:hover .summary-ue-list.clamped .more-indicator{display:none}.summary-card:hover{z-index:10}.summary-card[data-tooltip]:hover:after,.summary-card[data-tooltip]:focus-visible:after{white-space:pre-line;text-align:left;max-width:360px;padding:10px 14px 10px 16px;font-size:.82rem;font-weight:500;line-height:1.55;background:var(--surface);color:var(--text);border:1px solid var(--border);border-left:3px solid var(--magenta);border-radius:8px;box-shadow:var(--shadow-lift);animation:tooltip-fade-in .15s ease forwards 1s}.summary-card[data-tooltip]:hover:before,.summary-card[data-tooltip]:focus-visible:before{animation:tooltip-fade-in .15s ease forwards 1s;border-bottom-color:var(--surface)}.content-graph{padding:16px 16px 24px;display:flex;flex-direction:column;height:calc(100vh - 60px);overflow:hidden}.network-view{flex:1;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:8px;position:relative;overflow:hidden}.network-canvas{flex:1;width:100%;height:100%;position:relative;overflow:hidden}.cy-overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:2}.code-pill{position:absolute;top:0;left:0;font-family:var(--font-mono);font-weight:700;font-size:10.5px;line-height:1;padding:3px 6px;border-radius:4px;background:var(--code-pill-bg);color:var(--code-pill-fg);white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;will-change:transform;transform:translate(-9999px,-9999px);transition:opacity .15s ease;box-shadow:0 1px 2px #0003}.network-toolbar{display:flex;gap:6px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--border);font-size:.82rem;color:var(--text-muted);background:var(--surface-2)}.network-toolbar button{border:1px solid var(--border-strong);background:var(--surface);color:var(--text-muted);padding:3px 10px;border-radius:6px;cursor:pointer;font:inherit;font-size:.78rem;font-weight:600}.network-toolbar button.active{background:var(--primary);color:#fff;border-color:var(--primary)}.network-toolbar .toolbar-sep{color:var(--border-strong);margin:0 4px;-webkit-user-select:none;user-select:none}.graph-loading{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--text-muted);background:color-mix(in srgb,var(--surface) 85%,transparent);pointer-events:none;font-size:.95rem}.graph-note{position:absolute;top:56px;right:12px;width:280px;font-size:.78rem;font-style:italic;color:var(--text-muted);background:color-mix(in srgb,var(--surface) 92%,transparent);border:1px solid var(--border);border-radius:6px;padding:5px 10px;pointer-events:none;line-height:1.4}.graph-legend{position:absolute;right:12px;bottom:12px;display:flex;gap:14px;background:color-mix(in srgb,var(--surface) 92%,transparent);border:1px solid var(--border);border-radius:6px;padding:5px 10px;font-size:.78rem;color:var(--text-muted);pointer-events:none}.graph-legend svg{vertical-align:middle;color:currentColor}.bottom-dock{position:fixed;left:18px;bottom:12px;z-index:60;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:10px;display:flex;flex-direction:column;gap:8px;width:234px}.dock-pdf{display:flex;align-items:center;gap:8px;background:var(--magenta);color:#fff;padding:7px 10px;border-radius:6px;text-decoration:none;font-weight:600;font-size:.85rem}.dock-pdf:hover{filter:brightness(1.05)}.dock-pdf .icon{width:16px;height:16px;flex-shrink:0}.dock-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.magic-root{position:fixed;top:0;right:0;bottom:0;left:0;z-index:110;background:#0a0c126b;display:flex;align-items:center;justify-content:center}:root[data-theme=dark] .magic-root{background:#0000008c}.magic-panel{width:min(520px,92vw);background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-lift);padding:16px 20px 18px;display:flex;flex-direction:column;gap:14px}.magic-head{display:flex;align-items:center;gap:10px}.magic-sparkle{font-size:18px}.magic-head h2{margin:0;flex:1;font-size:1.05rem;font-weight:600;color:var(--text)}.magic-close{background:transparent;border:1px solid var(--border-strong);color:var(--text-muted);width:30px;height:30px;border-radius:6px;font-size:1.2rem;line-height:1;cursor:pointer}.magic-close:hover{color:var(--text);background:var(--surface-2)}.magic-section h3{margin:0 0 8px;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.layout-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}@media(max-width:600px){.layout-grid{grid-template-columns:repeat(2,1fr)}}.layout-card{display:flex;flex-direction:column;align-items:stretch;gap:6px;padding:8px;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;cursor:pointer;font:inherit;color:var(--text);transition:border-color .15s ease,background .15s ease}.layout-card:hover{border-color:var(--border-strong)}.layout-card.active{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 10%,var(--surface))}.layout-label{font-size:.78rem;font-weight:600;text-align:center}.layout-sketch{display:grid;background:var(--surface);border:1px solid var(--border);border-radius:5px;padding:6px;height:56px;position:relative}.sk-block{background:var(--text-muted);opacity:.5;border-radius:2px}.sk-logo{background:var(--primary);opacity:.75}.sk-title{opacity:.5;border-radius:2px}.sk-ctrl{background:var(--axis-bases-des-tic-fg);opacity:.55}.sketch-split{grid-template-columns:auto 1fr auto;align-items:center;gap:4px}.sketch-split .sk-logo{width:12px;height:12px}.sketch-split .sk-title{height:6px}.sketch-split .sk-ctrl{width:26px;height:8px}.sketch-centered{grid-template-rows:1fr auto;justify-items:center;gap:4px}.sketch-centered .sk-logo{width:12px;height:12px;align-self:end}.sketch-centered .sk-title{width:60%;height:5px;display:none}.sketch-centered .sk-ctrl{width:50%;height:8px}.sketch-compact{grid-template-columns:auto 1fr auto;align-items:center;gap:3px;padding:4px}.sketch-compact .sk-logo{width:8px;height:8px}.sketch-compact .sk-title{height:4px}.sketch-compact .sk-ctrl{width:22px;height:6px}.sketch-tabs{grid-template-rows:1fr auto;gap:4px}.sketch-tabs .sk-logo{width:12px;height:8px}.sketch-tabs .sk-title{display:none}.sketch-tabs .sk-ctrl{width:100%;height:4px;align-self:end;border-top:1px solid var(--border);border-radius:0;background:transparent}.sketch-tabs .sk-ctrl:before{content:"";display:block;width:30%;height:2px;background:var(--primary);margin-top:2px}.sketch-reverse{grid-template-columns:auto 1fr auto;align-items:center;gap:4px}.sketch-reverse .sk-ctrl{order:1;width:26px;height:8px}.sketch-reverse .sk-title{order:2;height:6px;justify-self:end;width:80%}.sketch-reverse .sk-logo{order:3;width:12px;height:12px}.sketch-stacked{grid-template-columns:auto 1fr auto;grid-template-areas:"logo  .     ctrl" "title .     ctrl";align-items:center;gap:3px 4px}.sketch-stacked .sk-logo{grid-area:logo;width:12px;height:8px}.sketch-stacked .sk-title{grid-area:title;width:70%;height:5px}.sketch-stacked .sk-ctrl{grid-area:ctrl;width:26px;height:8px}.sketch-inline{grid-template-columns:auto 1fr auto;align-items:center;gap:4px}.sketch-inline .sk-logo{width:12px;height:12px}.sketch-inline .sk-title{height:5px;position:relative}.sketch-inline .sk-title:after{content:"—";position:absolute;left:50%;top:-8px;font-size:8px;color:var(--text-muted);transform:translate(-50%)}.sketch-inline .sk-ctrl{width:26px;height:8px}.sketch-hero{grid-template-rows:auto 1fr auto;justify-items:center;gap:3px}.sketch-hero .sk-logo{justify-self:end;width:10px;height:6px}.sketch-hero .sk-title{width:70%;height:8px}.sketch-hero .sk-ctrl{width:50%;height:6px}.magic-toggle{display:flex;align-items:center;gap:10px;font-size:.9rem;color:var(--text);cursor:pointer}.magic-toggle input{width:16px;height:16px}.magic-row{display:flex;align-items:center;gap:10px;margin-bottom:8px}.magic-slider{display:flex;align-items:center;gap:10px;width:100%;font-size:.88rem;color:var(--text)}.magic-slider>span:first-child{min-width:90px;color:var(--text-muted);font-size:.8rem}.magic-slider input[type=range]{flex:1;accent-color:var(--primary)}.magic-slider-value{min-width:44px;text-align:right;font-family:var(--font-mono);font-size:.78rem;color:var(--text-muted)}.magic-enter-active,.magic-leave-active{transition:opacity .15s ease}.magic-enter-active .magic-panel,.magic-leave-active .magic-panel{transition:transform .2s ease}.magic-enter-from,.magic-leave-to{opacity:0}.magic-enter-from .magic-panel,.magic-leave-to .magic-panel{transform:scale(.95)}body.drawer-open,body.filter-open{overflow:hidden}.drawer-root{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#0a0c126b;display:flex;justify-content:flex-end}:root[data-theme=dark] .drawer-root{background:#0000008c}.drawer-panel{width:min(720px,92vw);height:100vh;background:var(--surface);border-left:1px solid var(--border);box-shadow:-8px 0 24px #0000002e;overflow-y:auto;padding:18px 24px 40px;display:flex;flex-direction:column;gap:14px}.drawer-head{display:flex;align-items:center;gap:14px;border-bottom:1px solid var(--border);position:sticky;top:-18px;background:var(--surface);margin:-18px -24px 0;padding:14px 24px 12px;z-index:1}.drawer-code{font-size:.95rem}.drawer-title{flex:1;margin:0;font-size:1.15rem;font-weight:600;color:var(--text);min-width:0}.drawer-close{background:transparent;border:1px solid var(--border-strong);color:var(--text-muted);width:34px;height:34px;border-radius:6px;font-size:1.4rem;line-height:1;cursor:pointer;flex-shrink:0}.drawer-close:hover{color:var(--text);background:var(--surface-2)}.drawer-meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.pdf-pill{background:var(--magenta);color:#fff!important;border-color:var(--magenta);text-decoration:none;font-weight:600;padding:3px 12px;margin-left:auto}.pdf-pill:hover{filter:brightness(1.05)}.drawer-responsible{font-size:.88rem;color:var(--text-muted)}.drawer-short{font-size:.95rem;color:var(--text)}.drawer-short :first-child{margin-top:0}.drawer-short :last-child{margin-bottom:0}.drawer-panel .module-detail{padding:0;background:transparent;border:none;margin:0}.drawer-enter-active,.drawer-leave-active{transition:opacity .18s ease}.drawer-leave-active{pointer-events:none}.drawer-enter-active .drawer-panel,.drawer-leave-active .drawer-panel{transition:transform .22s ease}.drawer-enter-from,.drawer-leave-to{opacity:0}.drawer-enter-from .drawer-panel,.drawer-leave-to .drawer-panel{transform:translate(100%)}.btn-short{display:none}.view-switcher .btn-text{margin-left:5px}.filter-header{display:none}.filter-group-year .filter-group-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 8px}.filter-group-year .filter-group-header h3{margin:0}.filter-reset-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:1px solid var(--border);color:var(--text-muted);width:28px;height:28px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:color .15s ease,background .15s ease,border-color .15s ease}.filter-reset-btn:hover{color:var(--primary);border-color:var(--primary);background:var(--surface-2)}.filter-reset-btn .icon{width:14px;height:14px}.mobile-filter-btn,.filter-backdrop{display:none}@media(max-width:800px){.topbar{flex-wrap:wrap;padding:8px 12px 0;gap:8px;row-gap:0;align-items:center}.brand{flex:1;min-width:0;gap:8px}.logo{height:30px}.title-block{flex:1;text-align:right}.title-block h1{font-size:1rem;line-height:1.15;white-space:normal;overflow:visible;text-overflow:clip}.subtitle,.brand-sep{display:none}.topbar-controls{order:10;width:100%;align-items:center;justify-content:center;border-top:1px solid var(--border);padding:6px 0 7px;gap:6px}.control-label{display:none}.control-group{flex-direction:row;align-items:center;gap:6px}.programme-switcher .btn-text{display:inline}.programme-switcher .btn-short,.view-switcher .btn-text{display:none}.programme-switcher button,.view-switcher button{padding:5px 10px;font-size:.82rem}.network-btn{display:none!important}.view-switcher button:nth-child(2){border-radius:0 6px 6px 0}.mobile-filter-btn{display:inline-flex;align-items:center;justify-content:center;position:fixed;bottom:16px;right:16px;z-index:80;width:48px;height:48px;border:1px solid var(--border-strong);background:var(--surface);border-radius:50%;box-shadow:var(--shadow-lift, var(--shadow));cursor:pointer;color:var(--text-muted);padding:0;flex-shrink:0}.mobile-filter-btn .icon{width:22px;height:22px;display:block}.mobile-filter-btn:hover{color:var(--primary)}.mobile-filter-btn[aria-expanded=true]{color:var(--primary);border-color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,var(--surface))}.body{grid-template-columns:1fr}.filters{position:fixed;top:0;left:0;width:min(300px,85vw);height:100dvh;height:100vh;z-index:90;border-right:1px solid var(--border);background:var(--surface);overflow-y:auto;overscroll-behavior:contain;transform:translate(-100%);transition:transform .25s ease;padding-top:0}.filters.filters-open{transform:translate(0);box-shadow:4px 0 24px #0003}.filter-header{display:flex;align-items:center;justify-content:space-between;padding:14px 0 12px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--surface);z-index:1}.filter-header{display:flex}.filter-title{font-size:.9rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.filter-close{background:transparent;border:1px solid var(--border-strong);color:var(--text-muted);width:30px;height:30px;border-radius:6px;font-size:1.3rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}.filter-close:hover{color:var(--text);background:var(--surface-2)}.filter-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:89;background:#0a0c126b}:root[data-theme=dark] .filter-backdrop{background:#0000008c}.content{padding:16px 12px 88px}.card-body,.module-detail{padding-left:16px}.summary-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.bottom-dock-desktop{display:none}.filters .bottom-dock-mobile{position:static;transform:none;left:auto;bottom:auto;width:auto;max-width:none;margin:14px 14px 18px;box-shadow:none}.summary-strip{position:absolute;top:8px;right:8px;width:auto;height:auto;border-left:none;padding:0}.summary-strip .axis-name{display:none}.summary-title{padding-right:44px}}@media(max-width:480px){.topbar{padding:6px 10px 0}.logo{height:26px}.title-block h1{font-size:.95rem}.programme-switcher button,.view-switcher button{padding:4px 9px;font-size:.8rem}.content{padding:12px 10px 88px}.drawer-panel{width:100vw;border-left:none;padding:14px 14px 40px}.drawer-head{margin:-14px -14px 0;padding:12px 14px 10px}.summary-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.summary-title{font-size:.92rem}.card-head{padding:10px 12px;gap:10px}.head-left{gap:10px}.code-badge{min-width:44px;font-size:.85rem;padding:5px 8px}.card-title{font-size:.92rem}}
