/* ═══════════════════════════════════════════════════════════════
   DEV C — APPLICATIONS · styles propres à chaque application
   ═══════════════════════════════════════════════════════════════ */
/* Explorateur */
.ex{display:flex;flex:1;min-height:0}
.ex-side{width:186px;flex-shrink:0;padding:10px 6px;overflow:auto;border-right:1px solid var(--stroke)}
.ex-si{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:5px;font-size:calc(12.5px * var(--text-scale));cursor:pointer}
.ex-si:hover{background:var(--hover)}
.ex-si.on{background:var(--hover);font-weight:600}
.ex-si svg{width:17px;height:17px;flex-shrink:0}
.ex-main{flex:1;display:flex;flex-direction:column;min-width:0}
.ex-bar{display:flex;align-items:center;gap:4px;padding:8px 10px;border-bottom:1px solid var(--stroke)}
.ex-crumb{flex:1;display:flex;align-items:center;gap:2px;height:30px;padding:0 10px;background:var(--field);border:1px solid var(--stroke);border-radius:4px;font-size:calc(12px * var(--text-scale));overflow:hidden;white-space:nowrap}
.ex-crumb svg{width:15px;height:15px;flex-shrink:0;vertical-align:-3px}
.ex-crumb span{padding:3px 6px;border-radius:3px;cursor:pointer}
.ex-crumb span:hover{background:var(--hover)}
.ex-tools{display:flex;gap:4px;padding:6px 10px}
.ex-t{height:30px;padding:0 12px;border-radius:5px;display:flex;align-items:center;gap:8px;font-size:calc(12px * var(--text-scale))}
.ex-t:hover{background:var(--hover)}
.ex-t svg{width:14px;height:14px}
.ex-list{flex:1;overflow:auto;padding:4px 10px}
.ex-r{display:grid;grid-template-columns:1fr 150px 120px 80px;gap:10px;align-items:center;padding:6px 10px;border-radius:5px;font-size:calc(12.5px * var(--text-scale));cursor:default}
.ex-r:hover{background:var(--hover)}
.ex-r .nm{display:flex;align-items:center;gap:10px;min-width:0}
.ex-r .nm svg{width:20px;height:20px;flex-shrink:0}
.ex-r .nm span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ex-r .muted{font-size:calc(11.5px * var(--text-scale))}
.ex-hd{color:var(--text2);font-size:calc(11.5px * var(--text-scale));border-bottom:1px solid var(--stroke);border-radius:0;cursor:default}
.ex-g{display:flex;flex-wrap:wrap;gap:4px;align-content:flex-start}
.ex-g .gcell{width:104px;padding:12px 4px;display:flex;flex-direction:column;align-items:center;gap:8px;border-radius:5px;cursor:default;text-align:center}
.ex-g .gcell:hover{background:var(--hover)}
.ex-g .gcell svg{width:44px;height:44px}
.ex-g .gcell span{font-size:calc(11.5px * var(--text-scale));line-height:1.3;max-height:30px;overflow:hidden}
.drive{display:flex;gap:14px;align-items:center;background:var(--card);border:1px solid var(--stroke);border-radius:6px;padding:14px;width:320px;cursor:pointer}
.drive svg{width:32px;height:32px;flex-shrink:0}
.drive:hover{background:var(--hover)}
.drive .bar{height:14px;border-radius:3px;background:var(--track);overflow:hidden;margin-top:7px}
.drive .bar i{display:block;height:100%;background:var(--accent)}
.ex-empty{padding:40px;text-align:center;color:var(--text2)}

/* Bloc-notes */
.np{display:flex;flex-direction:column;flex:1;min-height:0}
.np-menu{display:flex;gap:2px;padding:4px 8px;border-bottom:1px solid var(--stroke)}
.np-menu button{padding:5px 11px;border-radius:4px;font-size:calc(12px * var(--text-scale))}
.np-menu button:hover{background:var(--hover)}
.np textarea{flex:1;background:transparent;border:none;outline:none;resize:none;color:var(--text);padding:12px 16px;font-size:calc(13.5px * var(--text-scale));line-height:1.55}
.np-status{display:flex;gap:22px;justify-content:flex-end;padding:5px 16px;font-size:calc(11px * var(--text-scale));color:var(--text2);border-top:1px solid var(--stroke)}
.np-dlg{position:absolute;inset:0;background:rgba(0,0,0,.35);display:flex;align-items:center;justify-content:center;z-index:10}
.np-dlg .box{width:320px;background:var(--solid);border:1px solid var(--stroke2);border-radius:8px;padding:20px;box-shadow:0 14px 40px var(--shadow)}
/* :not([type=checkbox]) — sans ce garde, cette règle générique (pensée
   pour le champ texte unique des boîtes "renommer"/"enregistrer sous")
   s'appliquait aussi aux cases à cocher du sélecteur Web Disk ci-dessous
   (même sélecteur .np-dlg input, même spécificité) : chaque case
   grandissait à width:100%;height:32px, écrasant le nom de fichier voisin
   dans la ligne flex au lieu de rester une petite case à côté de lui. */
.np-dlg input:not([type=checkbox]){width:100%;height:32px;margin:14px 0;padding:0 10px;background:var(--field);border:1px solid var(--stroke2);border-bottom:2px solid var(--accent);border-radius:4px;color:var(--text);outline:none}
.np-dlg .acts{display:flex;gap:10px;justify-content:flex-end}
.np-dlg .acts .btn{min-width:92px;justify-content:center}
.np-dlg .wd-pick-box{width:340px}
.wd-pick-list{max-height:260px;overflow-y:auto;margin:14px 0;border:1px solid var(--stroke);border-radius:6px}
.wd-pick-item{display:flex;align-items:center;gap:10px;padding:9px 12px;cursor:pointer;font-size:calc(.8125rem * var(--text-scale));color:var(--text);border-bottom:1px solid var(--stroke)}
.wd-pick-item:last-child{border-bottom:none}
.wd-pick-item:hover{background:var(--hover)}
.wd-pick-item input{flex:none;width:auto;height:auto;margin:0;accent-color:var(--accent)}
.wd-pick-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wd-pick-empty{padding:26px 16px;text-align:center;color:var(--text2);font-size:calc(.8125rem * var(--text-scale))}
.wd-pick-empty-hint{font-size:calc(.75rem * var(--text-scale));margin-top:6px;opacity:.8}

/* Calculatrice */
.calc{flex:1;display:flex;flex-direction:column;padding:8px}
.calc .expr{text-align:right;padding:6px 14px 0;font-size:calc(13px * var(--text-scale));color:var(--text2);min-height:22px}
.calc .cur{text-align:right;padding:0 14px 10px;font-size:calc(38px * var(--text-scale));font-weight:600;overflow:hidden;white-space:nowrap}
.calc .keys{flex:1;display:grid;grid-template-columns:repeat(4,1fr);gap:3px}
.calc .keys button{border-radius:5px;font-size:calc(15px * var(--text-scale));background:var(--card);transition:background .1s}
.calc .keys button:hover{background:var(--hover)}
.calc .keys button:active{background:var(--press)}
.calc .keys button.num{background:var(--solid2);font-weight:600}
[data-theme=light] .calc .keys button.num{background:#fff}
.calc .keys button.eq{background:var(--accent);color:#fff;font-size:calc(19px * var(--text-scale))}
.calc .keys button.eq:hover{background:color-mix(in srgb,var(--accent) 88%,#fff)}

/* Terminal */
.term{flex:1;min-height:0;overflow:auto;padding:12px 14px;font-family:"Cascadia Mono",Consolas,monospace;font-size:calc(12.5px * var(--text-scale));line-height:1.5;cursor:text}
.term .ln{white-space:pre-wrap;word-break:break-all}
.term .tk-b{color:#4cc2ff}.term .tk-err{color:#ff7b72}.term .tk-dim{color:var(--text2)}
.term .in-row{display:flex}
.term .in-row input{flex:1;background:none;border:none;outline:none;color:var(--text);font:inherit;padding:0}
.term .pp{color:#4cc2ff}

/* Paramètres */
.set{display:flex;flex:1;min-height:0}
.set-nav{width:230px;flex-shrink:0;padding:14px 8px;overflow:auto}
.set-user{display:flex;align-items:center;gap:12px;padding:10px 12px;margin-bottom:10px}
.set-user .mini-av{width:42px;height:42px;border-radius:50%;background:var(--track);display:flex;align-items:center;justify-content:center}
.set-user .mini-av svg{width:24px;height:24px}
.set-ni{display:flex;align-items:center;gap:12px;padding:9px 12px;border-radius:5px;font-size:calc(13px * var(--text-scale));cursor:pointer;position:relative}
.set-ni:hover{background:var(--hover)}
.set-ni.on{background:var(--hover)}
.set-ni.on::before{content:"";position:absolute;left:0;top:25%;height:50%;width:3px;border-radius:2px;background:var(--accent)}
.set-ni svg{width:17px;height:17px}
.set-page{flex:1;overflow:auto;padding:22px 30px}
.set-page h2{font-size:calc(21px * var(--text-scale));font-weight:600;margin-bottom:20px}
.set-card{background:var(--card);border:1px solid var(--stroke);border-radius:6px;padding:15px 18px;margin-bottom:12px}
.set-card .row{justify-content:space-between}
.wp-grid{display:flex;gap:12px;flex-wrap:wrap;margin:12px 0}
.wp-th{width:128px;height:74px;border-radius:6px;overflow:hidden;cursor:pointer;border:2px solid transparent;padding:0}
.wp-th.on{border-color:var(--accent)}
.wp-th svg{width:100%;height:100%;display:block}
/* Liste déroulante des Paramètres : champ au style des listes de Paint Shop
   (.paint-brush-select), qui ouvre le menu contextuel système (#ctx). */
.set-dd{display:inline-flex;align-items:center;gap:8px;min-width:170px;background:var(--field);border:1px solid var(--stroke);border-radius:6px;color:var(--text);font-family:inherit;font-size:calc(12.5px * var(--text-scale));padding:5px 8px 5px 10px;cursor:pointer;text-align:left}
.set-dd .lbl{flex:1;white-space:nowrap}
.set-dd svg{width:14px;height:14px;flex-shrink:0;color:var(--text2);transition:transform .15s}
.set-dd:hover{background:var(--hover)}
.set-dd:focus-visible,.set-dd.open{outline:1px solid var(--accent);border-color:var(--accent)}
.set-dd.open svg{transform:rotate(180deg)}
.mode-cards{display:flex;gap:12px;margin:12px 0}
.mode-c{width:128px;border-radius:6px;border:2px solid var(--stroke);overflow:hidden;cursor:pointer;background:var(--solid)}
.mode-c.on{border-color:var(--accent)}
.mode-c .prev{height:64px}
.mode-c .lbl{padding:7px;font-size:calc(11.5px * var(--text-scale));text-align:center}
table.specs{border-collapse:collapse;width:100%;font-size:calc(12.5px * var(--text-scale))}
table.specs td{padding:7px 4px;border-bottom:1px solid var(--stroke)}
table.specs td:first-child{color:var(--text2);width:180px}

/* Peinture (portée depuis WebOSx 5.9) */
:root{--paint-panel:var(--card);--paint-text:var(--text);--paint-text2:var(--text2);
  --paint-border:var(--stroke);--paint-solid:var(--solid);--paint-field:var(--field);--paint-dlg-bg:var(--solid);
  --paint-red:#d63a3a;--paint-green:#2fae58;--paint-amber:#c98a1d;--paint-taskbar-h:48px}
.paint-app{display:flex;flex-direction:column;height:100%;overflow:hidden;background:transparent;color:var(--text);
  font-family:"Segoe UI Variable Text","Segoe UI",system-ui,sans-serif;font-size:calc(13px * var(--text-scale))}
[data-theme=dark]{--paint-red:#f85149;--paint-green:#3fb950;--paint-amber:#e3b341}
[data-theme=light]{--paint-red:#cf222e;--paint-green:#1a7f37;--paint-amber:#9a6700}
.paint-app *{box-sizing:border-box}
.paint-app button{font-family:inherit;color:inherit}
.paint-app .notepad-menu-bar { display: flex; background: var(--paint-panel); border-bottom: 1px solid var(--paint-border); position: relative; z-index: 20; transition: background 0.6s ease; flex-shrink: 0; }.paint-app .notepad-menu-item { padding: 4px 12px; font-size:calc(0.8125rem * var(--text-scale)); cursor: pointer; position: relative; color: var(--paint-text2); user-select: none; }.paint-app .notepad-menu-item:hover, .paint-app .notepad-menu-item.active { background: rgba(255,255,255,0.1); color: var(--paint-text); }.paint-app .notepad-dropdown { display: none; position: absolute; top: 100%; left: 0; background: var(--paint-solid); border: 1px solid var(--paint-border); min-width: 220px; box-shadow: 0 5px 15px rgba(0,0,0,0.5); z-index: 50; padding: 4px 0; border-radius: 4px; }.paint-app .notepad-dropdown.show { display: block; }.paint-app .notepad-dropdown-item { padding: 7px 14px 7px 30px; font-size:calc(0.8125rem * var(--text-scale)); cursor: pointer; color: var(--paint-text); display: flex; align-items: center; justify-content: space-between; gap: 16px; white-space: nowrap; position: relative; }.paint-app .notepad-dropdown-item:hover { background: var(--accent); color: #fff; }.paint-app .notepad-dropdown-item:hover .notepad-shortcut { color: rgba(255,255,255,0.75); }.paint-app .notepad-dropdown-item .notepad-check { position: absolute; left: 10px; opacity: 0; font-size:calc(0.75rem * var(--text-scale)); }.paint-app .notepad-dropdown-item.checked .notepad-check { opacity: 1; }.paint-app .notepad-shortcut { font-size:calc(0.6875rem * var(--text-scale)); color: var(--paint-text2); }.paint-app .notepad-dropdown-sep { height: 1px; background: var(--paint-border); margin: 4px 8px; }.paint-app .notepad-dropdown-item.notepad-has-submenu > .notepad-submenu-arrow { color: var(--paint-text2); font-size:calc(0.8125rem * var(--text-scale)); margin-left: -6px; }.paint-app .notepad-dropdown-item.notepad-has-submenu:hover > .notepad-submenu-arrow { color: rgba(255,255,255,0.75); }.paint-app .notepad-dropdown.notepad-submenu { position: fixed; top: -5px; left: 100%; }.paint-app .notepad-dropdown-item.notepad-has-submenu.submenu-open > .notepad-dropdown.notepad-submenu { display: block; }#ui-notify-stack { position: fixed; right: 16px; bottom: calc(var(--paint-taskbar-h) + 12px); display: flex; flex-direction: column; gap: 10px; z-index: 99960; pointer-events: none; max-width: 340px; }.ui-notify {
            pointer-events: auto; position: relative; overflow: hidden; display: flex; gap: 10px; align-items: flex-start;
            background: var(--paint-solid); border: 1px solid var(--paint-border); border-radius: 10px; padding: 12px 34px 12px 12px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.5); opacity: 0; transform: translateX(24px);
            transition: opacity 0.25s ease, transform 0.25s ease; cursor: default;
        }.ui-notify.show { opacity: 1; transform: translateX(0); }.ui-notify.hide { opacity: 0; transform: translateX(24px); }.ui-notify-icon { flex-shrink: 0; width: 20px; height: 20px; margin-top: 1px; }.ui-notify-icon svg { width: 100%; height: 100%; }.ui-notify-info .ui-notify-icon { color: var(--accent); }.ui-notify-success .ui-notify-icon { color: var(--paint-green); }.ui-notify-warning .ui-notify-icon { color: var(--paint-amber); }.ui-notify-error .ui-notify-icon { color: var(--paint-red); }.ui-notify-body { flex: 1; min-width: 0; }.ui-notify-title { font-size:calc(0.8125rem * var(--text-scale)); font-weight: 600; color: var(--paint-text); margin-bottom: 2px; }.ui-notify-message { font-size:calc(0.75rem * var(--text-scale)); color: var(--paint-text2); line-height: 1.4; }.ui-notify-actions { display: flex; gap: 8px; margin-top: 8px; }.ui-notify-action-btn { padding: 4px 10px; font-size:calc(0.6875rem * var(--text-scale)); border-radius: 5px; border: 1px solid var(--paint-border); background: transparent; color: var(--paint-text); cursor: pointer; font-family: inherit; }.ui-notify-action-btn:hover { background: rgba(255,255,255,0.08); }.ui-notify-close { position: absolute; top: 8px; right: 8px; width: 18px; height: 18px; border: none; background: transparent; color: var(--paint-text2); cursor: pointer; font-size:calc(0.625rem * var(--text-scale)); border-radius: 4px; display: flex; align-items: center; justify-content: center; }.ui-notify-close:hover { background: rgba(255,255,255,0.08); color: var(--paint-text); }.ui-notify-progress { position: absolute; left: 0; bottom: 0; width: 100%; height: 2px; background: rgba(255,255,255,0.08); }.ui-notify-progress-bar { height: 100%; background: var(--accent); animation-name: paint-ui-notify-shrink; animation-timing-function: linear; animation-fill-mode: forwards; }
        @keyframes paint-ui-notify-shrink { from { width: 100%; } to { width: 0%; } }.ui-requester-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.5); z-index: 99950; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.2s ease; }.ui-requester-overlay.show { opacity: 1; }.ui-requester-box { display: flex; gap: 16px; background: var(--paint-dlg-bg); border: 1px solid var(--paint-border); border-radius: 10px; padding: 22px; max-width: 380px; box-shadow: 0 20px 60px rgba(0,0,0,0.6); transform: scale(0.95); transition: transform 0.2s ease; }.ui-requester-box.ui-requester-prompt { display: block; }.ui-requester-header { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }.ui-requester-header .ui-requester-icon { width: 22px; height: 22px; flex-shrink: 0; }.ui-requester-header .ui-requester-title { margin-bottom: 0; }.ui-requester-box.ui-requester-wide { width: min(500px, 92vw); max-width: min(500px, 92vw); padding: 26px; }.ui-requester-box.ui-requester-wide .ui-requester-header .ui-requester-icon { width: 26px; height: 26px; }.ui-requester-box.ui-requester-wide .ui-requester-title { font-size:calc(1.0625rem * var(--text-scale)); }.ui-requester-box.ui-requester-wide .ui-requester-message { margin-bottom: 20px; }.ui-requester-box.ui-requester-wide input.ui-requester-input {
            padding: 13px 15px; font-size:calc(0.9375rem * var(--text-scale)); border-radius: 8px; margin-bottom: 8px;
            transition: border-color 0.15s ease, box-shadow 0.2s ease;
        }.ui-requester-box.ui-requester-wide input.ui-requester-input:focus {
            border-color: var(--accent);
            box-shadow: 0 0 calc(3px * var(--sys-glow, 0.55)) var(--accent), 0 0 calc(10px * var(--sys-glow, 0.55)) var(--accent);
        }.ui-requester-overlay.show .ui-requester-box { transform: scale(1); }.ui-requester-icon { flex-shrink: 0; width: 28px; height: 28px; color: var(--accent); }.ui-requester-icon svg { width: 100%; height: 100%; }.ui-requester-warning .ui-requester-icon { color: var(--paint-amber); }.ui-requester-error .ui-requester-icon { color: var(--paint-red); }.ui-requester-success .ui-requester-icon { color: var(--paint-green); }.ui-requester-content { flex: 1; min-width: 0; }.ui-requester-title { font-size:calc(0.9375rem * var(--text-scale)); font-weight: 600; color: var(--paint-text); margin-bottom: 6px; }.ui-requester-message { font-size:calc(0.8125rem * var(--text-scale)); color: var(--paint-text2); line-height: 1.5; margin-bottom: 18px; white-space: pre-wrap; }.ui-requester-buttons { display: flex; justify-content: flex-end; gap: 8px; flex-wrap: wrap; }.paint-app input.ui-requester-input {
            width: 100%; box-sizing: border-box; padding: 8px 10px; margin-bottom: 6px;
            background: var(--paint-field); border: 1px solid var(--paint-border); border-radius: 6px;
            color: var(--paint-text); font-family: inherit; font-size:calc(0.8125rem * var(--text-scale)); outline: none;
            transition: border-color 0.15s ease;
        }.paint-app input.ui-requester-input:focus { border-color: var(--accent); }.ui-requester-error { min-height: 15px; font-size:calc(0.7188rem * var(--text-scale)); color: var(--paint-red); margin-bottom: 8px; }.ui-requester-btn { padding: 7px 16px; border-radius: 6px; border: 1px solid var(--paint-border); background: transparent; color: var(--paint-text); cursor: pointer; font-family: inherit; font-size:calc(0.8125rem * var(--text-scale)); }.ui-requester-btn:hover { background: rgba(255,255,255,0.08); }.ui-requester-btn.primary { background: var(--accent); border-color: var(--accent); color: #fff; }.ui-requester-btn.primary:hover { filter: brightness(1.1); }.ui-requester-btn.danger { color: var(--paint-red); border-color: var(--paint-red); }.ui-requester-btn.danger:hover { background: hsla(0,70%,50%,0.12); }.ui-filepicker-box { display: flex; flex-direction: column; background: var(--paint-dlg-bg); border: 1px solid var(--paint-border); border-radius: 12px; padding: 22px; width: 460px; max-width: 90vw; box-shadow: 0 24px 70px rgba(0,0,0,0.65); transform: scale(0.95) translateY(4px); transition: transform 0.2s ease; }.ui-requester-overlay.show .ui-filepicker-box { transform: scale(1) translateY(0); }.ui-filepicker-header { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }.ui-filepicker-header-icon { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 38px; height: 38px; border-radius: 10px; background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); }.ui-filepicker-header-icon svg { width: 20px; height: 20px; }.ui-filepicker-header .ui-requester-title { margin-bottom: 0; font-size:calc(1rem * var(--text-scale)); }.ui-filepicker-toolbar { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px solid var(--paint-border); }.ui-filepicker-breadcrumb { flex: 1; min-width: 0; display: flex; align-items: center; gap: 2px; overflow-x: auto; }.ui-filepicker-crumb { background: transparent; border: none; color: var(--paint-text2); cursor: pointer; font-family: inherit; font-size:calc(0.75rem * var(--text-scale)); padding: 4px 9px; border-radius: 6px; white-space: nowrap; transition: background 0.15s ease, color 0.15s ease; }.ui-filepicker-crumb:hover { background: rgba(255,255,255,0.07); color: var(--paint-text); }.ui-filepicker-crumb.active { color: var(--accent); font-weight: 600; background: color-mix(in srgb, var(--accent) 12%, transparent); }.ui-filepicker-sep { color: var(--paint-text2); opacity: 0.4; font-size:calc(0.75rem * var(--text-scale)); }.ui-filepicker-newfolder-btn { flex-shrink: 0; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 7px; border: 1px solid var(--paint-border); background: transparent; color: var(--paint-text2); cursor: pointer; transition: background 0.15s ease, color 0.15s ease; }.ui-filepicker-newfolder-btn svg { width: 15px; height: 15px; }.ui-filepicker-newfolder-btn:hover { background: rgba(255,255,255,0.08); color: var(--paint-text); }.ui-filepicker-list { height: 270px; overflow-y: auto; margin-bottom: 14px; padding-right: 2px; }.ui-filepicker-row { display: flex; align-items: center; gap: 11px; padding: 8px 9px; border-radius: 8px; cursor: default; font-size:calc(0.8125rem * var(--text-scale)); color: var(--paint-text); border-left: 2px solid transparent; transition: background 0.12s ease, border-color 0.12s ease; }.ui-filepicker-row:hover { background: rgba(255,255,255,0.05); }.ui-filepicker-row.selected { background: color-mix(in srgb, var(--accent) 16%, transparent); border-left-color: var(--accent); }.ui-filepicker-icon { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 26px; height: 26px; border-radius: 7px; background: rgba(255,255,255,0.05); color: var(--paint-text2); }.ui-filepicker-icon svg { width: 15px; height: 15px; }.ui-filepicker-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.ui-filepicker-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; height: 100%; text-align: center; color: var(--paint-text2); font-size:calc(0.8125rem * var(--text-scale)); }.ui-filepicker-empty svg { width: 40px; height: 40px; opacity: 0.3; }.ui-filepicker-newfolder-row { padding: 5px 9px; }.ui-filepicker-newfolder-input { flex: 1; min-width: 0; background: var(--paint-field); border: 1px solid var(--accent); border-radius: 6px; color: var(--paint-text); font-family: inherit; font-size:calc(0.8125rem * var(--text-scale)); padding: 5px 8px; outline: none; }.ui-filepicker-savebar { margin-bottom: 4px; }.ui-filepicker-savebar .ui-requester-input { margin-bottom: 0; }.paint-app .paint-toolbar {
            display: flex;
            align-items: center;
            gap: 18px;
            min-height: 50px; 
            padding: 8px 14px;
            background: var(--paint-panel);
            border-bottom: 1px solid var(--paint-border);
            flex-shrink: 0;
            flex-wrap: wrap;
            transition: background 0.6s ease;
        }.paint-app .paint-tools { display: flex; flex-direction: column; gap: 4px; align-items: center; }.paint-app .paint-tool-btn {
            width: 40px; height: 40px;
            display: flex; align-items: center; justify-content: center;
            border-radius: 8px;
            border: 1px solid transparent;
            background: transparent;
            color: var(--paint-text2);
            cursor: pointer;
            transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
        }.paint-app .paint-tool-btn svg { width: 22px; height: 22px; }.paint-app .paint-tool-btn:hover { background: rgba(255,255,255,0.08); color: var(--paint-text); }.paint-app .paint-tool-btn.active {
            background: color-mix(in srgb, var(--accent) 18%, transparent);
            border-color: var(--accent);
            color: var(--accent);
        }.paint-app .paint-tool-btn.filled svg { fill: currentColor; fill-opacity: 0.45; }.paint-app .paint-size-row { display: flex; align-items: center; gap: 8px; min-width: 160px; }.paint-app .paint-size-label { font-size:calc(0.75rem * var(--text-scale)); color: var(--paint-text2); white-space: nowrap; }.paint-app .paint-checkbox-label {
            display: flex; align-items: center; gap: 6px;
            font-size:calc(0.75rem * var(--text-scale)); color: var(--paint-text2);
            white-space: nowrap; cursor: pointer; user-select: none;
        }.paint-app .paint-checkbox-label input[type="checkbox"] { cursor: pointer; }.paint-app .paint-size-value {
            font-variant-numeric: tabular-nums;
            color: var(--accent);
            font-size:calc(0.75rem * var(--text-scale));
            font-weight: 600;
            min-width: 44px;
            text-align: right;
            white-space: nowrap;
        }.paint-app .paint-size-unit { font-size:calc(0.75rem * var(--text-scale)); color: var(--paint-text2); }.paint-app .paint-num-input {
            width: 52px;
            background: var(--paint-field);
            border: 1px solid var(--paint-border);
            border-radius: 6px;
            color: var(--paint-text);
            padding: 4px 6px;
            font-family: inherit;
            font-size:calc(0.75rem * var(--text-scale));
            text-align: right;
        }.paint-app .paint-num-input:focus { outline: none; border-color: var(--accent); }.paint-app .paint-num-input::-webkit-inner-spin-button, .paint-app .paint-num-input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }.paint-app .paint-num-input { -moz-appearance: textfield; }.paint-app .paint-colors-panel {
            width: 78px;
            flex-shrink: 0;
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 12px;
            padding: 10px 10px 10px 8px;
            overflow-y: auto;
            background: var(--paint-panel);
            border-right: 1px solid var(--paint-border);
            transition: background 0.6s ease;
        }.paint-app .paint-swatch-pair { position: relative; width: 46px; height: 38px; flex-shrink: 0; }.paint-app .paint-swatch {
            position: absolute;
            width: 30px; height: 30px;
            border-radius: 6px;
            border: 2px solid var(--paint-border);
            cursor: pointer;
            box-shadow: 0 1px 3px rgba(0,0,0,0.4);
        }.paint-app .paint-swatch.primary { top: 0; left: 0; z-index: 2; }.paint-app .paint-swatch.secondary { bottom: 0; right: 0; z-index: 1; }.paint-app .paint-swap-btn {
            width: 22px; height: 22px;
            flex-shrink: 0;
            border-radius: 50%;
            border: 1px solid var(--paint-border);
            background: var(--paint-solid);
            color: var(--paint-text2);
            display: flex; align-items: center; justify-content: center;
            cursor: pointer;
        }.paint-app .paint-swap-btn svg { width: 12px; height: 12px; transform: rotate(90deg); }.paint-app .paint-swap-btn:hover { color: var(--accent); border-color: var(--accent); }.paint-app .paint-color-input { width: 0; height: 0; opacity: 0; position: absolute; pointer-events: none; }.paint-app .paint-palette { display: grid; grid-template-columns: repeat(2, 20px); gap: 5px; justify-content: center; }.paint-app .paint-palette-swatch {
            width: 20px; height: 20px;
            border-radius: 4px;
            border: 1px solid var(--paint-border);
            cursor: pointer;
            padding: 0;
        }.paint-app .paint-palette-swatch:hover { transform: scale(1.15); border-color: var(--accent); }.paint-app .paint-canvas-wrap {
            flex: 1;
            overflow: auto;
            display: flex;
            align-items: center;
            justify-content: center;
            background:
                linear-gradient(45deg, rgba(255,255,255,0.04) 25%, transparent 25%, transparent 75%, rgba(255,255,255,0.04) 75%),
                linear-gradient(45deg, rgba(255,255,255,0.04) 25%, transparent 25%, transparent 75%, rgba(255,255,255,0.04) 75%);
            background-size: 20px 20px;
            background-position: 0 0, 10px 10px;
            background-color: var(--paint-field);
            padding: 16px;
            transition: background-color 0.6s ease;
        }.paint-app .paint-canvas-wrap.dragover { outline: 2px dashed var(--accent); outline-offset: -8px; }.paint-app .paint-canvas-scroll { display: flex; }.paint-app .paint-canvas {
            background: #ffffff;
            box-shadow: 0 4px 18px rgba(0,0,0,0.5);
            touch-action: none;
            cursor: crosshair;
            image-rendering: pixelated;
        }.paint-app .paint-canvas.cursor-eraser { cursor: cell; }.paint-app .paint-canvas.cursor-picker { cursor: copy; }.paint-newdlg-presets { display: flex; gap: 6px; margin: 10px 0; }.paint-newdlg-presets .ui-requester-btn { flex: 1; font-size:calc(0.75rem * var(--text-scale)); padding: 6px 4px; }.paint-newdlg-row { display: flex; gap: 12px; margin-bottom: 14px; }.paint-newdlg-row label { display: flex; flex-direction: column; gap: 4px; font-size:calc(0.75rem * var(--text-scale)); color: var(--paint-text2); flex: 1; }.paint-newdlg-row input[type="number"] {
            background: var(--paint-field);
            border: 1px solid var(--paint-border);
            border-radius: 6px;
            color: var(--paint-text);
            padding: 6px 8px;
            font-family: inherit;
            font-size:calc(0.8125rem * var(--text-scale));
        }.paint-app .paint-tools-sep { height: 1px; width: 100%; margin: 4px 0; background: var(--paint-border); flex-shrink: 0; }.paint-app .paint-brush-type-wrap { display: flex; align-items: center; }.paint-app .paint-brush-select {
            background: var(--paint-field);
            border: 1px solid var(--paint-border);
            border-radius: 6px;
            color: var(--paint-text);
            font-family: inherit;
            font-size:calc(0.75rem * var(--text-scale));
            padding: 4px 8px; 
            cursor: pointer;
        }.paint-app .paint-brush-select:focus { outline: 1px solid var(--accent); }.paint-app .paint-brush-select option { background: var(--paint-solid); color: var(--paint-text); }
        /* Barre de statut basse : orpheline de CSS depuis le portage (repris à l'identique de PeerDrop, cf. .p2p #statusbar) */
        .paint-app .notepad-status{height:1.85rem;flex-shrink:0;background:var(--paint-panel);border-top:1px solid var(--paint-border);display:flex;align-items:center;padding:0 0.89rem;padding-bottom:env(safe-area-inset-bottom,0px);gap:0.52rem}
        .paint-app .notepad-status span{font-size:calc(0.82rem * var(--text-scale));color:var(--paint-text);letter-spacing:.02em;white-space:nowrap}
        .paint-app .notepad-status span.dim{color:var(--paint-text2)}
        .paint-app .notepad-status .status-fill{flex:1}
        .paint-app .paint-canvas-wrap {
            display: block; 
            padding: 0;
            overflow: auto;
            min-height: 0; min-width: 0; 
            background:
                linear-gradient(45deg, rgba(255,255,255,0.04) 25%, transparent 25%, transparent 75%, rgba(255,255,255,0.04) 75%),
                linear-gradient(45deg, rgba(255,255,255,0.04) 25%, transparent 25%, transparent 75%, rgba(255,255,255,0.04) 75%);
            background-size: 20px 20px;
            background-position: 0 0, 10px 10px;
            background-color: var(--paint-field);
            cursor: default;
        }.paint-app .paint-canvas-wrap.panning { cursor: grabbing; }.paint-app .paint-canvas-wrap.dragover { outline: 2px dashed var(--accent); outline-offset: -8px; }.paint-app .paint-canvas-scroll {
            display: flex;
            min-width: 100%; min-height: 100%;
            box-sizing: border-box;
            padding: 60px;
        }.paint-app .paint-canvas {
            margin: auto;
            background-image:
                linear-gradient(45deg, #bdbdbd 25%, transparent 25%, transparent 75%, #bdbdbd 75%, #bdbdbd),
                linear-gradient(45deg, #bdbdbd 25%, #e8e8e8 25%, #e8e8e8 75%, #bdbdbd 75%, #bdbdbd);
            background-size: 16px 16px;
            background-position: 0 0, 8px 8px;
            box-shadow: 0 4px 18px rgba(0,0,0,0.5);
            touch-action: none;
            image-rendering: pixelated;
            flex-shrink: 0;
        }.paint-app .paint-canvas.cursor-brush { cursor: crosshair; }.paint-app .paint-canvas.cursor-eraser { cursor: cell; }.paint-app .paint-canvas.cursor-picker { cursor: copy; }.paint-app .paint-canvas.cursor-select { cursor: crosshair; }.paint-app .paint-canvas.cursor-move-tool { cursor: move; }.paint-newdlg-transparent {
            display: flex; align-items: center; gap: 8px;
            font-size:calc(0.8125rem * var(--text-scale)); color: var(--paint-text2);
            margin: -4px 0 14px;
            cursor: pointer;
        }.paint-newdlg-transparent input[type="checkbox"] { accent-color: var(--accent); width: 15px; height: 15px; }.paint-anchor-label { font-size:calc(0.75rem * var(--text-scale)); color: var(--paint-text2); margin: 4px 0 6px; }.paint-anchor-grid {
            display: grid; grid-template-columns: repeat(3, 1fr);
            gap: 4px;
            width: 96px; height: 96px;
            margin: 0 auto 16px;
        }.paint-anchor-btn {
            background: var(--paint-field);
            border: 1px solid var(--paint-border);
            border-radius: 4px;
            cursor: pointer;
            position: relative;
        }.paint-anchor-btn::after {
            content: ''; position: absolute; top: 50%; left: 50%;
            width: 6px; height: 6px; border-radius: 50%;
            background: var(--paint-text2);
            transform: translate(-50%, -50%);
        }.paint-anchor-btn:hover { border-color: var(--accent); }.paint-anchor-btn.active { background: color-mix(in srgb, var(--accent) 18%, transparent); border-color: var(--accent); }.paint-anchor-btn.active::after { background: var(--accent); width: 8px; height: 8px; }.paint-app .paint-fill-toggle {
            display: none; 
            width: 40px; height: 40px;
            align-items: center; justify-content: center;
            border-radius: 8px;
            border: 1px solid var(--paint-border);
            background: transparent;
            color: var(--paint-text2);
            cursor: pointer;
            margin-left: 2px;
            transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
        }.paint-app .paint-fill-toggle svg { width: 18px; height: 18px; }.paint-app .paint-fill-toggle:hover { background: rgba(255,255,255,0.08); color: var(--paint-text); }.paint-app .paint-fill-toggle.active {
            background: color-mix(in srgb, var(--accent) 18%, transparent);
            border-color: var(--accent);
            color: var(--accent);
        }.paint-app .paint-workspace { flex: 1; min-height: 0; display: flex; overflow: hidden; }.paint-app .paint-canvas-wrap { min-width: 0; }.paint-app .paint-layers-panel {
            position: relative;
            width: 220px;
            min-width: 160px; max-width: 420px;
            flex-shrink: 0;
            display: flex;
            flex-direction: column;
            background: var(--paint-panel);
            border-left: 1px solid var(--paint-border);
            transition: background 0.6s ease;
        }.paint-app .paint-layers-resize-handle {
            position: absolute; top: 0; bottom: 0; left: -3px;
            width: 6px;
            cursor: ew-resize;
            z-index: 3;
        }.paint-app .paint-layers-resize-handle:hover, .paint-app .paint-layers-resize-handle.dragging { background: var(--accent); opacity: 0.5; }.paint-app .paint-layers-blend-row {
            display: flex; align-items: center; gap: 8px;
            padding: 8px 10px 6px;
            font-size:calc(0.6875rem * var(--text-scale));
            color: var(--paint-text2);
        }.paint-app .paint-layers-blend-row span:first-child { flex-shrink: 0; }.paint-app .paint-layers-blend-row select {
            flex: 1; min-width: 0;
            padding: 3px 6px; 
        }.paint-app .paint-layers-opacity-row {
            padding: 4px 10px 10px;
            font-size:calc(0.6875rem * var(--text-scale));
            color: var(--paint-text2);
            border-bottom: 1px solid var(--paint-border);
        }.paint-app .paint-layers-opacity-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px; }.paint-app .paint-layers-opacity-row input[type="range"] { width: 100%; }.paint-app .paint-layers-opacity-row .paint-size-value { flex-shrink: 0; min-width: 38px; text-align: right; }.paint-app .paint-layers-list { flex: 1; min-height: 0; overflow-y: auto; padding: 6px; display: flex; flex-direction: column; gap: 3px; }.paint-app .paint-layer-row {
            display: flex; align-items: center; gap: 8px;
            padding: 5px 6px;
            border-radius: 6px;
            border: 1px solid transparent;
            cursor: pointer;
            user-select: none;
            transition: background 0.12s ease, border-color 0.12s ease;
        }.paint-app .paint-layer-row:hover { background: rgba(255,255,255,0.06); }.paint-app .paint-layer-row.active { background: color-mix(in srgb, var(--accent) 16%, transparent); border-color: var(--accent); }.paint-app .paint-layer-row.dragging { opacity: 0.4; }.paint-app .paint-layer-row.drag-over { border-color: var(--accent); border-style: dashed; }.paint-app .paint-layer-row.hidden-layer .paint-layer-name { opacity: 0.5; }.paint-app .paint-layer-eye {
            flex-shrink: 0;
            width: 22px; height: 22px;
            display: flex; align-items: center; justify-content: center;
            border: none; background: transparent;
            color: var(--paint-text2);
            cursor: pointer;
            border-radius: 5px;
        }.paint-app .paint-layer-eye svg { width: 16px; height: 16px; }.paint-app .paint-layer-eye:hover { background: rgba(255,255,255,0.1); color: var(--paint-text); }.paint-app .paint-layer-row.hidden-layer .paint-layer-eye { color: var(--paint-text2); opacity: 0.5; }.paint-app .paint-layer-thumb {
            flex-shrink: 0;
            width: 52px; height: 38px;
            border-radius: 4px;
            border: 1px solid var(--paint-border);
            background-image:
                linear-gradient(45deg, #bdbdbd 25%, transparent 25%, transparent 75%, #bdbdbd 75%, #bdbdbd),
                linear-gradient(45deg, #bdbdbd 25%, #e8e8e8 25%, #e8e8e8 75%, #bdbdbd 75%, #bdbdbd);
            background-size: 12px 12px;
            background-position: 0 0, 6px 6px;
            background-color: #fff;
        }.paint-app .paint-layer-name {
            flex: 1; min-width: 0;
            font-size:calc(0.75rem * var(--text-scale));
            color: var(--paint-text);
            white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
        }.paint-app .paint-layer-name-input {
            flex: 1; min-width: 0;
            font-size:calc(0.75rem * var(--text-scale));
            font-family: inherit;
            background: var(--paint-field);
            color: var(--paint-text);
            border: 1px solid var(--accent);
            border-radius: 4px;
            padding: 2px 5px;
        }.paint-app .paint-layers-toolbar {
            display: flex; align-items: center; gap: 4px;
            padding: 6px 8px;
            border-top: 1px solid var(--paint-border);
        }.paint-app .paint-layers-toolbar button {
            width: 28px; height: 28px;
            display: flex; align-items: center; justify-content: center;
            border: none; background: transparent;
            color: var(--paint-text2);
            border-radius: 6px;
            cursor: pointer;
        }.paint-app .paint-layers-toolbar button svg { width: 15px; height: 15px; }.paint-app .paint-layers-toolbar button:hover:not(:disabled) { background: rgba(255,255,255,0.08); color: var(--paint-text); }.paint-app .paint-layers-toolbar button:disabled { opacity: 0.35; cursor: default; }.paint-help-box { flex-direction: column; width: min(1353px, 94vw); max-width: min(1353px, 94vw); max-height: 84vh; padding: 0; overflow: hidden; background: var(--paint-solid); }.paint-help-content { display: flex; flex-direction: column; min-height: 0; flex: 1; }.paint-help-header { display: flex; gap: 14px; align-items: flex-start; padding: 22px 26px 16px; flex-shrink: 0; }.paint-help-header-icon { width: 34px; height: 34px; flex-shrink: 0; color: var(--accent); }.paint-help-header-icon svg { width: 100%; height: 100%; }.paint-help-header .ui-requester-title { font-size:calc(1.125rem * var(--text-scale)); margin-bottom: 4px; }.paint-help-intro { font-size:calc(0.8125rem * var(--text-scale)); color: var(--paint-text2); line-height: 1.5; margin: 0; }.paint-help-body { flex: 1; min-height: 0; overflow-y: auto; padding: 0 26px 4px; }.paint-help-section { margin-bottom: 22px; }.paint-help-section h3 { font-size:calc(0.8125rem * var(--text-scale)); font-weight: 700; color: var(--paint-text); text-transform: uppercase; letter-spacing: 0.04em; margin: 0 0 10px; padding-bottom: 6px; border-bottom: 1px solid var(--paint-border); }.paint-help-section h4 { font-size:calc(0.75rem * var(--text-scale)); font-weight: 600; color: var(--paint-text2); margin: 14px 0 8px; }.paint-help-section h4:first-of-type { margin-top: 0; }.paint-help-section p { font-size:calc(0.8125rem * var(--text-scale)); color: var(--paint-text2); line-height: 1.5; margin: 0; }.paint-help-tool-row { display: flex; gap: 12px; align-items: flex-start; padding: 7px 0; }.paint-help-tool-icon { width: 20px; height: 20px; flex-shrink: 0; margin-top: 1px; color: var(--paint-text2); }.paint-help-tool-icon svg { width: 100%; height: 100%; }.paint-help-tool-row strong { display: block; font-size:calc(0.8125rem * var(--text-scale)); color: var(--paint-text); font-weight: 600; margin-bottom: 2px; }.paint-help-tool-row span { font-size:calc(0.75rem * var(--text-scale)); color: var(--paint-text2); line-height: 1.4; }.paint-help-shortcuts-grid { display: grid; grid-template-columns: auto 1fr; gap: 6px 14px; align-items: center; }.paint-help-kbd { justify-self: start; font-family: var(--mono, monospace); font-size:calc(0.6875rem * var(--text-scale)); font-weight: 600; color: var(--paint-text); background: var(--paint-field); border: 1px solid var(--paint-border); border-radius: 5px; padding: 2px 7px; white-space: nowrap; }.paint-help-shortcuts-grid span:nth-child(2n) { font-size:calc(0.8125rem * var(--text-scale)); color: var(--paint-text2); }.paint-help-box .ui-requester-buttons { padding: 14px 26px; border-top: 1px solid var(--paint-border); flex-shrink: 0; margin: 0; }.paint-app .paint-layers-toolbar-sep { flex: 1; }


/* Photos */
.ph{flex:1;display:flex;flex-direction:column;min-height:0}
.ph-bar{display:flex;align-items:center;gap:4px;padding:6px 10px;border-bottom:1px solid var(--stroke);font-size:calc(12px * var(--text-scale))}
.ph-view{flex:1;display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative;background:rgba(0,0,0,.25)}
.ph-stage{transition:transform .2s;max-width:92%;max-height:92%;display:flex}
.ph-stage svg,.ph-stage img{max-width:100%;max-height:calc(100vh - 300px);border-radius:4px;box-shadow:0 8px 30px rgba(0,0,0,.4)}
.ph-arrow{position:absolute;top:50%;transform:translateY(-50%);width:38px;height:38px;border-radius:50%;background:var(--acrylic2);-webkit-backdrop-filter:blur(calc(14px * var(--blur-scale)));backdrop-filter:blur(calc(14px * var(--blur-scale)));display:flex;align-items:center;justify-content:center}
.ph-arrow:hover{background:var(--hover)}
.ph-arrow.l{left:14px}.ph-arrow.r{right:14px}
.ph-strip{display:flex;gap:8px;padding:10px 14px;overflow-x:auto;border-top:1px solid var(--stroke)}
.ph-th{width:74px;height:46px;border-radius:4px;overflow:hidden;flex-shrink:0;cursor:pointer;border:2px solid transparent;padding:0;background:var(--card)}
.ph-th.on{border-color:var(--accent)}
.ph-th svg{width:100%;height:100%;display:block}
.ph-th img{width:100%;height:100%;object-fit:cover;display:block}

/* Edge */
.eg{flex:1;display:flex;flex-direction:column;min-height:0}
.eg-bar{display:flex;align-items:center;gap:6px;padding:7px 10px;border-bottom:1px solid var(--stroke)}
.eg-tabs{display:flex;padding:6px 10px 0;gap:6px}
.eg-tab{display:flex;align-items:center;gap:8px;height:32px;padding:0 14px;border-radius:6px 6px 0 0;background:var(--card);font-size:calc(12px * var(--text-scale));border:1px solid var(--stroke);border-bottom:none;max-width:220px}
.eg-tab span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.eg-addr{flex:1;height:30px;border-radius:15px;background:var(--field);border:1px solid var(--stroke2);display:flex;align-items:center;padding:0 14px;gap:8px}
.eg-addr input{flex:1;background:none;border:none;outline:none;color:var(--text);font-size:calc(12px * var(--text-scale))}
.eg-page{flex:1;overflow:auto;background:var(--solid2)}
.eg-home{max-width:560px;margin:0 auto;padding:56px 20px;text-align:center}
.eg-home .bigclock{font-size:calc(44px * var(--text-scale));font-weight:300;margin-bottom:26px}
.eg-search{height:44px;border-radius:22px;background:var(--mica);border:1px solid var(--stroke2);box-shadow:0 4px 16px rgba(0,0,0,.12);display:flex;align-items:center;padding:0 20px;gap:10px;margin-bottom:30px}
.eg-search input{flex:1;background:none;border:none;outline:none;color:var(--text);font-size:calc(13.5px * var(--text-scale))}
.eg-links{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.eg-lk{padding:14px 6px;border-radius:6px;background:var(--card);border:1px solid var(--stroke);cursor:pointer;font-size:calc(11.5px * var(--text-scale));display:flex;flex-direction:column;align-items:center;gap:9px}
.eg-lk:hover{background:var(--hover)}
.eg-lk svg{width:26px;height:26px}
.eg-off{max-width:460px;margin:70px auto;text-align:center;background:var(--card);border:1px solid var(--stroke);border-radius:8px;padding:38px 30px}
.eg-off svg{width:46px;height:46px;margin-bottom:16px;color:var(--text2)}
.eg-off h3{font-size:calc(17px * var(--text-scale));margin-bottom:8px}
.eg-off p{color:var(--text2);font-size:calc(12.5px * var(--text-scale));line-height:1.5;margin-bottom:18px}
.eg-local{max-width:640px;margin:0 auto;padding:34px 26px}
.eg-local h2{display:flex;align-items:center;gap:10px;font-size:calc(18px * var(--text-scale));font-weight:600;margin-bottom:18px}
.eg-local h2 svg{width:22px;height:22px}
.eg-local p{color:var(--text2);font-size:calc(12.5px * var(--text-scale));line-height:1.6;margin-bottom:16px}
.eg-faq{list-style:none;display:flex;flex-direction:column;gap:9px}
.eg-faq li{background:var(--card);border:1px solid var(--stroke);border-radius:8px;padding:12px 14px;font-size:calc(12.5px * var(--text-scale));line-height:1.5;color:var(--text2)}
.eg-faq li b{color:var(--text);display:block;margin-bottom:3px;font-weight:600}
.eg-res{display:flex;flex-direction:column;gap:8px}
.eg-resit{display:flex;align-items:center;gap:14px;padding:12px 14px;border-radius:8px;background:var(--card);border:1px solid var(--stroke);cursor:pointer}
.eg-resit:hover{background:var(--hover)}
.eg-resit svg{width:26px;height:26px;flex-shrink:0}
.eg-resit b{font-size:calc(13px * var(--text-scale));display:block}
.eg-resit span{font-size:calc(11px * var(--text-scale));color:var(--text2)}
.eg-page:has(.eg-frame-wrap){overflow:hidden}
.eg-frame-wrap{display:flex;flex-direction:column;height:100%}
.eg-frame-note{display:flex;align-items:center;gap:10px;max-height:60px;padding:8px 14px;background:var(--card);border-bottom:1px solid var(--stroke);font-size:calc(11.5px * var(--text-scale));color:var(--text2);flex-shrink:0;overflow:hidden;animation:eg-note-out .4s ease 4.5s forwards}
.eg-frame-note svg{width:16px;height:16px;flex-shrink:0}
.eg-frame-note span{flex:1}
@keyframes eg-note-out{to{opacity:0;max-height:0;padding-top:0;padding-bottom:0;border-bottom-width:0}}
.eg-openext{color:var(--accent);text-decoration:none;font-weight:600;white-space:nowrap;display:flex;align-items:center;gap:3px}
.eg-openext svg{width:12px;height:12px}
.eg-frame{flex:1;border:none;width:100%;background:#fff}

/* Démineur */
.mn{flex:1;display:flex;flex-direction:column;align-items:center;padding:14px;gap:12px;overflow:auto}
.mn-head{display:flex;align-items:center;gap:18px;background:var(--card);border:1px solid var(--stroke);border-radius:6px;padding:8px 16px}
.mn-head .val{font-family:Consolas,monospace;font-size:calc(17px * var(--text-scale));font-weight:700;min-width:44px;text-align:center}
.mn-head svg{width:18px;height:18px}
#mn-reset{width:34px;height:34px;border-radius:5px;background:var(--solid2);display:flex;align-items:center;justify-content:center}
#mn-reset:hover{background:var(--hover)}
.mn-grid{display:grid;grid-template-columns:repeat(9,34px);gap:2px}
.mn-c{width:34px;height:34px;border-radius:3px;background:var(--solid2);border:1px solid var(--stroke2);font-weight:700;font-size:calc(15px * var(--text-scale));display:flex;align-items:center;justify-content:center;cursor:pointer}
.mn-c:hover{background:var(--hover)}
.mn-c.rev{background:var(--press);border-color:var(--stroke);cursor:default}
.mn-c.boom{background:#c42b1c}
.mn-c svg{width:16px;height:16px}
.mn-msg{font-size:calc(13px * var(--text-scale));min-height:18px}

/* Corbeille */
.tr{flex:1;display:flex;flex-direction:column;min-height:0}
.tr-bar{display:flex;gap:8px;padding:8px 12px;border-bottom:1px solid var(--stroke)}
.tr-list{flex:1;overflow:auto;padding:8px 12px}
.tr-it{display:flex;align-items:center;gap:12px;padding:8px 10px;border-radius:5px;font-size:calc(12.5px * var(--text-scale))}
.tr-it:hover{background:var(--hover)}
.tr-it svg{width:20px;height:20px}
.tr-it button{margin-left:auto;font-size:calc(11.5px * var(--text-scale));color:var(--accent);padding:4px 10px;border-radius:4px}
.tr-it button:hover{background:var(--hover)}
.tr-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;color:var(--text2)}
.tr-empty svg{width:52px;height:52px;opacity:.5}

/* Lecteur de musique */
.mp{flex:1;display:flex;flex-direction:column;min-height:0;padding:20px 22px 0}
.mp-art{width:120px;height:120px;margin:0 auto 14px;border-radius:10px;background:var(--card);border:1px solid var(--stroke);display:flex;align-items:center;justify-content:center}
.mp-art svg{width:56px;height:56px}
.mp-title{text-align:center;font-size:calc(13.5px * var(--text-scale));font-weight:600;margin-bottom:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-time{display:flex;align-items:center;gap:8px;font-size:calc(10.5px * var(--text-scale));color:var(--text2)}
.mp-time input{flex:1}
.mp-ctrl{display:flex;align-items:center;justify-content:center;gap:16px;margin:10px 0}
.mp-ctrl .mp-play{width:44px;height:44px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center}
.mp-ctrl .mp-play:hover{background:color-mix(in srgb,var(--accent) 88%,#fff)}
.mp-ctrl .mp-play svg{width:20px;height:20px}
.mp-ctrl .mp-prev,.mp-ctrl .mp-next{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center}
.mp-ctrl .mp-prev:hover,.mp-ctrl .mp-next:hover{background:var(--hover)}
.mp-vol{display:flex;align-items:center;gap:10px;padding:6px 4px 14px;border-bottom:1px solid var(--stroke)}
.mp-vol svg{width:16px;height:16px;flex-shrink:0}
.mp-vol input{flex:1}
.mp-list{flex:1;overflow:auto;margin:0 -22px;padding:6px 22px 16px}
.mp-row{display:flex;align-items:center;gap:12px;padding:8px 6px;border-radius:5px;font-size:calc(12.5px * var(--text-scale));cursor:pointer}
.mp-row:hover{background:var(--hover)}
.mp-row.on{background:var(--hover);font-weight:600;color:var(--accent)}
.mp-row svg{width:22px;height:22px;flex-shrink:0}
.mp-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Notes autocollantes (une fenêtre = une note, posée sur le bureau) */
.sn-note{flex:1;display:flex;flex-direction:column;padding:8px 10px;min-height:0}
.sn-dots{display:flex;gap:5px;margin-bottom:4px}
.sn-dot{width:13px;height:13px;border-radius:50%;padding:0;border:1.5px solid transparent;cursor:pointer}
.sn-dot.on{border-color:rgba(0,0,0,.55)}
.sn-note textarea{flex:1;min-height:0;background:transparent;border:none;outline:none;resize:none;color:#3a3a3a;font-size:calc(12.5px * var(--text-scale));line-height:1.45;font-family:inherit}

/* Overlays plein écran de gestion d'énergie */
#dim,#night{position:fixed;inset:0;pointer-events:none}
#dim{z-index:500;background:#000;opacity:0}
#night{z-index:501;background:#ff9749;opacity:0;mix-blend-mode:multiply;transition:opacity .4s}

/* ═══════════════════════════════════════════════════════════════
   PeerDrop (transfert P2P) — rendu Fluent, sans CRT/ambre
   ═══════════════════════════════════════════════════════════════ */
.p2p{--bg:transparent;--panel:var(--card);--surface:var(--card);--surface2:var(--field);
  --border:var(--stroke);--border2:var(--stroke2);--dim:var(--text2);--dim2:var(--text2);
  --blue:var(--accent);--green:#2fae58;--amber:#c98a1d;--red:#d63a3a;--cyan:#1fa6ac;
  --mono:"Segoe UI Variable Text","Segoe UI",system-ui,sans-serif;--black:var(--mono);--code:"Cascadia Mono",Consolas,monospace;
  display:flex;flex-direction:column;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:var(--mono);font-size:calc(13px * var(--text-scale))}
[data-theme=dark] .p2p{--green:#3fb950;--amber:#e3b341;--red:#f85149;--cyan:#39c5cf}
[data-theme=light] .p2p{--green:#1a7f37;--amber:#9a6700;--red:#cf222e;--cyan:#0598a3}
.p2p *,.p2p *::before,.p2p *::after{box-sizing:border-box}
.p2p button{font-family:inherit;color:inherit}
.p2p ::selection{background:var(--accent);color:#fff}
@keyframes p2p-blink{0%,100%{opacity:1}50%{opacity:.4}}

/* ── Barre supérieure (langue + statut connexion) ── */
.p2p #titlebar{min-height:2.2rem;background:var(--panel);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:flex-end;padding:0.3rem 0.74rem;flex-shrink:0;gap:0.52rem;user-select:none}
.p2p .tb-right-group{display:flex;align-items:center;gap:0.59rem}
.p2p .lang-select{font-family:inherit;font-size:calc(0.94rem * var(--text-scale));font-weight:600;color:#fff;background:var(--field);border:1px solid var(--stroke);border-radius:0.25rem;padding:0.22rem 0.37rem;cursor:pointer;outline:none;transition:border-color .15s,color .15s}
.p2p .lang-select:hover,.p2p .lang-select:focus{color:var(--text);border-color:var(--accent)}
.p2p .lang-select option{background:var(--solid);color:var(--text)}
.p2p #conn-bar{display:none;align-items:center;gap:0.3rem;font-size:calc(0.97rem * var(--text-scale));letter-spacing:.02em;color:#fff}
.p2p .conn-dot{width:0.5rem;height:0.5rem;border-radius:50%;background:var(--dim);flex-shrink:0;transition:background .4s,box-shadow .4s}
.p2p .conn-dot.waiting{background:var(--amber);animation:p2p-blink 1.4s ease-in-out infinite}
.p2p .conn-dot.ok{background:var(--green);box-shadow:0 0 0.25rem var(--green);animation:none}
.p2p .conn-dot.err{background:var(--red);box-shadow:0 0 0.25rem var(--red);animation:none}
.p2p .conn-label{color:#fff;transition:color .4s;font-weight:600}
.p2p .conn-label.ok{color:var(--green)}
.p2p .conn-label.err{color:#fff}
.p2p .conn-ping{color:#fff;font-size:calc(0.97rem * var(--text-scale))}

/* ── Layout principal ── */
.p2p #main{flex:1;overflow:hidden;position:relative;min-height:0}
.p2p .screen{display:none;flex-direction:column;height:100%;overflow:hidden}
.p2p .screen.visible{display:flex}

/* ── Écran de sélection de rôle ── */
.p2p #screen-role{align-items:center;justify-content:center;background:var(--bg)}
.p2p .role-panel{width:min(25.19rem,96vw);background:var(--panel);border:1px solid var(--border2);border-radius:0.5rem;overflow:hidden}
.p2p .role-panel-header{padding:1.04rem 1.33rem 0.74rem;border-bottom:1px solid var(--border);text-align:center}
.p2p .role-panel-title{font-size:calc(1.16rem * var(--text-scale));font-weight:700;letter-spacing:.02em;color:var(--text);margin-bottom:0.15rem;font-family:var(--black)}
.p2p .role-panel-sub{font-size:calc(0.87rem * var(--text-scale));color:#fff;letter-spacing:.02em}
.p2p .role-btns{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--border)}
.p2p .role-btn{display:flex;flex-direction:column;align-items:flex-start;gap:0.22rem;padding:0.89rem 0.74rem;background:var(--panel);border:none;cursor:pointer;transition:background .15s;text-align:left}
.p2p .role-btn:hover{background:var(--hover)}
.p2p .role-btn.selected{background:var(--hover)}
.p2p .role-btn:disabled{opacity:.4;cursor:not-allowed}
.p2p .role-btn .r-icon{display:flex;color:#fff;line-height:1}
.p2p .role-btn .r-label{font-size:calc(1.02rem * var(--text-scale));font-weight:700;letter-spacing:.02em;color:var(--text);font-family:var(--black)}
.p2p .role-btn .r-desc{font-size:calc(0.8rem * var(--text-scale));color:#fff;letter-spacing:.01em;white-space:normal;line-height:1.3}

.p2p #role-tooltip{display:none;position:absolute;z-index:9999;pointer-events:none;background:var(--solid);border:1px solid var(--stroke2);border-radius:0.4rem;padding:0.52rem 0.67rem;width:18.2rem;box-shadow:0 14px 40px var(--shadow)}
.p2p #role-tooltip.visible{display:block}
.p2p #role-tooltip::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:0.3rem solid transparent;border-top-color:var(--stroke2)}
.p2p #role-tooltip.flipped::after{top:auto;bottom:100%;border-top-color:transparent;border-bottom-color:var(--stroke2)}
.p2p .role-tooltip-title{font-size:calc(0.84rem * var(--text-scale));font-weight:700;letter-spacing:.02em;color:var(--text);margin-bottom:0.3rem;font-family:var(--black)}
.p2p .role-tooltip-line{display:flex;align-items:flex-start;gap:0.3rem;font-size:calc(0.85rem * var(--text-scale));color:#fff;letter-spacing:.01em;line-height:1.45;margin-bottom:0.15rem}
.p2p .role-tooltip-line .tt-dot{color:#fff;flex-shrink:0;margin-top:0.04rem}
.p2p .role-tooltip-line:last-child{margin-bottom:0}

.p2p .role-edge-note{margin-top:0.67rem;padding:0.52rem 0.89rem;border-top:1px solid var(--border);display:flex;align-items:center;gap:0.44rem;font-size:calc(0.81rem * var(--text-scale));color:#fff;letter-spacing:.01em;line-height:1.4}
.p2p .role-edge-note .edge-icon{display:inline-flex;align-items:center;color:#fff;flex-shrink:0}
.p2p .role-hint{padding:0.59rem 1.33rem;border-top:1px solid var(--border);font-size:calc(0.8rem * var(--text-scale));color:#fff;letter-spacing:.02em;text-align:center}

@media (max-width:480px){
  .p2p .role-btns{grid-template-columns:1fr}
  .p2p .role-btn{flex-direction:row;align-items:center;gap:0.52rem;padding:0.67rem 0.74rem}
  .p2p .role-btn .r-icon{flex-shrink:0}
}

/* ── Barre d'outils (mode serveur) ── */
.p2p .toolbar{min-height:2.96rem;background:var(--panel);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0.3rem 0.74rem;gap:0.52rem;flex-shrink:0;flex-wrap:wrap}
.p2p .toolbar-left,.p2p .toolbar-right{display:flex;align-items:center;gap:0.52rem;flex-wrap:wrap}
.p2p .session-block{display:flex;align-items:center;gap:0.3rem}
.p2p .sess-label{font-size:calc(0.87rem * var(--text-scale));color:#fff;letter-spacing:.02em;font-weight:600}
.p2p .code-pill{font-family:var(--code);font-size:calc(1.39rem * var(--text-scale));font-weight:700;letter-spacing:.3em;color:#fff;background:color-mix(in srgb,var(--accent) 10%,transparent);border:1px solid color-mix(in srgb,var(--accent) 30%,transparent);border-radius:0.3rem;padding:0.15rem 0.6rem;cursor:pointer;min-width:7rem;text-align:center;transition:background .15s,border-color .15s}
.p2p .code-pill:hover{background:color-mix(in srgb,var(--accent) 18%,transparent);border-color:color-mix(in srgb,var(--accent) 55%,transparent)}
.p2p .queue-count{font-size:calc(0.97rem * var(--text-scale));color:#fff;letter-spacing:.04em;background:color-mix(in srgb,var(--amber) 12%,transparent);border:1px solid color-mix(in srgb,var(--amber) 30%,transparent);border-radius:0.25rem;padding:0.11rem 0.3rem;font-weight:600}
.p2p .queue-count.hidden{display:none}

.p2p .p2p-btn{padding:0.37rem 0.74rem;font-family:inherit;font-size:calc(0.97rem * var(--text-scale));font-weight:600;letter-spacing:.01em;background:var(--surface2);color:#fff;border:1px solid var(--border2);border-radius:0.3rem;cursor:pointer;transition:background .12s,color .12s,border-color .12s;white-space:nowrap;display:inline-flex;align-items:center;gap:0.3rem}
.p2p .p2p-btn:hover{background:var(--hover);color:var(--text);border-color:var(--stroke2)}
.p2p .p2p-btn:active{transform:translateY(1px)}
.p2p .p2p-btn:disabled{opacity:.4;cursor:not-allowed;transform:none}
.p2p .p2p-btn.primary{background:color-mix(in srgb,var(--accent) 14%,transparent);color:#fff;border-color:color-mix(in srgb,var(--accent) 40%,transparent)}
.p2p .p2p-btn.primary:hover:not(:disabled){background:color-mix(in srgb,var(--accent) 24%,transparent);border-color:var(--accent)}
.p2p .p2p-btn.danger{color:#fff;border-color:color-mix(in srgb,var(--red) 30%,transparent);background:color-mix(in srgb,var(--red) 7%,transparent)}
.p2p .p2p-btn.danger:hover{border-color:color-mix(in srgb,var(--red) 55%,transparent);background:color-mix(in srgb,var(--red) 14%,transparent)}
.p2p .btn-ico{display:inline-flex;flex-shrink:0}

.p2p .tb-toggle{display:flex;align-items:center;gap:0.3rem;cursor:pointer;font-size:calc(0.97rem * var(--text-scale));color:#fff;letter-spacing:.02em;font-weight:600;user-select:none;padding:0.3rem 0.52rem;border:1px solid var(--border2);border-radius:0.3rem;background:var(--surface2);transition:border-color .15s,color .15s}
.p2p .tb-toggle:hover{border-color:var(--stroke2);color:var(--text)}
.p2p .tb-toggle input{display:none}
.p2p .tb-toggle-track{width:1.15rem;height:0.63rem;border-radius:0.32rem;flex-shrink:0;background:var(--track);position:relative;transition:background .2s;border:1px solid var(--border2)}
.p2p .tb-toggle-track::after{content:'';position:absolute;top:0.08rem;left:0.08rem;width:0.44rem;height:0.44rem;border-radius:50%;background:#fff;transition:left .2s,background .2s}
.p2p .tb-toggle input:checked ~ .tb-toggle-track{background:var(--accent);border-color:var(--accent)}
.p2p .tb-toggle input:checked ~ .tb-toggle-track::after{left:0.63rem}
.p2p .tb-toggle input:checked ~ .tb-toggle-label{color:#fff}
.p2p .tb-toggle-label{transition:color .2s}

.p2p .srv-clients-badge{font-size:calc(0.87rem * var(--text-scale));font-weight:700;letter-spacing:.02em;color:var(--cyan);background:color-mix(in srgb,var(--cyan) 10%,transparent);border:1px solid color-mix(in srgb,var(--cyan) 30%,transparent);border-radius:0.3rem;padding:0.15rem 0.44rem;transition:color .3s}
.p2p .srv-clients-badge.active{color:var(--green);background:color-mix(in srgb,var(--green) 10%,transparent);border-color:color-mix(in srgb,var(--green) 35%,transparent)}

/* ── Table de fichiers ── */
.p2p .file-section{flex:1;display:flex;flex-direction:column;overflow:hidden}
.p2p .file-table-header{display:grid;grid-template-columns:0.89rem 1fr 2.96rem 4.44rem 5.19rem 0.89rem;gap:0 0.52rem;align-items:center;padding:0.37rem 0.81rem;background:var(--panel);border-bottom:1px solid var(--border);font-size:calc(0.87rem * var(--text-scale));font-weight:700;letter-spacing:.02em;color:#fff;flex-shrink:0}
.p2p .file-queue{flex:1;overflow-y:auto;background:var(--bg);display:flex;flex-direction:column}
.p2p .fq-item{display:grid;grid-template-columns:0.89rem 1fr 2.96rem 4.44rem 5.19rem 0.89rem;grid-template-rows:auto auto;gap:0 0.52rem;align-items:center;padding:0.52rem 0.81rem 0.3rem;border-bottom:1px solid var(--border);background:transparent;transition:background .12s;flex-shrink:0}
.p2p .fq-item:nth-child(even){background:var(--card)}
.p2p .fq-item:hover{background:var(--hover)}
.p2p .fq-item.active{background:color-mix(in srgb,var(--blue) 6%,transparent);border-left:2px solid var(--blue);padding-left:0.37rem}
.p2p .fq-item.done{background:color-mix(in srgb,var(--green) 6%,transparent)}
.p2p .fq-item.paused{background:color-mix(in srgb,var(--amber) 6%,transparent);border-left:2px solid var(--amber);padding-left:0.37rem}
.p2p .fq-item.confirmed{background:color-mix(in srgb,var(--green) 6%,transparent);border-left:2px solid var(--green);padding-left:0.37rem}

.p2p .fq-icon-sm{display:inline-flex;align-items:center;color:#fff}
.p2p .fq-name{font-size:calc(1.06rem * var(--text-scale));color:var(--text);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.p2p .fq-size{font-size:calc(0.97rem * var(--text-scale));color:#fff;text-align:right}
.p2p .fq-st{font-size:calc(0.87rem * var(--text-scale));font-weight:700;letter-spacing:.02em;white-space:nowrap}
.p2p .fq-st.sending{color:var(--text)}
.p2p .fq-st.done,.p2p .fq-st.confirmed{color:var(--green)}
.p2p .fq-st.paused{color:#fff}

.p2p .fq-remove{background:none;border:none;cursor:pointer;color:#fff;padding:0.07rem 0.15rem;border-radius:0.2rem;transition:color .12s,background .12s;line-height:1;display:inline-flex;align-items:center;justify-content:center}
.p2p .fq-remove:hover{color:#fff;background:color-mix(in srgb,var(--red) 12%,transparent)}
.p2p .fq-item.active .fq-remove,.p2p .fq-item.done .fq-remove,.p2p .fq-item.confirmed .fq-remove{display:none}

.p2p .fq-prow{grid-column:1 / -1;margin-top:0.22rem}
.p2p .mini-track{width:100%;height:0.44rem;background:var(--track);border-radius:0.22rem;overflow:hidden}
.p2p .mini-bar{height:100%;background:var(--blue);transform-origin:left;transform:scaleX(0);transition:transform .15s linear;border-radius:0.22rem}
.p2p .fq-item.done .mini-bar,.p2p .fq-item.confirmed .mini-bar{background:var(--green)}
.p2p .fq-item.paused .mini-bar{background:var(--amber)}

.p2p .sha-badge{display:inline-flex;align-items:center;gap:0.11rem;font-family:var(--code);font-size:calc(0.77rem * var(--text-scale));font-weight:700;letter-spacing:.02em;padding:0.11rem 0.3rem;border-radius:0.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .25s,border-color .25s,background .25s}
.p2p .sha-badge.waiting{color:#fff;border:1px solid var(--border2);background:transparent}
.p2p .sha-badge.hashing{color:#fff;border:1px solid color-mix(in srgb,var(--amber) 30%,transparent);background:color-mix(in srgb,var(--amber) 6%,transparent)}
.p2p .sha-badge.ok{color:var(--green);border:1px solid color-mix(in srgb,var(--green) 30%,transparent);background:color-mix(in srgb,var(--green) 7%,transparent)}
.p2p .sha-badge.err{color:#fff;border:1px solid color-mix(in srgb,var(--red) 30%,transparent);background:color-mix(in srgb,var(--red) 7%,transparent)}

/* ── Zone de dépôt ── */
.p2p .dropzone{margin:0.44rem;flex-shrink:0;border:1px dashed var(--stroke2);border-radius:0.4rem;padding:1.19rem 0.59rem;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0.3rem;cursor:pointer;position:relative;animation:p2p-recv-pulse 2.4s ease-in-out infinite;transition:border-color .15s,background .15s}
.p2p .dropzone:hover,.p2p .dropzone.drag-over{background:var(--hover) !important;border-color:var(--accent) !important;animation:none}
.p2p .dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}
.p2p .dz-icon{font-size:calc(2.05rem * var(--text-scale));color:#fff}
.p2p .dz-text{font-size:calc(0.97rem * var(--text-scale));color:#fff;letter-spacing:.02em;font-weight:700;font-family:var(--black)}
.p2p .dropzone:hover .dz-icon,.p2p .dropzone:hover .dz-text,.p2p .dropzone.drag-over .dz-icon,.p2p .dropzone.drag-over .dz-text{opacity:1;animation:none}

.p2p #recv-dropzone{margin:0.44rem;flex-shrink:0;border:1px dashed var(--stroke2);border-radius:0.4rem;padding:1.19rem 0.59rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0.37rem;animation:p2p-recv-pulse 2.4s ease-in-out infinite}
.p2p #recv-dropzone.hidden{display:none}
.p2p .recv-dz-icon{font-size:calc(2.05rem * var(--text-scale));line-height:1;color:#fff}
.p2p .recv-dz-text{font-size:calc(0.97rem * var(--text-scale));color:#fff;letter-spacing:.02em;font-weight:700;font-family:var(--black)}
.p2p .recv-dz-sub{font-size:calc(0.8rem * var(--text-scale));color:#fff;letter-spacing:.02em}

@keyframes p2p-recv-pulse{0%,100%{background:color-mix(in srgb,var(--accent) 3%,transparent);border-color:var(--stroke2)}50%{background:color-mix(in srgb,var(--accent) 9%,transparent);border-color:var(--accent)}}
@keyframes p2p-recv-icon-pulse{0%,100%{opacity:.55}50%{opacity:1}}

/* ── Mise en page récepteur ── */
.p2p .recv-form{background:var(--panel);border-bottom:1px solid var(--border);padding:0.59rem 0.74rem;flex-shrink:0;transition:padding .2s}
.p2p .recv-form-inner{display:flex;align-items:flex-start;justify-content:space-between;gap:0.37rem;flex-wrap:wrap}
.p2p .recv-row{display:flex;align-items:flex-end;gap:0.37rem;flex-wrap:wrap}
.p2p .recv-field{display:flex;flex-direction:column;gap:0.19rem}
.p2p .field-label,.p2p .sess-label{font-size:calc(0.87rem * var(--text-scale));color:#fff;letter-spacing:.02em;font-weight:700}

.p2p .recv-form.minimized{padding:0.3rem 0.74rem}
.p2p .recv-form.minimized .recv-form-inner{display:none}
.p2p .recv-form-mini{display:none;align-items:center;gap:0.44rem;flex-wrap:wrap;font-size:calc(0.87rem * var(--text-scale));color:#fff}
.p2p .recv-form.minimized .recv-form-mini{display:flex}
.p2p .recv-mini-code{color:#fff;font-weight:700;letter-spacing:.2em;font-family:var(--code)}
.p2p .recv-mini-expand{margin-left:auto;padding:0.15rem 0.44rem;font-family:inherit;font-size:calc(0.8rem * var(--text-scale));font-weight:600;letter-spacing:.02em;background:var(--surface2);color:#fff;border:1px solid var(--border2);border-radius:0.3rem;cursor:pointer;transition:color .12s,border-color .12s;display:inline-flex;align-items:center;gap:0.22rem}
.p2p .recv-mini-expand:hover{color:var(--text);border-color:var(--stroke2)}

.p2p .rfl-footer{padding:0.52rem 0.81rem;background:var(--panel);border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-shrink:0;gap:0.44rem;flex-wrap:wrap;position:sticky;bottom:0;z-index:2}
.p2p .rfl-sel-count{font-size:calc(0.87rem * var(--text-scale));color:#fff;letter-spacing:.04em}
.p2p .rfl-sel-count span{color:#fff;font-weight:700}

@media (max-width:600px){
  .p2p .recv-form-inner{flex-direction:column;gap:0.44rem}
  .p2p .recv-row{flex-direction:column;align-items:stretch;gap:0.44rem;width:100%}
  .p2p .recv-field{flex-direction:row;align-items:center;gap:0.44rem;flex-wrap:nowrap}
  .p2p .recv-field .field-label{flex-shrink:0;width:5.8rem}
  .p2p .recv-field input[type="text"]{flex:1;min-width:0;width:auto}
  .p2p #btn-connect{width:100%;text-align:center}
  .p2p .recv-field .dir-row{flex:1;min-width:0}
  .p2p .dir-path{flex:1;min-width:0;max-width:none;font-size:calc(0.84rem * var(--text-scale))}
  .p2p #btn-clear-recv{width:100%;text-align:center;align-self:stretch;margin-top:0.15rem}
  .p2p .p2p-btn,.p2p .btn-dir{min-height:2.4rem}
  .p2p .rfl-item{padding:0.74rem 0.59rem;gap:0.52rem}
  .p2p .rfl-footer{padding:0.44rem 0.59rem}
  .p2p #btn-rfl-download{flex:1;text-align:center}
  .p2p .sb-item:not(.sb-green){display:none}
  .p2p .sb-sep{display:none}
}
@media (max-width:380px){
  .p2p .recv-field{flex-direction:column;align-items:flex-start}
  .p2p .recv-field .field-label{width:auto}
  .p2p .recv-field input[type="text"]{width:100%}
  .p2p .recv-field .dir-row{width:100%}
}

.p2p input[type="text"]{padding:0.37rem 0.41rem;font-family:var(--code);font-size:calc(0.97rem * var(--text-scale));font-weight:700;letter-spacing:.3em;color:#fff;text-transform:uppercase;background:var(--field);border:1px solid var(--stroke2);border-radius:0.3rem;outline:none;width:8.15rem;transition:border-color .15s,background .15s}
.p2p input[type="text"]::placeholder{color:#fff;opacity:.5}
.p2p input[type="text"]:focus{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--field))}

.p2p .dir-row{display:flex;align-items:center;gap:0.22rem;flex-wrap:wrap}
.p2p .btn-dir{padding:0.37rem 0.44rem;font-family:inherit;font-size:calc(0.97rem * var(--text-scale));font-weight:600;letter-spacing:.01em;background:var(--surface2);color:#fff;border:1px solid var(--border2);border-radius:0.3rem;cursor:pointer;transition:background .12s,color .12s,border-color .12s;white-space:nowrap;display:inline-flex;align-items:center;gap:0.3rem}
.p2p .btn-dir:hover{background:var(--hover);color:var(--text);border-color:var(--stroke2)}
.p2p .btn-dir.chosen{border-color:color-mix(in srgb,var(--accent) 40%,transparent);color:#fff;background:color-mix(in srgb,var(--accent) 6%,transparent)}
.p2p .dir-path{font-size:calc(0.97rem * var(--text-scale));color:#fff;max-width:32rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.p2p .dir-path.has-dir{color:#fff;cursor:pointer;border-bottom:1px dashed color-mix(in srgb,var(--accent) 40%,transparent);transition:color .15s,border-color .15s}
.p2p .dir-path.has-dir:hover{color:color-mix(in srgb,var(--accent) 80%,white 20%);border-color:var(--accent)}
.p2p .dir-path.has-dir::after{content:' ↗';font-size:calc(0.8rem * var(--text-scale));opacity:.6}

.p2p .done-banner{display:flex;align-items:center;gap:0.3rem;margin:0.3rem 0.44rem;padding:0.37rem 0.52rem;background:color-mix(in srgb,var(--green) 8%,transparent);border:1px solid color-mix(in srgb,var(--green) 30%,transparent);border-radius:0.4rem;font-size:calc(0.87rem * var(--text-scale));font-weight:600;color:var(--green)}
.p2p .done-banner .done-detail{font-size:calc(0.8rem * var(--text-scale));color:#fff;font-weight:400;margin-left:auto}

/* ── Progression globale ── */
.p2p .progress-wrap{padding:0.52rem 0.74rem;flex-shrink:0;border-top:1px solid var(--border);background:var(--panel)}
.p2p .progress-label{display:flex;justify-content:space-between;align-items:center;margin-bottom:0.19rem}
.p2p .progress-label span:first-child{font-size:calc(0.82rem * var(--text-scale));color:var(--text);font-weight:500;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:60%}
.p2p .pct{font-size:calc(0.85rem * var(--text-scale));color:var(--text);font-weight:700}
.p2p #recv-speed{font-size:calc(0.8rem * var(--text-scale));color:#fff;font-weight:400;letter-spacing:.02em}
.p2p .progress-track{height:0.37rem;background:var(--track);border-radius:0.19rem;position:relative;overflow:hidden}
.p2p .progress-bar{position:absolute;inset:0;background:var(--blue);transform-origin:left;transform:scaleX(0);transition:transform .2s ease;border-radius:0.19rem}

/* ── Ligne de statut ── */
.p2p .status{padding:0.37rem 0.81rem;font-size:calc(0.85rem * var(--text-scale));letter-spacing:.02em;color:#fff;font-weight:600;background:var(--panel);border-bottom:1px solid var(--border);min-height:1.11rem;flex-shrink:0}
.p2p .status.ok{color:var(--green)}
.p2p .status.err{color:#fff}
.p2p .status.info{color:#fff}
.p2p .status.pulse{animation:p2p-blink 1.4s ease-in-out infinite}

/* ── Barre de statut basse ── */
.p2p #statusbar{height:1.85rem;background:var(--panel);border-top:1px solid var(--border);display:flex;align-items:center;padding:0 0.89rem;padding-bottom:env(safe-area-inset-bottom,0px);gap:0.52rem;flex-shrink:0}
.p2p .sb-item{font-size:calc(0.82rem * var(--text-scale));color:#fff;letter-spacing:.02em}
.p2p .sb-sep{font-size:calc(0.82rem * var(--text-scale));color:var(--border2)}
.p2p .sb-green{color:var(--green)}

/* ── Mode serveur ── */
.p2p #srv-receivers-panel{flex-shrink:0;background:var(--panel);border-bottom:1px solid var(--border);display:none;flex-direction:column}
.p2p #srv-receivers-panel.visible{display:flex}
.p2p .srv-recv-header{display:flex;align-items:center;justify-content:space-between;padding:0.3rem 0.81rem;border-bottom:1px solid var(--border)}
.p2p .srv-recv-title{display:inline-flex;align-items:center;gap:0.3rem;font-size:calc(0.85rem * var(--text-scale));font-weight:700;letter-spacing:.02em;color:var(--cyan);font-family:var(--black)}
.p2p .srv-recv-list{display:flex;flex-direction:column;max-height:8.15rem;overflow-y:auto}

.p2p .srv-recv-item{display:grid;grid-template-columns:1.93rem 1fr 2.59rem 4.07rem 4.07rem;gap:0 0.44rem;align-items:center;padding:0.3rem 0.81rem 0.22rem;border-bottom:1px solid var(--border);background:transparent;flex-shrink:0}
.p2p .srv-recv-item:nth-child(even){background:var(--card)}
.p2p .srv-recv-item:last-child{border-bottom:none}
.p2p .srv-recv-item.disconnected{opacity:.38}
.p2p .srv-recv-id{font-family:var(--code);font-size:calc(0.73rem * var(--text-scale));font-weight:700;letter-spacing:.06em;color:var(--cyan)}
.p2p .srv-recv-item.disconnected .srv-recv-id{color:#fff}
.p2p .srv-recv-prog-wrap{display:flex;flex-direction:column;gap:0.11rem;min-width:0}
.p2p .srv-recv-filename{font-size:calc(0.82rem * var(--text-scale));color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:.01em}
.p2p .srv-recv-track{width:100%;height:0.3rem;background:var(--track);border-radius:0.15rem;overflow:hidden}
.p2p .srv-recv-bar{height:100%;background:var(--cyan);transform-origin:left;transform:scaleX(0);transition:transform .18s linear;border-radius:0.15rem}
.p2p .srv-recv-bar.done{background:var(--green)}
.p2p .srv-recv-pct{font-size:calc(0.85rem * var(--text-scale));font-weight:700;color:var(--cyan);letter-spacing:.02em;text-align:right}
.p2p .srv-recv-pct.done{color:var(--green)}
.p2p .srv-recv-speed{font-size:calc(0.77rem * var(--text-scale));color:#fff}

.p2p .srv-ack-badge{display:inline-flex;align-items:center;gap:0.15rem;font-size:calc(0.77rem * var(--text-scale));font-weight:700;letter-spacing:.02em;padding:0.11rem 0.3rem;border-radius:0.25rem;white-space:nowrap;transition:color .25s,border-color .25s,background .25s}
.p2p .srv-ack-badge.waiting{color:#fff;border:1px solid var(--border2);background:transparent}
.p2p .srv-ack-badge.sending{color:var(--text);border:1px solid color-mix(in srgb,var(--blue) 30%,transparent);background:color-mix(in srgb,var(--blue) 6%,transparent)}
.p2p .srv-ack-badge.ok{color:var(--green);border:1px solid color-mix(in srgb,var(--green) 30%,transparent);background:color-mix(in srgb,var(--green) 7%,transparent)}
.p2p .srv-ack-badge.partial{color:#fff;border:1px solid color-mix(in srgb,var(--amber) 30%,transparent);background:color-mix(in srgb,var(--amber) 7%,transparent)}
.p2p .srv-ack-badge.all-ok{color:var(--green);border:1px solid color-mix(in srgb,var(--green) 50%,transparent);background:color-mix(in srgb,var(--green) 12%,transparent)}

/* ── Liste de fichiers du récepteur (mode serveur) ── */
.p2p .recv-filelist-panel{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg)}
.p2p .rfl-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:0.52rem 0.81rem;background:var(--panel);border-bottom:1px solid var(--border);flex-shrink:0;gap:0.37rem}
.p2p .rfl-title{font-size:calc(0.97rem * var(--text-scale));font-weight:700;letter-spacing:.02em;color:var(--text);font-family:var(--black)}
.p2p .rfl-actions{display:flex;gap:0.3rem;align-items:center;flex-wrap:wrap}
.p2p .rfl-list{flex:1;overflow-y:auto;display:flex;flex-direction:column}
.p2p .rfl-item{display:flex;align-items:center;gap:0.44rem;padding:0.52rem 0.81rem;border-bottom:1px solid var(--border);background:transparent;transition:background .12s;cursor:pointer;flex-shrink:0}
.p2p .rfl-item:nth-child(even){background:var(--card)}
.p2p .rfl-item:hover{background:var(--hover)}
.p2p .rfl-item.selected{background:color-mix(in srgb,var(--blue) 6%,transparent)}
.p2p .rfl-cb{width:0.9rem;height:0.9rem;flex-shrink:0;cursor:pointer;accent-color:var(--accent);border-radius:0.2rem}
.p2p .rfl-icon{display:inline-flex;align-items:center;color:#fff;flex-shrink:0}
.p2p .rfl-name{flex:1;font-size:calc(1.06rem * var(--text-scale));color:var(--text);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.p2p .rfl-size{font-size:calc(0.97rem * var(--text-scale));color:#fff;flex-shrink:0}

@media (max-width:900px){
  .p2p .toolbar{padding:0.44rem 0.59rem}
  .p2p .srv-recv-item{grid-template-columns:1.93rem 1fr 2.59rem 3.4rem}
  .p2p .srv-recv-speed{display:none}
}
@media (max-width:640px){
  .p2p .file-table-header,.p2p .fq-item{grid-template-columns:0.89rem 1fr 2.96rem 4.44rem 0.89rem}
  .p2p .file-table-header span:nth-child(5){display:none}
  .p2p .sha-badge{display:none}
  .p2p .toolbar{gap:0.37rem}
  .p2p .toolbar-left,.p2p .toolbar-right{gap:0.37rem}
  .p2p .p2p-btn,.p2p .tb-toggle{padding:0.44rem 0.59rem;min-height:2.15rem}
  .p2p .code-pill{min-width:6rem;font-size:calc(1.25rem * var(--text-scale))}
  .p2p .srv-recv-item{grid-template-columns:1.93rem 1fr 2.59rem;gap:0 0.3rem}
  .p2p .srv-recv-list{max-height:none}
  .p2p .role-panel{width:96vw}
  .p2p .role-edge-note{font-size:calc(0.8rem * var(--text-scale))}
  .p2p .rfl-size{display:none}
}
@media (max-width:400px){
  .p2p #titlebar{padding:0 0.52rem}
  .p2p .srv-clients-badge{font-size:calc(0.8rem * var(--text-scale))}
  .p2p .file-table-header,.p2p .fq-item{grid-template-columns:0.89rem 1fr 3.33rem 0.89rem}
  .p2p .file-table-header span:nth-child(3){display:none}
  .p2p .fq-size{display:none}
}
@media (hover:none) and (pointer:coarse){
  .p2p .p2p-btn,.p2p .btn-dir,.p2p .role-btn,.p2p .rfl-item,.p2p .fq-remove{min-height:2.2rem}
}

/* Minuteur & Chrono (porté depuis WebOSx 5.9, fond mica cohérent avec le reste de l'OS) */
.timer-app.clock-container{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  background:transparent;color:var(--text);padding:15px;gap:16px;overflow:hidden;height:100%;box-sizing:border-box}
.timer-app .clock-face-wrap{width:260px;height:260px;border-radius:50%;box-shadow:0 4px 30px rgba(0,0,0,.5),inset 0 0 40px rgba(0,0,0,.3);overflow:hidden}
.timer-app .clock-face-wrap canvas{width:100%;height:100%;display:block}
.timer-app .clock-digital-row{display:flex;flex-direction:column;align-items:center;gap:4px}
.timer-app .clock-digital-time{font-size:calc(1.75rem * var(--text-scale));font-weight:300;letter-spacing:3px;color:var(--text);font-variant-numeric:tabular-nums}
.timer-app .clock-digital-date{font-size:calc(.8125rem * var(--text-scale));color:var(--text2);text-transform:capitalize}
.timer-app .tsw-modes{display:flex;gap:4px;background:var(--field);border:1px solid var(--stroke);padding:3px;border-radius:8px}
.timer-app .tsw-mode-btn{padding:6px 14px;border:none;border-radius:6px;background:transparent;color:var(--text2);cursor:pointer;font-family:inherit;font-size:calc(.8438rem * var(--text-scale));transition:background .15s ease,color .15s ease}
.timer-app .tsw-mode-btn.active{background:var(--accent);color:#fff}
.timer-app .tsw-timer-controls{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%}
.timer-app .tsw-presets{display:flex;flex-wrap:wrap;justify-content:center;gap:6px}
.timer-app .tsw-presets button{padding:5px 10px;border-radius:6px;border:1px solid var(--stroke);background:var(--field);color:var(--text);font-family:inherit;font-size:calc(.8125rem * var(--text-scale));cursor:pointer}
.timer-app .tsw-presets button.active{background:var(--accent);border-color:var(--accent);color:#fff}
.timer-app .tsw-presets button:hover{border-color:var(--accent)}
.timer-app .tsw-custom{display:flex;align-items:center;gap:4px}
.timer-app .tsw-custom input{width:46px;padding:5px 6px;text-align:center;background:var(--field);border:1px solid var(--stroke);border-radius:6px;color:var(--text);font-family:inherit;font-size:calc(.8125rem * var(--text-scale))}
.timer-app .tsw-custom span{color:var(--text2)}
.timer-app .tsw-custom button{padding:5px 10px;border-radius:6px;border:1px solid var(--stroke);background:var(--field);color:var(--text);font-family:inherit;font-size:calc(.8125rem * var(--text-scale));cursor:pointer}
.timer-app .tsw-buttons{display:flex;gap:8px}
.timer-app .tsw-laps-wrap{width:100%;max-height:90px;overflow-y:auto}
.timer-app .tsw-laps{display:flex;flex-direction:column;gap:2px;font-size:calc(.8125rem * var(--text-scale));color:var(--text);font-variant-numeric:tabular-nums}
.timer-app .tsw-lap-row{display:flex;justify-content:space-between;gap:10px;padding:4px 10px;background:var(--card);border-radius:5px}
.timer-app .t-dim{color:var(--text2)}

/* Météo (portée depuis WebOSx 5.9) */
.weather-app.wx-wrap{display:flex;flex-direction:column;height:100%;color:var(--text)}
.weather-app .wx-search-row{display:flex;gap:8px;padding:14px 16px 10px}
.weather-app .wx-search-row input{flex:1;background:var(--card);color:var(--text);border:1px solid var(--stroke);border-radius:8px;padding:9px 12px;font-family:inherit;font-size:calc(.8125rem * var(--text-scale))}
.weather-app .wx-locate-btn{background:var(--card);border:1px solid var(--stroke);color:var(--text);border-radius:8px;width:38px;flex:0 0 38px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s}
.weather-app .wx-locate-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
.weather-app .wx-locate-btn svg{width:17px;height:17px}
.weather-app .wx-suggest{margin:0 16px;background:var(--card);border:1px solid var(--stroke);border-radius:8px;overflow:hidden;display:none;position:relative;z-index:5}
.weather-app .wx-suggest.open{display:block}
.weather-app .wx-suggest-item{padding:9px 12px;font-size:calc(.8125rem * var(--text-scale));cursor:pointer;border-bottom:1px solid var(--stroke)}
.weather-app .wx-suggest-item:last-child{border-bottom:none}
.weather-app .wx-suggest-item:hover{background:hsla(var(--hue),60%,55%,.18)}
.weather-app .wx-suggest-item small{color:var(--text2)}
.weather-app .wx-body{flex:1;overflow-y:auto;padding:6px 16px 18px;display:flex;flex-direction:column;gap:18px}
.weather-app .wx-hero{display:flex;flex-direction:column;align-items:center;text-align:center;padding-top:6px}
.weather-app .wx-hero-canvas-wrap{width:130px;height:130px}
.weather-app .wx-city{font-size:calc(1rem * var(--text-scale));font-weight:600;margin-top:4px}
.weather-app .wx-city small{display:block;font-size:calc(.6875rem * var(--text-scale));font-weight:400;color:var(--text2);margin-top:2px}
.weather-app .wx-temp{font-size:calc(3.5rem * var(--text-scale));font-weight:300;line-height:1;margin-top:2px;letter-spacing:-1px}
.weather-app .wx-cond{color:var(--text2);font-size:calc(.8125rem * var(--text-scale));margin-top:2px}
.weather-app .wx-meta-row{display:flex;justify-content:center;gap:22px;margin-top:14px}
.weather-app .wx-meta{text-align:center}
.weather-app .wx-meta .lbl{font-size:calc(.6562rem * var(--text-scale));color:var(--text2);text-transform:uppercase;letter-spacing:.04em}
.weather-app .wx-meta .val{font-size:calc(.875rem * var(--text-scale));margin-top:3px;font-weight:600}
.weather-app .wx-updated{font-size:calc(.6562rem * var(--text-scale));color:var(--text2);margin-top:12px}
.weather-app .wx-forecast-title{font-size:calc(.7188rem * var(--text-scale));color:var(--text2);text-transform:uppercase;letter-spacing:.05em;margin-bottom:2px}
.weather-app .wx-forecast{display:flex;gap:8px}
.weather-app .wx-fday{flex:1;background:var(--card);border:1px solid var(--stroke);border-radius:10px;padding:10px 4px 12px;display:flex;flex-direction:column;align-items:center;gap:4px}
.weather-app .wx-fday .fname{font-size:calc(.6875rem * var(--text-scale));color:var(--text2);text-transform:capitalize}
.weather-app .wx-fday canvas{width:34px;height:34px}
.weather-app .wx-fday .fmax{font-size:calc(.8125rem * var(--text-scale));font-weight:600}
.weather-app .wx-fday .fmin{font-size:calc(.6875rem * var(--text-scale));color:var(--text2)}
.weather-app .wx-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--text2);font-size:calc(.8125rem * var(--text-scale));text-align:center;padding:20px}
.weather-app .wx-state svg{width:34px;height:34px;opacity:.5}
.weather-app .wx-retry-btn{background:var(--accent);color:#fff;border:none;border-radius:7px;padding:7px 16px;font-size:calc(.7812rem * var(--text-scale));cursor:pointer}
.weather-app .wx-spinner{width:22px;height:22px;border-radius:50%;border:2.5px solid hsla(var(--hue),40%,60%,.25);border-top-color:var(--accent);animation:wx-spin .8s linear infinite}
@keyframes wx-spin{to{transform:rotate(360deg)}}

/* Tâches (portée depuis WebOSx 5.9) */
.todo-app.todo-shell{flex:1;display:flex;min-height:0;background:transparent;color:var(--text);height:100%;box-sizing:border-box}
.todo-app *{box-sizing:border-box}
.todo-app .todo-sidebar{width:200px;flex-shrink:0;background:var(--card);border-right:1px solid var(--stroke);overflow-y:auto;padding:12px 10px;display:flex;flex-direction:column;gap:4px}
.todo-app .todo-newlist-btn{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:7px;border:1px dashed var(--stroke2);background:transparent;color:var(--text);font-size:calc(.8125rem * var(--text-scale));font-family:inherit;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease;margin-bottom:4px}
.todo-app .todo-newlist-btn svg{width:15px;height:15px;flex-shrink:0}
.todo-app .todo-newlist-btn:hover{background:var(--hover);color:var(--text);border-color:var(--accent)}
.todo-app .todo-sidebar-sep{height:1px;background:var(--stroke);margin:4px 2px 8px;flex-shrink:0}
.todo-app .todo-list-btn{display:flex;align-items:center;gap:9px;padding:8px 9px;border-radius:7px;border:none;background:transparent;color:var(--text);font-family:inherit;font-size:calc(.875rem * var(--text-scale));text-align:left;cursor:pointer;width:100%;transition:background .15s ease,color .15s ease}
.todo-app .todo-list-btn:hover{background:var(--hover);color:var(--text)}
.todo-app .todo-list-btn.active{background:hsla(var(--hue),calc(60% * var(--sat,80) / 80),50%,.18);color:var(--text)}
.todo-app .todo-list-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.todo-app .todo-ring{position:relative;width:22px;height:22px;flex-shrink:0;border-radius:50%;background:conic-gradient(var(--accent) calc(var(--pct,0) * 1%),rgba(255,255,255,.14) 0);transition:background .25s ease}
.todo-app .todo-ring::after{content:'';position:absolute;inset:3px;border-radius:50%;background:var(--card)}
.todo-app .todo-list-btn.active .todo-ring::after{background:hsla(var(--hue),calc(60% * var(--sat,80) / 80),22%,1)}
.todo-app .todo-ring-count{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:calc(.5625rem * var(--text-scale));font-weight:700;color:var(--text)}
.todo-app .todo-empty-lists{color:var(--text);font-size:calc(.8125rem * var(--text-scale));text-align:center;padding:16px 8px}
.todo-app .todo-main{flex:1;min-width:0;padding:18px 22px;display:flex;flex-direction:column;gap:14px;overflow:hidden}
.todo-app .todo-header{display:flex;align-items:center;gap:8px}
.todo-app .todo-list-name{flex:1;min-width:0;padding:8px 10px;font-size:calc(1.125rem * var(--text-scale));font-weight:600;background:transparent;border:1px solid transparent;border-radius:7px;color:var(--text);font-family:inherit}
.todo-app .todo-list-name:hover,.todo-app .todo-list-name:focus{background:var(--field);border-color:var(--stroke);outline:none}
.todo-app .todo-progress-track{height:5px;border-radius:3px;background:rgba(255,255,255,.08);overflow:hidden;flex-shrink:0}
.todo-app .todo-progress-fill{height:100%;border-radius:3px;background:var(--accent);transition:width .3s ease}
.todo-app .todo-add-row{display:flex;gap:8px}
.todo-app .todo-add-input{flex:1;min-width:0;padding:10px 13px;background:var(--field);border:1px solid var(--stroke);border-radius:8px;color:var(--text);font-family:inherit;font-size:calc(.875rem * var(--text-scale))}
.todo-app .todo-add-input:focus{outline:none;border-color:var(--accent)}
.todo-app .todo-add-btn{flex-shrink:0;width:38px;height:38px;display:flex;align-items:center;justify-content:center;border:none;border-radius:8px;background:var(--accent);color:#fff;cursor:pointer;transition:filter .15s ease,transform .1s ease}
.todo-app .todo-add-btn svg{width:18px;height:18px}
.todo-app .todo-add-btn:hover{filter:brightness(1.1)}
.todo-app .todo-add-btn:active{transform:scale(.94)}
.todo-app .todo-items{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:2px}
.todo-app .todo-item{display:flex;align-items:center;gap:10px;padding:9px 8px;border-radius:7px}
.todo-app .todo-item:hover{background:var(--hover)}
.todo-app .todo-item:hover .todo-item-remove{opacity:1}
.todo-app .todo-checkbox{position:relative;width:18px;height:18px;flex-shrink:0;cursor:pointer}
.todo-app .todo-checkbox input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}
.todo-app .todo-checkbox span{position:absolute;inset:0;border:1.5px solid var(--stroke2);border-radius:5px;transition:background .15s ease,border-color .15s ease}
.todo-app .todo-checkbox span::after{content:'';position:absolute;left:5px;top:1px;width:5px;height:9px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg);opacity:0}
.todo-app .todo-checkbox input:checked+span{background:var(--accent);border-color:var(--accent)}
.todo-app .todo-checkbox input:checked+span::after{opacity:1}
.todo-app .todo-item-text{flex:1;min-width:0;font-size:calc(.9rem * var(--text-scale));color:var(--text);outline:none;padding:3px 5px;border-radius:4px;word-break:break-word}
.todo-app .todo-item-text:focus{background:var(--field)}
.todo-app .todo-item.done .todo-item-text{color:var(--text);opacity:.7;text-decoration:line-through}
.todo-app .todo-date-pill{position:relative;flex-shrink:0;display:flex;align-items:center;gap:5px;padding:4px 9px;border-radius:20px;font-size:calc(.75rem * var(--text-scale));color:var(--text);background:rgba(255,255,255,.06);border:1px solid transparent;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}
.todo-app .todo-date-pill:hover{background:var(--hover)}
.todo-app .todo-date-pill svg{width:12px;height:12px;flex-shrink:0;opacity:.8}
.todo-app .todo-date-input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;margin:0;padding:0;border:none}
.todo-app .todo-date-pill[data-status="today"]{color:var(--text);background:hsla(var(--hue),calc(60% * var(--sat,80) / 80),55%,.16);border-color:hsla(var(--hue),calc(60% * var(--sat,80) / 80),55%,.35)}
.todo-app .todo-date-pill[data-status="overdue"]{color:var(--paint-red);background:hsla(0,70%,50%,.14);border-color:hsla(0,70%,50%,.35)}
.todo-app .todo-item.done .todo-date-pill{opacity:.55}
.todo-app .todo-item-remove{flex-shrink:0;width:22px;height:22px;display:flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--text);border-radius:6px;cursor:pointer;opacity:0;transition:opacity .15s ease,background .15s ease,color .15s ease}
.todo-app .todo-item-remove svg{width:13px;height:13px}
.todo-app .todo-item-remove:hover{background:hsla(0,70%,50%,.15);color:var(--paint-red)}
.todo-app .todo-footer{display:flex;align-items:center;font-size:calc(.8125rem * var(--text-scale));padding-top:8px;border-top:1px solid var(--stroke)}
.todo-app .todo-footer-fill{flex:1}
.todo-app .todo-dim{color:var(--text)}
.todo-app .todo-empty{color:var(--text);font-size:calc(.875rem * var(--text-scale));text-align:center;padding:40px 10px;display:flex;flex-direction:column;align-items:center;gap:10px}
.todo-app .todo-empty svg{width:40px;height:40px;opacity:.35}
.todo-app .todo-btn{height:32px;padding:0 14px;border-radius:6px;background:var(--card);border:1px solid var(--stroke2);color:var(--text);font-size:calc(.8125rem * var(--text-scale));font-family:inherit;cursor:pointer}
.todo-app .todo-btn:hover{background:var(--hover)}
.todo-app .todo-btn:disabled{opacity:.4;cursor:default}
.todo-app .todo-btn-icon{width:32px;padding:0;display:inline-flex;align-items:center;justify-content:center}
.todo-app .todo-btn-icon svg{width:16px;height:16px}

/* Mots de passe (portée depuis WebOSx 5.9) */
.password-app.pwd-wrap{display:flex;flex-direction:column;height:100%;color:var(--text)}
.password-app .pwd-scroll{flex:1;overflow-y:auto;padding:18px 18px 16px;display:flex;flex-direction:column;gap:16px}
.password-app .pwd-display-box{display:flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--stroke);border-radius:10px;padding:14px 10px 14px 16px}
.password-app .pwd-display{flex:1;background:transparent;border:1px solid transparent;border-radius:6px;padding:2px 6px;outline:none;color:var(--text);min-width:0;font-family:ui-monospace,Consolas,monospace;font-size:calc(1.1875rem * var(--text-scale));letter-spacing:.5px;word-break:break-all;line-height:1.35;transition:border-color .15s,background .15s}
.password-app .pwd-display:focus{border-color:var(--accent);background:hsla(var(--hue),30%,50%,.08)}
.password-app .pwd-icon-btn{flex:0 0 38px;width:38px;height:38px;border-radius:8px;border:1px solid var(--stroke2);background:transparent;color:var(--text);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s,color .15s,border-color .15s}
.password-app .pwd-icon-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
.password-app .pwd-icon-btn svg{width:17px;height:17px}
.password-app .pwd-icon-btn.pwd-copied{background:var(--paint-green);border-color:var(--paint-green);color:#fff}
.password-app .pwd-icon-btn:disabled{opacity:.4;cursor:default}
.password-app .pwd-strength-row{display:flex;align-items:center;gap:10px}
.password-app .pwd-strength-track{flex:1;height:7px;border-radius:999px;background:hsla(var(--hue),15%,50%,.2);overflow:hidden}
.password-app .pwd-strength-fill{height:100%;border-radius:999px;transition:width .25s ease,background-color .25s ease}
.password-app .pwd-strength-label{font-size:calc(.7188rem * var(--text-scale));font-weight:600;white-space:nowrap;min-width:66px;text-align:right}
.password-app .pwd-bits{font-size:calc(.6562rem * var(--text-scale));color:var(--text2);text-align:right;margin-top:6px}
.password-app .pwd-error-msg{font-size:calc(.7188rem * var(--text-scale));color:var(--paint-red);text-align:center}
.password-app .pwd-length-value{font-size:calc(.8125rem * var(--text-scale));font-weight:600;color:var(--text2)}

/* Crypto Tracker (portée depuis WebOSx 5.9) */
.crypto-app{display:flex;flex-direction:column;height:100%;font-size:calc(.8125rem * var(--text-scale));color:var(--text)}
.crypto-app .crypto-toolbar{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--stroke);flex-shrink:0;flex-wrap:wrap}
.crypto-app .crypto-search-wrap{display:flex;align-items:center;gap:6px;flex:1;min-width:140px;background:var(--field);border:1px solid var(--stroke);border-radius:6px;padding:0 10px;transition:border-color .15s}
.crypto-app .crypto-search-wrap:focus-within{border-color:var(--accent)}
.crypto-app .crypto-search-wrap svg{flex-shrink:0;width:14px;height:14px;color:var(--text2)}
.crypto-app .crypto-search{flex:1;min-width:0;background:transparent;color:var(--text);border:none;padding:7px 0;font-family:inherit;font-size:calc(.7812rem * var(--text-scale));outline:none}
.crypto-app .crypto-limit-wrap{display:flex;align-items:center;gap:6px;flex-shrink:0}
.crypto-app .crypto-limit-wrap .lbl{font-size:calc(.7188rem * var(--text-scale));color:var(--text2);white-space:nowrap}
.crypto-app .crypto-limit-select{background:var(--field);color:var(--text);border:1px solid var(--stroke);border-radius:6px;padding:6px 8px;font-family:inherit;font-size:calc(.75rem * var(--text-scale));cursor:pointer;outline:none}
.crypto-app .crypto-limit-select:hover{border-color:var(--accent)}
.crypto-app .crypto-limit-select option{background:var(--solid);color:var(--text)}
.crypto-app .crypto-refresh-btn{display:flex;align-items:center;gap:6px;background:transparent;color:var(--text);border:1px solid var(--stroke2);border-radius:6px;padding:7px 12px;font-family:inherit;font-size:calc(.75rem * var(--text-scale));cursor:pointer;white-space:nowrap;transition:background .15s,border-color .15s;flex-shrink:0}
.crypto-app .crypto-refresh-btn:hover{border-color:var(--accent)}
.crypto-app .crypto-refresh-btn svg{width:14px;height:14px;transition:transform .5s ease}
.crypto-app .crypto-refresh-btn.spinning svg{animation:crypto-spin .8s linear infinite}
@keyframes crypto-spin{to{transform:rotate(360deg)}}
.crypto-app .crypto-status-row{display:flex;justify-content:space-between;align-items:center;padding:6px 14px;font-size:calc(.6562rem * var(--text-scale));color:var(--text2);flex-shrink:0}
.crypto-app .crypto-status-row .crypto-stale{color:var(--paint-amber)}
.crypto-app .crypto-summary{display:flex;gap:10px;padding:0 14px 10px;flex-shrink:0;flex-wrap:wrap}
.crypto-app .crypto-summary-chip{flex:1;min-width:130px;background:var(--card);border:1px solid var(--stroke);border-radius:8px;padding:8px 12px}
.crypto-app .crypto-summary-chip .lbl{font-size:calc(.625rem * var(--text-scale));color:var(--text2);text-transform:uppercase;letter-spacing:.4px}
.crypto-app .crypto-summary-chip .val{font-size:calc(.9375rem * var(--text-scale));font-weight:600;margin-top:2px;color:var(--text)}
.crypto-app .crypto-summary-chip .val.up{color:var(--paint-green)}
.crypto-app .crypto-summary-chip .val.down{color:var(--paint-red)}
.crypto-app .crypto-list-wrap{flex:1;overflow-y:auto;overflow-x:hidden;position:relative}
.crypto-app .crypto-head,.crypto-app .crypto-row{display:grid;grid-template-columns:34px minmax(0,1.5fr) 96px 82px 92px 92px 92px 92px;align-items:center;gap:8px;padding:0 14px}
.crypto-app.compact .crypto-head,.crypto-app.compact .crypto-row{grid-template-columns:30px minmax(0,1.6fr) 90px 72px}
.crypto-app.compact .col-cap,.crypto-app.compact .col-vol,.crypto-app.compact .col-chart24h,.crypto-app.compact .col-chart7d,
.crypto-app.compact .crypto-cap,.crypto-app.compact .crypto-vol,.crypto-app.compact .crypto-spark-cell{display:none!important}
.crypto-app .crypto-head{position:sticky;top:0;z-index:2;background:var(--card);border-bottom:1px solid var(--stroke);padding-top:8px;padding-bottom:8px;font-size:calc(.6562rem * var(--text-scale));color:var(--text2);text-transform:uppercase;letter-spacing:.4px}
.crypto-app .crypto-head span{cursor:pointer;user-select:none;display:flex;align-items:center;gap:3px;transition:color .15s}
.crypto-app .crypto-head span:hover{color:var(--text)}
.crypto-app .crypto-head span.sorted{color:var(--accent)}
.crypto-app .crypto-head span .sort-arrow{font-size:calc(.5625rem * var(--text-scale));opacity:.8}
.crypto-app .crypto-row{height:56px;border-bottom:1px solid rgba(128,128,128,.08);opacity:0;transform:translateY(6px);animation:crypto-row-in .35s ease forwards;animation-delay:calc(var(--i,0) * 12ms);transition:background .15s}
.crypto-app .crypto-row:hover{background:var(--hover)}
@keyframes crypto-row-in{to{opacity:1;transform:translateY(0)}}
.crypto-app .crypto-rank{font-size:calc(.7188rem * var(--text-scale));color:var(--text2);font-variant-numeric:tabular-nums}
.crypto-app .crypto-name-cell{display:flex;align-items:center;gap:9px;min-width:0}
.crypto-app .crypto-icon{width:26px;height:26px;border-radius:50%;flex-shrink:0;background:rgba(128,128,128,.15)}
.crypto-app .crypto-name-text{display:flex;flex-direction:column;min-width:0}
.crypto-app .crypto-name{font-size:calc(.7812rem * var(--text-scale));font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.crypto-app .crypto-symbol{font-size:calc(.6562rem * var(--text-scale));color:var(--text2)}
.crypto-app .crypto-price{font-variant-numeric:tabular-nums;font-weight:600;color:var(--text);border-radius:4px;padding:2px 5px;margin:-2px -5px}
.crypto-app .crypto-price.flash-up{animation:crypto-flash-up 1.1s ease}
.crypto-app .crypto-price.flash-down{animation:crypto-flash-down 1.1s ease}
@keyframes crypto-flash-up{0%{background:rgba(51,204,122,.35)}100%{background:rgba(51,204,122,0)}}
@keyframes crypto-flash-down{0%{background:rgba(232,84,84,.35)}100%{background:rgba(232,84,84,0)}}
.crypto-app .crypto-change{display:inline-flex;align-items:center;gap:2px;font-size:calc(.7188rem * var(--text-scale));font-weight:600;font-variant-numeric:tabular-nums;padding:3px 7px;border-radius:5px;width:fit-content}
.crypto-app .crypto-change svg{width:10px;height:10px}
.crypto-app .crypto-change.up{color:var(--paint-green);background:rgba(51,204,122,.12)}
.crypto-app .crypto-change.down{color:var(--paint-red);background:rgba(232,84,84,.12)}
.crypto-app .crypto-cap,.crypto-app .crypto-vol{font-size:calc(.7188rem * var(--text-scale));color:var(--text2);font-variant-numeric:tabular-nums}
.crypto-app .crypto-spark-cell{display:flex;align-items:center;justify-content:center}
.crypto-app .crypto-spark{width:84px;height:32px;display:block}
.crypto-app .crypto-empty,.crypto-app .crypto-loading,.crypto-app .crypto-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:60px 20px;color:var(--text2);text-align:center;flex:1}
.crypto-app .crypto-loading .crypto-spinner{width:26px;height:26px;border-radius:50%;border:2.5px solid rgba(128,128,128,.25);border-top-color:var(--accent);animation:crypto-spin .7s linear infinite}
.crypto-app .crypto-error-btn{background:var(--accent);color:#fff;border:none;border-radius:6px;padding:7px 16px;font-family:inherit;font-size:calc(.75rem * var(--text-scale));cursor:pointer}

/* ═══════════════════════════════════════════════════════════════
   STRATA — éditeur de terrain nodal (porté depuis un outil autonome).
   L'interface reste volontairement figée en gris foncé (comme l'outil
   d'origine) plutôt que de suivre le thème clair/sombre du système :
   des surfaces gris ardoise pleines (pas de transparence) évitent que
   les menus popover (ex. EXPORTER) ne deviennent illisibles sur un
   thème clair, et gardent l'esthétique "atelier" du nodal quel que
   soit le thème choisi dans les Réglages. Seul l'accent (--acc) suit
   encore la couleur d'accent système. Tout est scopé sous .strata-app
   pour ne rien fuiter sur le reste du bureau. ═══════════════════ */
.strata-app{
  --bg0:#1c1d20; --bg1:#222327; --bg2:#2a2b30; --bg3:#35363c; --bg4:#3e3f46;
  --solid:var(--bg0); --solid2:var(--bg1);
  --line:rgba(255,255,255,.09); --line2:rgba(255,255,255,.16);
  --tx:#f0f0f0; --tx2:rgba(240,240,240,.62); --tx3:rgba(240,240,240,.40);
  --acc:var(--accent); --acc2:color-mix(in srgb,var(--accent) 78%,white); --accd:color-mix(in srgb,var(--accent) 55%,black);
  --danger:#c4574a;
  --font:"Segoe UI Variable Text","Segoe UI",system-ui,sans-serif; --mono:"Cascadia Mono",Consolas,monospace;
  position:relative;height:100%;overflow:hidden;display:flex;flex-direction:column;
  background:var(--bg0);color:var(--tx);font-family:var(--font);font-size:calc(12.5px * var(--text-scale));user-select:none;
}
.strata-app svg.lucide{width:14px;height:14px;stroke-width:1.8}
.strata-app ::-webkit-scrollbar{width:9px;height:9px}
.strata-app ::-webkit-scrollbar-thumb{background:var(--bg4);border-radius:5px;border:2px solid var(--bg1)}
.strata-app ::-webkit-scrollbar-track{background:transparent}
.strata-app button{font-family:var(--font);cursor:pointer;border:none;background:none;color:var(--tx)}
.strata-app input,
.strata-app select{font-family:var(--font);color:var(--tx);outline:none}
.strata-app #strata-topbar{height:47px;flex:0 0 47px;display:flex;align-items:center;gap:6px;padding:0 12px;background:var(--bg1);border-bottom:1px solid var(--line)}
.strata-app #strata-brand{display:flex;align-items:center;gap:9px;margin-right:10px}
.strata-app #strata-brand .mark{width:26px;height:26px;border-radius:7px;background:linear-gradient(160deg,#2b2822,#1e1c19);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center}
.strata-app #strata-brand .name{font-weight:700;letter-spacing:3px;font-size:calc(14px * var(--text-scale))}
.strata-app #strata-brand .tag{font-size:calc(8.5px * var(--text-scale));letter-spacing:1.6px;color:var(--tx3);text-transform:uppercase;margin-top:1px}
.strata-app .tbsep{width:1px;height:22px;background:var(--line2);margin:0 6px}
.strata-app .tbtn{display:flex;align-items:center;gap:6px;height:29px;padding:0 10px;border-radius:7px;color:var(--tx2);font-size:calc(12px * var(--text-scale));font-weight:500;transition:all .12s}
.strata-app .tbtn:hover{background:var(--bg3);color:var(--tx)}
.strata-app .tbtn.icon{padding:0;width:29px;justify-content:center}
.strata-app .tbtn.primary{background:var(--acc);color:#1c1608;font-weight:600}
.strata-app .tbtn.primary:hover{background:var(--acc2);color:#1c1608}
.strata-app .tbtn.outline{border:1px solid var(--line2);color:var(--tx)}
.strata-app .tbtn.outline:hover{border-color:var(--accd);color:var(--acc2)}
.strata-app #strata-saveBadge{margin-left:auto;font-family:var(--mono);font-size:calc(10px * var(--text-scale));color:var(--tx3);display:flex;align-items:center;gap:6px}
.strata-app #strata-saveBadge .dot{width:6px;height:6px;border-radius:50%;background:#5f7a4f}
.strata-app #strata-selRes{background:var(--solid2);color:var(--tx);border:1px solid var(--line2);border-radius:7px;height:29px;padding:0 8px;font-family:var(--mono);font-size:calc(11px * var(--text-scale));cursor:pointer}
.strata-app #strata-exportWrap{position:relative}
.strata-app #strata-exportMenu{position:absolute;top:36px;right:0;width:264px;background:var(--bg2);border:1px solid var(--line2);border-radius:12px;box-shadow:0 14px 40px rgba(0,0,0,.55);padding:6px;display:none;z-index:60}
.strata-app #strata-exportMenu.open{display:block}
.strata-app #strata-exportMenu .exi{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border-radius:8px;text-align:left}
.strata-app #strata-exportMenu .exi:hover{background:var(--bg3)}
.strata-app #strata-exportMenu .exi svg{color:var(--acc)}
.strata-app #strata-exportMenu .exi .t{font-weight:600;font-size:calc(12px * var(--text-scale))}
.strata-app #strata-exportMenu .exi .d{font-family:var(--mono);font-size:calc(9.5px * var(--text-scale));color:var(--tx3);margin-top:1px}
.strata-app #strata-exportMenu .exi .dl{margin-left:auto;color:var(--tx3)}
.strata-app #strata-exportMenu .hint{padding:8px 10px 5px;font-size:calc(10px * var(--text-scale));color:var(--tx3)}
.strata-app #strata-exportMenu hr{border:none;border-top:1px solid var(--line);margin:5px 4px}
.strata-app #strata-main{flex:1;display:flex;min-height:0}
.strata-app #strata-lib{width:212px;flex:0 0 212px;background:var(--bg1);border-right:1px solid var(--line);display:flex;flex-direction:column}
.strata-app #strata-lib header{padding:11px 12px 7px;font-size:calc(9.5px * var(--text-scale));letter-spacing:2px;color:var(--tx3);font-weight:600}
.strata-app #strata-libSearchWrap{margin:0 10px 8px;position:relative}
.strata-app #strata-libSearchWrap svg{position:absolute;left:8px;top:7px;width:12px;height:12px;color:var(--tx3)}
.strata-app #strata-libSearch{width:100%;background:var(--bg2);border:1px solid var(--line);border-radius:7px;height:27px;padding:0 8px 0 26px;font-size:calc(11.5px * var(--text-scale))}
.strata-app #strata-libSearch:focus{border-color:var(--accd)}
.strata-app #strata-libList{flex:1;overflow-y:auto;padding:0 6px 12px}
.strata-app .libcat{font-size:calc(9px * var(--text-scale));letter-spacing:1.8px;text-transform:uppercase;color:var(--tx3);padding:12px 8px 5px;display:flex;align-items:center;gap:7px}
.strata-app .libcat::after{content:"";flex:1;height:1px;background:var(--line)}
.strata-app .libitem{display:flex;align-items:center;gap:9px;width:100%;padding:6px 8px;border-radius:7px;color:var(--tx2);font-size:calc(12px * var(--text-scale));text-align:left}
.strata-app .libitem svg{width:13px;height:13px;color:var(--tx3);flex:0 0 13px}
.strata-app .libitem:hover{background:var(--bg3);color:var(--tx)}
.strata-app .libitem:hover svg{color:var(--acc)}
.strata-app #strata-center{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}
.strata-app #strata-graphPane{flex:0 0 30%;min-height:180px;position:relative;background:#171a1f;overflow:hidden}
.strata-app #strata-gcanvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;display:block}
.strata-app .hud{position:absolute;background:rgba(21,24,28,.88);backdrop-filter:blur(6px);border:1px solid var(--line2);border-radius:9px;display:flex;align-items:center;padding:3px;gap:2px;z-index:5}
.strata-app #strata-graphHud{left:12px;bottom:12px}
.strata-app .hbtn{width:26px;height:24px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--tx2)}
.strata-app .hbtn:hover{background:var(--bg3);color:var(--tx)}
.strata-app .hbtn.wide{width:auto;padding:0 9px;gap:5px;font-size:calc(11px * var(--text-scale));font-weight:500}
.strata-app .hbtn.on{background:var(--bg4);color:var(--acc2)}
.strata-app .hud svg.hint{width:13px;height:13px;color:var(--tx3);flex:0 0 13px;margin:0 1px}
.strata-app #strata-dirIntensity{width:64px}
.strata-app #strata-dirPitch{width:64px}
.strata-app #strata-gzoomPct{font-family:var(--mono);font-size:calc(10px * var(--text-scale));color:var(--tx2);width:44px;text-align:center}
.strata-app #strata-buildLabel{position:absolute;top:12px;left:50%;transform:translateX(-50%);background:rgba(21,24,28,.9);border:1px solid var(--line2);border-radius:20px;padding:5px 14px;font-family:var(--mono);font-size:calc(10px * var(--text-scale));color:var(--acc2);display:none;z-index:6;align-items:center;gap:8px;white-space:nowrap}
.strata-app #strata-buildLabel .spin{width:10px;height:10px;border:2px solid var(--accd);border-top-color:var(--acc);border-radius:50%;animation:strata-spin .7s linear infinite}
@keyframes strata-spin{to{transform:rotate(360deg)}}
.strata-app #strata-buildBar{position:absolute;top:0;left:0;right:0;height:2px;z-index:6;display:none}
.strata-app #strata-buildBar i{display:block;height:100%;background:var(--acc);width:0%;transition:width .15s}
.strata-app #strata-splitter{height:5px;width:100%;cursor:row-resize;background:var(--bg0);border-top:1px solid var(--line);border-bottom:1px solid var(--line);flex:0 0 5px}
.strata-app #strata-splitter:hover{background:var(--accd)}
.strata-app #strata-viewPane{flex:1;min-height:170px;position:relative;background:#171a1f;overflow:hidden}
.strata-app #strata-viewWrap{position:absolute;inset:0}
.strata-app #strata-viewWrap canvas{display:block}
.strata-app #strata-viewHud{top:12px;right:12px}
.strata-app .seg{display:flex;gap:2px}
.strata-app .seg button{height:24px;padding:0 9px;border-radius:6px;font-size:calc(11px * var(--text-scale));color:var(--tx2);font-weight:500}
.strata-app .seg button:hover{color:var(--tx)}
.strata-app .seg button.on{background:var(--bg4);color:var(--acc2)}
.strata-app #strata-viewBottom{position:absolute;left:12px;bottom:12px;z-index:5;background:rgba(21,24,28,.88);backdrop-filter:blur(6px);border:1px solid var(--line2);border-radius:9px;padding:7px 12px;display:flex;align-items:center;gap:10px}
.strata-app #strata-viewBottom label{font-size:calc(10px * var(--text-scale));letter-spacing:1.2px;color:var(--tx3);text-transform:uppercase;font-weight:600}
.strata-app #strata-vScale{width:110px}
.strata-app #strata-vVal{font-family:var(--mono);font-size:calc(10px * var(--text-scale));color:var(--tx2);width:34px}
.strata-app #strata-meshQ{background:var(--solid2);border:1px solid var(--line2);border-radius:6px;height:22px;padding:0 6px;font-family:var(--mono);font-size:calc(10px * var(--text-scale));color:var(--tx2);cursor:pointer}
.strata-app .vsep{width:1px;height:16px;background:var(--line2);margin:0 4px}
.strata-app #strata-inspector{width:268px;flex:0 0 268px;background:var(--bg1);border-left:1px solid var(--line);overflow-y:auto;padding:14px}
.strata-app #strata-inspector h3{font-size:calc(9.5px * var(--text-scale));letter-spacing:2px;color:var(--tx3);text-transform:uppercase;margin:16px 0 8px;font-weight:600}
.strata-app #strata-inspector h3:first-child{margin-top:0}
.strata-app .inhead{display:flex;align-items:center;gap:9px;margin-bottom:4px}
.strata-app .inhead .catdot{width:9px;height:9px;border-radius:3px;flex:0 0 9px}
.strata-app .inhead .tt{font-size:calc(14px * var(--text-scale));font-weight:600}
.strata-app .inhead .cc{margin-left:auto;font-size:calc(9px * var(--text-scale));letter-spacing:1.2px;text-transform:uppercase;color:var(--tx3);border:1px solid var(--line2);padding:3px 7px;border-radius:5px}
.strata-app .prow{display:grid;grid-template-columns:76px 1fr 44px;gap:8px;align-items:center;margin:7px 0}
.strata-app .prow label{font-size:calc(11px * var(--text-scale));color:var(--tx2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.strata-app .prow .num{font-family:var(--mono);font-size:calc(10.5px * var(--text-scale));background:var(--bg2);border:1px solid var(--line);border-radius:5px;height:24px;padding:0 5px;width:100%;text-align:right}
.strata-app .prow .num:focus{border-color:var(--accd)}
.strata-app input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:20px;background:transparent;cursor:pointer}
.strata-app input[type=range]::-webkit-slider-runnable-track{height:3px;background:var(--bg4);border-radius:2px}
.strata-app input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#cfc9ba;border:2px solid var(--bg1);margin-top:-4.5px;transition:background .1s}
.strata-app input[type=range]:hover::-webkit-slider-thumb{background:var(--acc)}
.strata-app input[type=range]::-moz-range-track{height:3px;background:var(--bg4);border-radius:2px}
.strata-app input[type=range]::-moz-range-thumb{width:10px;height:10px;border-radius:50%;background:#cfc9ba;border:2px solid var(--bg1)}
.strata-app select.param{grid-column:2/4;background:var(--solid2);color:var(--tx);border:1px solid var(--line);border-radius:6px;height:26px;font-size:calc(11.5px * var(--text-scale));padding:0 6px;cursor:pointer}
.strata-app select option{background:var(--solid2);color:var(--tx)}
.strata-app .switch{grid-column:2/4;display:flex;align-items:center;gap:8px;cursor:pointer}
.strata-app .switch input{display:none}
.strata-app .switch .tr{width:30px;height:16px;border-radius:9px;background:var(--bg4);position:relative;transition:background .15s;flex:0 0 30px}
.strata-app .switch .tr::after{content:"";position:absolute;width:12px;height:12px;border-radius:50%;background:#a39d8d;top:2px;left:2px;transition:all .15s}
.strata-app .switch input:checked+.tr{background:var(--accd)}
.strata-app .switch input:checked+.tr::after{left:16px;background:var(--acc2)}
.strata-app input[type=color]{width:100%;height:26px;border:1px solid var(--line);border-radius:6px;background:var(--bg2);padding:2px;cursor:pointer;grid-column:2/4}
.strata-app .seedrow{display:grid;grid-template-columns:76px 1fr 30px;gap:8px;align-items:center}
.strata-app .seedrow .sv{font-family:var(--mono);font-size:calc(11px * var(--text-scale));background:var(--bg2);border:1px solid var(--line);border-radius:6px;height:26px;display:flex;align-items:center;justify-content:center}
.strata-app .seedrow .db{width:26px;height:26px;border-radius:6px;display:flex;align-items:center;justify-content:center;background:var(--bg2);border:1px solid var(--line);color:var(--tx2)}
.strata-app .seedrow .db:hover{color:var(--acc);border-color:var(--accd)}
.strata-app #strata-inspPrev{width:100%;border-radius:9px;border:1px solid var(--line);display:block;background:#0e1013}
.strata-app #strata-prevStats{font-family:var(--mono);font-size:calc(9.5px * var(--text-scale));color:var(--tx3);margin-top:6px;display:flex;justify-content:space-between}
.strata-app .irow{display:flex;gap:8px;margin-top:12px}
.strata-app .ibtn{flex:1;height:29px;border-radius:8px;border:1px solid var(--line2);color:var(--tx2);font-size:calc(11.5px * var(--text-scale));display:flex;align-items:center;justify-content:center;gap:7px}
.strata-app .ibtn:hover{border-color:var(--accd);color:var(--acc2)}
.strata-app .iact{width:100%;margin-top:14px;height:30px;border-radius:8px;border:1px solid var(--line2);color:var(--tx2);font-size:calc(11.5px * var(--text-scale));display:flex;align-items:center;justify-content:center;gap:7px}
.strata-app .iact:hover{border-color:var(--danger);color:var(--danger)}
.strata-app .empty{display:flex;flex-direction:column;align-items:center;text-align:center;padding-top:46px;color:var(--tx3)}
.strata-app .empty svg{width:26px;height:26px;margin-bottom:12px;color:var(--tx3)}
.strata-app .empty .t1{font-size:calc(12.5px * var(--text-scale));color:var(--tx2);font-weight:600;margin-bottom:4px}
.strata-app .empty .t2{font-size:calc(11px * var(--text-scale));line-height:1.5;padding:0 12px}
.strata-app .keys{margin-top:26px;width:100%;padding:0 14px}
.strata-app .keys .kr{display:flex;justify-content:space-between;font-size:calc(10.5px * var(--text-scale));color:var(--tx3);padding:5px 0;border-bottom:1px solid var(--line)}
.strata-app .keys kbd{font-family:var(--mono);font-size:calc(9.5px * var(--text-scale));background:var(--bg2);border:1px solid var(--line2);border-radius:4px;padding:2px 6px;color:var(--tx2)}
.strata-app #strata-rampPrev{width:100%;height:16px;border-radius:5px;border:1px solid var(--line);display:block}
.strata-app .stoprow{display:grid;grid-template-columns:34px 1fr 22px;gap:6px;align-items:center;margin-top:6px}
.strata-app .stoprow input[type=color]{width:100%;height:24px;grid-column:auto}
.strata-app .stoprow .sx{width:22px;height:24px;border-radius:6px;color:var(--tx3);display:flex;align-items:center;justify-content:center}
.strata-app .stoprow .sx:hover{color:var(--danger)}
.strata-app #strata-rampAdd{margin-top:7px;width:100%;height:24px;border:1px dashed var(--line2);border-radius:6px;color:var(--tx3);font-size:calc(10.5px * var(--text-scale));display:flex;align-items:center;justify-content:center;gap:6px}
.strata-app #strata-rampAdd:hover{color:var(--acc);border-color:var(--accd)}
.strata-app #strata-statusbar{height:1.85rem;flex:0 0 1.85rem;background:var(--bg1);border-top:1px solid var(--line);display:flex;align-items:center;padding:0 0.89rem;gap:0.52rem;font-family:var(--font);font-size:calc(0.82rem * var(--text-scale));letter-spacing:.02em;color:var(--tx3)}
.strata-app #strata-stLeft{color:var(--tx2)}
.strata-app #strata-stRight{margin-left:auto;display:flex;gap:14px}
.strata-app #strata-ctxMenu{position:absolute;z-index:100;width:230px;background:var(--solid);border:1px solid var(--line2);border-radius:11px;box-shadow:0 16px 44px rgba(0,0,0,.6);padding:5px;display:none}
.strata-app #strata-ctxMenu input{width:100%;background:var(--solid2);border:1px solid var(--line);border-radius:6px;height:27px;padding:0 9px;font-size:calc(11.5px * var(--text-scale));margin-bottom:4px}
.strata-app #strata-ctxMenu .pend{padding:6px 9px;font-size:calc(10px * var(--text-scale));color:var(--acc2);font-family:var(--mono)}
.strata-app #strata-ctxList{max-height:52vh;overflow-y:auto}
.strata-app #strata-ctxMenu .ci{display:flex;align-items:center;gap:9px;width:100%;padding:6px 9px;border-radius:7px;font-size:calc(12px * var(--text-scale));color:var(--tx2);text-align:left}
.strata-app #strata-ctxMenu .ci svg{width:13px;height:13px;color:var(--tx3)}
.strata-app #strata-ctxMenu .ci:hover{background:var(--bg3);color:var(--tx)}
.strata-app #strata-ctxMenu .ci:hover svg{color:var(--acc)}
.strata-app #strata-ctxMenu .ci .cat{margin-left:auto;font-size:calc(8.5px * var(--text-scale));letter-spacing:1px;text-transform:uppercase;color:var(--tx3)}
.strata-app #strata-ctxMenu .none{padding:10px;font-size:calc(11px * var(--text-scale));color:var(--tx3);text-align:center}
.strata-app #strata-toasts{position:absolute;right:16px;bottom:38px;z-index:120;display:flex;flex-direction:column;gap:8px}
.strata-app .toast{display:flex;align-items:center;gap:9px;background:var(--bg2);border:1px solid var(--line2);border-left:3px solid var(--acc);border-radius:9px;padding:10px 14px;font-size:calc(12px * var(--text-scale));box-shadow:0 10px 30px rgba(0,0,0,.5);animation:strata-tin .2s ease-out}
.strata-app .toast svg{color:var(--acc)}
@keyframes strata-tin{from{transform:translateX(30px);opacity:0}}
.strata-app #strata-modalWrap{position:absolute;inset:0;background:rgba(8,9,11,.6);z-index:110;display:none;align-items:center;justify-content:center;backdrop-filter:blur(3px)}
.strata-app #strata-modalWrap.open{display:flex}
.strata-app #strata-modalBox{width:340px;background:var(--bg2);border:1px solid var(--line2);border-radius:14px;padding:20px}
.strata-app #strata-modalBox .mt{font-size:calc(14px * var(--text-scale));font-weight:600;margin-bottom:8px}
.strata-app #strata-modalBox .mb{font-size:calc(12px * var(--text-scale));color:var(--tx2);line-height:1.55;margin-bottom:18px}
.strata-app #strata-modalBox .mprompt{display:none;width:100%;background:var(--solid2);color:var(--tx);border:1px solid var(--line);border-radius:6px;height:30px;padding:0 10px;font-size:calc(12px * var(--text-scale));margin:-6px 0 16px}
.strata-app #strata-modalBox .mrow{display:flex;gap:8px;justify-content:flex-end}
.strata-app #strata-modalBox .mbtn{height:30px;padding:0 14px;border-radius:8px;font-size:calc(12px * var(--text-scale));font-weight:500}
.strata-app #strata-modalBox .mbtn.ghost{color:var(--tx2);border:1px solid var(--line2)}
.strata-app #strata-modalBox .mbtn.acc{background:var(--acc);color:#1c1608;font-weight:600}
/* ---------- floating map viewer ---------- */
.strata-app #strata-mapViewer{position:absolute;right:24px;bottom:60px;width:440px;height:440px;z-index:300;
  background:var(--bg2);border:1px solid var(--line2);border-radius:12px;overflow:hidden;
  box-shadow:0 18px 50px rgba(0,0,0,.6);display:none;flex-direction:column}
.strata-app #strata-mapViewer .mvbar{height:34px;flex:0 0 34px;display:flex;align-items:center;gap:6px;padding:0 8px;
  background:var(--bg1);border-bottom:1px solid var(--line);cursor:grab;user-select:none}
.strata-app #strata-mapViewer .mvbar:active{cursor:grabbing}
.strata-app #strata-mapViewer .mvtitle{font-size:calc(11.5px * var(--text-scale));font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}
.strata-app #strata-mapViewer .mvmodes{display:flex;gap:2px;margin-left:4px}
.strata-app #strata-mapViewer .mvmodes button{height:20px;padding:0 7px;border-radius:5px;font-size:calc(10px * var(--text-scale));color:var(--tx3)}
.strata-app #strata-mapViewer .mvmodes button:hover{color:var(--tx)}
.strata-app #strata-mapViewer .mvmodes button.on{background:var(--bg4);color:var(--acc2)}
.strata-app #strata-mapViewer .mvx{margin-left:auto;width:22px;height:22px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--tx3)}
.strata-app #strata-mapViewer .mvx:hover{background:var(--bg3);color:var(--tx)}
.strata-app #strata-mapViewer .mvbody{flex:1;position:relative;min-height:0;background:#0e1013}
.strata-app #strata-mapViewer canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:move}
.strata-app #strata-mapViewer .mvfoot{height:30px;flex:0 0 30px;display:flex;align-items:center;gap:8px;padding:0 10px;
  background:var(--bg1);border-top:1px solid var(--line);font-family:var(--mono);font-size:calc(9.5px * var(--text-scale));color:var(--tx3)}
.strata-app #strata-mapViewer .mvfoot input[type=range]{width:90px;height:16px}
.strata-app #strata-mapViewer .mvz{width:38px;text-align:center;color:var(--tx2)}
.strata-app #strata-mapViewer .mvexp{margin-left:auto;height:20px;padding:0 9px;border-radius:5px;border:1px solid var(--line2);
  color:var(--tx2);font-size:calc(10px * var(--text-scale));display:flex;align-items:center;gap:5px}
.strata-app #strata-mapViewer .mvexp:hover{border-color:var(--accd);color:var(--acc2)}
.strata-app #strata-mapViewer .mvfit{height:20px;padding:0 7px;border-radius:5px;color:var(--tx3);font-size:calc(10px * var(--text-scale))}
.strata-app #strata-mapViewer .mvfit:hover{color:var(--tx)}
.strata-app #strata-mapViewer .mvresize{position:absolute;right:0;bottom:0;width:16px;height:16px;cursor:nwse-resize;
  background:linear-gradient(135deg,transparent 50%,var(--line2) 50%)}

/* ═══════════════════════════════════════════════════════════════
   WEIRD-01 — synthétiseur expérimental (porté depuis un outil Web
   Audio autonome). Contrairement à Strata, l'esthétique "rack
   hardware" (trois skins MIDNIGHT/VINTAGE/NEON avec leurs propres
   teintes LED/écran) est le produit lui-même : les couleurs restent
   donc des jetons propres à l'app plutôt qu'un pont vers --solid/
   --mica/--accent — seuls la police, l'échelle de texte, le
   positionnement et l'opacité des menus suivent les règles OS
   habituelles. Tout est scopé sous .weird01-app. ═══════════════════ */
.weird01-app{
  --w1-bg:#0a0c10; --w1-m1:#1b212c; --w1-m2:#242c3a; --w1-m3:#131720;
  --w1-txt:#e3e9f2; --w1-mut:#8b95a8;
  --w1-led:#25d8e0; --w1-led2:#ff5c8a;
  --w1-scr-bg:#04100e; --w1-scr-fg:#2ee6c9; --w1-scr-grid:#143030;
  --w1-lcd-bg:#0c1006; --w1-lcd-fg:#ffbf3f;
  --font:"Segoe UI Variable Text","Segoe UI",system-ui,sans-serif; --mono:"Cascadia Mono",Consolas,monospace;
  position:relative;height:100%;overflow:hidden;
  color:var(--w1-txt);font-family:var(--font);font-size:calc(12.5px * var(--text-scale));user-select:none;
}
.weird01-app *{box-sizing:border-box}
/* Le contenu défile dans ce wrapper interne ; #weird01-power/#weird01-toast/
   #weird01-modalWrap restent des enfants directs de .weird01-app (non
   scrollable) pour rester ancrés à la fenêtre OS visible plutôt qu'au
   contenu qui défile en dessous (bug : un position:absolute avec bottom:24px
   posé directement sur un ancêtre scrollable "flotte" au gré du scroll au
   lieu de rester collé au bas de la fenêtre). */
.weird01-app-scroll{height:100%;overflow-y:auto;overflow-x:hidden;
  background:radial-gradient(1100px 700px at 50% -10%, rgba(255,255,255,.045), transparent),
    radial-gradient(circle at 3px 3px, rgba(0,0,0,.35) 2.2px, transparent 2.6px) 0 0/13px 13px,
    var(--w1-bg);
}
.weird01-app[data-skin="VINTAGE"]{
  --w1-bg:#21150c; --w1-m1:#5c4a33; --w1-m2:#6d5a41; --w1-m3:#4a3a27;
  --w1-txt:#f2e8d4; --w1-mut:#c0ac8b;
  --w1-led:#ffb347; --w1-led2:#ff6b4a;
  --w1-scr-bg:#150f05; --w1-scr-fg:#ffc76b; --w1-scr-grid:#3d2e14;
  --w1-lcd-bg:#140e04; --w1-lcd-fg:#ffb347;
}
.weird01-app[data-skin="NEON"]{
  --w1-bg:#070410; --w1-m1:#171024; --w1-m2:#201736; --w1-m3:#0f0a1b;
  --w1-txt:#f0e8ff; --w1-mut:#9d8fc4;
  --w1-led:#ff3df0; --w1-led2:#3df2ff;
  --w1-scr-bg:#0d0418; --w1-scr-fg:#ff3df0; --w1-scr-grid:#2b1344;
  --w1-lcd-bg:#0e0518; --w1-lcd-fg:#ff3df0;
}
.weird01-app ::-webkit-scrollbar{width:9px;height:9px}
.weird01-app ::-webkit-scrollbar-thumb{background:var(--w1-m2);border-radius:5px;border:2px solid var(--w1-m3)}
.weird01-app ::-webkit-scrollbar-track{background:transparent}

.weird01-app .plate{position:relative;
  background:linear-gradient(180deg,var(--w1-m2) 0%, var(--w1-m1) 8%, var(--w1-m2) 55%, var(--w1-m3) 100%);
  border:1px solid #000; border-radius:9px;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.09), inset 0 -3px 8px rgba(0,0,0,.55), 0 8px 18px rgba(0,0,0,.5);}
.weird01-app .screw{position:absolute; width:9px; height:9px; border-radius:50%; z-index:3;
  background:radial-gradient(circle at 35% 30%, #a7b0bf, #4a5160 60%, #22252d);
  box-shadow:0 1px 2px rgba(0,0,0,.8), inset 0 1px 1px rgba(255,255,255,.4);}
.weird01-app .screw::after{content:''; position:absolute; left:1.5px; right:1.5px; top:50%; height:1.4px;
  margin-top:-.7px; background:#171a20; transform:rotate(var(--r,25deg));}

.weird01-app header{display:flex; align-items:center; gap:14px; flex-wrap:wrap; padding:14px 24px;
  border-bottom:2px solid #000; position:relative;
  background:linear-gradient(180deg,var(--w1-m2),var(--w1-m3));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), 0 4px 14px rgba(0,0,0,.5);}
.weird01-app .brand h1{font-size:calc(24px * var(--text-scale)); font-weight:900; letter-spacing:5px;
  background:linear-gradient(180deg,#f4f7fc 20%,#8d99ad 85%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  filter:drop-shadow(0 2px 1px rgba(0,0,0,.7));}
.weird01-app .brand .sub{font-size:calc(9px * var(--text-scale)); letter-spacing:3px; color:var(--w1-mut); display:block; margin-top:1px}
.weird01-app .lcd{font-family:var(--mono); font-weight:600; letter-spacing:2px;
  color:var(--w1-lcd-fg); background:linear-gradient(180deg, rgba(0,0,0,.35), var(--w1-lcd-bg));
  border:1px solid #000; border-radius:5px; padding:6px 11px;
  box-shadow:inset 0 2px 8px rgba(0,0,0,.85), inset 0 0 18px rgba(0,0,0,.4);
  text-shadow:0 0 9px currentColor;}
.weird01-app .lcd.sr{font-size:calc(11px * var(--text-scale)); padding:4px 9px}
.weird01-app header .sc{margin-left:auto; color:var(--w1-mut); font-size:calc(11px * var(--text-scale)); letter-spacing:.5px}
.weird01-app header .sc b{color:var(--w1-led); font-weight:600}

.weird01-app main{display:grid; grid-template-columns:1fr 344px; gap:14px; padding:14px 22px; max-width:1340px; margin:0 auto}
@media(max-width:960px){ .weird01-app main{grid-template-columns:1fr} }

.weird01-app #weird01-modules{display:grid; grid-template-columns:repeat(auto-fit,minmax(248px,1fr)); gap:13px; align-content:start}
.weird01-app .rack{padding:13px 13px 11px}
.weird01-app .rack h2{font-size:calc(10px * var(--text-scale)); letter-spacing:3px; color:var(--w1-mut); margin:2px 4px 12px;
  text-shadow:0 1px 0 rgba(0,0,0,.9), 0 -1px 0 rgba(255,255,255,.07);
  border-bottom:1px solid rgba(0,0,0,.55); box-shadow:0 1px 0 rgba(255,255,255,.05); padding-bottom:7px;}
.weird01-app .kRow{display:flex; flex-wrap:wrap; gap:10px 13px; align-items:flex-start}
.weird01-app .knobWrap{display:flex; flex-direction:column; align-items:center; gap:4px; flex:0 0 auto; width:60px; user-select:none}
.weird01-app .kArc{position:relative; width:42px; height:42px; border-radius:50%; cursor:ns-resize; touch-action:none;
  background:conic-gradient(from 225deg,
    var(--w1-led) 0deg, var(--w1-led) var(--a,0deg),
    rgba(255,255,255,.09) var(--a,0deg), rgba(255,255,255,.09) 270deg,
    transparent 270deg);
  filter:drop-shadow(0 0 5px color-mix(in srgb, var(--w1-led) 45%, transparent));}
.weird01-app .kCap{position:absolute; inset:5px; border-radius:50%;
  background:radial-gradient(circle at 35% 28%, #454e60, #191d27 72%);
  border:1px solid #000;
  box-shadow:0 3px 6px rgba(0,0,0,.65), inset 0 1px 1px rgba(255,255,255,.16);
  transform:rotate(calc(var(--a,0deg) - 135deg));}
.weird01-app .kCap::after{content:''; position:absolute; top:3px; left:50%; width:2.5px; height:11px; margin-left:-1.2px;
  border-radius:2px; background:var(--w1-led); box-shadow:0 0 6px var(--w1-led);}
.weird01-app .kLab{font-size:calc(8.5px * var(--text-scale)); letter-spacing:1.2px; color:var(--w1-mut); text-align:center; text-transform:uppercase; line-height:1.25}
.weird01-app .kVal{font:600 calc(10px * var(--text-scale)) var(--mono); letter-spacing:.5px; color:var(--w1-lcd-fg);
  background:var(--w1-lcd-bg); border:1px solid #000; border-radius:3px; padding:1px 5px;
  box-shadow:inset 0 1px 4px rgba(0,0,0,.7); text-shadow:0 0 6px currentColor; min-width:44px; text-align:center}
.weird01-app .selWrap{display:flex; flex-direction:column; gap:4px; width:116px}
.weird01-app select{width:100%; appearance:none; cursor:pointer; outline:none;
  font-size:calc(11px * var(--text-scale)); letter-spacing:.5px; color:#e8edf5; border:1px solid #000; border-radius:5px; padding:6px 20px 6px 9px;
  background:
    linear-gradient(45deg,transparent 50%,var(--w1-mut) 50%) calc(100% - 11px) 55%/5px 5px no-repeat,
    linear-gradient(135deg,var(--w1-mut) 50%,transparent 50%) calc(100% - 7px) 55%/5px 5px no-repeat,
    #3c434e;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), 0 2px 5px rgba(0,0,0,.5);}
.weird01-app select:hover{border-color:var(--w1-led)}
.weird01-app select option{background:#3c434e; color:#e8edf5;}

.weird01-app aside{display:flex; flex-direction:column; gap:13px}
.weird01-app .box{padding:13px}
.weird01-app .box h2{font-size:calc(10px * var(--text-scale)); letter-spacing:3px; color:var(--w1-mut); margin:2px 4px 11px;
  text-shadow:0 1px 0 rgba(0,0,0,.9); border-bottom:1px solid rgba(0,0,0,.55); box-shadow:0 1px 0 rgba(255,255,255,.05); padding-bottom:7px;}
.weird01-app #weird01-scope{width:100%; height:100px; display:block; border-radius:6px; border:1px solid #000;
  box-shadow:inset 0 0 22px rgba(0,0,0,.9), 0 0 0 3px rgba(0,0,0,.35)}
.weird01-app #weird01-spec{width:100%; height:56px; display:block; margin-top:9px; border-radius:6px; border:1px solid #000;
  box-shadow:inset 0 0 18px rgba(0,0,0,.9), 0 0 0 3px rgba(0,0,0,.35)}
.weird01-app .monrow2{display:flex; gap:10px; margin-top:9px; align-items:stretch}
.weird01-app #weird01-ppm{flex:1; height:74px; min-width:0; display:block; border-radius:6px; border:4px solid #10131a;
  box-shadow:0 0 0 1px rgba(255,255,255,.06), inset 0 0 10px rgba(0,0,0,.6)}
.weird01-app .ledcol{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:5px; padding:0 2px}
.weird01-app .led{width:12px; height:12px; border-radius:50%; background:#26160f; border:1px solid #000;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.8)}
.weird01-app .led.on{background:radial-gradient(circle at 35% 30%, #ffd2d2, #ff2222 70%);
  box-shadow:0 0 12px #ff2222, inset 0 1px 2px rgba(255,255,255,.5)}
.weird01-app .ledlbl{font-size:calc(8px * var(--text-scale)); letter-spacing:1.5px; color:var(--w1-mut)}

.weird01-app #weird01-patchTabs{display:grid; grid-template-columns:repeat(4,1fr); gap:5px; margin:0 4px 10px}
.weird01-app .tabBtn{width:100%; padding:7px 2px; font-size:calc(9px * var(--text-scale)); font-weight:700; letter-spacing:.4px;
  text-align:center; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  color:var(--w1-mut); background:linear-gradient(180deg,var(--w1-m2),var(--w1-m3));
  border:1px solid #000; border-radius:5px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07), 0 2px 4px rgba(0,0,0,.4)}
.weird01-app .tabBtn:hover{color:var(--w1-led)}
.weird01-app .tabBtn.on{color:#1a0420; background:var(--w1-led); border-color:var(--w1-led);
  box-shadow:0 0 10px color-mix(in srgb, var(--w1-led) 55%, transparent)}

.weird01-app #weird01-tapewrap{max-width:1340px; margin:0 auto 14px; padding:0 22px}
.weird01-app .tapebar{display:flex; align-items:center; gap:14px; padding:9px 16px; flex-wrap:wrap}
.weird01-app .tbBtns{display:flex; gap:9px}
.weird01-app .tbtn{width:40px; height:40px; border-radius:50%; border:1px solid #000; cursor:pointer; font-size:calc(13px * var(--text-scale)); color:var(--w1-txt);
  background:radial-gradient(circle at 35% 28%, #303849, #161a24 72%);
  box-shadow:0 3px 7px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.13); transition:.15s}
.weird01-app .tbtn:active{transform:translateY(2px); box-shadow:0 1px 3px rgba(0,0,0,.6)}
.weird01-app .tbtn.rec{color:#ff5252}
.weird01-app .tbtn.rec.recording{background:radial-gradient(circle at 35% 28%, #7e1c1c, #330808 75%);
  box-shadow:0 0 16px rgba(255,60,60,.55), inset 0 1px 0 rgba(255,255,255,.15); animation:w1blink 1s infinite}
@keyframes w1blink{50%{filter:brightness(1.6)}}
.weird01-app .tbtn.on{box-shadow:0 0 14px color-mix(in srgb, var(--w1-led) 55%, transparent), inset 0 1px 0 rgba(255,255,255,.13);
  color:var(--w1-led); border-color:var(--w1-led)}
.weird01-app .tapeDeck{display:flex; align-items:center; flex:1 1 300px; min-width:230px; position:relative; height:44px;
  background:linear-gradient(180deg, rgba(0,0,0,.5), rgba(0,0,0,.22));
  border:1px solid #000; border-radius:8px; box-shadow:inset 0 2px 9px rgba(0,0,0,.8); padding:0 10px}
.weird01-app .tapeStrip{position:absolute; left:12px; right:12px; top:50%; height:9px; margin-top:-4.5px; border-radius:3px;
  background:repeating-linear-gradient(90deg,#1a1e28 0 14px,#11141c 14px 28px);
  box-shadow:inset 0 1px 3px #000}
.weird01-app .tapeStrip.roll{animation:w1tapeRoll .8s linear infinite}
@keyframes w1tapeRoll{to{background-position:-28px 0}}
.weird01-app .reel{width:30px; height:30px; border-radius:50%; position:relative; z-index:1; flex:0 0 auto;
  border:3px solid #2b3140; background:radial-gradient(circle,#141922,#0a0d13);
  box-shadow:0 2px 5px rgba(0,0,0,.7)}
.weird01-app .reel::before{content:''; position:absolute; inset:2px; border-radius:50%;
  background:repeating-conic-gradient(rgba(235,240,250,.92) 0 11deg, transparent 11deg 60deg);}
.weird01-app .reel::after{content:''; position:absolute; inset:9px; border-radius:50%;
  background:radial-gradient(circle at 35% 30%, #3b4354, #12151d);}
.weird01-app .reel.spin{animation:w1spin 1.6s linear infinite}
@keyframes w1spin{to{transform:rotate(360deg)}}
.weird01-app .lcd.big{font-size:calc(13px * var(--text-scale)); text-align:center; padding:5px 12px; position:relative; z-index:1; margin:0 12px}
.weird01-app .tapeinfo{font:calc(10.5px * var(--text-scale)) var(--mono); color:var(--w1-mut); letter-spacing:.5px; min-width:150px}
.weird01-app .tapeinfo b{color:var(--w1-lcd-fg)}
.weird01-app button{font-family:inherit; cursor:pointer}
.weird01-app .mini{padding:8px 12px; font-size:calc(10px * var(--text-scale)); letter-spacing:1.5px; color:var(--w1-mut);
  background:linear-gradient(180deg,var(--w1-m2),var(--w1-m3)); border:1px solid #000; border-radius:6px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07), 0 2px 4px rgba(0,0,0,.4)}
.weird01-app .mini:hover{color:var(--w1-led)}
.weird01-app .panic{padding:8px 12px; font-weight:800; letter-spacing:2px; font-size:calc(11px * var(--text-scale)); color:#ff5252;
  background:linear-gradient(180deg,#3a1010,#200808); border:1px solid #ff5252; border-radius:6px;
  box-shadow:0 3px 8px rgba(0,0,0,.5)}
.weird01-app .panic:hover{box-shadow:0 0 14px rgba(255,60,60,.5)}
.weird01-app .export{padding:10px 18px; font-size:calc(12px * var(--text-scale)); font-weight:800; letter-spacing:2px; color:var(--w1-led2);
  background:linear-gradient(180deg,var(--w1-m2),var(--w1-m3)); border:1px solid var(--w1-led2); border-radius:7px;
  box-shadow:0 3px 8px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.08); transition:.15s}
.weird01-app .export:hover{box-shadow:0 0 16px color-mix(in srgb, var(--w1-led2) 45%, transparent)}
.weird01-app .row2{display:grid; grid-template-columns:1fr 1fr; gap:7px}
.weird01-app .tbBtns2{display:flex; gap:7px; flex-wrap:wrap}

.weird01-app #weird01-presets{display:grid; grid-template-columns:1fr 1fr; gap:7px; margin-bottom:9px}
.weird01-app .patchbtn{display:flex; align-items:center; gap:7px; padding:9px 8px; font-size:calc(11px * var(--text-scale)); letter-spacing:.5px;
  color:var(--w1-txt); background:linear-gradient(180deg,var(--w1-m2),var(--w1-m3)); border:1px solid #000; border-radius:6px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07), 0 3px 6px rgba(0,0,0,.45); transition:.15s}
.weird01-app .patchbtn::before{content:''; width:7px; height:7px; border-radius:50%; flex:0 0 auto;
  background:#111; box-shadow:inset 0 1px 2px #000; transition:.15s}
.weird01-app .patchbtn:hover{color:var(--w1-led)}
.weird01-app .patchbtn:hover::before{background:var(--w1-led); box-shadow:0 0 7px var(--w1-led)}
.weird01-app .patchbtn.active{color:var(--w1-led); border-color:color-mix(in srgb,var(--w1-led) 60%,#000)}
.weird01-app .patchbtn.active::before{background:var(--w1-led); box-shadow:0 0 8px var(--w1-led)}
.weird01-app .toggle{width:100%; margin-top:10px; padding:9px; font-size:calc(11px * var(--text-scale)); font-weight:700; letter-spacing:2px;
  background:linear-gradient(180deg,var(--w1-m2),var(--w1-m3)); border:1px solid #000; border-radius:6px; color:var(--w1-txt);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07), 0 3px 6px rgba(0,0,0,.45)}
.weird01-app .toggle.on{color:#1a0420; background:var(--w1-led2); border-color:var(--w1-led2); box-shadow:0 0 14px color-mix(in srgb, var(--w1-led2) 50%, transparent)}

.weird01-app .locked{opacity:.4; pointer-events:none; filter:saturate(.4)}
.weird01-app #weird01-seqtools.locked{opacity:.4; pointer-events:none; filter:saturate(.4)}
.weird01-app .hint{font-size:calc(10px * var(--text-scale)); color:var(--w1-mut); margin-top:9px; line-height:1.55; letter-spacing:.3px}

.weird01-app #weird01-seqwrap{max-width:1340px; margin:0 auto 14px; padding:0 22px}
.weird01-app .seqpanel{padding:13px 16px 15px}
.weird01-app .seqhead{display:flex; align-items:center; gap:14px; flex-wrap:wrap; margin:2px 4px 12px;
  border-bottom:1px solid rgba(0,0,0,.55); box-shadow:0 1px 0 rgba(255,255,255,.05); padding-bottom:9px}
.weird01-app .seqhead h2{font-size:calc(10px * var(--text-scale)); letter-spacing:3px; color:var(--w1-mut); text-shadow:0 1px 0 rgba(0,0,0,.9)}
.weird01-app .seqhead .toggle{width:auto; margin:0; padding:8px 20px}
.weird01-app #weird01-seqtools{display:flex; flex-wrap:wrap; gap:10px 14px; align-items:center; margin:0 4px 12px; transition:opacity .2s}
.weird01-app #weird01-seqtools .selWrap{width:108px}
.weird01-app #weird01-seqtools .mini{width:auto; padding:8px 12px}
.weird01-app #weird01-chainbar{display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:0 4px 12px;
  padding:9px 11px; border:1px solid rgba(0,0,0,.7); border-radius:7px;
  background:linear-gradient(180deg, rgba(0,0,0,.28), rgba(0,0,0,.12));
  box-shadow:inset 0 1px 4px rgba(0,0,0,.45)}
.weird01-app .chainlbl{font-size:calc(8.5px * var(--text-scale)); letter-spacing:2px; color:var(--w1-mut)}
.weird01-app #weird01-slots{display:flex; gap:6px}
.weird01-app .slotbtn{width:34px; height:27px; font-weight:800; font-size:calc(12px * var(--text-scale)); letter-spacing:0; color:var(--w1-mut);
  background:linear-gradient(180deg,var(--w1-m2),var(--w1-m3)); border:1px solid #000; border-radius:6px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07), 0 2px 4px rgba(0,0,0,.4); transition:.15s}
.weird01-app .slotbtn:hover{color:var(--w1-led)}
.weird01-app .slotbtn.on{color:#1a0420; background:var(--w1-led); border-color:var(--w1-led);
  box-shadow:0 0 10px color-mix(in srgb, var(--w1-led) 55%, transparent)}
.weird01-app #weird01-chaincells{display:flex; gap:3px; flex:1; flex-wrap:wrap}
.weird01-app .cc{flex:0 0 auto; width:27px; height:24px; border-radius:4px; cursor:pointer; user-select:none;
  border:1px solid rgba(0,0,0,.9); display:flex; align-items:center; justify-content:center;
  font:700 calc(10px * var(--text-scale)) var(--mono); color:var(--w1-mut);
  background:linear-gradient(180deg,#171b25,#10131b);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05); transition:box-shadow .1s}
.weird01-app .cc.beat{background:linear-gradient(180deg,#1c2230,#141824)}
.weird01-app .cc.ph{box-shadow:inset 0 0 0 2px var(--w1-led), 0 0 9px color-mix(in srgb,var(--w1-led) 55%,transparent); color:var(--w1-txt)}
.weird01-app #weird01-seqgrid{display:grid; grid-template-columns:42px repeat(16,1fr); gap:3px;
  touch-action:none; user-select:none; -webkit-user-select:none}
.weird01-app .rl{height:21px; display:flex; align-items:center; justify-content:flex-end; padding-right:7px;
  font:600 calc(8.5px * var(--text-scale)) var(--mono); color:var(--w1-mut); letter-spacing:.5px}
.weird01-app .cell{height:21px; border-radius:3px; cursor:pointer; border:1px solid rgba(0,0,0,.9);
  background:linear-gradient(180deg,#171b25,#10131b);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}
.weird01-app .cell.beat{background:linear-gradient(180deg,#1c2230,#141824)}
.weird01-app .cell.bkr{filter:brightness(.8)}
.weird01-app .cell.s1{background:linear-gradient(180deg,color-mix(in srgb,var(--w1-led) 55%,#202634),color-mix(in srgb,var(--w1-led) 30%,#10131b));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.15), 0 0 6px color-mix(in srgb,var(--w1-led) 25%,transparent)}
.weird01-app .cell.s2{background:linear-gradient(180deg,var(--w1-led),color-mix(in srgb,var(--w1-led) 60%,#000));
  box-shadow:0 0 10px var(--w1-led), inset 0 1px 0 rgba(255,255,255,.35)}
.weird01-app .cell.s3{background:repeating-linear-gradient(45deg,#1a1f2b 0 4px,#12161f 4px 8px);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--w1-led) 45%,transparent)}
.weird01-app .cell.ph{box-shadow:inset 0 0 0 2px var(--w1-led2), 0 0 8px color-mix(in srgb,var(--w1-led2) 50%,transparent)}

.weird01-app #weird01-kbwrap{max-width:1340px; margin:0 auto 34px; padding:0 22px}
.weird01-app .kbpanel{padding:14px 16px 16px}
.weird01-app .kblegend{font-size:calc(9px * var(--text-scale)); letter-spacing:3px; color:var(--w1-mut); margin:0 4px 11px;
  text-shadow:0 1px 0 rgba(0,0,0,.9)}
.weird01-app #weird01-kb{position:relative; height:150px; user-select:none; touch-action:none}
.weird01-app .wk{position:absolute; top:0; bottom:0; z-index:1; cursor:pointer;
  background:linear-gradient(180deg,#f8f5eb 0%,#e8e3d3 70%,#cfc9b8 100%);
  border:1px solid #14120c; border-radius:0 0 5px 5px;
  box-shadow:inset 0 -7px 9px rgba(0,0,0,.13), 0 4px 5px rgba(0,0,0,.45);}
.weird01-app .wk.on{background:linear-gradient(180deg,#9df3e6,#25d3bd); transform:translateY(2px);
  box-shadow:inset 0 3px 7px rgba(0,0,0,.3), 0 0 12px color-mix(in srgb, var(--w1-led) 60%, transparent)}
.weird01-app .bk{position:absolute; top:0; height:60%; z-index:2; cursor:pointer;
  background:linear-gradient(180deg,#333a48 0%,#141821 65%,#0a0d13 100%);
  border:1px solid #000; border-radius:0 0 4px 4px;
  box-shadow:0 4px 6px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.14);}
.weird01-app .bk.on{background:linear-gradient(180deg,#ff6b9d,#c9165f); transform:translateY(2px);
  box-shadow:0 0 12px rgba(255,80,140,.55)}

.weird01-app #weird01-power{position:absolute; inset:0; background:rgba(4,5,8,.9); backdrop-filter:blur(7px); z-index:50;
  display:flex; align-items:center; justify-content:center}
.weird01-app .pbox{text-align:center; padding:44px 60px}
.weird01-app .plogo{font-size:calc(46px * var(--text-scale)); font-weight:900; letter-spacing:10px;
  background:linear-gradient(180deg,#f4f7fc 20%,#8d99ad 85%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  filter:drop-shadow(0 0 26px color-mix(in srgb, var(--w1-led) 45%, transparent)); margin-bottom:4px}
.weird01-app .pbox p{color:var(--w1-mut); font-size:calc(11px * var(--text-scale)); letter-spacing:3px; margin-bottom:28px}
.weird01-app #weird01-pwrbtn{font-size:calc(15px * var(--text-scale)); font-weight:800; letter-spacing:3px; padding:15px 38px; color:#062023;
  background:linear-gradient(180deg,#3ee6ee,#0f9aa5); border:1px solid #000; border-radius:9px;
  box-shadow:0 6px 16px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.4)}
.weird01-app #weird01-pwrbtn:hover{filter:brightness(1.15)}
.weird01-app .pbox small{display:block; margin-top:18px; color:var(--w1-mut); font-size:calc(10px * var(--text-scale)); letter-spacing:1px}

.weird01-app #weird01-toast{position:absolute; bottom:24px; left:50%; transform:translateX(-50%) translateY(90px); z-index:60;
  font:600 calc(12px * var(--text-scale)) var(--mono); letter-spacing:1px; color:var(--w1-lcd-fg);
  background:var(--w1-lcd-bg); border:1px solid var(--w1-lcd-fg); border-radius:6px; padding:10px 20px;
  box-shadow:0 0 20px color-mix(in srgb, var(--w1-lcd-fg) 35%, transparent); transition:.3s; pointer-events:none}
.weird01-app #weird01-toast.show{transform:translateX(-50%) translateY(0)}

/* ---- promptModal (Save to Web Disk filename prompt), same convention as Strata's ---- */
.weird01-app #weird01-modalWrap{position:absolute; inset:0; z-index:70; display:none; align-items:center; justify-content:center; background:rgba(4,5,8,.6); backdrop-filter:blur(3px)}
.weird01-app #weird01-modalWrap.show{display:flex}
.weird01-app #weird01-modalBox{width:min(360px,86%); padding:18px 20px; border-radius:10px;
  background:linear-gradient(180deg,var(--w1-m2),var(--w1-m3)); border:1px solid #000;
  box-shadow:0 20px 50px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.08);}
.weird01-app #weird01-modalBox .mt{font-size:calc(13px * var(--text-scale)); font-weight:700; letter-spacing:1px; color:var(--w1-txt); margin-bottom:6px}
.weird01-app #weird01-modalBox .mb{font-size:calc(11px * var(--text-scale)); color:var(--w1-mut); margin-bottom:12px; line-height:1.5}
.weird01-app #weird01-modalBox input[type=text]{width:100%; font-family:var(--mono); font-size:calc(12px * var(--text-scale)); color:var(--w1-lcd-fg);
  background:var(--w1-lcd-bg); border:1px solid #000; border-radius:5px; padding:8px 10px; margin-bottom:14px;
  box-shadow:inset 0 1px 4px rgba(0,0,0,.7); outline:none}
.weird01-app #weird01-modalBox .mrow{display:flex; justify-content:flex-end; gap:8px}

/* ═══════════════════════════════════════════════════════════════════
   SOUND FORGE — éditeur audio à fenêtre de données (porté depuis un
   outil Web Audio + Canvas autonome). Même décision de conception que
   WeirdSynth : la palette sombre "console audio" (vert forme d'onde,
   rouge crête/enregistrement...) est le produit lui-même, donc elle
   reste des jetons propres à l'app plutôt qu'un pont vers
   --solid/--mica/--accent — seuls police, échelle de texte et
   positionnement suivent les règles OS. Toute la fenêtre est scopée
   sous .sound-forge-app pour ne rien fuiter sur le reste du bureau,
   et tout position:fixed de l'original devient position:absolute
   (la fenêtre OS est déplaçable/redimensionnable, pas le viewport). */
.sound-forge-app{
  --sf-bg:#12140f; --sf-panel:#1b1e17; --sf-panel2:#20241b; --sf-panel3:#2a2f22; --sf-panel4:#363d2c;
  --sf-border:#0c0e09; --sf-edge:#3a4130; --sf-edge-hi:#525c42;
  --sf-text:#cdd3c0; --sf-dim:#8b927b; --sf-dim2:#5c6350;
  --sf-accent:#b6e14a; --sf-accent-hi:#cdf06e; --sf-accent-dim:#75913a;
  --sf-wave:#a6d63e; --sf-rec:#e0483a;
  position:relative;height:100%;overflow:hidden;display:flex;flex-direction:column;
  background:var(--sf-bg);color:var(--sf-text);font-family:var(--font);
  font-size:calc(13px * var(--text-scale));user-select:none;-webkit-user-select:none;
}
.sound-forge-app *{box-sizing:border-box}
.sound-forge-app button{font-family:var(--font);cursor:pointer}
.sound-forge-app input,.sound-forge-app select{font-family:var(--font);color:var(--sf-text)}

.sound-forge-app #sf-titlebar{height:42px;flex:none;display:flex;align-items:center;gap:12px;padding:0 14px;background:var(--sf-panel);border-bottom:1px solid var(--sf-border)}
.sound-forge-app .sf-brand{display:flex;align-items:center;gap:10px;font-weight:700;letter-spacing:3px;font-size:calc(15px * var(--text-scale));color:#e8eddc}
.sound-forge-app .sf-brand-mark{width:11px;height:11px;background:var(--sf-accent);flex:none}
.sound-forge-app .sf-brand small{font-weight:400;letter-spacing:1px;font-size:calc(11px * var(--text-scale));color:var(--sf-dim);margin-left:2px}
.sound-forge-app #sf-titleDoc{margin-left:auto;font-family:var(--mono);font-size:calc(11px * var(--text-scale));color:var(--sf-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46%}

.sound-forge-app #sf-menubar{height:30px;flex:none;display:flex;padding:0 6px;background:var(--sf-panel);border-bottom:1px solid var(--sf-border);position:relative;z-index:60}
.sound-forge-app .sf-menu-item{padding:0 13px;display:flex;align-items:center;font-size:calc(13px * var(--text-scale));cursor:default;color:var(--sf-text)}
.sound-forge-app .sf-menu-item:hover,.sound-forge-app .sf-menu-item.open{background:var(--sf-panel3);color:#fff}
.sound-forge-app .sf-menu-drop{position:absolute;min-width:260px;background:var(--sf-panel2);border:1px solid var(--sf-edge);box-shadow:0 10px 28px rgba(0,0,0,.55);padding:5px 0;z-index:100;max-height:80vh;overflow:auto}
.sound-forge-app .sf-mi{display:flex;align-items:baseline;padding:6px 14px 6px 22px;font-size:calc(13px * var(--text-scale));cursor:default;white-space:nowrap}
.sound-forge-app .sf-mi:hover:not(.disabled){background:var(--sf-accent);color:#161a08}
.sound-forge-app .sf-mi.disabled{color:var(--sf-dim2)}
.sound-forge-app .sf-mi .sf-sc{margin-left:28px;font-family:var(--mono);font-size:calc(10px * var(--text-scale));opacity:.55}
.sound-forge-app .sf-msep{height:1px;background:var(--sf-edge);margin:5px 9px;opacity:.5}

.sound-forge-app #sf-toolbars{flex:none;display:flex;align-items:center;flex-wrap:wrap;background:var(--sf-panel);border-bottom:1px solid var(--sf-border);padding:4px 8px;gap:1px}
.sound-forge-app .sf-tb-sep{width:1px;align-self:stretch;background:var(--sf-edge);margin:3px 6px;opacity:.55}
.sound-forge-app .sf-tbtn{width:30px;height:28px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;border-radius:3px;color:var(--sf-text)}
.sound-forge-app .sf-tbtn:hover:not(:disabled){background:var(--sf-panel3);border-color:var(--sf-edge)}
.sound-forge-app .sf-tbtn:active:not(:disabled){background:var(--sf-panel4)}
.sound-forge-app .sf-tbtn:disabled{color:var(--sf-dim2);cursor:default}
.sound-forge-app .sf-tbtn.active{color:var(--sf-accent);border-color:var(--sf-accent-dim);background:rgba(182,225,74,.09)}
.sound-forge-app .sf-tbtn svg{width:16px;height:16px;display:block}
@keyframes sf-blink{50%{opacity:.25}}
.sound-forge-app .sf-tbtn.rec-on{color:var(--sf-rec);border-color:var(--sf-rec);animation:sf-blink 1s steps(2) infinite}

.sound-forge-app #sf-workspace{flex:1;display:flex;flex-direction:column;gap:8px;padding:8px;min-height:0}
.sound-forge-app #sf-dataWindow{flex:1;display:flex;flex-direction:column;min-height:0;background:var(--sf-panel);border:1px solid var(--sf-border)}
.sound-forge-app #sf-dwHeader{height:26px;flex:none;display:flex;align-items:center;gap:10px;padding:0 10px;background:var(--sf-panel2);border-bottom:1px solid var(--sf-border);font-family:var(--mono);font-size:calc(11px * var(--text-scale));color:var(--sf-dim)}
.sound-forge-app #sf-dwName{color:var(--sf-text);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sound-forge-app #sf-dwRight{margin-left:auto;display:flex;align-items:center;gap:10px}
.sound-forge-app #sf-recBadge{display:none;align-items:center;gap:6px;color:var(--sf-rec);font-weight:600}
.sound-forge-app #sf-recBadge.on{display:flex}
.sound-forge-app .sf-rec-dot{width:8px;height:8px;border-radius:50%;background:var(--sf-rec);animation:sf-blink 1s steps(2) infinite}
.sound-forge-app #sf-rulerRow{height:26px;flex:none;display:flex;background:var(--sf-panel2);border-bottom:1px solid var(--sf-border)}
.sound-forge-app #sf-rulerPad{width:34px;flex:none;background:var(--sf-panel2);border-right:1px solid var(--sf-border)}
.sound-forge-app #sf-ruler{flex:1;min-width:0;display:block;height:26px;touch-action:none}
.sound-forge-app #sf-waveWrap{flex:1;display:flex;min-height:0}
.sound-forge-app #sf-chanLabels{width:34px;flex:none;display:flex;flex-direction:column;background:var(--sf-panel2);border-right:1px solid var(--sf-border)}
.sound-forge-app .sf-chan-label{flex:1;display:flex;align-items:center;justify-content:center;writing-mode:vertical-rl;transform:rotate(180deg);font-family:var(--mono);font-size:calc(9px * var(--text-scale));letter-spacing:3px;color:var(--sf-dim)}
.sound-forge-app .sf-chan-label+.sf-chan-label{border-top:1px solid var(--sf-border)}
.sound-forge-app #sf-waveStack{flex:1;position:relative;min-width:0;background:#080a06;touch-action:none}
.sound-forge-app #sf-waveCanvas,.sound-forge-app #sf-overlayCanvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.sound-forge-app #sf-emptyHint{position:absolute;inset:0;display:none;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:var(--sf-dim);z-index:5}
.sound-forge-app #sf-emptyHint.show{display:flex}
.sound-forge-app #sf-emptyHint .sf-big{font-size:calc(15px * var(--text-scale));letter-spacing:1px;color:var(--sf-text)}
.sound-forge-app #sf-emptyHint .sf-row{display:flex;gap:10px}
.sound-forge-app #sf-scrollbar{height:16px;flex:none;position:relative;background:var(--sf-panel2);border-top:1px solid var(--sf-border);touch-action:none}
.sound-forge-app #sf-scrollThumb{position:absolute;top:2px;bottom:2px;min-width:26px;background:var(--sf-panel4);border:1px solid var(--sf-edge);border-radius:2px;cursor:pointer}
.sound-forge-app #sf-scrollThumb:hover{background:var(--sf-edge-hi)}

.sound-forge-app #sf-dbgPanel{position:absolute;top:6px;right:6px;z-index:20;display:none;background:rgba(10,12,7,.94);border:1px solid var(--sf-edge);padding:9px 11px;font-family:var(--mono);font-size:calc(10px * var(--text-scale));color:var(--sf-dim);min-width:260px}
.sound-forge-app #sf-dbgPanel.show{display:block}
.sound-forge-app .sf-dbg-title{font-weight:600;letter-spacing:1px;color:var(--sf-accent);margin-bottom:7px}
.sound-forge-app .sf-dbg-check{display:flex;align-items:center;gap:7px;margin:4px 0;color:var(--sf-text);cursor:pointer;font-size:calc(10.5px * var(--text-scale))}
.sound-forge-app .sf-dbg-check input{accent-color:var(--sf-accent)}
.sound-forge-app #sf-dbgMetrics{margin-top:8px;padding-top:7px;border-top:1px solid var(--sf-edge);line-height:1.6;white-space:nowrap}

.sound-forge-app #sf-dock{height:132px;flex:none;display:flex;gap:8px}
.sound-forge-app .sf-dock-panel{background:var(--sf-panel);border:1px solid var(--sf-border);display:flex;flex-direction:column;min-width:0}
.sound-forge-app #sf-vuPanel{width:252px;flex:none}
.sound-forge-app #sf-specPanel{flex:1}
.sound-forge-app .sf-dock-head{height:20px;flex:none;display:flex;align-items:center;padding:0 9px;background:var(--sf-panel2);border-bottom:1px solid var(--sf-border);font-size:calc(9px * var(--text-scale));font-weight:600;letter-spacing:2px;text-transform:uppercase;color:var(--sf-dim)}
.sound-forge-app .sf-dock-panel canvas{flex:1;width:100%;min-height:0;display:block}

/* Barre de statut : convention partagée "notepad-status" (cf. checklist de portage). */
.sound-forge-app .notepad-status{height:1.85rem;flex-shrink:0;background:var(--sf-panel);border-top:1px solid var(--sf-border);display:flex;align-items:center;padding:0 0.89rem;padding-bottom:env(safe-area-inset-bottom,0px);gap:0.52rem;overflow:hidden}
.sound-forge-app .notepad-status span{font-family:var(--font);font-size:calc(0.82rem * var(--text-scale));color:var(--sf-text);letter-spacing:.02em;white-space:nowrap}
.sound-forge-app .notepad-status span.sf-dim{color:var(--sf-dim)}
.sound-forge-app .notepad-status .sf-status-fill{flex:1}

.sound-forge-app .sf-btn{padding:6px 16px;font-size:calc(13px * var(--text-scale));font-family:inherit;background:var(--sf-panel3);border:1px solid var(--sf-edge);color:var(--sf-text);cursor:pointer;border-radius:2px}
.sound-forge-app .sf-btn:hover{border-color:var(--sf-accent-dim);color:#fff}
.sound-forge-app .sf-btn.sf-primary{background:var(--sf-accent);border-color:var(--sf-accent);color:#161a08;font-weight:600}
.sound-forge-app .sf-btn.sf-primary:hover{background:var(--sf-accent-hi)}
.sound-forge-app .sf-btn.previewing{background:var(--sf-rec);border-color:var(--sf-rec);color:#fff}
.sound-forge-app .sf-btn.previewing:hover{border-color:var(--sf-rec);color:#fff}
.sound-forge-app #sf-modalOverlay{position:absolute;inset:0;background:rgba(0,0,0,.55);display:none;align-items:center;justify-content:center;z-index:200}
.sound-forge-app #sf-modalOverlay.show{display:flex}
.sound-forge-app .sf-dialog{width:380px;max-width:94vw;max-height:calc(100% - 32px);display:flex;flex-direction:column;background:var(--sf-panel);border:1px solid var(--sf-edge);box-shadow:0 18px 50px rgba(0,0,0,.6)}
.sound-forge-app .sf-dlg-title{flex:0 0 auto;height:34px;display:flex;align-items:center;padding:0 13px;background:var(--sf-panel2);border-bottom:1px solid var(--sf-border);font-weight:600;font-size:calc(13px * var(--text-scale));letter-spacing:.5px}
/* flex:1 1 auto + min-height:0 (pas de max-height en vh, qui ignorait la taille réelle de la
   fenêtre OS) : le corps du dialogue rétrécit et devient scrollable en premier si la fenêtre
   est basse, pendant que le titre et le pied (bouton OK) restent toujours visibles. */
.sound-forge-app .sf-dlg-body{flex:1 1 auto;min-height:0;padding:15px 15px 4px;overflow:auto}
.sound-forge-app .sf-pv-status{flex:0 0 auto;padding:8px 15px 0;font-size:calc(11px * var(--text-scale));font-family:var(--mono);color:var(--sf-accent);min-height:16px}
.sound-forge-app .sf-dlg-foot{flex:0 0 auto;display:flex;justify-content:flex-end;gap:8px;padding:13px 15px 14px}
.sound-forge-app .sf-field{margin-bottom:13px}
.sound-forge-app .sf-field>label{display:flex;justify-content:space-between;font-size:calc(12px * var(--text-scale));color:var(--sf-dim);margin-bottom:6px}
.sound-forge-app .sf-field .sf-val{font-family:var(--mono);color:var(--sf-accent);font-size:calc(11.5px * var(--text-scale))}
.sound-forge-app .sf-slider-row{display:flex;gap:9px;align-items:center}
.sound-forge-app .sf-slider-row input[type=number]{width:78px;flex:none}
.sound-forge-app input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--sf-panel4);border-radius:2px;outline:none;cursor:pointer}
.sound-forge-app input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--sf-accent);border:2px solid #12150b}
.sound-forge-app input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--sf-accent);border:2px solid #12150b}
.sound-forge-app .sf-dialog input[type=number],.sound-forge-app .sf-dialog select{width:100%;background:var(--sf-solid,#10130c);border:1px solid var(--sf-edge);color:var(--sf-text);padding:6px 8px;font-family:var(--mono);font-size:calc(12px * var(--text-scale));border-radius:2px;outline:none}
.sound-forge-app .sf-dialog input[type=number]:focus,.sound-forge-app .sf-dialog select:focus{border-color:var(--sf-accent-dim)}
.sound-forge-app .sf-dialog select option{background:var(--sf-panel2)}
.sound-forge-app .sf-check-row{display:flex;align-items:center;gap:8px;font-size:calc(12.5px * var(--text-scale));color:var(--sf-text)}
.sound-forge-app .sf-check-row input{accent-color:var(--sf-accent)}
.sound-forge-app .sf-kbd-table{width:100%;border-collapse:collapse;font-size:calc(12px * var(--text-scale))}
.sound-forge-app .sf-kbd-table td{padding:4px 6px;border-bottom:1px solid var(--sf-edge)}
.sound-forge-app .sf-kbd-table td:first-child{font-family:var(--mono);color:var(--sf-accent);width:150px}
.sound-forge-app .sf-about-p{font-size:calc(12.5px * var(--text-scale));line-height:1.55;color:var(--sf-dim);margin-bottom:8px}
.sound-forge-app .sf-about-p b{color:var(--sf-text)}

.sound-forge-app #sf-busyOverlay{position:absolute;inset:0;z-index:250;display:none;align-items:center;justify-content:center;background:rgba(6,8,4,.38);cursor:progress}
.sound-forge-app #sf-busyOverlay.show{display:flex}
.sound-forge-app .sf-busy-box{display:flex;align-items:center;gap:12px;padding:12px 18px;background:var(--sf-panel);border:1px solid var(--sf-edge);box-shadow:0 14px 40px rgba(0,0,0,.6);font-size:calc(12.5px * var(--text-scale));color:var(--sf-text)}
.sound-forge-app .sf-busy-spin{width:18px;height:18px;border-radius:50%;border:2px solid var(--sf-panel4);border-top-color:var(--sf-accent-hi);animation:sf-busy-spin .8s linear infinite;will-change:transform}
.sound-forge-app .sf-busy-time{font-family:var(--mono);font-size:calc(11px * var(--text-scale));color:var(--sf-dim);min-width:38px;text-align:right}
@keyframes sf-busy-spin{to{transform:rotate(360deg)}}
.sound-forge-app.is-busy #sf-toolbars,.sound-forge-app.is-busy #sf-menubar{opacity:.55}
.sound-forge-app #sf-toasts{position:absolute;right:14px;bottom:38px;display:flex;flex-direction:column;gap:8px;z-index:300}
.sound-forge-app .sf-toast{background:var(--sf-panel2);border:1px solid var(--sf-edge);border-left:3px solid var(--sf-accent);padding:10px 14px;font-size:calc(12.5px * var(--text-scale));min-width:230px;max-width:340px;box-shadow:0 8px 24px rgba(0,0,0,.5);transition:opacity .25s,transform .25s}
.sound-forge-app .sf-toast.warn{border-left-color:#dcb345}

/* ═══════════════════════════════════════════════════════════════════
   NABLA FORGE — atelier nodal de calcul & visualisation 3D/2D (porté
   depuis un outil Three.js + KaTeX autonome). Comme Strata : palette
   "atelier" figée en gris ardoise + ambre, volontairement indépendante
   du thème clair/sombre système (surfaces pleines, jamais transparentes,
   pour que les popovers/le graphe restent lisibles quel que soit le
   thème choisi dans Réglages) — seul l'accent (--nf-acc) suit encore la
   couleur d'accent système. Tout est scopé sous .nabla-forge-app. */
.nabla-forge-app{
  --nf-bg0:#101114; --nf-bg1:#17181c; --nf-bg2:#1e2026; --nf-bg3:#262931; --nf-bg4:#2f333d;
  --nf-line:#262931; --nf-line2:#3a3f4b;
  --nf-tx:#d8dbe2; --nf-tx2:#9aa0ae; --nf-tx3:#626876;
  --nf-acc:var(--accent); --nf-acc-dim:color-mix(in srgb,var(--accent) 45%,black); --nf-acc-bg:color-mix(in srgb,var(--accent) 14%,#1a1712);
  --nf-err:#e05c4a; --nf-ok:#57a886;
  --nf-c-input:#4fae9b; --nf-c-op:#d99a3d; --nf-c-fn:#c8738f; --nf-c-domain:#94b35c; --nf-c-render:#6c93d8;
  --nf-font:var(--font); --nf-mono:var(--mono);
  position:relative;height:100%;overflow:hidden;
  display:grid;grid-template-rows:44px 1fr 1.85rem;
  background:var(--nf-bg0);color:var(--nf-tx);font-family:var(--nf-font);
  font-size:calc(13px * var(--text-scale));-webkit-font-smoothing:antialiased;user-select:none;
}
.nabla-forge-app *{box-sizing:border-box}
.nabla-forge-app ::selection{background:#5a4a28}
.nabla-forge-app ::-webkit-scrollbar{width:10px;height:10px}
.nabla-forge-app ::-webkit-scrollbar-thumb{background:#333845;border:2px solid var(--nf-bg1);border-radius:6px}
.nabla-forge-app ::-webkit-scrollbar-track{background:transparent}
.nabla-forge-app input,.nabla-forge-app select,.nabla-forge-app textarea,.nabla-forge-app button{font-family:inherit;color:inherit}
.nabla-forge-app input[type=number],.nabla-forge-app input[type=text],.nabla-forge-app textarea,.nabla-forge-app select{background:var(--nf-bg1);border:1px solid var(--nf-line2);border-radius:4px;color:var(--nf-tx);outline:none;font-size:calc(12px * var(--text-scale))}
.nabla-forge-app input:focus,.nabla-forge-app textarea:focus,.nabla-forge-app select:focus{border-color:var(--nf-acc)}
.nabla-forge-app input[type=range]{accent-color:var(--nf-acc);height:14px}
.nabla-forge-app button{cursor:pointer}
#nf-top{display:flex;align-items:center;gap:4px;padding:0 10px;background:var(--nf-bg2);border-bottom:1px solid var(--nf-line)}
.nabla-forge-app .nf-brand{display:flex;align-items:center;gap:9px;margin-right:14px}
.nabla-forge-app .nf-brand svg{width:22px;height:22px;color:var(--nf-acc);flex:none}
.nabla-forge-app .nf-brand b{font-size:calc(14px * var(--text-scale));letter-spacing:.06em}
.nabla-forge-app .nf-brand span{font-family:var(--nf-mono);font-size:calc(9px * var(--text-scale));letter-spacing:.14em;text-transform:uppercase;display:block;margin-top:1px;color:var(--nf-tx3)}
#nf-menus{display:flex;align-items:center;gap:2px}
.nabla-forge-app .nf-menu{position:relative}
.nabla-forge-app .nf-menu>button{display:flex;align-items:center;gap:5px;background:none;border:0;padding:6px 10px;border-radius:5px;font:500 calc(12.5px * var(--text-scale)) var(--nf-font);color:var(--nf-tx2);cursor:pointer;white-space:nowrap}
.nabla-forge-app .nf-menu>button:hover,.nabla-forge-app .nf-menu.open>button{background:var(--nf-bg3);color:var(--nf-tx)}
.nabla-forge-app .nf-dd{display:none;position:absolute;top:calc(100% + 4px);left:0;min-width:240px;z-index:200;background:var(--nf-bg2);border:1px solid var(--nf-line2);border-radius:7px;padding:5px;box-shadow:0 14px 34px rgba(0,0,0,.5);max-height:72vh;overflow-y:auto}
.nabla-forge-app .nf-menu.open .nf-dd{display:block}
.nabla-forge-app .nf-dd-it{display:flex;align-items:center;gap:9px;width:100%;padding:7px 10px;border:0;background:none;border-radius:5px;font:500 calc(12.5px * var(--text-scale)) var(--nf-font);color:var(--nf-tx2);cursor:pointer;text-align:left}
.nabla-forge-app .nf-dd-it:hover{background:var(--nf-bg3);color:var(--nf-tx)}
.nabla-forge-app .nf-dd-it svg{width:13px;height:13px;flex:none;opacity:.7}
.nabla-forge-app .nf-dd-it .k{margin-left:auto;font:calc(10px * var(--text-scale)) var(--nf-mono);color:var(--nf-tx3)}
.nabla-forge-app .nf-dd-it .on{width:6px;height:6px;border-radius:50%;background:var(--nf-ok);margin-right:2px}
.nabla-forge-app .nf-dd-sep{height:1px;background:var(--nf-line);margin:5px 8px}
#nf-menus .nf-dd .nf-l-sec{border-top:0;padding-top:8px}
#nf-tools{margin-left:auto;display:flex;align-items:center;gap:5px}
.nabla-forge-app .nf-tbtn{width:30px;height:30px;display:grid;place-items:center;background:none;border:1px solid transparent;border-radius:6px;color:var(--nf-tx2);cursor:pointer}
.nabla-forge-app .nf-tbtn:hover{background:var(--nf-bg3);color:var(--nf-tx);border-color:var(--nf-line2)}
.nabla-forge-app .nf-tbtn.on{color:var(--nf-acc);border-color:var(--nf-acc-dim);background:var(--nf-acc-bg)}
.nabla-forge-app .nf-tbtn.dim{opacity:.3}
.nabla-forge-app .nf-tbtn svg{width:15px;height:15px}
.nabla-forge-app .nf-tsep{width:1px;height:18px;background:var(--nf-line2);margin:0 3px}
#nf-main{display:flex;min-height:0;position:relative}
#nf-lib{width:236px;min-width:236px;background:var(--nf-bg1);border-right:1px solid var(--nf-line);display:flex;flex-direction:column}
.nabla-forge-app .nf-p-title{font:600 calc(9.5px * var(--text-scale)) var(--nf-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--nf-tx3);padding:10px 12px 7px}
#nf-libSearch{margin:0 10px 8px;padding:6px 9px;font:calc(12px * var(--text-scale)) var(--nf-mono)}
#nf-libList{flex:1;overflow-y:auto;padding-bottom:20px}
.nabla-forge-app .nf-l-sec{font:600 calc(9px * var(--text-scale)) var(--nf-mono);letter-spacing:.15em;text-transform:uppercase;color:var(--nf-tx3);padding:10px 12px 4px;border-top:1px solid var(--nf-line)}
.nabla-forge-app .nf-li{padding:7px 12px;cursor:grab;border-left:2px solid transparent}
.nabla-forge-app .nf-li:hover{background:var(--nf-bg2);border-left-color:var(--nf-cat)}
.nabla-forge-app .nf-li-name{font:600 calc(12px * var(--text-scale)) var(--nf-font);display:flex;align-items:center;gap:7px}
.nabla-forge-app .nf-li-dot{width:7px;height:7px;border-radius:2px;background:var(--nf-cat);flex:none}
.nabla-forge-app .nf-li-desc{font:calc(11px * var(--text-scale)) var(--nf-font);color:var(--nf-tx3);margin:2px 0 0 14px}
.nabla-forge-app .nf-l-foot{padding:9px 12px;border-top:1px solid var(--nf-line);font:calc(10px * var(--text-scale)) var(--nf-mono);color:var(--nf-tx3);line-height:1.7}
.nabla-forge-app .nf-l-foot i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;vertical-align:middle}
.nabla-forge-app .nf-rz{position:absolute;z-index:60;background:transparent}
.nabla-forge-app .nf-rz:hover,.nabla-forge-app .nf-rz.act{background:var(--nf-acc)}
#nf-rzL{top:0;bottom:0;left:236px;width:4px;cursor:col-resize}
#nf-rzR{top:0;bottom:0;right:440px;width:4px;cursor:col-resize}
#nf-rzV{right:0;left:auto;width:440px;height:4px;cursor:row-resize;top:46%}
#nf-canvasWrap{flex:1;min-width:260px;position:relative;overflow:hidden;background:var(--nf-bg0);background-image:radial-gradient(#1d1f25 1px,transparent 1.3px);background-size:22px 22px;user-select:none;cursor:default}
#nf-canvasWrap.nf-pan{cursor:grabbing}
#nf-canvasWrap.nf-rubber{cursor:crosshair}
#nf-world{position:absolute;left:0;top:0;transform-origin:0 0}
#nf-wires{position:absolute;left:0;top:0;width:10px;height:10px;overflow:visible;pointer-events:none}
#nf-wires .nf-wire{stroke:#6d7382;stroke-width:2;fill:none;vector-effect:non-scaling-stroke}
#nf-wires g:hover .nf-wire{stroke:var(--nf-acc)}
#nf-wires .nf-wire-hit{stroke:transparent;stroke-width:13;fill:none;pointer-events:stroke;cursor:pointer;vector-effect:non-scaling-stroke}
#nf-wires .nf-tmp{stroke:var(--nf-acc);stroke-width:2;stroke-dasharray:5 4;fill:none;vector-effect:non-scaling-stroke}
.nabla-forge-app .nf-node{position:absolute;width:192px;background:#20232b;border:1px solid #383e4b;border-radius:7px;box-shadow:0 8px 22px rgba(0,0,0,.4);cursor:grab}
.nabla-forge-app .nf-node:hover{border-color:#4a5162}
.nabla-forge-app .nf-node.sel{border-color:var(--nf-acc);box-shadow:0 0 0 1px var(--nf-acc),0 10px 26px rgba(0,0,0,.5)}
.nabla-forge-app .nf-n-head{display:flex;align-items:center;gap:7px;padding:7px 8px 7px 10px;border-bottom:1px solid #303542;border-radius:7px 7px 0 0}
.nabla-forge-app .nf-n-dot{width:8px;height:8px;border-radius:2.5px;flex:none}
.nabla-forge-app .nf-n-title{font:600 calc(12px * var(--text-scale)) var(--nf-font);letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nabla-forge-app .nf-n-x{margin-left:auto;width:17px;height:17px;display:grid;place-items:center;border:0;border-radius:4px;background:none;color:var(--nf-tx3);cursor:pointer;opacity:0;flex:none}
.nabla-forge-app .nf-node:hover .nf-n-x{opacity:1}
.nabla-forge-app .nf-n-x:hover{background:var(--nf-err);color:#fff}
.nabla-forge-app .nf-n-rows{padding:4px 0}
.nabla-forge-app .nf-n-row{position:relative;display:flex;align-items:center;height:22px;padding:0 10px;font:500 calc(10.5px * var(--text-scale)) var(--nf-mono);color:var(--nf-tx2)}
.nabla-forge-app .nf-n-row.nf-out{justify-content:flex-end;color:var(--nf-tx3)}
.nabla-forge-app .nf-sock{position:absolute;top:50%;transform:translateY(-50%);width:11px;height:11px;border-radius:50%;background:#15171c;border:2px solid var(--nf-sc,#8a8f9c);cursor:crosshair}
.nabla-forge-app .nf-sock.nf-in{left:-6px}
.nabla-forge-app .nf-sock.nf-out{right:-6px}
.nabla-forge-app .nf-sock:hover{background:var(--nf-sc)}
.nabla-forge-app .nf-sock.filled{background:var(--nf-sc)}
.nabla-forge-app .nf-n-inline{display:flex;align-items:center;gap:7px;padding:1px 10px 7px}
.nabla-forge-app .nf-n-inline span{font:500 calc(10px * var(--text-scale)) var(--nf-mono);color:var(--nf-tx3)}
.nabla-forge-app .nf-n-inline input{flex:1;min-width:0;padding:3px 6px;font:calc(11px * var(--text-scale)) var(--nf-mono)}
.nabla-forge-app .nf-n-sub{padding:0 10px 7px;font:calc(10px * var(--text-scale)) var(--nf-mono);color:var(--nf-tx3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nabla-forge-app .nf-err-dot{position:absolute;top:-5px;right:-5px;width:11px;height:11px;border-radius:50%;background:var(--nf-err);border:2px solid var(--nf-bg1);display:none}
.nabla-forge-app .nf-node.has-err .nf-err-dot{display:block}
.nabla-forge-app .nf-selbox{position:absolute;display:none;z-index:40;border:1px solid var(--nf-acc);background:color-mix(in srgb,var(--nf-acc) 8%,transparent);pointer-events:none;border-radius:2px}
#nf-ctxMenu{position:absolute;z-index:300;display:none;min-width:200px;max-height:70vh;overflow-y:auto;background:var(--nf-bg2);border:1px solid var(--nf-line2);border-radius:7px;padding:5px;box-shadow:0 14px 34px rgba(0,0,0,.5)}
#nf-ctxMenu .nf-dd-it{font-size:calc(12px * var(--text-scale))}
#nf-ctxMenu .nf-l-sec{border-top:0;padding-top:7px}
.nabla-forge-app .nf-pupitre{position:absolute;top:14px;left:14px;z-index:55;width:256px;max-height:calc(100% - 28px);display:none;flex-direction:column;background:rgba(23,24,28,.97);border:1px solid var(--nf-line2);border-radius:9px;box-shadow:0 16px 40px rgba(0,0,0,.55)}
.nabla-forge-app .nf-pupitre.on{display:flex}
.nabla-forge-app .nf-pup-head{display:flex;align-items:center;gap:8px;padding:8px 8px 8px 12px;border-bottom:1px solid var(--nf-line);cursor:grab;border-radius:9px 9px 0 0;background:#1b1d23;flex:none}
.nabla-forge-app .nf-pup-head b{font:600 calc(11px * var(--text-scale)) var(--nf-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--nf-acc)}
.nabla-forge-app .nf-pup-head .nf-n-x{opacity:1}
.nabla-forge-app .nf-pup-body{overflow-y:auto;padding-bottom:10px}
.nabla-forge-app .nf-pup-sec{font:600 calc(9px * var(--text-scale)) var(--nf-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--nf-tx2);padding:10px 10px 3px;border-left:3px solid var(--nf-tx3);margin:4px 0 0}
.nabla-forge-app .nf-pup-row{display:grid;grid-template-columns:88px minmax(0,1fr);gap:7px;align-items:center;padding:3px 10px 3px 12px}
.nabla-forge-app .nf-pup-row label{font:calc(10.5px * var(--text-scale)) var(--nf-font);color:var(--nf-tx2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nabla-forge-app .nf-pup-row input[type=range]{width:100%;min-width:0}
.nabla-forge-app .nf-pup-empty{padding:16px 14px;color:var(--nf-tx3);font-size:calc(12px * var(--text-scale));line-height:1.7;text-align:center}
.nabla-forge-app .nf-pup-foot{padding:7px 12px;border-top:1px solid var(--nf-line);font:calc(9.5px * var(--text-scale)) var(--nf-mono);color:var(--nf-tx3);flex:none}
#nf-right{width:440px;min-width:300px;background:var(--nf-bg1);border-left:1px solid var(--nf-line);display:flex;flex-direction:column;position:relative}
#nf-vp{height:46%;min-height:120px;position:relative;background:#0b0c0f;overflow:hidden}
#nf-vp canvas{display:block;width:100% !important;height:100% !important}
#nf-vpChips{position:absolute;top:8px;left:8px;z-index:5;display:flex;flex-direction:column;gap:4px;max-height:calc(100% - 60px);overflow-y:auto}
.nabla-forge-app .nf-chip{font:500 calc(10px * var(--text-scale)) var(--nf-mono);letter-spacing:.04em;padding:4px 8px;border-radius:4px;border:1px solid var(--nf-line2);background:rgba(20,22,27,.88);color:var(--nf-tx2);cursor:pointer;text-align:left}
.nabla-forge-app .nf-chip:hover{color:var(--nf-tx);border-color:#4a5162}
.nabla-forge-app .nf-chip.on{border-color:var(--nf-acc);color:var(--nf-acc)}
#nf-vp .nf-vp-tools{position:absolute;top:8px;right:8px;z-index:5;display:flex;gap:4px}
.nabla-forge-app .nf-vp-btn{width:27px;height:27px;display:grid;place-items:center;border:1px solid var(--nf-line2);background:rgba(20,22,27,.88);color:var(--nf-tx2);cursor:pointer;border-radius:5px}
.nabla-forge-app .nf-vp-btn:hover{color:var(--nf-tx);border-color:#4a5162}
.nabla-forge-app .nf-vp-btn.on{color:var(--nf-acc);border-color:var(--nf-acc-dim)}
.nabla-forge-app .nf-vp-btn svg{width:13px;height:13px}
#nf-vpCap{position:absolute;left:10px;bottom:8px;z-index:5;font:calc(10px * var(--text-scale)) var(--nf-mono);letter-spacing:.1em;text-transform:uppercase;color:#5b616e;pointer-events:none}
#nf-vpMsg{position:absolute;inset:0;z-index:4;display:none;place-items:center;text-align:center;padding:30px;color:var(--nf-tx3);font-size:calc(13px * var(--text-scale));line-height:1.7}
#nf-vpMsg.on{display:grid}
#nf-vpMsg b{color:var(--nf-tx2);display:block;margin-bottom:6px;font-weight:600}
#nf-insp{flex:1;overflow-y:auto;border-top:1px solid var(--nf-line);min-height:88px}
.nabla-forge-app .nf-i-body{padding:13px 14px 40px;min-width:0}
.nabla-forge-app .nf-i-head{display:flex;align-items:center;gap:9px}
.nabla-forge-app .nf-i-cat{font:600 calc(9px * var(--text-scale)) var(--nf-mono);letter-spacing:.14em;text-transform:uppercase;color:#0f1013;background:var(--nf-tx3);padding:3px 7px;border-radius:3px}
.nabla-forge-app .nf-i-head b{font-size:calc(15px * var(--text-scale));font-weight:600}
.nabla-forge-app .nf-i-desc{color:var(--nf-tx2);font-size:calc(12.5px * var(--text-scale));line-height:1.6;margin:9px 0 2px}
.nabla-forge-app .nf-i-err{margin-top:10px;border:1px solid #5c2c24;background:#241413;color:#e88f81;font:calc(11.5px * var(--text-scale)) var(--nf-mono);padding:8px 10px;border-radius:5px;line-height:1.6}
.nabla-forge-app .nf-i-sec{font:600 calc(9.5px * var(--text-scale)) var(--nf-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--nf-tx3);margin:18px 0 7px;padding-top:12px;border-top:1px solid var(--nf-line)}
.nabla-forge-app .nf-ip{display:grid;grid-template-columns:92px minmax(0,1fr) 62px;gap:8px;align-items:center;margin-bottom:7px;min-width:0}
.nabla-forge-app .nf-ip label{font:calc(11px * var(--text-scale)) var(--nf-font);color:var(--nf-tx2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nabla-forge-app .nf-ip input[type=number]{padding:3px 6px;font:calc(11px * var(--text-scale)) var(--nf-mono);width:100%;min-width:0}
.nabla-forge-app .nf-ip select{grid-column:2/4;padding:4px 6px;font:calc(11.5px * var(--text-scale)) var(--nf-mono);width:100%;min-width:0}
.nabla-forge-app .nf-ip textarea{grid-column:2/4;padding:6px 8px;font:calc(11.5px * var(--text-scale)) var(--nf-mono);width:100%;min-width:0;resize:vertical;min-height:52px;line-height:1.55}
.nabla-forge-app .nf-ip-full{margin-bottom:7px;min-width:0}
.nabla-forge-app .nf-ip-full label{display:block;font:calc(11px * var(--text-scale)) var(--nf-font);color:var(--nf-tx2);margin-bottom:4px}
.nabla-forge-app .nf-ip-full input{width:100%;min-width:0;padding:5px 8px;font:calc(12px * var(--text-scale)) var(--nf-mono)}
.nabla-forge-app .nf-ip-full textarea{width:100%;min-width:0;padding:6px 8px;font:calc(11.5px * var(--text-scale)) var(--nf-mono);line-height:1.55;resize:none;min-height:56px;max-height:280px;overflow-y:auto}
.nabla-forge-app .nf-i-expr{background:#15171c;border:1px solid var(--nf-line);border-radius:6px;padding:12px 10px;overflow-x:auto;font-size:calc(14px * var(--text-scale));color:#cfd3dc}
.nabla-forge-app .nf-i-expr .katex{font-size:1.02em}
.nabla-forge-app .nf-i-expr .nf-none{font:calc(11px * var(--text-scale)) var(--nf-mono);color:var(--nf-tx3)}
.nabla-forge-app .nf-i-btn{margin-top:12px;width:100%;padding:8px;border:1px solid var(--nf-acc);background:none;color:var(--nf-acc);border-radius:5px;font:600 calc(12px * var(--text-scale)) var(--nf-font);letter-spacing:.04em;cursor:pointer}
.nabla-forge-app .nf-i-btn:hover{background:var(--nf-acc);color:#14161b}
.nabla-forge-app .nf-i-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.nabla-forge-app .nf-i-chip{font:calc(11px * var(--text-scale)) var(--nf-mono);padding:4px 9px;border:1px solid var(--nf-line2);border-left:3px solid var(--nf-c,var(--nf-tx3));background:var(--nf-bg2);color:var(--nf-tx2);border-radius:4px;cursor:pointer}
.nabla-forge-app .nf-i-chip:hover{color:var(--nf-tx);border-color:var(--nf-acc)}
.nabla-forge-app .nf-i-actions{display:flex;gap:8px;margin-top:12px}
.nabla-forge-app .nf-i-actions .nf-i-btn{margin-top:0}
.nabla-forge-app .nf-i-btn.nf-danger{border-color:#6b3a32;color:var(--nf-err)}
.nabla-forge-app .nf-i-btn.nf-danger:hover{background:var(--nf-err);border-color:var(--nf-err);color:#fff}
.nabla-forge-app .nf-tips{color:var(--nf-tx3);font-size:calc(12.5px * var(--text-scale));line-height:1.8}
.nabla-forge-app .nf-tips b{color:var(--nf-tx2);font-weight:600}
.nabla-forge-app .nf-tips li{margin-left:16px;margin-bottom:6px;list-style:disc}
#nf-status{display:flex;align-items:center;gap:.89rem;padding:0 .89rem;background:var(--nf-bg2);border-top:1px solid var(--nf-line);font-family:var(--nf-font);font-size:calc(.82rem * var(--text-scale));letter-spacing:.02em;color:var(--nf-tx3);height:1.85rem;flex:0 0 1.85rem;min-height:0}
#nf-stMsg{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#nf-stMsg.err{color:var(--nf-err)}
#nf-stRt{margin-left:auto;white-space:nowrap}
#nf-stRt b{color:var(--nf-tx2);font-weight:500}
#nf-overlay{position:absolute;inset:0;z-index:400;background:rgba(8,9,11,.72);display:none;place-items:center}
#nf-overlay.on{display:grid}
#nf-modal{width:min(620px,92%);max-height:84%;overflow-y:auto;background:var(--nf-bg2);border:1px solid var(--nf-line2);border-radius:10px;padding:22px 26px;box-shadow:0 30px 70px rgba(0,0,0,.6)}
.nabla-forge-app #nf-modal h2{font-size:calc(17px * var(--text-scale));font-weight:600;margin-bottom:4px}
.nabla-forge-app #nf-modal .nf-m-sub{font:calc(10.5px * var(--text-scale)) var(--nf-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--nf-tx3);margin-bottom:16px}
.nabla-forge-app #nf-modal h3{font:600 calc(10px * var(--text-scale)) var(--nf-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--nf-acc);margin:18px 0 8px}
.nabla-forge-app #nf-modal table{width:100%;border-collapse:collapse}
.nabla-forge-app #nf-modal td{padding:5px 4px;border-bottom:1px solid var(--nf-line);font-size:calc(12.5px * var(--text-scale));color:var(--nf-tx2)}
.nabla-forge-app #nf-modal td:first-child{width:190px}
.nabla-forge-app #nf-modal kbd{font:calc(10.5px * var(--text-scale)) var(--nf-mono);border:1px solid var(--nf-line2);border-bottom-width:2px;background:var(--nf-bg3);padding:2px 7px;border-radius:4px;color:var(--nf-tx)}
.nabla-forge-app .nf-m-input{width:100%;padding:8px 10px;margin:10px 0 16px;font-size:calc(13px * var(--text-scale))}
.nabla-forge-app .nf-m-row{display:flex;justify-content:flex-end;gap:8px}
.nabla-forge-app .nf-m-btn{padding:8px 16px;border-radius:6px;font:500 calc(12.5px * var(--text-scale)) var(--nf-font);cursor:pointer;border:1px solid transparent}
.nabla-forge-app .nf-m-btn.nf-ghost{background:var(--nf-bg3);color:var(--nf-tx2)}
.nabla-forge-app .nf-m-btn.nf-ghost:hover{color:var(--nf-tx)}
.nabla-forge-app .nf-m-btn.nf-acc{background:var(--nf-acc);color:#1c1608;font-weight:600}
#nf-toast{position:absolute;left:50%;bottom:2.4rem;transform:translate(-50%,14px);z-index:500;background:#2a2d36;border:1px solid var(--nf-line2);color:var(--nf-tx);font:calc(12px * var(--text-scale)) var(--nf-mono);padding:9px 16px;border-radius:6px;opacity:0;pointer-events:none;transition:all .25s}
#nf-toast.on{opacity:1;transform:translate(-50%,0)}
/* remplace le @media (max-width:900px) de l'outil d'origine — les OS
   windows n'ont pas de "viewport" propre, donc la bascule "bibliothèque en
   tiroir" est pilotée par un ResizeObserver sur la racine (voir moteur)
   qui pose/retire .nf-narrow, plutôt que par une media query liée à la
   fenêtre du navigateur. */
.nabla-forge-app.nf-narrow #nf-lib{position:absolute;z-index:100;height:100%;transform:translateX(-105%);transition:transform .25s;box-shadow:14px 0 30px rgba(0,0,0,.4)}
.nabla-forge-app.nf-narrow #nf-lib.open{transform:none}
.nabla-forge-app.nf-narrow #nf-rzL{display:none}
.nabla-forge-app.nf-narrow #nf-right{width:340px !important;min-width:280px !important}
.sound-forge-app .sf-toast.err{border-left-color:var(--sf-rec)}

/* ═══════════════════════════════════════════════════════════════
   CREEPY AMP — lecteur audio/vidéo rétro façon chaîne hi-fi (porté
   depuis un outil autonome, remplace les anciens Lecteur de musique /
   Lecteur Vidéo). Comme Strata/Weird Synth/Sound Forge/Nabla Forge,
   l'habillage reste figé (face avant d'ampli sombre) plutôt que de
   suivre le thème clair/sombre du système : la couleur de "thème VFD"
   (ambre/vert/bleu/rose/jaune) est elle-même une fonctionnalité de
   l'appli (bouton palette / touche T, mémorisée), donc elle ne suit
   pas non plus l'accent système par défaut. Tout est scopé sous
   .creepyamp-app ; les media queries de largeur de page d'origine
   sont remplacées par des container queries sur .creepyamp-app
   lui-même (une fenêtre OS n'a pas de "viewport" propre). ═══════ */
.creepyamp-app{
  --ca-label:#84848c; --ca-silver:#c9c9d1; --ca-red:#ff4633;
  --ca-f-ui:'Oxanium','Segoe UI',system-ui,sans-serif;
  --ca-f-dig:'DSEG7 Classic','Doto',monospace; --ca-f-dot:'Doto','Oxanium',monospace;
  --ca-acc:#ff9b2f; --ca-acc2:#ff7a00;
  --ca-accGlow:rgba(255,140,25,.55); --ca-accBg:rgba(255,140,25,.10);
  --ca-digSh1:rgba(255,140,25,.85); --ca-digSh2:rgba(255,110,0,.35);
  --ca-vfdBg1:#0b0602; --ca-vfdBg2:#130a03; --ca-vfdTint:rgba(90,30,0,.28);
  position:relative;height:100%;overflow:hidden;display:flex;color:#b6b6bd;font-family:var(--ca-f-ui);
  container-type:inline-size;container-name:creepyamp;user-select:none;-webkit-user-select:none;
  background:radial-gradient(1300px 700px at 50% -12%,#1b1b1f 0%,#0a0a0c 48%,#040405 100%);
}
.creepyamp-app.t-green{
  --ca-acc:#39ff8a; --ca-acc2:#0fd45f; --ca-accGlow:rgba(57,255,138,.5); --ca-accBg:rgba(57,255,138,.10);
  --ca-digSh1:rgba(57,255,138,.8); --ca-digSh2:rgba(0,200,90,.3);
  --ca-vfdBg1:#02110a; --ca-vfdBg2:#03170c; --ca-vfdTint:rgba(0,90,45,.28);
}
.creepyamp-app.t-blue{
  --ca-acc:#4fc3ff; --ca-acc2:#2196f3; --ca-accGlow:rgba(79,195,255,.5); --ca-accBg:rgba(79,195,255,.10);
  --ca-digSh1:rgba(79,195,255,.8); --ca-digSh2:rgba(0,140,255,.3);
  --ca-vfdBg1:#020a12; --ca-vfdBg2:#03121c; --ca-vfdTint:rgba(0,60,110,.3);
}
.creepyamp-app.t-pink{
  --ca-acc:#ff5fd8; --ca-acc2:#e02ab4; --ca-accGlow:rgba(255,95,216,.5); --ca-accBg:rgba(255,95,216,.10);
  --ca-digSh1:rgba(255,95,216,.8); --ca-digSh2:rgba(224,42,180,.3);
  --ca-vfdBg1:#12030f; --ca-vfdBg2:#1a0517; --ca-vfdTint:rgba(140,0,110,.28);
}
.creepyamp-app.t-yellow{
  --ca-acc:#ffd52f; --ca-acc2:#f0a500; --ca-accGlow:rgba(255,213,47,.5); --ca-accBg:rgba(255,213,47,.10);
  --ca-digSh1:rgba(255,213,47,.8); --ca-digSh2:rgba(240,165,0,.3);
  --ca-vfdBg1:#0f0c02; --ca-vfdBg2:#171202; --ca-vfdTint:rgba(130,95,0,.26);
}
.creepyamp-app *{box-sizing:border-box}
.creepyamp-app button,.creepyamp-app input,.creepyamp-app select{font-family:inherit}
.creepyamp-app::before{content:'';position:absolute;inset:0;pointer-events:none;opacity:.05;z-index:99;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");}
.creepyamp-app #ca-app{height:100%;width:100%;display:grid;grid-template-rows:auto minmax(120px,1fr) auto;
  gap:clamp(8px,1.2vh,14px);padding:clamp(6px,1.4vh,16px);}
.creepyamp-app #ca-app.theater{grid-template-rows:1fr;gap:0;padding:0}
.creepyamp-app #ca-app.theater #ca-deckTop,.creepyamp-app #ca-app.theater #ca-deckBot{display:none}
.creepyamp-app #ca-midRow{display:flex;gap:clamp(8px,1.2vh,14px);min-height:0;min-width:0}
.creepyamp-app #ca-app.theater #ca-midRow{gap:0}

/* ---- scène plein écran (double-clic sur l'écran) ---- */
.creepyamp-app.stagefs{overflow:hidden}
.creepyamp-app.stagefs #ca-app{padding:0 !important;gap:0 !important;grid-template-rows:1fr !important}
.creepyamp-app.stagefs #ca-deckTop,.creepyamp-app.stagefs #ca-deckBot{display:none !important}
.creepyamp-app.stagefs #ca-midRow{gap:0 !important}
.creepyamp-app.stagefs #ca-playlist{display:none !important}
.creepyamp-app.stagefs .ca-screen{border-radius:0 !important;box-shadow:none !important}
.creepyamp-app #ca-vctrl{position:absolute;left:0;right:0;bottom:0;z-index:6;display:none;
  flex-direction:column;gap:8px;padding:38px 26px 20px;
  background:linear-gradient(transparent,rgba(0,0,0,.85));
  opacity:0;transition:opacity .35s;pointer-events:none}
.creepyamp-app .ca-screen.mode-video #ca-vctrl.fsOn{display:flex;pointer-events:auto}
.creepyamp-app #ca-vctrl.show{opacity:1}
.creepyamp-app #ca-vctrl .fsTop{display:flex;align-items:baseline;gap:12px;min-width:0}
.creepyamp-app #ca-vctrl .fsTitle{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-family:var(--ca-f-dot);font-weight:700;font-size:calc(13px * var(--text-scale));letter-spacing:.08em;color:#f2f2f6;
  text-shadow:0 1px 3px #000}
.creepyamp-app #ca-vctrl .fsTime{flex:none;font-family:var(--ca-f-dot);font-weight:700;font-size:calc(11px * var(--text-scale));
  color:#c9c9d1;font-variant-numeric:tabular-nums;text-shadow:0 1px 2px #000}
.creepyamp-app #ca-vctrl .fsCtl{display:flex;align-items:center;gap:10px}
.creepyamp-app #ca-vctrl .fsBtn{flex:none;width:38px;height:38px;border-radius:9px;display:grid;place-items:center;
  background:rgba(30,30,34,.85);border:1px solid rgba(255,255,255,.14);cursor:pointer;
  transition:filter .12s,background .12s}
.creepyamp-app #ca-vctrl .fsBtn:hover{filter:brightness(1.3)}
.creepyamp-app #ca-vctrl .fsBtn svg{width:19px;height:19px;fill:#e8e8ee;pointer-events:none}
.creepyamp-app #ca-vctrl .fsBtn.on svg{fill:var(--ca-acc);filter:drop-shadow(0 0 6px var(--ca-accGlow))}
.creepyamp-app #ca-vctrl .sp{flex:1}
.creepyamp-app #ca-vctrl .fsBar{flex:0 0 auto;width:100%;height:14px;min-height:14px;
  border-radius:7px;position:relative;cursor:pointer;
  touch-action:none;overflow:hidden;background:rgba(255,255,255,.28);
  box-shadow:inset 0 1px 3px rgba(0,0,0,.8)}
.creepyamp-app #ca-vctrl .fsBarFill{position:absolute;left:0;top:0;bottom:0;width:0;
  background:linear-gradient(90deg,var(--ca-acc2),var(--ca-acc));box-shadow:0 0 10px var(--ca-accGlow)}
.creepyamp-app #ca-vctrl .fsBarFill::after{content:'';position:absolute;right:-1px;top:50%;width:14px;height:14px;margin-top:-7px;
  border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff,var(--ca-acc) 55%,var(--ca-acc2));
  box-shadow:0 0 6px var(--ca-accGlow)}
.creepyamp-app .ca-screen.mode-video.cursoroff video{cursor:none}

/* ---- faceplates ---- */
.creepyamp-app .ca-deck,.creepyamp-app #ca-playlist{
  position:relative;display:flex;align-items:center;gap:clamp(10px,1.8vw,24px);
  padding:clamp(7px,1.4vh,15px) clamp(10px,1.6vw,22px);border-radius:14px;overflow:hidden;
  background:linear-gradient(180deg,#2d2d33 0%,#1e1e22 12%,#17171a 55%,#0f0f12 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10),inset 0 -1px 0 rgba(0,0,0,.9),
    inset 0 0 0 1px rgba(0,0,0,.55),0 10px 30px rgba(0,0,0,.65),0 2px 6px rgba(0,0,0,.8);}
.creepyamp-app .ca-deck::after{content:'';position:absolute;right:12px;bottom:9px;width:12px;height:12px;border-radius:50%;
  background:linear-gradient(145deg,#3d3d44,#0d0d10 70%);
  box-shadow:inset 0 1px 1px rgba(255,255,255,.18),0 1px 2px #000;}

/* ---- buttons ---- */
.creepyamp-app .ca-btn{position:relative;border:1px solid #000;cursor:pointer;color:var(--ca-silver);
  background:linear-gradient(180deg,#3a3a41,#26262b 46%,#19191d);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16),inset 0 -2px 3px rgba(0,0,0,.65),
    0 3px 5px rgba(0,0,0,.55);transition:filter .12s;touch-action:manipulation}
.creepyamp-app .ca-btn:hover{filter:brightness(1.14)}
.creepyamp-app .ca-btn:active{transform:translateY(1px);background:linear-gradient(180deg,#1c1c20,#232328);
  box-shadow:inset 0 2px 6px rgba(0,0,0,.85);}
.creepyamp-app .ca-ic{width:52%;height:52%;fill:var(--ca-silver);filter:drop-shadow(0 1px 1px rgba(0,0,0,.9));pointer-events:none}
.creepyamp-app .ca-btn.acc{color:var(--ca-acc)}
.creepyamp-app .ca-btn.acc .ca-ic{fill:var(--ca-acc);filter:drop-shadow(0 0 6px var(--ca-accGlow)) drop-shadow(0 1px 1px rgba(0,0,0,.9))}
.creepyamp-app .ca-btn.t{aspect-ratio:1;border-radius:10px;display:grid;place-items:center}
.creepyamp-app .ca-btn.mini{font-family:var(--ca-f-dot);font-weight:700;font-size:calc(10px * var(--text-scale));letter-spacing:.08em;
  padding:0 10px;border-radius:7px;color:var(--ca-silver);white-space:nowrap;
  display:flex;align-items:center;justify-content:center}
.creepyamp-app .ca-btn.mini.on{color:var(--ca-acc);text-shadow:0 0 6px var(--ca-accGlow);
  box-shadow:inset 0 0 0 1px var(--ca-accGlow),0 0 10px var(--ca-accBg),inset 0 -2px 3px rgba(0,0,0,.6);}
.creepyamp-app .ca-btn.rnd{width:clamp(34px,4.8vh,44px);height:clamp(34px,4.8vh,44px);border-radius:50%;flex:none}
.creepyamp-app .ca-btn.sic .ca-ic{width:46%;height:46%;fill:none;stroke:currentColor;stroke-width:2.2;
  stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 1px 1px rgba(0,0,0,.9))}
.creepyamp-app .ca-btn.sic.acc{color:var(--ca-acc)}
.creepyamp-app .ca-btn.sic.acc .ca-ic{filter:drop-shadow(0 0 6px var(--ca-accGlow)) drop-shadow(0 1px 1px rgba(0,0,0,.9))}
.creepyamp-app .ca-btn.rnd.sic .ca-ic{width:20px;height:20px}
.creepyamp-app .ca-btn.rnd.sic.on{color:var(--ca-acc)}
.creepyamp-app .ca-btn.rnd.sic.on .ca-ic{filter:drop-shadow(0 0 6px var(--ca-accGlow)) drop-shadow(0 1px 1px rgba(0,0,0,.9))}
.creepyamp-app .ca-led{position:absolute;top:3px;right:4px;width:6px;height:6px;border-radius:2px;background:#2a1204;
  box-shadow:inset 0 1px 1px #000;}
.creepyamp-app .ca-led.on{background:var(--ca-acc);box-shadow:0 0 6px var(--ca-accGlow)}
.creepyamp-app .ca-led.blink{animation:ca-blk 1s steps(2,start) infinite}
@keyframes ca-blk{50%{opacity:.25}}

/* ---- top deck ---- */
.creepyamp-app #ca-deckTop{min-height:clamp(92px,15vh,170px)}
.creepyamp-app .ca-zl{display:flex;flex-direction:column;gap:6px;flex:none;min-width:0}
.creepyamp-app .ca-brand{display:flex;align-items:baseline;gap:10px;white-space:nowrap;flex-direction:row}
.creepyamp-app .ca-brand b{font-style:italic;font-weight:700;font-size:calc(15px * var(--text-scale));letter-spacing:.08em;
  color:#f2f2f6;font-family:inherit;text-shadow:0 1px 0 #000}
.creepyamp-app .ca-brand b .o{color:var(--ca-acc);text-shadow:0 0 8px var(--ca-accGlow)}
.creepyamp-app .ca-brand .ver{font-size:calc(8px * var(--text-scale));letter-spacing:.18em;color:var(--ca-label)}
.creepyamp-app .ca-knobrow{display:flex;align-items:center;gap:clamp(10px,1.4vw,18px)}
.creepyamp-app .ca-knobcol{display:flex;flex-direction:column;gap:5px}
.creepyamp-app .ca-kpair{display:flex;align-items:center;gap:7px}
.creepyamp-app .ca-kpair label{font-family:var(--ca-f-dot);font-size:calc(8px * var(--text-scale));letter-spacing:.14em;color:var(--ca-label)}
.creepyamp-app .ca-knob{position:relative;border-radius:50%;cursor:grab;touch-action:none;flex:none;
  background:radial-gradient(circle at 38% 30%,#3f3f46,#222226 58%,#101013 100%);
  box-shadow:0 5px 12px rgba(0,0,0,.65),inset 0 1px 1px rgba(255,255,255,.15),
    inset 0 -8px 14px rgba(0,0,0,.6),0 0 0 1px #000;}
.creepyamp-app .ca-knob:active{cursor:grabbing}
.creepyamp-app .ca-knob .ca-cap{position:absolute;inset:9%;border-radius:50%;display:block;transform:rotate(var(--rot,0deg));
  background:radial-gradient(circle at 35% 28%,#48484f,#26262b 55%,#131316 100%);
  box-shadow:0 4px 10px rgba(0,0,0,.7),inset 0 1px 1px rgba(255,255,255,.18),inset 0 -8px 14px rgba(0,0,0,.55);}
.creepyamp-app .ca-knob .ca-cap i{position:absolute;left:50%;top:6%;width:8%;height:32%;margin-left:-4%;border-radius:3px;
  background:linear-gradient(180deg,#fff,var(--ca-acc) 45%,var(--ca-acc2));box-shadow:0 0 8px var(--ca-accGlow);}
.creepyamp-app .ca-knob.big{width:clamp(54px,10vh,92px);height:clamp(54px,10vh,92px)}
.creepyamp-app .ca-knob.mini{width:clamp(28px,4.6vh,36px);height:clamp(28px,4.6vh,36px)}
.creepyamp-app .ca-knob .ring{position:absolute;inset:-6px;border-radius:50%;pointer-events:none;
  background:conic-gradient(from 225deg,var(--ca-acc2) 0deg,var(--ca-acc) calc(var(--val,.45)*270deg),
    var(--ca-accBg) calc(var(--val,.45)*270deg),var(--ca-accBg) 270deg,transparent 270deg 360deg);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 5px),#000 calc(100% - 4px));
          mask:radial-gradient(farthest-side,transparent calc(100% - 5px),#000 calc(100% - 4px));
  filter:drop-shadow(0 0 6px var(--ca-accGlow));}

.creepyamp-app .ca-zc{flex:1 1 200px;min-width:0;display:flex;flex-direction:column;gap:6px}
.creepyamp-app .ca-slot{position:relative;width:min(520px,90%);margin:0 auto;flex:none;height:13px;border:0;border-radius:7px;cursor:pointer;
  background:linear-gradient(180deg,#050506,#0e0e10);display:flex;align-items:center;justify-content:center;
  box-shadow:inset 0 2px 5px #000,inset 0 -1px 0 rgba(255,255,255,.05),0 1px 0 rgba(255,255,255,.06);}
.creepyamp-app .ca-slot i{position:absolute;left:6%;right:6%;top:50%;height:2px;margin-top:-1px;border-radius:1px;background:#000;
  box-shadow:0 1px 0 rgba(255,255,255,.04)}
.creepyamp-app .ca-slot span{position:relative;z-index:2;font-family:var(--ca-f-dot);font-size:calc(7px * var(--text-scale));letter-spacing:.45em;color:#3f3f46}
.creepyamp-app .ca-slot:hover span{color:var(--ca-acc)}
.creepyamp-app.dragging .ca-slot span{color:var(--ca-acc);text-shadow:0 0 6px var(--ca-accGlow)}

.creepyamp-app .ca-vfd{flex:1;min-height:0;display:flex;flex-direction:column;justify-content:space-evenly;gap:4px;
  background:linear-gradient(180deg,var(--ca-vfdBg1),var(--ca-vfdBg2));border-radius:9px;padding:6px 12px;position:relative;overflow:hidden;
  box-shadow:inset 0 0 0 1px #000,inset 0 3px 10px rgba(0,0,0,.9),inset 0 0 36px var(--ca-vfdTint),0 1px 0 rgba(255,255,255,.06);}
.creepyamp-app .ca-vfd::after{content:'';position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background:linear-gradient(115deg,rgba(255,255,255,.06),rgba(255,255,255,0) 28%),
    repeating-linear-gradient(0deg,rgba(0,0,0,.20) 0 1px,rgba(0,0,0,0) 1px 3px);}
.creepyamp-app .ca-vrow1{display:flex;align-items:flex-end;gap:clamp(8px,2vw,26px);min-width:0}
.creepyamp-app .ca-vrow2{display:flex;align-items:center;gap:12px;min-width:0}
.creepyamp-app .ca-vcell{display:flex;flex-direction:column;align-items:flex-start;gap:3px;min-width:0}
.creepyamp-app .ca-vcell.grow{flex:1}
.creepyamp-app .ca-vlbl{font-family:var(--ca-f-dot);font-size:calc(8px * var(--text-scale));letter-spacing:.28em;color:var(--ca-acc);opacity:.55}
.creepyamp-app .ca-dig{font-family:var(--ca-f-dig);font-style:italic;color:var(--ca-acc);line-height:1;position:relative;z-index:0;white-space:nowrap;
  text-shadow:0 0 5px var(--ca-digSh1),0 0 18px var(--ca-digSh2);}
.creepyamp-app .ca-dig.dot{font-family:var(--ca-f-dot);font-style:normal;letter-spacing:.1em}
.creepyamp-app .ca-dig.big{font-size:clamp(20px,4.6vh,42px)}
.creepyamp-app .ca-dig.mid{font-size:clamp(13px,2.6vh,22px)}
.creepyamp-app .ca-dig.sm{font-size:clamp(10px,1.8vh,14px);letter-spacing:.12em}
.creepyamp-app .ca-dig.big::before{content:attr(data-g);position:absolute;left:0;top:0;z-index:-1;opacity:.10;color:var(--ca-acc2);text-shadow:none}
.creepyamp-app #ca-dState.blink{animation:ca-blk 1s steps(2,start) infinite}
.creepyamp-app #ca-dState.dim{opacity:.55}

.creepyamp-app .ca-marquee{flex:1;min-width:0;overflow:hidden;white-space:nowrap;font-family:var(--ca-f-dot);font-weight:700;
  font-size:clamp(10px,1.8vh,15px);color:var(--ca-acc);letter-spacing:.06em;
  text-shadow:0 0 6px var(--ca-accGlow),0 0 16px var(--ca-digSh2);}
.creepyamp-app #ca-mq{display:inline-block;white-space:nowrap}
.creepyamp-app .ca-marquee.scroll #ca-mq{animation:ca-mqm var(--mqd,14s) linear infinite}
@keyframes ca-mqm{to{transform:translateX(-50%)}}

.creepyamp-app .ca-seek{flex:0 1 120px;min-width:52px;height:10px;border-radius:5px;position:relative;cursor:pointer;
  touch-action:none;overflow:hidden;background:var(--ca-accBg);
  box-shadow:inset 0 1px 3px rgba(0,0,0,.9),0 1px 0 rgba(255,255,255,.05);}
.creepyamp-app .ca-seek::after{content:'';position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(90deg,rgba(0,0,0,.55) 0 1px,transparent 1px 9px);}
.creepyamp-app #ca-seekFill{position:absolute;left:0;top:0;bottom:0;width:0;
  background:linear-gradient(90deg,var(--ca-acc2),var(--ca-acc));box-shadow:0 0 8px var(--ca-accGlow);}
.creepyamp-app #ca-seekFill::after{content:'';position:absolute;right:-2px;top:50%;width:12px;height:12px;margin-top:-6px;border-radius:50%;
  background:radial-gradient(circle at 35% 30%,#fff,var(--ca-acc) 55%,var(--ca-acc2));box-shadow:0 0 8px var(--ca-accGlow);}

.creepyamp-app .ca-zr{flex:none;display:flex;flex-direction:column;gap:clamp(5px,.9vh,8px);justify-content:center;min-width:0}
.creepyamp-app .ca-zrow{display:flex;gap:clamp(4px,.5vw,8px);min-width:0}
.creepyamp-app .ca-zrow .ca-btn.t{width:clamp(30px,4.8vh,42px);height:clamp(30px,4.8vh,42px);flex:none}
.creepyamp-app .ca-zrow.ctrl{height:clamp(30px,4.8vh,42px)}
.creepyamp-app .ca-zrow.ctrl .ca-btn.mini{height:100%;flex:none}

/* ---- screen ---- */
.creepyamp-app .ca-screen{position:relative;flex:1 1 0;min-width:90px;height:100%;border-radius:14px;overflow:hidden;background:#050506;display:flex;
  box-shadow:0 0 0 1px #000,inset 0 0 0 2px rgba(255,255,255,.03),0 10px 30px rgba(0,0,0,.65);}
.creepyamp-app .ca-screen::after{content:'';position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  box-shadow:inset 0 0 70px rgba(0,0,0,.55);z-index:4;}
.creepyamp-app .ca-screen video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#000;display:none;z-index:1}
.creepyamp-app .ca-screen video.vidOn{display:block}
.creepyamp-app #ca-viz{position:absolute;inset:0;width:100%;height:100%;display:none;z-index:2;cursor:pointer}
.creepyamp-app #ca-viz.on{display:block}
.creepyamp-app #ca-vizName{position:absolute;left:14px;bottom:12px;z-index:5;display:none;pointer-events:none;max-width:78%;
  font-family:var(--ca-f-dot);font-weight:700;font-size:calc(11px * var(--text-scale));letter-spacing:.14em;color:var(--ca-acc);
  text-shadow:0 0 8px rgba(0,0,0,.95),0 1px 2px #000,0 0 16px var(--ca-accGlow);
  opacity:0;transition:opacity .6s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.creepyamp-app .ca-screen.mode-vis #ca-vizName{display:block}
.creepyamp-app .ca-screen.stby #ca-vizName,.creepyamp-app .ca-screen.empty #ca-vizName{display:none}
.creepyamp-app #ca-vizName.show{opacity:1}
.creepyamp-app #ca-milkMsg{position:absolute;inset:0;display:none;align-items:center;justify-content:center;z-index:3;
  flex-direction:column;gap:10px;text-align:center;cursor:pointer}
.creepyamp-app #ca-milkMsg.on{display:flex}
.creepyamp-app #ca-milkMsg b{font-family:var(--ca-f-dot);font-weight:900;letter-spacing:.4em;color:var(--ca-acc);opacity:.6;
  font-size:clamp(12px,2vw,20px);text-shadow:0 0 12px var(--ca-accGlow)}
.creepyamp-app #ca-milkMsg small{color:#8a8a92;font-size:calc(11px * var(--text-scale));letter-spacing:.08em;line-height:1.7;max-width:72%}
.creepyamp-app #ca-milkMsg .why{font-family:var(--ca-f-dot);font-size:calc(10px * var(--text-scale));color:var(--ca-acc);opacity:.6;letter-spacing:.1em;max-width:80%}
.creepyamp-app #ca-standby{position:absolute;inset:0;display:none;align-items:center;justify-content:center;z-index:3;background:#050505;
  color:var(--ca-acc);opacity:.9;font-family:var(--ca-f-dot);font-weight:900;letter-spacing:.45em;
  font-size:clamp(14px,3vw,28px);text-shadow:0 0 14px var(--ca-accGlow);}
.creepyamp-app .ca-screen.stby #ca-standby{display:flex}
.creepyamp-app .ca-noSignal{position:absolute;inset:0;display:none;align-items:center;justify-content:center;z-index:2}
.creepyamp-app .ca-screen.empty .ca-noSignal{display:flex}
.creepyamp-app .ca-nsin{text-align:center;border:1px dashed var(--ca-accGlow);border-radius:12px;
  padding:clamp(12px,4vh,34px) clamp(14px,4vw,50px);background:rgba(8,8,10,.35)}
.creepyamp-app .ca-nsin b{display:block;font-family:var(--ca-f-dot);font-weight:900;letter-spacing:.35em;
  color:var(--ca-acc);opacity:.9;text-shadow:0 0 12px var(--ca-accGlow);font-size:clamp(13px,2.6vw,26px)}
.creepyamp-app .ca-nsin small{display:block;margin-top:8px;font-size:calc(11px * var(--text-scale));letter-spacing:.12em;color:#9a9aa2;line-height:1.8}

/* ---- playlist bay ---- */
.creepyamp-app #ca-playlist{flex:0 0 auto;width:0;min-width:0;height:100%;flex-direction:column;align-items:stretch;gap:0;
  padding:0;opacity:0;transform:translateX(24px);
  transition:width .42s cubic-bezier(.25,.85,.25,1),opacity .3s,transform .42s cubic-bezier(.25,.85,.25,1);}
.creepyamp-app #ca-playlist.open{width:clamp(280px,25vw,380px);opacity:1;transform:none}
.creepyamp-app #ca-playlist .ca-pin{width:clamp(280px,25vw,380px);min-width:240px;height:100%;display:flex;flex-direction:column}
.creepyamp-app #ca-playlist header{flex:none;display:flex;align-items:center;gap:10px;padding:12px 14px 10px;
  border-bottom:1px solid var(--ca-accGlow)}
.creepyamp-app .ca-ptitle{font-family:var(--ca-f-dot);font-weight:900;letter-spacing:.2em;color:var(--ca-acc);
  text-shadow:0 0 8px var(--ca-accGlow);font-size:calc(13px * var(--text-scale))}
.creepyamp-app .ca-pcount{flex:1;font-family:var(--ca-f-dot);font-size:calc(10px * var(--text-scale));color:#8a8a92;letter-spacing:.15em}
.creepyamp-app .ca-pbar{flex:none;padding:9px 12px;border-bottom:1px dashed var(--ca-accGlow)}
.creepyamp-app #ca-pFilter{width:100%;background:#0c0c0e;border:1px solid rgba(255,255,255,.14);border-radius:7px;
  color:#e8e8ee;font-family:var(--ca-f-dot);font-size:calc(10px * var(--text-scale));letter-spacing:.08em;padding:7px 10px;outline:none}
.creepyamp-app #ca-pFilter:focus{border-color:var(--ca-accGlow)}
.creepyamp-app #ca-pFilter::placeholder{color:#6b6b73;letter-spacing:.15em}
.creepyamp-app .ca-plistWrap{flex:1 1 auto;min-height:0;position:relative}
.creepyamp-app #ca-plist{height:100%;overflow-y:auto;margin:0;padding:0;list-style:none}
.creepyamp-app #ca-plist::-webkit-scrollbar{width:8px}
.creepyamp-app #ca-plist::-webkit-scrollbar-thumb{background:var(--ca-accGlow);border-radius:4px}
.creepyamp-app #ca-playlist li{display:grid;grid-template-columns:28px 1fr auto 20px;gap:8px;align-items:center;
  padding:9px 14px;border-top:2px solid transparent;border-bottom:1px dashed var(--ca-accBg);cursor:pointer;touch-action:pan-y}
.creepyamp-app #ca-playlist li[draggable="true"]{cursor:grab}
.creepyamp-app #ca-playlist li:hover{background:rgba(255,255,255,.03)}
.creepyamp-app #ca-playlist li .pi{font-family:var(--ca-f-dot);color:var(--ca-acc);opacity:.55;font-size:calc(11px * var(--text-scale))}
.creepyamp-app #ca-playlist li .pn{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:calc(12.5px * var(--text-scale));color:#d9d9df}
.creepyamp-app #ca-playlist li .pd{font-family:var(--ca-f-dot);font-size:calc(10px * var(--text-scale));color:#8a8a92;white-space:nowrap}
.creepyamp-app #ca-playlist li .rm{opacity:0;color:#9a9aa2;border:0;background:none;cursor:pointer;font-size:calc(12px * var(--text-scale));padding:2px}
.creepyamp-app #ca-playlist li:hover .rm{opacity:1}
.creepyamp-app #ca-playlist li.on{background:linear-gradient(90deg,var(--ca-accBg),transparent)}
.creepyamp-app #ca-playlist li.on .pn{color:var(--ca-acc);text-shadow:0 0 8px var(--ca-accGlow)}
.creepyamp-app #ca-playlist li.on .pi{color:var(--ca-acc);opacity:1}
.creepyamp-app #ca-playlist li.dragging{opacity:.35}
.creepyamp-app #ca-playlist li.dropBefore{border-top-color:var(--ca-acc)}
.creepyamp-app #ca-playlist li.dropAfter{border-bottom:2px solid var(--ca-acc)}
.creepyamp-app #ca-playlist .pempty,.creepyamp-app #ca-playlist .pnores{position:absolute;inset:10px 12px;display:flex;align-items:center;justify-content:center;
  text-align:center;border:1px dashed var(--ca-accGlow);border-radius:10px;
  font-family:var(--ca-f-dot);font-size:calc(10px * var(--text-scale));letter-spacing:.12em;line-height:2;color:#b6b6c2;pointer-events:none;
  background:rgba(8,8,10,.3)}
.creepyamp-app #ca-playlist.hasItems .pempty{display:none}
.creepyamp-app #ca-playlist:not(.noRes) .pnores{display:none}
.creepyamp-app #ca-playlist footer{flex:none;padding:9px 14px;font-family:var(--ca-f-dot);font-size:calc(9px * var(--text-scale));letter-spacing:.08em;
  color:#d6d6dd;border-top:1px solid var(--ca-accGlow);line-height:1.9;text-shadow:0 1px 2px rgba(0,0,0,.8)}

/* ---- bottom deck ---- */
.creepyamp-app #ca-deckBot{flex-direction:column;align-items:stretch;gap:clamp(5px,.9vh,9px);
  min-height:clamp(150px,20.5vh,218px)}
.creepyamp-app #ca-seekBigRow{flex:none;display:flex;align-items:center;gap:10px;padding:0 2px;min-width:0}
.creepyamp-app .ca-stTime{font-family:var(--ca-f-dot);font-weight:700;font-size:calc(10px * var(--text-scale));color:var(--ca-acc);opacity:.75;
  min-width:40px;text-align:center;letter-spacing:.08em;flex:none;font-variant-numeric:tabular-nums}
.creepyamp-app #ca-seekBig{flex:1;min-width:60px;height:16px;border-radius:8px;position:relative;cursor:pointer;
  touch-action:none;overflow:hidden;background:var(--ca-accBg);
  box-shadow:inset 0 1px 3px rgba(0,0,0,.9),0 1px 0 rgba(255,255,255,.05);}
.creepyamp-app #ca-seekBig::after{content:'';position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(90deg,rgba(0,0,0,.45) 0 1px,transparent 1px 14px);}
.creepyamp-app #ca-seekBigFill{position:absolute;left:0;top:0;bottom:0;width:0;
  background:linear-gradient(90deg,var(--ca-acc2),var(--ca-acc));box-shadow:0 0 10px var(--ca-accGlow);}
.creepyamp-app #ca-seekBigFill::after{content:'';position:absolute;right:-1px;top:50%;width:14px;height:14px;margin-top:-7px;
  border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff,var(--ca-acc) 55%,var(--ca-acc2));
  box-shadow:0 0 6px var(--ca-accGlow);}
.creepyamp-app .ca-botRow{flex:1;min-height:0;display:flex;align-items:center;gap:clamp(10px,1.6vw,24px);min-width:0}

.creepyamp-app .ca-bm{flex:none;display:flex;flex-direction:column;gap:clamp(6px,1vh,9px);align-items:flex-start}
.creepyamp-app .ca-mrow{display:flex;gap:10px}

.creepyamp-app .ca-be{flex:none;display:flex;gap:clamp(3px,.5vw,8px);align-items:flex-end;min-width:0}
.creepyamp-app .ca-fader{display:flex;flex-direction:column;align-items:center;gap:5px}
.creepyamp-app .ca-ftrack{position:relative;width:26px;height:clamp(60px,9.5vh,104px);touch-action:none}
.creepyamp-app .ca-ftrack::before{content:'';position:absolute;left:50%;top:0;bottom:0;width:6px;transform:translateX(-50%);
  border-radius:3px;background:#08080a;box-shadow:inset 0 2px 5px #000,0 1px 0 rgba(255,255,255,.05);}
.creepyamp-app .ca-ftrack::after{content:'';position:absolute;left:3px;top:4%;bottom:4%;width:6px;
  background:repeating-linear-gradient(180deg,rgba(255,255,255,.13) 0 1px,transparent 1px 10px);}
.creepyamp-app .ca-fader input{position:absolute;left:50%;top:50%;width:clamp(60px,9.5vh,104px);height:24px;margin:0;
  transform:translate(-50%,-50%) rotate(-90deg);-webkit-appearance:none;appearance:none;background:transparent;cursor:pointer;}
.creepyamp-app .ca-fader input::-webkit-slider-runnable-track{height:4px;border-radius:2px;
  background:linear-gradient(90deg,#050506,#232327 50%,#050506);}
.creepyamp-app .ca-fader input::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:22px;border-radius:3px;border:0;margin-top:-9px;
  background-image:linear-gradient(180deg,var(--ca-acc),var(--ca-acc)),linear-gradient(180deg,#4b4b54,#232327 45%,#141417);
  background-position:50% 50%,0 0;background-size:8px 3px,100% 100%;background-repeat:no-repeat;
  box-shadow:0 2px 4px rgba(0,0,0,.7),inset 0 1px 0 rgba(255,255,255,.25),inset 0 -2px 3px rgba(0,0,0,.6),0 0 0 1px #000;}
.creepyamp-app .ca-fader input::-moz-range-track{height:4px;border-radius:2px;background:linear-gradient(90deg,#050506,#232327 50%,#050506)}
.creepyamp-app .ca-fader input::-moz-range-thumb{width:14px;height:22px;border-radius:3px;border:0;
  background-image:linear-gradient(180deg,var(--ca-acc),var(--ca-acc)),linear-gradient(180deg,#4b4b54,#232327 45%,#141417);
  background-position:50% 50%,0 0;background-size:8px 3px,100% 100%;background-repeat:no-repeat;
  box-shadow:0 2px 4px rgba(0,0,0,.7),inset 0 1px 0 rgba(255,255,255,.25),0 0 0 1px #000;}
.creepyamp-app .ca-fader label{font-family:var(--ca-f-dot);font-size:calc(8px * var(--text-scale));letter-spacing:.1em;color:var(--ca-label)}

.creepyamp-app .ca-bv{flex:1 1 180px;display:flex;align-items:center;gap:12px;min-width:0}
.creepyamp-app .ca-selMini{display:flex;flex-direction:column;align-items:center;gap:3px;flex:none}
.creepyamp-app .ca-selMini label{font-family:var(--ca-f-dot);font-size:calc(8px * var(--text-scale));letter-spacing:.2em;color:#fff;
  text-shadow:0 1px 2px rgba(0,0,0,.9)}
.creepyamp-app .ca-sSel{width:116px;background:#0c0c0e;border:1px solid var(--ca-accGlow);border-radius:6px;color:var(--ca-silver);
  font-family:var(--ca-f-dot);font-size:calc(9px * var(--text-scale));letter-spacing:.03em;padding:6px 5px;cursor:pointer;outline:none;
  box-shadow:inset 0 2px 5px rgba(0,0,0,.8);text-overflow:ellipsis}
.creepyamp-app .ca-sSel option{background:#131316;color:#e8e8ee}
.creepyamp-app #ca-vu{flex:1;height:clamp(64px,9vh,84px);min-width:60px;border-radius:6px;
  background:linear-gradient(180deg,#0b0602,#130a03);
  box-shadow:inset 0 0 0 1px #000,inset 0 3px 10px rgba(0,0,0,.9);}
.creepyamp-app .ca-volread{display:flex;flex-direction:column;align-items:center;gap:3px}

/* ---- help (theme-following popover, like other apps' modals) ---- */
.creepyamp-app #ca-help{position:absolute;inset:0;z-index:80;display:none;align-items:center;justify-content:center;
  background:rgba(4,4,5,.82);backdrop-filter:blur(3px)}
.creepyamp-app #ca-help.open{display:flex}
.creepyamp-app .ca-hcard{position:relative;width:min(680px,92%);max-height:86%;overflow-y:auto;border-radius:14px;
  padding:22px 26px;overflow-x:hidden;
  background:linear-gradient(180deg,#2d2d33 0%,#1e1e22 12%,#17171a 55%,#0f0f12 100%);
  border:1px solid var(--ca-accGlow);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10),inset 0 -1px 0 rgba(0,0,0,.9),
    inset 0 0 0 1px rgba(0,0,0,.55),0 30px 80px rgba(0,0,0,.7);}
.creepyamp-app .ca-hcard::after{content:'';position:absolute;right:12px;top:12px;width:12px;height:12px;border-radius:50%;
  background:linear-gradient(145deg,#3d3d44,#0d0d10 70%);
  box-shadow:inset 0 1px 1px rgba(255,255,255,.18),0 1px 2px #000;}
.creepyamp-app .ca-hcard h3{margin:0 0 4px;font-family:var(--ca-f-dot);font-weight:900;letter-spacing:.25em;
  color:var(--ca-acc);text-shadow:0 0 8px var(--ca-accGlow);font-size:calc(15px * var(--text-scale))}
.creepyamp-app .ca-hcard h4{margin:16px 0 6px;font-family:var(--ca-f-dot);font-size:calc(11px * var(--text-scale));letter-spacing:.2em;color:var(--ca-acc);opacity:.85}
.creepyamp-app .ca-hcard li{font-size:calc(12.5px * var(--text-scale));line-height:1.75;color:#d6d6dd}
.creepyamp-app .ca-hcard b{color:#f2f2f6}
.creepyamp-app .ca-hcard ul{margin:4px 0;padding-left:18px}
.creepyamp-app .ca-hcard kbd{display:inline-block;min-width:16px;text-align:center;padding:1px 6px;border-radius:5px;
  background:#0c0c0e;border:1px solid var(--ca-accGlow);color:var(--ca-acc);
  font-family:var(--ca-f-dot);font-size:calc(10px * var(--text-scale));box-shadow:0 2px 0 rgba(0,0,0,.8)}
.creepyamp-app .ca-hcard .hfoot{margin-top:18px;text-align:right}

/* ---- misc ---- */
.creepyamp-app #ca-dropVeil{position:absolute;inset:0;z-index:60;display:none;align-items:center;justify-content:center;
  background:rgba(4,4,5,.86);pointer-events:none}
.creepyamp-app.dragging #ca-dropVeil{display:flex}
.creepyamp-app .ca-dv{border:2px dashed var(--ca-accGlow);border-radius:14px;padding:clamp(16px,6vw,60px);
  font-family:var(--ca-f-dot);font-weight:900;color:var(--ca-acc);text-shadow:0 0 12px var(--ca-accGlow);
  letter-spacing:.2em;font-size:clamp(12px,2.6vw,24px);text-align:center;}
.creepyamp-app #ca-toast{position:absolute;left:50%;bottom:22px;transform:translate(-50%,10px);z-index:90;
  background:#160b02;border:1px solid var(--ca-accGlow);color:var(--ca-acc);
  font-family:var(--ca-f-dot);font-weight:700;font-size:calc(11px * var(--text-scale));letter-spacing:.12em;padding:8px 16px;border-radius:8px;
  opacity:0;pointer-events:none;transition:.25s;text-shadow:0 0 6px var(--ca-accGlow);max-width:90%;text-align:center;
  white-space:normal;line-height:1.6}
.creepyamp-app #ca-toast.on{opacity:1;transform:translate(-50%,0)}
.creepyamp-app #ca-toast.err{border-color:#ff4633;color:#ff8a7a;text-shadow:0 0 6px rgba(255,70,51,.6)}

/* ---- responsive (container queries keyed off the OS window's own width,
   not the whole page — see header comment).
   The original standalone tool hid .knobcol (FX TIME/3D knobs) and #dRem
   below 1000px, a threshold tuned for ITS OWN layout. Measured empirically
   against OUR actual deckTop layout (forcing both visible and sweeping
   window width): #dRem never overflows at any reachable width (down to the
   620px minW floor) so it no longer needs to hide at all; .ca-knobcol only
   ever overlaps .ca-zc once .ca-zl switches to row layout below 840px (the
   next breakpoint), with zero margin to spare above that — so its hide rule
   is folded into the SAME 840px breakpoint below rather than kept as a
   separate 1000px magic number, which was hiding it ~150px earlier than
   actually necessary and can't drift out of sync from the row-mode switch
   that creates the overlap it exists to prevent. ---- */
@container creepyamp (max-width:840px){
  .creepyamp-app #ca-deckTop{flex-wrap:wrap;row-gap:8px}
  .creepyamp-app .ca-zl{flex-direction:row;align-items:center;gap:14px}
  .creepyamp-app .ca-knobcol{display:none}
  .creepyamp-app .ca-zc{order:3;flex:1 1 100%}
  .creepyamp-app .ca-zr{flex:1 1 auto;justify-content:center}
  .creepyamp-app .ca-zrow.ctrl{justify-content:flex-start}
}
@container creepyamp (max-width:640px){
  .creepyamp-app .ca-botRow{flex-wrap:wrap;row-gap:8px}
  .creepyamp-app .ca-bv{order:3;flex:1 1 100%;justify-content:center}
  .creepyamp-app #ca-vu{height:clamp(58px,7vh,72px)}
  .creepyamp-app .ca-be{justify-content:center;flex:1 1 auto}
  .creepyamp-app #ca-playlist.open{width:min(60%,320px)}
  .creepyamp-app #ca-playlist .ca-pin{width:min(60%,320px)}
}
@container creepyamp (max-width:460px){
  .creepyamp-app #ca-app{gap:7px}
  .creepyamp-app .ca-deck,.creepyamp-app #ca-playlist{padding:7px 9px;gap:10px}
  .creepyamp-app .ca-deck::after{display:none}
  .creepyamp-app .ca-knob.big{width:46px;height:46px}
  .creepyamp-app .ca-zrow{gap:3px}
  .creepyamp-app .ca-zrow .ca-btn.t{width:27px;height:27px}
  .creepyamp-app .ca-btn.mini{padding:0 5px;font-size:calc(8px * var(--text-scale))}
  .creepyamp-app .ca-btn.rnd{width:30px;height:30px}
  .creepyamp-app .ca-btn.rnd.sic .ca-ic{width:16px;height:16px}
  .creepyamp-app .ca-mrow{gap:7px}
  .creepyamp-app .ca-ftrack{width:22px;height:clamp(52px,8vh,84px)}
  .creepyamp-app .ca-fader input{width:clamp(52px,8vh,84px)}
  .creepyamp-app .ca-stTime{min-width:32px;font-size:calc(9px * var(--text-scale))}
  .creepyamp-app #ca-vizName{font-size:calc(10px * var(--text-scale));left:8px;bottom:8px}
  .creepyamp-app .ca-marquee{font-size:calc(10px * var(--text-scale))}
  .creepyamp-app .ca-sSel{width:100px;font-size:calc(8px * var(--text-scale))}
  .creepyamp-app .ca-brand .os-ver{display:none}
}
/* ==== SHEETLY BEGIN ==== */
/* ═══════════════════════════════════════════════════════════════════
   SHEETLY, tableur (porté depuis une page autonome). Tout est scopé sous
   .sheetly-app ; les ids sont préfixés « sh- » (comme dans le moteur et le
   HTML de js/apps/sheetly.js). Le thème « WebOS » (par défaut) suit le
   thème clair/sombre et la couleur d'accent du système ; les 11 autres
   palettes de l'application restent disponibles via le menu Thème.
   ═══════════════════════════════════════════════════════════════════ */
.sheetly-app{
  --sh-font:"Segoe UI Variable Text","Segoe UI",system-ui,Arial,sans-serif;--sh-mono:"Cascadia Mono",Consolas,monospace;
  position:relative;display:flex;flex-direction:column;height:100%;overflow:hidden;container:sheetly/size;
  background:var(--paper);color:var(--txt);font:calc(13px * var(--text-scale)) var(--sh-font);
}
/* thème WebOS : clair par défaut, sombre quand le système l'est */
.sheetly-app,.sheetly-app[data-sh-theme="webos"]{
  --ink:var(--solid2);--inkt:var(--text);--inkm:var(--text2);--inkh:var(--hover);--inkb:var(--field);--inkbd:var(--stroke);--inka:var(--accent);
  --paper:color-mix(in srgb,var(--accent) 3%,#fff);--head:color-mix(in srgb,var(--accent) 7%,#f1f1f1);
  --line:color-mix(in srgb,var(--accent) 8%,#e3e3e3);--hair:color-mix(in srgb,var(--accent) 10%,#cfcfcf);
  --ui:var(--solid);--uib:var(--stroke);
  --acc:var(--accent);--accd:color-mix(in srgb,var(--accent) 78%,#000);--onacc:#fff;
  --soft:color-mix(in srgb,var(--accent) 15%,transparent);--seltint:color-mix(in srgb,var(--accent) 10%,transparent);--selbd:color-mix(in srgb,var(--accent) 80%,transparent);
  --err:#c42b1c;--txt:#1b1b1b;--txt2:#6b6b6b;--btn:#3a3a3a;--hov:var(--hover);--panel:#fff;
  --hdon:color-mix(in srgb,var(--accent) 18%,#fff);--hit:rgba(255,200,0,.34);--sep:#ebebeb;--bdc:#4a4a4a;
  --shadow:rgba(0,0,0,.28);--veil:rgba(0,0,0,.4);--ok:#107c10;--note:#7a7a7a;
}
html[data-theme=dark] .sheetly-app:not([data-sh-theme]),html[data-theme=dark] .sheetly-app[data-sh-theme="webos"]{
  --paper:color-mix(in srgb,var(--accent) 6%,#1f1f1f);--head:color-mix(in srgb,var(--accent) 10%,#2b2b2b);
  --line:color-mix(in srgb,var(--accent) 10%,#333);--hair:color-mix(in srgb,var(--accent) 14%,#464646);
  --accd:color-mix(in srgb,var(--accent) 62%,#fff);
  --err:#ff99a4;--txt:#f3f3f3;--txt2:#a6a6a6;--btn:#d6d6d6;--panel:var(--solid2);
  --hdon:color-mix(in srgb,var(--accent) 30%,#2b2b2b);--hit:rgba(255,200,60,.28);--sep:#393939;--bdc:#c8c8c8;
  --shadow:rgba(0,0,0,.55);--veil:rgba(0,0,0,.6);--ok:#6ccb5f;--note:#9a9a9a;
}
/* palettes propres à l'application (menu Thème) */
.sheetly-app[data-sh-theme]:not([data-sh-theme="webos"]){color-scheme:light}
.sheetly-app[data-sh-dark="1"][data-sh-theme]:not([data-sh-theme="webos"]){color-scheme:dark}
.sheetly-app[data-sh-theme="registre"]{--ink:#171f1a;--inkt:#ece7d8;--inkm:#9aa596;--inkh:#22302a;--inkb:#22302a;--inkbd:#3a4a40;--inka:#e0a35c;
  --paper:#fffdf8;--head:#f3f1e7;--line:#e3ded0;--hair:#d7d2c2;--ui:#f6f4ec;--uib:#cfc9b8;
  --acc:#b4641e;--accd:#8a4a12;--onacc:#fff;--soft:rgba(180,100,30,.13);--seltint:rgba(180,100,30,.10);--selbd:rgba(180,100,30,.75);
  --err:#b3372a;--txt:#22271f;--txt2:#7c7767;--btn:#3c4237;--hov:#e9e5d6;--panel:#fff;--hdon:#f0e4d2;
  --hit:rgba(214,178,58,.34);--sep:#eee9db;--bdc:#55524a;--shadow:rgba(0,0,0,.2);--veil:rgba(18,24,20,.45);--ok:#2f8a52;--note:#8b8778;}
.sheetly-app[data-sh-theme="ocean"]{--ink:#12263a;--inkt:#e6eef7;--inkm:#8fa6bd;--inkh:#1d3650;--inkb:#1d3650;--inkbd:#34506c;--inka:#7cc4ff;
  --paper:#fbfdff;--head:#eaf1f8;--line:#dde6ef;--hair:#c9d7e5;--ui:#f1f6fb;--uib:#c3d2e2;
  --acc:#1f6fd1;--accd:#154f99;--soft:rgba(31,111,209,.13);--seltint:rgba(31,111,209,.09);--selbd:rgba(31,111,209,.75);
  --err:#c0392b;--txt:#1c2733;--txt2:#6b7c8f;--btn:#33475c;--hov:#e0eaf4;--hdon:#d6e6f8;--sep:#e6edf5;--bdc:#3d4f63;--ok:#2b8a57;--note:#7d8da0}
.sheetly-app[data-sh-theme="foret"]{--ink:#1b2a21;--inkt:#e8efe4;--inkm:#9db3a2;--inkh:#27402f;--inkb:#27402f;--inkbd:#3f5f49;--inka:#a7d98b;
  --paper:#fcfdf9;--head:#eef2e8;--line:#e0e8d8;--hair:#ccd8c2;--ui:#f3f6ee;--uib:#c6d3bb;
  --acc:#2f7d4f;--accd:#1f5c37;--soft:rgba(47,125,79,.13);--seltint:rgba(47,125,79,.10);--selbd:rgba(47,125,79,.75);
  --txt:#1f2a22;--txt2:#6c7d70;--btn:#36463a;--hov:#e3ecdb;--hdon:#dcebd3;--sep:#e8eee1;--bdc:#46544a;--ok:#2f7d4f;--note:#7a8a7e}
.sheetly-app[data-sh-theme="parchemin"]{--ink:#3a2c1f;--inkt:#f1e4cf;--inkm:#b9a285;--inkh:#4b3a29;--inkb:#4b3a29;--inkbd:#6a5339;--inka:#f0b866;
  --paper:#fbf3e2;--head:#f0e3c8;--line:#e8dcc0;--hair:#d6c6a2;--ui:#f4e9d2;--uib:#d3c19b;
  --acc:#a4501c;--accd:#7d3a10;--soft:rgba(164,80,28,.14);--seltint:rgba(164,80,28,.11);--selbd:rgba(164,80,28,.78);
  --err:#a8321f;--txt:#3a2e20;--txt2:#8a7656;--btn:#55432c;--hov:#ead9b8;--panel:#fffaf0;--hdon:#ecd5a8;--hit:rgba(224,160,40,.38);--sep:#efe3c8;--bdc:#5b4a32;--ok:#4d7a34;--note:#9a8760}
.sheetly-app[data-sh-theme="lavande"]{--ink:#2a2140;--inkt:#ece6f7;--inkm:#a99dc4;--inkh:#3a2f58;--inkb:#3a2f58;--inkbd:#51447a;--inka:#c4a8ff;
  --paper:#fdfbff;--head:#f1edf8;--line:#e6e0f0;--hair:#d3cae4;--ui:#f6f3fb;--uib:#d0c6e3;
  --acc:#7c4dcc;--accd:#5a30a3;--soft:rgba(124,77,204,.13);--seltint:rgba(124,77,204,.09);--selbd:rgba(124,77,204,.75);
  --txt:#26203a;--txt2:#7a7092;--btn:#43395e;--hov:#ebe5f6;--hdon:#e3d8f5;--sep:#ece7f4;--bdc:#4b4266;--ok:#35875a;--note:#8a80a2}
.sheetly-app[data-sh-theme="solclair"]{--ink:#073642;--inkt:#eee8d5;--inkm:#93a1a1;--inkh:#0d4654;--inkb:#0d4654;--inkbd:#1e5a68;--inka:#b58900;
  --paper:#fdf6e3;--head:#eee8d5;--line:#e9e1c9;--hair:#d9d1b8;--ui:#f5eed9;--uib:#d6cdb0;
  --acc:#268bd2;--accd:#1a6aa3;--soft:rgba(38,139,210,.14);--seltint:rgba(38,139,210,.10);--selbd:rgba(38,139,210,.78);
  --err:#dc322f;--txt:#3b4b50;--txt2:#6a7b7b;--btn:#586e75;--hov:#e7dfc6;--panel:#fffbee;--hdon:#d8e6ec;--hit:rgba(181,137,0,.3);--sep:#ece4cc;--bdc:#586e75;--ok:#6b7d00;--note:#76878a}
.sheetly-app[data-sh-theme="nuit"]{--ink:#0f141c;--inkt:#d6deea;--inkm:#7f8ca0;--inkh:#1a2230;--inkb:#1a2230;--inkbd:#2b374a;--inka:#6cb0ff;
  --paper:#161c26;--head:#1d2531;--line:#262f3d;--hair:#303b4c;--ui:#1a212c;--uib:#2c3748;
  --acc:#5aa2ff;--accd:#8cc0ff;--onacc:#08101c;--soft:rgba(90,162,255,.18);--seltint:rgba(90,162,255,.14);--selbd:rgba(90,162,255,.85);
  --err:#ff7b6b;--txt:#d9e1ee;--txt2:#8393a8;--btn:#b5c2d6;--hov:#263043;--panel:#1d2531;--hdon:#23364f;--hit:rgba(255,200,60,.28);--sep:#2a3445;--bdc:#9fb0c8;--shadow:rgba(0,0,0,.55);--veil:rgba(0,0,0,.62);--ok:#5fcf8b;--note:#7d8da3}
.sheetly-app[data-sh-theme="charbon"]{--ink:#000;--inkt:#e6e6e6;--inkm:#8a8a8a;--inkh:#1c1c1c;--inkb:#161616;--inkbd:#2e2e2e;--inka:#8ee6a3;
  --paper:#121212;--head:#1b1b1b;--line:#262626;--hair:#343434;--ui:#181818;--uib:#2d2d2d;
  --acc:#3ecf6e;--accd:#6ee59a;--onacc:#04140a;--soft:rgba(62,207,110,.17);--seltint:rgba(62,207,110,.13);--selbd:rgba(62,207,110,.85);
  --err:#ff7a70;--txt:#e4e4e4;--txt2:#8c8c8c;--btn:#c4c4c4;--hov:#272727;--panel:#1c1c1c;--hdon:#1f3a29;--hit:rgba(255,210,70,.28);--sep:#2a2a2a;--bdc:#b0b0b0;--shadow:rgba(0,0,0,.65);--veil:rgba(0,0,0,.68);--ok:#4fdc84;--note:#808080}
.sheetly-app[data-sh-theme="nord"]{--ink:#242933;--inkt:#d8dee9;--inkm:#7b88a1;--inkh:#2e3440;--inkb:#2e3440;--inkbd:#434c5e;--inka:#88c0d0;
  --paper:#2e3440;--head:#353c4a;--line:#3b4252;--hair:#434c5e;--ui:#313845;--uib:#434c5e;
  --acc:#88c0d0;--accd:#8fbcbb;--onacc:#2e3440;--soft:rgba(136,192,208,.18);--seltint:rgba(136,192,208,.14);--selbd:rgba(136,192,208,.85);
  --err:#d98790;--txt:#e5e9f0;--txt2:#8f9bb3;--btn:#d8dee9;--hov:#3b4252;--panel:#363d4b;--hdon:#40596a;--hit:rgba(235,203,139,.3);--sep:#3b4252;--bdc:#c0c8d8;--shadow:rgba(0,0,0,.5);--veil:rgba(20,24,32,.62);--ok:#a3be8c;--note:#8993a8}
.sheetly-app[data-sh-theme="crepuscule"]{--ink:#150f22;--inkt:#e8def8;--inkm:#9a8bb8;--inkh:#241a38;--inkb:#241a38;--inkbd:#3a2c58;--inka:#d3b6ff;
  --paper:#1e1a2e;--head:#272240;--line:#2e2848;--hair:#3a3358;--ui:#231f38;--uib:#352e54;
  --acc:#b388ff;--accd:#cfb2ff;--onacc:#14091f;--soft:rgba(179,136,255,.19);--seltint:rgba(179,136,255,.15);--selbd:rgba(179,136,255,.88);
  --err:#ff8a9a;--txt:#e6e0f5;--txt2:#9188ad;--btn:#c9bfe3;--hov:#302a4c;--panel:#272240;--hdon:#3a2f66;--hit:rgba(255,200,90,.28);--sep:#2f2950;--bdc:#b7aad6;--shadow:rgba(0,0,0,.55);--veil:rgba(10,6,20,.65);--ok:#7bdca0;--note:#8479a3}
.sheetly-app[data-sh-theme="solsombre"]{--ink:#001f27;--inkt:#93a1a1;--inkm:#657b83;--inkh:#073642;--inkb:#073642;--inkbd:#12505c;--inka:#b58900;
  --paper:#002b36;--head:#073642;--line:#0b3d4a;--hair:#14505e;--ui:#04323d;--uib:#12505c;
  --acc:#2aa198;--accd:#4cc7bd;--onacc:#002b36;--soft:rgba(42,161,152,.2);--seltint:rgba(42,161,152,.16);--selbd:rgba(42,161,152,.9);
  --err:#f05a57;--txt:#a9b8b8;--txt2:#70898f;--btn:#93a1a1;--hov:#0b4150;--panel:#073642;--hdon:#0f4c5c;--hit:rgba(181,137,0,.4);--sep:#0e4452;--bdc:#93a1a1;--shadow:rgba(0,0,0,.5);--veil:rgba(0,16,20,.65);--ok:#9ab400;--note:#6b8288}
/* reset */
:where(.sheetly-app) *{box-sizing:border-box;margin:0;padding:0}
.sheetly-app button{font-family:inherit;color:inherit}
.sheetly-app button:focus-visible, .sheetly-app select:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.sheetly-app #sh-top{background:var(--ink);color:var(--inkt);height:38px;display:flex;align-items:center;gap:12px;padding:0 12px;flex:none}
.sheetly-app #sh-brand{font-weight:700;display:flex;gap:8px;align-items:center}
.sheetly-app #sh-brand small{font-weight:400;color:var(--inkm);font-size:calc(10px * var(--text-scale));letter-spacing:1px;text-transform:uppercase}
.sheetly-app #sh-fname{background:var(--inkb);border:1px solid var(--inkbd);color:var(--inkt);border-radius:5px;padding:4px 9px;font:inherit;font-size:calc(12px * var(--text-scale));width:180px;outline:none}
.sheetly-app #sh-fname:focus{border-color:var(--acc)}
.sheetly-app #sh-top .sp{flex:1}
.sheetly-app .tb{background:none;border:none;color:var(--inkt);opacity:.82;cursor:pointer;padding:5px 7px;border-radius:5px;font-size:calc(12px * var(--text-scale))}
.sheetly-app .tb:hover{background:var(--inkh);opacity:1}
.sheetly-app #sh-bar{background:var(--ui);border-bottom:1px solid var(--uib);display:flex;align-items:center;gap:2px;padding:4px 6px;flex:none;flex-wrap:wrap}
.sheetly-app .sep{width:1px;height:20px;background:var(--uib);margin:0 5px}
.sheetly-app .ic{width:27px;height:27px;border:none;background:none;border-radius:5px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--btn);flex:none}
.sheetly-app .ic:hover{background:var(--hov)}
.sheetly-app .ic.on{background:var(--soft);color:var(--accd);box-shadow:inset 0 0 0 1px var(--selbd)}
.sheetly-app .ic svg{width:15px;height:15px}
.sheetly-app .ic.txt{font-size:calc(11.5px * var(--text-scale));font-weight:700}
.sheetly-app select.sh-sl{height:27px;border:1px solid var(--uib);border-radius:5px;background:var(--panel);color:var(--txt);font:calc(12px * var(--text-scale)) var(--sh-font);padding:0 3px;outline:none;flex:none}
.sheetly-app .cw{width:27px;height:27px;border:none;border-radius:5px;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--btn);position:relative;flex:none}
.sheetly-app .cw:hover{background:var(--hov)}
.sheetly-app .cw b{font-size:calc(11px * var(--text-scale));line-height:1}
.sheetly-app .cw .sw{width:15px;height:3px;border-radius:2px;margin-top:2px}
.sheetly-app .cw input{position:absolute;inset:0;opacity:0;cursor:pointer}
.sheetly-app #sh-fxbar{background:var(--ui);border-bottom:1px solid var(--uib);display:flex;height:30px;flex:none}
.sheetly-app #sh-namebox{width:90px;border:none;border-right:1px solid var(--uib);font:calc(12px * var(--text-scale)) var(--sh-mono);padding:0 8px;outline:none;background:var(--panel);color:var(--txt)}
.sheetly-app #sh-fxl{width:38px;display:flex;align-items:center;justify-content:center;color:var(--accd);font-style:italic;font-family:Georgia,serif;font-size:calc(14px * var(--text-scale));font-weight:600;border:none;border-right:1px solid var(--uib);background:var(--ui);cursor:pointer}
.sheetly-app #sh-fxl:hover{background:var(--soft)}
.sheetly-app #sh-fx{flex:1;border:none;outline:none;font:calc(12px * var(--text-scale)) var(--sh-mono);padding:0 9px;background:var(--panel);color:var(--txt);min-width:60px}
.sheetly-app #sh-sc{flex:1;overflow:auto;position:relative;outline:none}
.sheetly-app #sh-wrap{position:relative;width:max-content;min-width:100%}
.sheetly-app #sh-tbl{border-collapse:separate;border-spacing:0;table-layout:fixed;user-select:none;-webkit-user-select:none}
.sheetly-app #sh-tbl th, .sheetly-app #sh-tbl td{padding:0;font-weight:inherit}
.sheetly-app #sh-tbl thead th{position:sticky;top:0;z-index:30}
.sheetly-app #sh-tbl thead th.corner{left:0;z-index:31}
.sheetly-app #sh-tbl tbody th{position:sticky;left:0;z-index:20}
.sheetly-app th.corner, .sheetly-app th.ch, .sheetly-app th.rh{background:var(--head);border-right:1px solid var(--hair);border-bottom:1px solid var(--hair);color:var(--txt2);font-size:calc(11px * var(--text-scale));cursor:pointer;text-align:center}
.sheetly-app th.ch{font-weight:600}
.sheetly-app th.rh{font-weight:500}
.sheetly-app th.ch.on, .sheetly-app th.rh.on{background:var(--hdon);color:var(--accd)}
.sheetly-app .grip{position:absolute}
.sheetly-app .grip.cg{top:0;right:-3px;width:6px;height:100%;cursor:col-resize}
.sheetly-app .grip.rg{left:0;bottom:-3px;height:6px;width:100%;cursor:row-resize}
.sheetly-app td.cl{background:var(--paper);border-right:1px solid var(--line);border-bottom:1px solid var(--line);overflow:hidden;white-space:pre;position:relative;cursor:cell;padding:0 5px;line-height:1.35;vertical-align:middle;font-variant-numeric:tabular-nums}
.sheetly-app td.cl.flow{overflow:visible;z-index:1}
.sheetly-app td.cl.wrap{white-space:pre-wrap;word-break:break-word}
.sheetly-app td.cl.er{color:var(--err);font-weight:600;text-align:right}
.sheetly-app td.cl.bl{text-align:center;color:var(--txt2)}
.sheetly-app td.cl.alL{text-align:left}
.sheetly-app td.cl.alC{text-align:center}
.sheetly-app td.cl.alR{text-align:right}
.sheetly-app td.cl.sb::after{content:'';position:absolute;inset:0;background:var(--seltint);pointer-events:none}
.sheetly-app td.cl.ht::after{content:'';position:absolute;inset:0;background:var(--hit);pointer-events:none}
.sheetly-app td.cl.fp::after{content:'';position:absolute;inset:0;background:var(--seltint);pointer-events:none;outline:1px dashed var(--acc);outline-offset:-1px}
.sheetly-app #sh-selb{position:absolute;border:1.5px solid var(--selbd);pointer-events:none;z-index:4}
.sheetly-app #sh-selb.big{background:var(--seltint)}
.sheetly-app #sh-actb{position:absolute;border:2px solid var(--acc);pointer-events:none;z-index:5}
.sheetly-app #sh-fh{position:absolute;right:-5px;bottom:-5px;width:9px;height:9px;background:var(--acc);border:2px solid var(--paper);cursor:crosshair;pointer-events:auto;z-index:6}
.sheetly-app #sh-ants{position:absolute;pointer-events:none;z-index:4;display:none}
.sheetly-app #sh-ants rect{fill:none;stroke:var(--accd);stroke-width:1.6;stroke-dasharray:5 4;animation:sh-mch .5s linear infinite}
@keyframes sh-mch{to{stroke-dashoffset:-9}}
.sheetly-app #sh-ed{position:absolute;z-index:20;border:2px solid var(--acc);outline:none;background:var(--panel);color:var(--txt);font:calc(13px * var(--text-scale)) var(--sh-font);padding:0 4px;resize:none;overflow:hidden;white-space:pre;display:none;border-radius:1px;box-shadow:0 3px 12px var(--shadow)}
.sheetly-app #sh-acp{position:absolute;z-index:60;background:var(--panel);border:1px solid var(--uib);border-radius:8px;box-shadow:0 8px 24px var(--shadow);min-width:260px;display:none;overflow:hidden}
.sheetly-app .aci{padding:5px 11px;cursor:pointer;display:flex;gap:9px;align-items:baseline}
.sheetly-app .aci .fn{font:calc(11.5px * var(--text-scale)) var(--sh-mono);font-weight:700;color:var(--accd)}
.sheetly-app .aci .ds{font-size:calc(10.5px * var(--text-scale));color:var(--txt2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sheetly-app .aci.act{background:var(--soft)}
.sheetly-app #sh-menu{position:absolute;z-index:70;background:var(--panel);border:1px solid var(--uib);border-radius:8px;box-shadow:0 10px 30px var(--shadow);min-width:215px;padding:5px;display:none}
.sheetly-app .mi{display:flex;align-items:center;gap:9px;padding:6px 10px;border-radius:5px;cursor:pointer;font-size:calc(12.5px * var(--text-scale))}
.sheetly-app .mi:hover{background:var(--soft)}
.sheetly-app .mi kbd{margin-left:auto;font:calc(10px * var(--text-scale)) var(--sh-mono);color:var(--txt2);padding-left:12px}
.sheetly-app .msep{height:1px;background:var(--sep);margin:4px 8px}
.sheetly-app #sh-fnd{position:absolute;z-index:55;top:104px;right:14px;background:var(--panel);border:1px solid var(--uib);border-radius:9px;box-shadow:0 10px 30px var(--shadow);width:290px;padding:11px;display:none}
.sheetly-app #sh-fnd input{width:100%;border:1px solid var(--uib);border-radius:5px;padding:5px 8px;font:calc(12.5px * var(--text-scale)) var(--sh-font);outline:none;margin-bottom:7px;background:var(--paper);color:var(--txt)}
.sheetly-app #sh-fnd input:focus{border-color:var(--acc)}
.sheetly-app #sh-fnd .sh-row{display:flex;gap:6px;align-items:center}
.sheetly-app #sh-fnd .fr{font-size:calc(11px * var(--text-scale));color:var(--txt2);flex:1}
.sheetly-app #sh-fnd .x{position:absolute;top:4px;right:6px;border:none;background:none;color:var(--txt2);cursor:pointer;font-size:calc(15px * var(--text-scale));line-height:1;padding:3px 5px;border-radius:4px}
.sheetly-app #sh-fnd .x:hover{background:var(--hov)}
.sheetly-app .fb{border:1px solid var(--uib);background:var(--ui);color:var(--txt);border-radius:5px;padding:4px 9px;font-size:calc(12px * var(--text-scale));cursor:pointer}
.sheetly-app .fb:hover{background:var(--hov)}
.sheetly-app .fb.p{background:var(--acc);border-color:var(--acc);color:var(--onacc)}
.sheetly-app .fb.p:hover{filter:brightness(1.08)}
.sheetly-app #sh-toasts{position:absolute;right:16px;bottom:40px;z-index:90;display:flex;flex-direction:column;gap:7px;align-items:flex-end}
.sheetly-app .sh-toast{background:var(--ink);color:var(--inkt);padding:8px 15px;border-radius:8px;font-size:calc(12px * var(--text-scale));box-shadow:0 6px 18px var(--shadow);transition:opacity .3s}
.sheetly-app #sh-st{background:var(--ink);color:var(--inkm);height:25px;display:flex;align-items:center;gap:14px;padding:0 11px;font-size:calc(11.5px * var(--text-scale));flex:none;white-space:nowrap;overflow:hidden}
.sheetly-app #sh-st .a{color:var(--inka);font-family:Consolas,monospace}
.sheetly-app #sh-st .sp{flex:1}
.sheetly-app #sh-st button{background:none;border:none;color:var(--inkm);cursor:pointer;font:inherit;padding:0 5px}
.sheetly-app #sh-st button:hover{color:var(--inkt)}
.sheetly-app .modal{position:absolute;inset:0;z-index:100;background:var(--veil);display:none;align-items:center;justify-content:center}
.sheetly-app .modal .card{background:var(--paper);color:var(--txt);border-radius:12px;max-width:94%;max-height:88%;overflow:auto;padding:22px 26px;box-shadow:0 20px 60px var(--shadow);border:1px solid var(--uib)}
.sheetly-app #sh-help .card{width:640px}
.sheetly-app #sh-help h3{color:var(--accd);margin-bottom:8px}
.sheetly-app #sh-help h5{margin:12px 0 4px;font-size:calc(11px * var(--text-scale));text-transform:uppercase;letter-spacing:.8px;color:var(--txt2)}
.sheetly-app #sh-help td{padding:3px 6px;border-bottom:1px solid var(--sep);font-size:calc(12px * var(--text-scale));vertical-align:top}
.sheetly-app #sh-help td:first-child{font-family:Consolas,monospace;color:var(--accd);width:220px;white-space:nowrap}
.sheetly-app #sh-fxd .card{width:940px;height:600px;max-height:90%;padding:0;display:flex;flex-direction:column;overflow:hidden}
.sheetly-app .fxh{display:flex;align-items:center;gap:12px;padding:14px 18px 10px;border-bottom:1px solid var(--uib);background:var(--ui)}
.sheetly-app .fxh h3{color:var(--accd);font-size:calc(15px * var(--text-scale));white-space:nowrap}
.sheetly-app .fxh h3 i{font-family:Georgia,serif;margin-right:6px}
.sheetly-app #sh-fxq{flex:1;border:1px solid var(--uib);border-radius:6px;padding:7px 10px;font:calc(13px * var(--text-scale)) var(--sh-font);outline:none;background:var(--panel);color:var(--txt);min-width:0}
.sheetly-app #sh-fxq:focus{border-color:var(--acc)}
.sheetly-app .fxh .x{border:none;background:none;color:var(--txt2);cursor:pointer;font-size:calc(20px * var(--text-scale));line-height:1;padding:2px 8px;border-radius:5px}
.sheetly-app .fxh .x:hover{background:var(--hov)}
.sheetly-app #sh-fxcats{display:flex;gap:5px;flex-wrap:nowrap;overflow-x:auto;padding:9px 18px;border-bottom:1px solid var(--uib);flex:none;scrollbar-width:thin}
.sheetly-app .cat{border:1px solid var(--uib);background:var(--paper);color:var(--txt);border-radius:999px;padding:3px 11px;font-size:calc(11.5px * var(--text-scale));cursor:pointer;white-space:nowrap;flex:none}
.sheetly-app .cat:hover{background:var(--hov)}
.sheetly-app .cat.on{background:var(--acc);border-color:var(--acc);color:var(--onacc)}
.sheetly-app .cat em{font-style:normal;opacity:.65;margin-left:4px;font-size:calc(10.5px * var(--text-scale))}
.sheetly-app .fxb{flex:1;display:flex;min-height:0}
.sheetly-app #sh-fxlist{width:330px;flex:none;overflow:auto;border-right:1px solid var(--uib);padding:6px}
.sheetly-app .fxg{font-size:calc(10.5px * var(--text-scale));text-transform:uppercase;letter-spacing:.9px;color:var(--txt2);padding:9px 8px 3px}
.sheetly-app .fxi{display:flex;flex-direction:column;gap:1px;padding:6px 9px;border-radius:6px;cursor:pointer}
.sheetly-app .fxi:hover{background:var(--hov)}
.sheetly-app .fxi.act{background:var(--soft);box-shadow:inset 3px 0 0 var(--acc)}
.sheetly-app .fxi b{font:calc(12.5px * var(--text-scale)) var(--sh-mono);color:var(--accd)}
.sheetly-app .fxi b s{text-decoration:none;color:var(--txt2);font-weight:400;margin-left:7px;font-size:calc(11px * var(--text-scale))}
.sheetly-app .fxi span{font-size:calc(11.5px * var(--text-scale));color:var(--txt2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sheetly-app #sh-fxdet{flex:1;overflow:auto;padding:20px 24px;min-width:0}
.sheetly-app #sh-fxdet h4{font:700 calc(20px * var(--text-scale)) var(--sh-mono);color:var(--accd);word-break:break-all}
.sheetly-app #sh-fxdet h4 small{font:400 calc(12px * var(--text-scale)) var(--sh-font);color:var(--txt2);margin-left:8px}
.sheetly-app #sh-fxdet .catl{display:inline-block;margin:8px 0 14px;font-size:calc(11px * var(--text-scale));padding:2px 9px;border-radius:999px;background:var(--soft);color:var(--accd)}
.sheetly-app #sh-fxdet h6{font-size:calc(10.5px * var(--text-scale));text-transform:uppercase;letter-spacing:.9px;color:var(--txt2);margin:14px 0 5px}
.sheetly-app #sh-fxdet p{line-height:1.5}
.sheetly-app #sh-fxdet code{display:block;font:calc(12.5px * var(--text-scale)) var(--sh-mono);background:var(--head);border:1px solid var(--hair);border-radius:6px;padding:8px 11px;word-break:break-all;white-space:pre-wrap}
.sheetly-app #sh-fxdet .res{margin-top:5px;font-size:calc(12px * var(--text-scale));color:var(--txt2)}
.sheetly-app #sh-fxdet .res b{font-family:Consolas,monospace;color:var(--ok)}
.sheetly-app .fxf{display:flex;align-items:center;gap:10px;padding:10px 18px;border-top:1px solid var(--uib);background:var(--ui);font-size:calc(11.5px * var(--text-scale));color:var(--txt2)}
.sheetly-app .fxf .sp{flex:1}
.sheetly-app .fxf kbd{font:calc(10.5px * var(--text-scale)) var(--sh-mono);border:1px solid var(--uib);border-radius:4px;padding:0 5px;background:var(--paper)}
.sheetly-app #sh-thm{position:absolute;z-index:80;background:var(--panel);border:1px solid var(--uib);border-radius:10px;box-shadow:0 12px 34px var(--shadow);padding:8px;display:none;width:300px;max-height:80%;overflow:auto}
.sheetly-app #sh-thm h6{font-size:calc(10.5px * var(--text-scale));text-transform:uppercase;letter-spacing:.9px;color:var(--txt2);padding:6px 8px 3px}
.sheetly-app .thi{display:flex;align-items:center;gap:10px;padding:6px 8px;border-radius:7px;cursor:pointer;font-size:calc(12.5px * var(--text-scale))}
.sheetly-app .thi:hover{background:var(--hov)}
.sheetly-app .thi.on{background:var(--soft);box-shadow:inset 0 0 0 1px var(--selbd)}
.sheetly-app .thi .chips{display:flex;border-radius:5px;overflow:hidden;border:1px solid var(--hair);flex:none}
.sheetly-app .thi .chips i{width:16px;height:20px;display:block}
.sheetly-app .thi small{margin-left:auto;color:var(--txt2);font-size:calc(10.5px * var(--text-scale))}
@container sheetly (max-height:560px){
  .sheetly-app .fxh{padding:9px 14px 7px}
  .sheetly-app #sh-fxcats{padding:6px 14px}
  .sheetly-app .fxf{padding:6px 14px}
  .sheetly-app .fxf .hint{display:none}
  .sheetly-app #sh-fxdet{padding:12px 16px}
  .sheetly-app #sh-fxd .card{height:96%;max-height:96%}
}
@container sheetly (max-width:900px){
  .sheetly-app .chedit{flex-direction:column}
  .sheetly-app .chedit .frm{width:auto}
}
@container sheetly (max-width:760px){
  .sheetly-app #sh-fxd .card{height:92%}
  .sheetly-app .fxb{flex-direction:column}
  .sheetly-app #sh-fxlist{width:auto;height:40%;border-right:none;border-bottom:1px solid var(--uib)}
  .sheetly-app .fxh h3{display:none}
}
@media (prefers-reduced-motion:reduce){
  .sheetly-app #sh-ants rect{animation:none}
}
.sheetly-app #sh-tabs{display:flex;align-items:stretch;gap:0;background:var(--ui);border-top:1px solid var(--uib);height:30px;flex:none;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;padding:0 6px}
.sheetly-app .tab{display:flex;align-items:center;gap:5px;padding:0 14px;font-size:calc(12px * var(--text-scale));color:var(--txt2);cursor:pointer;border-right:1px solid var(--uib);white-space:nowrap;user-select:none;position:relative;flex:none}
.sheetly-app .tab:hover{background:var(--hov);color:var(--txt)}
.sheetly-app .tab.on{background:var(--paper);color:var(--accd);font-weight:600;box-shadow:inset 0 -2px 0 var(--acc)}
.sheetly-app .tab .lk{font-size:calc(10px * var(--text-scale))}
.sheetly-app .tab.drop{box-shadow:inset 3px 0 0 var(--acc)}
.sheetly-app .tren{font:inherit;border:1px solid var(--acc);border-radius:3px;background:var(--panel);color:var(--txt);padding:1px 4px;outline:none}
.sheetly-app .tadd{border:none;background:none;color:var(--txt2);font-size:calc(18px * var(--text-scale));cursor:pointer;padding:0 12px;flex:none}
.sheetly-app .tadd:hover{color:var(--accd);background:var(--hov)}
.sheetly-app #sh-charts, .sheetly-app #sh-fltb, .sheetly-app #sh-rfs{position:absolute;left:0;top:0;width:0;height:0;overflow:visible}
.sheetly-app #sh-rfs{z-index:7;pointer-events:none}
.sheetly-app .rfb{position:absolute;border:2px solid;border-radius:2px;pointer-events:none;background:rgba(127,127,127,.06)}
.sheetly-app #sh-trace{position:absolute;left:0;top:0;z-index:9;pointer-events:none;overflow:visible}
.sheetly-app #sh-trace .trl{stroke:var(--acc);stroke-width:1.6}
.sheetly-app #sh-trace .trd{fill:var(--acc)}
.sheetly-app #sh-trace .trm{fill:var(--acc)}
.sheetly-app #sh-trace .trr{fill:none;stroke:var(--acc);stroke-width:1.4;stroke-dasharray:4 3}
.sheetly-app #sh-trace .trt{fill:var(--accd);font:calc(11px * var(--text-scale)) var(--sh-font)}
.sheetly-app #sh-fltb{z-index:8}
.sheetly-app .fbt{position:absolute;width:16px;height:16px;padding:0;border:1px solid var(--uib);border-radius:3px;background:var(--panel);color:var(--txt2);font-size:calc(9px * var(--text-scale));line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.sheetly-app .fbt:hover{border-color:var(--acc);color:var(--accd)}
.sheetly-app .fbt.on{background:var(--acc);border-color:var(--acc);color:var(--onacc)}
.sheetly-app #sh-ddb{position:absolute;z-index:8;display:none;width:18px;height:18px;padding:0;border:1px solid var(--uib);border-radius:3px;background:var(--panel);color:var(--txt2);font-size:calc(10px * var(--text-scale));cursor:pointer;align-items:center;justify-content:center}
.sheetly-app #sh-ddb:hover{border-color:var(--acc);color:var(--accd)}
.sheetly-app td.cl.frz{position:sticky;z-index:3}
.sheetly-app th.rh.frz{z-index:22}
.sheetly-app thead th.ch.frz{z-index:32}
.sheetly-app td.cl.fzb{border-bottom-color:var(--txt2)}
.sheetly-app td.cl.fzr{border-right-color:var(--txt2)}
.sheetly-app th.rh.fzb{border-bottom-color:var(--txt2)}
.sheetly-app th.ch.fzr{border-right-color:var(--txt2)}
.sheetly-app td.cl.hasn{background-image:linear-gradient(225deg,#d9423a 0,#d9423a 6px,transparent 6px)}
.sheetly-app td.cl[data-ic]::before{content:attr(data-ic);color:var(--icc);margin-right:4px;font-size:.88em}
.sheetly-app .ctip{position:absolute;z-index:95;max-width:260px;background:#fffbe6;color:#3a3320;border:1px solid #d8c97a;border-radius:6px;padding:7px 10px;font-size:calc(12px * var(--text-scale));box-shadow:0 4px 14px var(--shadow);pointer-events:none;line-height:1.4}
.sheetly-app .ctip small{display:block;margin-top:4px;color:#8a7d40;font-size:calc(10.5px * var(--text-scale))}
.sheetly-app .chart{position:absolute;z-index:6;pointer-events:auto;background:var(--paper);border:1px solid var(--uib);border-radius:8px;box-shadow:0 3px 14px var(--shadow);cursor:move;overflow:hidden}
.sheetly-app .chart.sel{outline:2px solid var(--acc);outline-offset:1px;z-index:7}
.sheetly-app .chart svg{display:block;pointer-events:none}
.sheetly-app .chart svg title{pointer-events:auto}
.sheetly-app .chart .cbr, .sheetly-app .chart .csl, .sheetly-app .chart .cpt{pointer-events:auto}
.sheetly-app .chtb{position:absolute;top:6px;right:6px;display:flex;gap:3px;background:var(--panel);border:1px solid var(--uib);border-radius:6px;padding:2px}
.sheetly-app .chtb button{border:none;background:none;color:var(--txt);cursor:pointer;font-size:calc(12px * var(--text-scale));padding:2px 6px;border-radius:4px}
.sheetly-app .chtb button:hover{background:var(--soft)}
.sheetly-app .chh{position:absolute;right:0;bottom:0;width:16px;height:16px;cursor:nwse-resize;background:linear-gradient(135deg,transparent 50%,var(--acc) 50%)}
.sheetly-app svg.cht .ctx{fill:var(--txt2);font:calc(11px * var(--text-scale)) var(--sh-font)}
.sheetly-app svg.cht .cti{fill:var(--txt);font:600 calc(14px * var(--text-scale)) var(--sh-font)}
.sheetly-app svg.cht .cpl{font:600 calc(11px * var(--text-scale)) var(--sh-font)}
.sheetly-app svg.cht .cgr{stroke:var(--line);stroke-width:1}
.sheetly-app svg.cht .cax{stroke:var(--txt2);stroke-width:1}
.sheetly-app svg.cht .cln{fill:none;stroke-width:2.2;stroke-linejoin:round}
.sheetly-app svg.cht .csl{stroke:var(--paper);stroke-width:1.5}
.sheetly-app .chedit{display:flex;gap:18px;align-items:flex-start}
.sheetly-app .chedit .frm{width:290px;flex:none}
.sheetly-app .chprev{flex:1;border:1px solid var(--uib);border-radius:8px;background:var(--paper);min-height:290px;display:flex;align-items:center;justify-content:center;overflow:hidden}
.sheetly-app .pop{position:absolute;z-index:85;display:none;background:var(--panel);border:1px solid var(--uib);border-radius:9px;box-shadow:0 10px 30px var(--shadow);font-size:calc(12.5px * var(--text-scale));color:var(--txt)}
.sheetly-app #sh-fpop{width:250px;padding:8px}
.sheetly-app .fph{font-weight:600;padding:2px 4px 6px}
.sheetly-app .fph small{color:var(--txt2);font-weight:400;margin-left:6px}
.sheetly-app .fpb{display:flex;gap:6px;margin-bottom:6px}
.sheetly-app .fpb .fb{flex:1}
.sheetly-app .fps{width:100%;border:1px solid var(--uib);border-radius:5px;padding:5px 8px;font:calc(12.5px * var(--text-scale)) var(--sh-font);outline:none;margin-bottom:5px;background:var(--paper);color:var(--txt)}
.sheetly-app .fps:focus{border-color:var(--acc)}
.sheetly-app .fpl{max-height:220px;overflow:auto;border:1px solid var(--sep);border-radius:5px;margin:4px 0 6px;padding:2px}
.sheetly-app .fli{display:flex;align-items:center;gap:7px;padding:3px 6px;border-radius:4px;cursor:pointer}
.sheetly-app .fli:hover{background:var(--hov)}
.sheetly-app .fli span{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sheetly-app .fli em{font-style:normal;color:var(--txt2);font-size:calc(10.5px * var(--text-scale))}
.sheetly-app .fli.all{border-bottom:1px solid var(--sep);border-radius:0;margin-top:2px}
.sheetly-app .fpf{display:flex;gap:6px;align-items:center}
.sheetly-app #sh-ddl{min-width:150px;max-height:260px;overflow:auto;padding:4px}
.sheetly-app .ddi{padding:5px 10px;border-radius:5px;cursor:pointer;white-space:nowrap}
.sheetly-app .ddi:hover{background:var(--soft)}
.sheetly-app .ddi.on{font-weight:600;color:var(--accd)}
.sheetly-app #sh-cpop{width:270px;padding:10px}
.sheetly-app .cph{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.sheetly-app .cph small{color:var(--txt2);margin-left:auto;font-size:calc(10.5px * var(--text-scale))}
.sheetly-app #sh-cpt{width:100%;border:1px solid var(--uib);border-radius:6px;padding:6px 8px;font:calc(12.5px * var(--text-scale)) var(--sh-font);background:var(--paper);color:var(--txt);resize:vertical;outline:none}
.sheetly-app #sh-cpt:focus{border-color:var(--acc)}
.sheetly-app .cpf{display:flex;gap:6px;margin-top:8px}
.sheetly-app #sh-dlg .card{padding:0;display:flex;flex-direction:column;overflow:hidden;max-height:90%}
.sheetly-app .dh{display:flex;align-items:center;gap:12px;padding:14px 20px 10px;border-bottom:1px solid var(--uib);background:var(--ui)}
.sheetly-app .dh h3{color:var(--accd);font-size:calc(15px * var(--text-scale));flex:1}
.sheetly-app .dh .x{border:none;background:none;color:var(--txt2);cursor:pointer;font-size:calc(20px * var(--text-scale));line-height:1;padding:2px 8px;border-radius:5px}
.sheetly-app .dh .x:hover{background:var(--hov)}
.sheetly-app #sh-dbody{padding:16px 20px;overflow:auto;flex:1}
.sheetly-app .df{display:flex;gap:8px;justify-content:flex-end;padding:11px 20px;border-top:1px solid var(--uib);background:var(--ui)}
.sheetly-app .frm{display:flex;flex-direction:column;gap:11px}
.sheetly-app .frm label{display:flex;flex-direction:column;gap:4px;font-size:calc(11.5px * var(--text-scale));color:var(--txt2)}
.sheetly-app .frm label.chk{flex-direction:row;align-items:center;gap:7px;color:var(--txt);font-size:calc(12.5px * var(--text-scale))}
.sheetly-app .frm input:not([type=checkbox]):not([type=radio]):not([type=color]), .sheetly-app .frm select{border:1px solid var(--uib);border-radius:6px;padding:6px 9px;font:calc(13px * var(--text-scale)) var(--sh-font);background:var(--panel);color:var(--txt);outline:none;min-width:0}
.sheetly-app .frm input:focus, .sheetly-app .frm select:focus{border-color:var(--acc)}
.sheetly-app .frm input[type=color]{width:38px;height:26px;border:1px solid var(--uib);border-radius:5px;padding:1px;background:var(--panel);cursor:pointer}
.sheetly-app .frm .two{display:flex;gap:12px;align-items:flex-end}
.sheetly-app .frm .two>*{flex:1}
.sheetly-app .frm .cols{display:flex;gap:16px;flex-wrap:wrap;align-items:center}
.sheetly-app .frm .lab{font-size:calc(10.5px * var(--text-scale));text-transform:uppercase;letter-spacing:.8px;color:var(--txt2)}
.sheetly-app .frm .grp{display:flex;flex-direction:column;gap:11px}
.sheetly-app .presets{display:flex;gap:6px;flex-wrap:wrap}
.sheetly-app .pre{font-size:calc(11.5px * var(--text-scale));padding:3px 9px}
.sheetly-app .hint2{font-size:calc(11.5px * var(--text-scale));color:var(--txt2);line-height:1.5;margin-top:6px}
.sheetly-app .vlist{display:flex;flex-direction:column;gap:6px}
.sheetly-app .vrow{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--sep);border-radius:8px;background:var(--paper)}
.sheetly-app .vrow>div:first-child{flex:1;min-width:0}
.sheetly-app .vs{font-size:calc(11px * var(--text-scale));color:var(--txt2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sheetly-app .tag{font-size:calc(10px * var(--text-scale));margin-left:8px;padding:1px 7px;border-radius:999px;background:var(--head);color:var(--txt2)}
.sheetly-app .tag.m{background:var(--soft);color:var(--accd)}
.sheetly-app .sw2{display:inline-block;min-width:40px;text-align:center;padding:4px 8px;border-radius:5px;border:1px solid var(--hair);font-weight:600}
.sheetly-app #sh-prhead{display:none}
/* ---- adaptations au bureau ---- */
.sheetly-app #sh-brand svg{width:18px;height:18px}
.sheetly-app #sh-trace{width:0;height:0}
.sheetly-app input,.sheetly-app select,.sheetly-app textarea,.sheetly-app button{font-family:inherit}
.sheetly-app #sh-top{border-bottom:1px solid var(--inkbd)}
.sheetly-app #sh-st{border-top:1px solid var(--inkbd);height:1.85rem;flex:0 0 1.85rem;padding:0 0.89rem;gap:0.52rem;font-family:var(--sh-font);font-size:calc(0.82rem * var(--text-scale));letter-spacing:.02em}
.sheetly-app #sh-st .a{font-family:var(--sh-font);font-variant-numeric:tabular-nums}
.sheetly-app #sh-sc{background:var(--paper)}
.sheetly-app td.cl{line-height:1.15}
.sheetly-app #sh-acp{max-width:440px}
/* ==== SHEETLY END ==== */

/* ═══ Requesters : boutons d'action au même gabarit dans toutes les apps
   (hauteur 32px, marge interne 16px, largeur mini 92px, texte centré). Chaque
   app garde sa couleur et son rayon ; seule la taille est uniformisée. ═══ */
.np-dlg .acts .btn,
.ui-requester-buttons .ui-requester-btn,
.strata-app #strata-modalBox .mbtn,
.nabla-forge-app .nf-m-row .nf-m-btn,
.weird01-app #weird01-modalWrap .mrow .mini,
.sheetly-app #sh-dfoot .fb{min-width:92px;height:32px;padding:0 16px;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap}
/* Sound Forge : le pied de dialogue peut porter 4 boutons (Annuler, Tester, Original, OK) :
   gabarit uniforme mais sans largeur mini fixe, retour à la ligne plutôt que débordement. */
.sound-forge-app .sf-dialog{width:min(460px,calc(100% - 24px));max-width:none}
.sound-forge-app .sf-dlg-foot{flex-wrap:wrap;justify-content:flex-end}
.sound-forge-app .sf-dlg-foot .sf-btn{min-width:72px;height:32px;padding:0 14px;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap}
/* Sound Forge : la règle générique « .sf-dialog input[type=number]{width:100%} » écrasait la largeur du champ
   numérique des curseurs et réduisait la barre à un simple point vert. Le curseur reprend toute la ligne, le champ garde 78px. */
.sound-forge-app .sf-dialog .sf-slider-row input[type=range]{flex:1 1 auto;width:auto;min-width:0}
.sound-forge-app .sf-dialog .sf-slider-row input[type=number]{width:78px;flex:none}
.sound-forge-app input[type=range]::-webkit-slider-runnable-track{height:4px;border-radius:2px;background:var(--sf-panel4)}
.sound-forge-app input[type=range]::-webkit-slider-thumb{width:14px;height:14px;margin-top:-5px;box-shadow:none;box-sizing:border-box}
.sound-forge-app input[type=range]::-moz-range-track{height:4px;border-radius:2px;background:var(--sf-panel4)}
.sound-forge-app input[type=range]::-moz-range-progress{background:var(--sf-accent-dim)}
/* Sheetly : les en-têtes figés restent au-dessus des en-têtes qui défilent (les règles de base à sélecteur #id
   gagnaient sur le z-index, les numéros de lignes qui défilent passaient donc par-dessus ceux des lignes figées). */
.sheetly-app #sh-tbl tbody th.rh.frz{z-index:22}
.sheetly-app #sh-tbl thead th.ch.frz{z-index:32}

/* SHADERLAB:BEGIN */
/* ═══════════════════════════════════════════════════════════════════
   SHADERLAB — éditeur de shaders GLSL à nœuds (porté depuis une page autonome).
   Bloc GÉNÉRÉ par _Tools/shaderlab-port/build.js (ne pas éditer ici : corriger
   le source, relancer la génération). Comme Strata et Nabla Forge : palette
   « atelier » figée, volontairement indépendante du thème clair/sombre système
   (surfaces pleines pour que menus et canvas restent lisibles) ; seul l'accent
   (--sl-accent) suit la couleur d'accent système. Tout est scopé sous
   .shaderlab-app, les ids sont préfixés « sl- ». Les tailles de fenêtre passent
   par @container (pas @media) et les unités cqh remplacent vh. */
.shaderlab-app{
  --sl-bg:#0c0d10; --sl-panel:#131519; --sl-panel2:#181b21; --sl-panel3:#1e222a;
  --sl-border:#252a33; --sl-border2:#313847;
  --sl-text:#e7eaf0; --sl-muted:#8a93a3; --sl-faint:#5b6372;
  --sl-accent:var(--accent); --sl-danger:#ff5c5c;
  --sl-sans:"Segoe UI Variable Text","Segoe UI",system-ui,sans-serif; --sl-mono:"Cascadia Mono",Consolas,monospace;
  container:shaderlab/size;
  position:relative;display:flex;flex-direction:column;height:100%;overflow:hidden;
  background:var(--sl-bg);color:var(--sl-text);font-family:var(--sl-sans);
  font-size:calc(13px * var(--text-scale));-webkit-font-smoothing:antialiased;user-select:none;
}
.shaderlab-app *{box-sizing:border-box}
.shaderlab-app button{font-family:inherit;color:inherit}
.shaderlab-app input,.shaderlab-app select,.shaderlab-app textarea{font-family:inherit}
.shaderlab-app .hidden{display:none !important}
.shaderlab-app ::-webkit-scrollbar{width:9px;height:9px}
.shaderlab-app ::-webkit-scrollbar-thumb{background:#2b313d;border-radius:5px;border:2px solid var(--sl-bg)}
.shaderlab-app ::-webkit-scrollbar-track{background:transparent}
.shaderlab-app #sl-statusbar{flex:0 0 1.85rem;height:1.85rem;display:flex;align-items:center;gap:0.52rem;padding:0 0.89rem;padding-bottom:env(safe-area-inset-bottom,0px);background:var(--sl-panel);border-top:1px solid var(--sl-border);font-family:var(--sl-sans);font-size:calc(0.82rem * var(--text-scale));letter-spacing:.02em;color:var(--sl-muted);white-space:nowrap;overflow:hidden}
.shaderlab-app #sl-statusbar span{font-family:var(--sl-sans);font-size:calc(0.82rem * var(--text-scale));letter-spacing:.02em}
.shaderlab-app .m-key{margin-left:auto;font-family:var(--sl-mono);font-size:calc(10px * var(--text-scale));color:var(--sl-faint)}
.shaderlab-app #sl-header{height:48px;flex:0 0 48px;display:flex;align-items:center;gap:10px;padding:0 14px;background:var(--sl-panel);border-bottom:1px solid var(--sl-border);position:relative;z-index:40;}
.shaderlab-app .brand{display:flex;align-items:center;gap:9px;user-select:none;}
.shaderlab-app .brand svg{color:var(--sl-accent);}
.shaderlab-app .bt{font-weight:700;font-size:calc(15px * var(--text-scale));letter-spacing:.05em;}
.shaderlab-app .bt span{color:var(--sl-accent);}
.shaderlab-app .exwrap{position:relative;}
.shaderlab-app .hbtn{display:flex;align-items:center;gap:6px;background:var(--sl-panel3);border:1px solid var(--sl-border);color:var(--sl-text);padding:6px 11px;border-radius:8px;font-size:calc(12px * var(--text-scale));font-weight:500;cursor:pointer;transition:border-color .15s,background .15s;white-space:nowrap;}
.shaderlab-app .hbtn:hover{border-color:var(--sl-border2);background:#232833;}
.shaderlab-app .hbtn.on{border-color:var(--sl-accent);color:var(--sl-accent);}
.shaderlab-app .ibtn2{display:flex;align-items:center;justify-content:center;background:var(--sl-panel3);border:1px solid var(--sl-border);border-radius:8px;color:var(--sl-muted);cursor:pointer;padding:6px;}
.shaderlab-app .ibtn2:hover{color:var(--sl-accent);border-color:var(--sl-border2);}
.shaderlab-app .grow{flex:1;}
.shaderlab-app .hstat{display:flex;align-items:center;gap:7px;font-family:var(--sl-mono);font-size:calc(11px * var(--text-scale));color:var(--sl-muted);}
.shaderlab-app .menu{position:absolute;top:calc(100% + 8px);left:0;min-width:280px;max-height:calc(100cqh - 74px);overflow-y:auto;background:var(--sl-panel2);border:1px solid var(--sl-border2);border-radius:11px;box-shadow:0 18px 50px -12px rgba(0,0,0,.7);padding:6px;display:none;z-index:60;}
.shaderlab-app .menu.open{display:block;}
.shaderlab-app .menu.right{left:auto;right:0;}
.shaderlab-app .m-title{font-size:calc(10px * var(--text-scale));text-transform:uppercase;letter-spacing:.14em;color:var(--sl-faint);padding:6px 10px 5px;}
.shaderlab-app .m-item{display:flex;align-items:center;gap:10px;width:100%;background:none;border:none;color:var(--sl-text);padding:8px 10px;border-radius:7px;cursor:pointer;text-align:left;}
.shaderlab-app .m-item:hover{background:var(--sl-panel3);}
.shaderlab-app .m-sw{width:11px;height:11px;border-radius:3px;flex:0 0 11px;border:1px solid rgba(255,255,255,.14);}
.shaderlab-app .m-body{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0;}
.shaderlab-app .m-body strong{font-size:calc(13px * var(--text-scale));font-weight:600;}
.shaderlab-app .m-body em{font-style:normal;font-size:calc(11px * var(--text-scale));color:var(--sl-muted);}
.shaderlab-app .m-chk{width:14px;color:var(--sl-accent);opacity:0;flex:0 0 14px;}
.shaderlab-app .m-item.on .m-chk{opacity:1;}
.shaderlab-app .m-mini{background:none;border:1px solid var(--sl-border);color:var(--sl-muted);border-radius:6px;padding:3px 8px;font-size:calc(11px * var(--text-scale));cursor:pointer;flex:0 0 auto;}
.shaderlab-app .m-mini:hover{color:var(--sl-accent);border-color:var(--sl-accent);}
.shaderlab-app .m-mini.del:hover{color:var(--sl-danger);border-color:var(--sl-danger);}
.shaderlab-app .m-sep{height:1px;background:var(--sl-border);margin:5px 8px;}
.shaderlab-app .m-input{display:flex;gap:6px;padding:4px 8px 8px;}
.shaderlab-app .m-input input{flex:1;min-width:0;background:var(--sl-panel);border:1px solid var(--sl-border);color:var(--sl-text);padding:6px 9px;border-radius:7px;font-size:calc(12px * var(--text-scale));outline:none;font-family:var(--sl-sans);}
.shaderlab-app .m-input input:focus{border-color:var(--sl-accent);}
.shaderlab-app #sl-main{flex:1;display:flex;min-height:0;}
.shaderlab-app .spl-v{width:7px;flex:0 0 7px;cursor:col-resize;position:relative;z-index:15;}
.shaderlab-app .spl-v::after{content:'';position:absolute;left:3px;top:0;bottom:0;width:2px;background:transparent;transition:background .15s;}
.shaderlab-app .spl-v:hover::after,.shaderlab-app .spl-v.on::after{background:var(--sl-accent);}
.shaderlab-app .spl-h{height:7px;flex:0 0 7px;cursor:row-resize;position:relative;}
.shaderlab-app .spl-h::after{content:'';position:absolute;top:3px;left:0;right:0;height:2px;background:transparent;transition:background .15s;}
.shaderlab-app .spl-h:hover::after,.shaderlab-app .spl-h.on::after{background:var(--sl-accent);}
.shaderlab-app.resizing{user-select:none;-webkit-user-select:none;}
.shaderlab-app.selecting{user-select:none;-webkit-user-select:none;}
.shaderlab-app #sl-palette{width:212px;flex:0 0 212px;background:var(--sl-panel);border-right:1px solid var(--sl-border);display:flex;flex-direction:column;min-height:0;overflow:hidden;}
.shaderlab-app .p-search{display:flex;align-items:center;gap:8px;margin:10px 10px 4px;padding:7px 10px;background:var(--sl-panel2);border:1px solid var(--sl-border);border-radius:8px;color:var(--sl-faint);}
.shaderlab-app .p-search input{flex:1;background:none;border:none;outline:none;color:var(--sl-text);font-size:calc(12px * var(--text-scale));font-family:var(--sl-sans);min-width:0;}
.shaderlab-app .p-search input::placeholder{color:var(--sl-faint);}
.shaderlab-app #sl-palList{flex:1;overflow-y:auto;padding:4px 10px 12px;}
.shaderlab-app .p-title{font-size:calc(10px * var(--text-scale));text-transform:uppercase;letter-spacing:.14em;color:var(--sl-faint);margin:12px 2px 6px;}
.shaderlab-app .p-item{display:flex;align-items:center;gap:8px;width:100%;background:var(--sl-panel2);border:1px solid var(--sl-border);color:var(--sl-text);padding:6px 9px;margin-bottom:5px;border-radius:7px;font-size:calc(12px * var(--text-scale));cursor:pointer;text-align:left;transition:border-color .12s,transform .12s;}
.shaderlab-app .p-item:hover{border-color:var(--sl-accent);transform:translateX(2px);}
.shaderlab-app .p-item .dot{width:7px;height:7px;border-radius:50%;flex:0 0 7px;}
.shaderlab-app #sl-viewport{flex:1;position:relative;overflow:hidden;background-color:var(--sl-bg);cursor:default;background-image:radial-gradient(circle,#20242c 1.2px,transparent 1.2px);background-size:24px 24px;touch-action:none;}
.shaderlab-app #sl-viewport.panning{cursor:grabbing !important;}
.shaderlab-app #sl-wireCanvas{position:absolute;top:0;left:0;pointer-events:none;}
.shaderlab-app #sl-world{position:absolute;top:0;left:0;transform-origin:0 0;}
.shaderlab-app #sl-marquee{position:absolute;border:1px dashed var(--sl-accent);background:color-mix(in srgb,var(--sl-accent) 12%,transparent);pointer-events:none;z-index:25;display:none;}
.shaderlab-app.linking,.shaderlab-app.linking *{cursor:crosshair !important;}
.shaderlab-app.linking .socket{transform:scale(1.3);}
.shaderlab-app.linking .socket.in{box-shadow:0 0 0 3px color-mix(in srgb,var(--sl-accent) 30%,transparent),0 0 10px color-mix(in srgb,var(--sl-accent) 20%,transparent);}
.shaderlab-app .node{position:absolute;width:200px;background:var(--sl-panel2);border:1px solid var(--sl-border2);border-radius:9px;box-shadow:0 8px 22px -8px rgba(0,0,0,.65);user-select:none;}
.shaderlab-app .node.wide{width:300px;}
.shaderlab-app .node.wide .n-row.prm label{width:135px;flex:0 0 135px;}
.shaderlab-app .node.drag{box-shadow:0 16px 34px -10px rgba(0,0,0,.8);cursor:grabbing;}
.shaderlab-app .node.sel{border-color:var(--sl-accent);box-shadow:0 0 0 1px var(--sl-accent),0 10px 26px -8px rgba(0,0,0,.7);}
.shaderlab-app .node.trace{border-color:#eef1f6;box-shadow:0 0 0 1px rgba(238,241,246,.55),0 0 14px rgba(238,241,246,.18),0 10px 26px -8px rgba(0,0,0,.7);}
.shaderlab-app .node.out-node{border-color:color-mix(in srgb,var(--sl-accent) 38%,var(--sl-border2));}
.shaderlab-app .node.disp-node{border-color:#2a4d5c;}
.shaderlab-app .node.out-node.sel,.shaderlab-app .node.disp-node.sel{border-color:var(--sl-accent);}
.shaderlab-app .n-head{position:relative;display:flex;align-items:center;gap:7px;padding:7px 9px;border-bottom:1px solid var(--sl-border);cursor:grab;border-radius:9px 9px 0 0;background:var(--sl-panel3);}
.shaderlab-app .n-dot{width:7px;height:7px;border-radius:50%;flex:0 0 7px;box-shadow:0 0 5px rgba(255,255,255,.15);}
.shaderlab-app .n-title{font-family:var(--sl-mono);font-size:calc(10.5px * var(--text-scale));font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:#dfe4ee;flex:1;white-space:nowrap;overflow:hidden;}
.shaderlab-app .n-del{background:none;border:none;color:#9aa3b5;cursor:pointer;padding:2px;display:flex;opacity:0;transition:opacity .12s,color .12s;}
.shaderlab-app .node:hover .n-del{opacity:1;}
.shaderlab-app .n-del:hover{color:var(--sl-danger);}
@media (hover:none){.shaderlab-app .n-del{opacity:.75;}}
.shaderlab-app .n-body{position:relative;padding:7px 9px 9px;}
.shaderlab-app .n-row{display:flex;align-items:center;gap:7px;font-family:var(--sl-mono);font-size:calc(10.5px * var(--text-scale));color:var(--sl-muted);min-height:21px;}
.shaderlab-app .n-row label{white-space:nowrap;}
.shaderlab-app .socket{width:13px;height:13px;border-radius:50%;background:var(--sl-panel);border:2.5px solid var(--sl-faint);flex:0 0 13px;cursor:crosshair;transition:transform .1s;}
.shaderlab-app .socket.in{margin-left:-15px;}
.shaderlab-app .socket.out{position:absolute;right:-7px;top:50%;margin-top:-7px;cursor:crosshair;}
.shaderlab-app .n-desc{font-family:var(--sl-sans);font-size:calc(10.5px * var(--text-scale));line-height:1.5;color:var(--sl-muted);margin-top:6px;padding-top:6px;border-top:1px dashed var(--sl-border);}
.shaderlab-app .prm-wrap{min-width:0;}
.shaderlab-app .n-row.prm{margin-top:4px;}
.shaderlab-app .n-row.prm label{width:50px;flex:0 0 50px;overflow:hidden;text-overflow:ellipsis;}
.shaderlab-app .p-val{font-family:var(--sl-mono);font-size:calc(10px * var(--text-scale));color:var(--sl-text);width:46px;flex:0 0 46px;text-align:right;white-space:nowrap;cursor:text;border-bottom:1px dashed transparent;}
.shaderlab-app .p-val:hover{color:var(--sl-accent);border-bottom-color:var(--sl-accent);}
.shaderlab-app .p-edit{width:56px;flex:0 0 56px;background:var(--sl-panel);border:1px solid var(--sl-accent);color:var(--sl-text);font-family:var(--sl-mono);font-size:calc(10px * var(--text-scale));border-radius:4px;padding:1px 3px;outline:none;text-align:right;}
.shaderlab-app .p-code{width:100%;min-height:46px;background:var(--sl-panel);border:1px solid var(--sl-border);color:var(--sl-text);font-family:var(--sl-mono);font-size:calc(10px * var(--text-scale));line-height:1.5;padding:4px 5px;border-radius:5px;outline:none;resize:vertical;margin-top:4px;}
.shaderlab-app .p-code:focus{border-color:var(--sl-accent);}
.shaderlab-app .imgbtn{background:var(--sl-panel);border:1px solid var(--sl-border);color:var(--sl-text);font-size:calc(10px * var(--text-scale));font-family:var(--sl-mono);padding:3px 8px;border-radius:5px;cursor:pointer;}
.shaderlab-app .imgbtn:hover{border-color:var(--sl-accent);color:var(--sl-accent);}
.shaderlab-app .imgthumb{width:44px;height:22px;flex:0 0 44px;border:1px solid var(--sl-border2);border-radius:4px;background-size:cover;background-position:center;background-color:var(--sl-panel);}
.shaderlab-app .n-bnd{background:none;border:none;color:var(--sl-faint);cursor:pointer;padding:0 1px;font-size:calc(11px * var(--text-scale));line-height:1;flex:0 0 auto;}
.shaderlab-app .n-bnd:hover{color:var(--sl-accent);}
.shaderlab-app .n-bndrow{display:flex;align-items:center;gap:4px;margin-top:3px;padding-left:2px;font-family:var(--sl-mono);font-size:calc(9.5px * var(--text-scale));color:var(--sl-faint);}
.shaderlab-app .n-bndrow label{width:24px;flex:0 0 24px;}
.shaderlab-app .n-bndrow input{flex:1;min-width:0;width:0;background:var(--sl-panel);border:1px solid var(--sl-border);color:var(--sl-text);font-family:var(--sl-mono);font-size:calc(9.5px * var(--text-scale));padding:1px 4px;border-radius:4px;outline:none;}
.shaderlab-app .n-bndrow input:focus{border-color:var(--sl-accent);}
.shaderlab-app input[type=range]{-webkit-appearance:none;appearance:none;flex:1;min-width:0;height:14px;background:transparent;cursor:pointer;}
.shaderlab-app input[type=range]::-webkit-slider-runnable-track{height:3px;background:#2c323e;border-radius:2px;}
.shaderlab-app input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:11px;height:11px;border-radius:50%;background:var(--sl-accent);margin-top:-4px;border:none;}
.shaderlab-app input[type=range]::-moz-range-track{height:3px;background:#2c323e;border-radius:2px;}
.shaderlab-app input[type=range]::-moz-range-thumb{width:11px;height:11px;border-radius:50%;background:var(--sl-accent);border:none;}
.shaderlab-app select{flex:1;min-width:0;background:var(--sl-panel);border:1px solid var(--sl-border);color:var(--sl-text);font-family:var(--sl-mono);font-size:calc(10.5px * var(--text-scale));padding:2px 4px;border-radius:5px;outline:none;}
.shaderlab-app input[type=color]{-webkit-appearance:none;appearance:none;width:44px;height:20px;flex:0 0 44px;border:1px solid var(--sl-border2);border-radius:5px;padding:0;background:none;cursor:pointer;}
.shaderlab-app input[type=color]::-webkit-color-swatch-wrapper{padding:2px;}
.shaderlab-app input[type=color]::-webkit-color-swatch{border:none;border-radius:3px;}
.shaderlab-app input[type=color]::-moz-color-swatch{border:none;border-radius:3px;}
.shaderlab-app #sl-tip{position:absolute;z-index:120;max-width:260px;background:var(--sl-panel2);border:1px solid var(--sl-border2);border-radius:9px;box-shadow:0 12px 32px -10px rgba(0,0,0,.8);padding:8px 11px;pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity .12s,transform .12s;}
.shaderlab-app #sl-tip.show{opacity:1;transform:none;}
.shaderlab-app #sl-tip .t-h{display:flex;align-items:center;gap:6px;margin-bottom:3px;}
.shaderlab-app #sl-tip .t-dot{width:7px;height:7px;border-radius:50%;flex:0 0 7px;}
.shaderlab-app #sl-tip .sl-t-title{font-family:var(--sl-mono);font-size:calc(11.5px * var(--text-scale));font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:#dfe4ee;}
.shaderlab-app #sl-tip .t-desc{font-size:calc(13px * var(--text-scale));line-height:1.55;color:#c9d0dd;}
.shaderlab-app #sl-tutbox{position:absolute;top:12px;left:12px;width:238px;background:rgba(19,21,25,.94);border:1px solid var(--sl-accent);border-radius:10px;box-shadow:0 12px 30px -10px rgba(0,0,0,.8);padding:10px 12px;z-index:20;backdrop-filter:blur(4px);}
.shaderlab-app #sl-tutbox .tb-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:5px;}
.shaderlab-app #sl-tutbox .tb-head strong{font-size:calc(12.5px * var(--text-scale));color:var(--sl-accent);}
.shaderlab-app #sl-tutbox .tb-head button{background:none;border:none;color:var(--sl-faint);cursor:pointer;font-size:calc(13px * var(--text-scale));padding:0 2px;}
.shaderlab-app #sl-tutbox .tb-head button:hover{color:var(--sl-danger);}
.shaderlab-app #sl-tbStep{font-size:calc(12px * var(--text-scale));line-height:1.5;color:var(--sl-text);}
.shaderlab-app #sl-tutbox .tb-foot{display:flex;align-items:center;justify-content:space-between;margin-top:8px;}
.shaderlab-app #sl-tbProg{font-family:var(--sl-mono);font-size:calc(10px * var(--text-scale));color:var(--sl-muted);}
.shaderlab-app #sl-tbSkip{background:none;border:1px solid var(--sl-border);color:var(--sl-muted);border-radius:6px;padding:2px 8px;font-size:calc(11px * var(--text-scale));cursor:pointer;}
.shaderlab-app #sl-tbSkip:hover{color:var(--sl-accent);border-color:var(--sl-accent);}
.shaderlab-app #sl-zoomc{position:absolute;left:12px;bottom:38px;display:flex;flex-direction:column;gap:5px;z-index:10;}
.shaderlab-app #sl-zoomc button{width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:var(--sl-panel);border:1px solid var(--sl-border2);border-radius:8px;color:var(--sl-muted);cursor:pointer;}
.shaderlab-app #sl-zoomc button:hover{color:var(--sl-accent);border-color:var(--sl-accent);}
.shaderlab-app #sl-zlbl{font-family:var(--sl-mono);font-size:calc(10px * var(--text-scale));color:var(--sl-muted);text-align:center;padding:2px 0 1px;}
.shaderlab-app .stdot{width:7px;height:7px;border-radius:50%;flex:0 0 7px;}
.shaderlab-app .stdot.ok{background:var(--sl-accent);box-shadow:0 0 6px var(--sl-accent);}
.shaderlab-app .stdot.err{background:var(--sl-danger);}
.shaderlab-app .hint{margin-left:auto;color:var(--sl-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.shaderlab-app #sl-quick{position:absolute;width:232px;background:var(--sl-panel2);border:1px solid var(--sl-border2);border-radius:11px;box-shadow:0 18px 50px -12px rgba(0,0,0,.75);z-index:80;display:flex;flex-direction:column;overflow:hidden;}
.shaderlab-app #sl-quick.hidden{display:none;}
.shaderlab-app #sl-quick input{background:var(--sl-panel);border:none;border-bottom:1px solid var(--sl-border);outline:none;color:var(--sl-text);padding:10px 12px;font-size:calc(12.5px * var(--text-scale));font-family:var(--sl-sans);}
.shaderlab-app #sl-qList{max-height:250px;overflow-y:auto;padding:5px;}
.shaderlab-app #sl-qList .p-item{margin-bottom:3px;background:none;border-color:transparent;}
.shaderlab-app #sl-qList .p-item:hover{background:var(--sl-panel3);border-color:var(--sl-border);transform:none;}
.shaderlab-app #sl-preview{width:308px;flex:0 0 308px;background:var(--sl-panel);border-left:1px solid var(--sl-border);display:flex;flex-direction:column;min-height:0;overflow:hidden;}
.shaderlab-app .pv-bar{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--sl-border);flex:0 0 auto;flex-wrap:wrap;}
.shaderlab-app .seg{display:flex;background:var(--sl-panel2);border:1px solid var(--sl-border);border-radius:8px;padding:2px;}
.shaderlab-app .seg button{background:none;border:none;color:var(--sl-muted);padding:4px 7px;border-radius:6px;cursor:pointer;display:flex;}
.shaderlab-app .seg button:hover{color:var(--sl-text);}
.shaderlab-app .seg button.on{background:var(--sl-panel3);color:var(--sl-accent);}
.shaderlab-app .ibtn{display:flex;align-items:center;justify-content:center;background:var(--sl-panel2);border:1px solid var(--sl-border);border-radius:8px;color:var(--sl-muted);cursor:pointer;padding:5px 7px;}
.shaderlab-app .ibtn:hover{color:var(--sl-accent);border-color:var(--sl-border2);}
.shaderlab-app .spd{display:flex;align-items:center;gap:5px;flex:1;min-width:90px;color:var(--sl-faint);}
.shaderlab-app .mini{font-size:calc(10px * var(--text-scale));color:var(--sl-faint);}
.shaderlab-app #sl-pvWrap{position:relative;height:clamp(150px,30cqh,290px);flex:0 0 auto;background:#08090b;min-height:120px;}
.shaderlab-app #sl-gl{width:100%;height:100%;display:block;cursor:grab;touch-action:none;}
.shaderlab-app #sl-gl:active{cursor:grabbing;}
.shaderlab-app #sl-timeLbl{position:absolute;right:8px;bottom:8px;font-family:var(--sl-mono);font-size:calc(10px * var(--text-scale));color:var(--sl-accent);background:rgba(10,11,14,.72);padding:3px 7px;border-radius:5px;pointer-events:none;}
.shaderlab-app .code-head{display:flex;align-items:center;justify-content:space-between;padding:8px 10px 6px;flex:0 0 auto;}
.shaderlab-app .code-head span{font-family:var(--sl-mono);font-size:calc(10px * var(--text-scale));letter-spacing:.14em;color:var(--sl-faint);}
.shaderlab-app #sl-code{flex:1;margin:0 10px 10px;padding:10px 12px;background:#0a0b0e;border:1px solid var(--sl-border);border-radius:9px;font-family:var(--sl-mono);font-size:calc(10.5px * var(--text-scale));line-height:1.6;color:#c4cad6;overflow:auto;white-space:pre;min-height:0;}
.shaderlab-app #sl-code .k{color:var(--sl-accent);}
.shaderlab-app #sl-code .t{color:#5fd4b8;}
.shaderlab-app #sl-code .n{color:#f2a54a;}
.shaderlab-app #sl-code .b{color:#eef1f6;}
.shaderlab-app #sl-code .c{color:#565e6d;font-style:italic;}
.shaderlab-app #sl-toasts{position:absolute;right:14px;bottom:40px;display:flex;flex-direction:column;gap:8px;z-index:100;pointer-events:none;}
.shaderlab-app .sl-toast{background:var(--sl-panel2);border:1px solid var(--sl-border2);border-left:3px solid var(--sl-accent);border-radius:8px;padding:9px 14px;font-size:calc(12.5px * var(--text-scale));box-shadow:0 10px 30px -8px rgba(0,0,0,.7);opacity:0;transform:translateY(8px);transition:all .25s;max-width:320px;}
.shaderlab-app .sl-toast.err{border-left-color:var(--sl-danger);}
.shaderlab-app .sl-toast.show{opacity:1;transform:none;}
@container shaderlab (max-width:760px){.shaderlab-app #sl-main{flex-direction:column;}.shaderlab-app #sl-viewport{order:1;min-height:300px;}.shaderlab-app .spl-v,.shaderlab-app .spl-h{display:none;}.shaderlab-app .h-opt{display:none;}.shaderlab-app #sl-palette{order:2;width:auto !important;flex:0 0 auto !important;border-right:none;border-top:1px solid var(--sl-border);}.shaderlab-app .p-search{display:none;}.shaderlab-app #sl-palList{display:flex;gap:6px;overflow-x:auto;overflow-y:hidden;padding:8px 10px;}.shaderlab-app .p-title{display:none;}.shaderlab-app .p-sec{display:flex;gap:6px;}.shaderlab-app .p-item{white-space:nowrap;margin:0;}.shaderlab-app #sl-preview{order:3;width:auto !important;flex:0 0 auto !important;border-left:none;border-top:1px solid var(--sl-border);flex-direction:row;max-height:220px;}.shaderlab-app #sl-pvWrap{width:168px;height:auto !important;flex:0 0 168px;align-self:stretch;}.shaderlab-app .pv-bar{display:none;}.shaderlab-app #sl-code{margin:8px;}.shaderlab-app .hint{display:none;}}
/* SHADERLAB:END */

/* WORDLY:BEGIN */
/* ====================================================================
   WORDLY, traitement de texte (porté depuis une page autonome). Généré par
   _Tools/wordly-port/build.js : tout est scopé sous .wordly-app, ids préfixés
   « wd- », tailles de texte via --text-scale, unités de conteneur (cqw/cqh)
   à la place de vw/vh. Ne pas modifier à la main.
   ==================================================================== */
.wordly-app,.wordly-app[data-wd-theme="blue"]{
  --chrome:#2b579a; --chrome-dark:#1f4270; --chrome-deep:#173155;
  --surface:#fff; --surface2:#fbfbfb; --panel:#fff; --card:#fff; --input:#fff; --toast:#fff;
  --ink:#14171a; --ink2:#2f3236; --muted:#52565c; --label:#62666c; --danger:#b02a2a;
  --border:#e3e1df; --line:#f0eeec; --hover:#eaf2fb; --checked:#d3e4f6; --bg:#d7dade;
}
.wordly-app[data-wd-theme="green"]{
  --chrome:#217346; --chrome-dark:#185634; --chrome-deep:#0e3a21;
  --hover:#e9f4ee; --checked:#cbe7d9; --bg:#d8ded9;
}
.wordly-app[data-wd-theme="purple"]{
  --chrome:#7719aa; --chrome-dark:#5b1285; --chrome-deep:#3f0c5e;
  --hover:#f3eaf9; --checked:#e6d4f4; --bg:#dcd6e0;
}
.wordly-app[data-wd-theme="gray"]{
  --chrome:#4a4a4a; --chrome-dark:#383838; --chrome-deep:#242424;
  --hover:#ececec; --checked:#dedede; --bg:#d9d9d9;
}
.wordly-app[data-wd-theme="dark"]{
  color-scheme:dark;
  --chrome:#2d2d2d; --chrome-dark:#252525; --chrome-deep:#181818;
  --surface:#333; --surface2:#3a3a3a; --panel:#2b2b2b; --card:#333; --input:#2f2f2f; --toast:#3a3a3a;
  --ink:#e6e6e6; --ink2:#c9c9c9; --muted:#a8a8a8; --label:#9a9a9a; --danger:#ff9a9a;
  --border:#474747; --line:#3d3d3d; --hover:#414141; --checked:#4d4d4d; --bg:#1c1c1c;
}
.wordly-app[data-wd-theme="red"]{
  --chrome:#a4262c; --chrome-dark:#801d22; --chrome-deep:#5c1519;
  --hover:#fbeaeb; --checked:#f3cfd1; --bg:#ddd6d6;
}
.wordly-app[data-wd-theme="orange"]{
  --chrome:#c43e1c; --chrome-dark:#9c3016; --chrome-deep:#70220f;
  --hover:#fcefe9; --checked:#f6d6c9; --bg:#ddd9d6;
}
.wordly-app[data-wd-theme="amber"]{
  --chrome:#8a6500; --chrome-dark:#6e5000; --chrome-deep:#503a00;
  --hover:#fdf6dd; --checked:#f6e7a8; --bg:#dedbd0;
}
.wordly-app[data-wd-theme="teal"]{
  --chrome:#02706f; --chrome-dark:#02595a; --chrome-deep:#013f40;
  --hover:#e6f5f5; --checked:#c5e6e7; --bg:#d5dcdc;
}
.wordly-app[data-wd-theme="pink"]{
  --chrome:#c2397a; --chrome-dark:#9a2d61; --chrome-deep:#701f46;
  --hover:#fbeaf2; --checked:#f4cfe1; --bg:#ddd5d9;
}
.wordly-app[data-wd-theme="indigo"]{
  --chrome:#4f52b2; --chrome-dark:#3c3f8c; --chrome-deep:#2a2c63;
  --hover:#ecedf9; --checked:#d3d5f0; --bg:#d8d8e0;
}
.wordly-app[data-wd-theme="sepia"]{
  --chrome:#8a6a3d; --chrome-dark:#6c5230; --chrome-deep:#4d3a21;
  --surface:#fbf6ea; --surface2:#f6efdf; --panel:#fbf6ea; --card:#fbf6ea; --input:#fffaf0; --toast:#fbf6ea;
  --ink:#3b2f1e; --ink2:#5a4a33; --muted:#7d6b4f; --label:#8c7a5c;
  --border:#e0d4ba; --line:#eadfc8; --hover:#f1e5cc; --checked:#e6d4ae; --bg:#d8cfba;
}
.wordly-app[data-wd-theme="midnight"]{
  color-scheme:dark;
  --chrome:#1b2a49; --chrome-dark:#16223c; --chrome-deep:#0f172b;
  --surface:#1e293b; --surface2:#243146; --panel:#172033; --card:#1e293b; --input:#1a2438; --toast:#243146;
  --ink:#e2e8f0; --ink2:#cbd5e1; --muted:#94a3b8; --label:#8493ab; --danger:#ff9a9a;
  --border:#334155; --line:#2b394f; --hover:#2a3a55; --checked:#36507a; --bg:#0f172a;
}
.wordly-app[data-wd-theme="oled"]{
  color-scheme:dark;
  --chrome:#111111; --chrome-dark:#0a0a0a; --chrome-deep:#000000;
  --surface:#121212; --surface2:#181818; --panel:#0d0d0d; --card:#121212; --input:#0f0f0f; --toast:#181818;
  --ink:#e8e8e8; --ink2:#cfcfcf; --muted:#a0a0a0; --label:#8e8e8e; --danger:#ff9a9a;
  --border:#2a2a2a; --line:#1f1f1f; --hover:#222222; --checked:#333333; --bg:#000000;
}
.wordly-app[data-wd-theme="contrast"]{
  --chrome:#000000; --chrome-dark:#000000; --chrome-deep:#000000;
  --surface:#ffffff; --surface2:#ffffff; --panel:#ffffff; --card:#ffffff; --input:#ffffff; --toast:#ffffff;
  --ink:#000000; --ink2:#000000; --muted:#222222; --label:#222222;
  --border:#000000; --line:#555555; --hover:#fff3b0; --checked:#ffd800; --bg:#bdbdbd;
}
.wordly-app *{box-sizing:border-box}
.wordly-app{margin:0;font-family:"Segoe UI","Helvetica Neue",Arial,sans-serif;font-size:calc(13px * var(--text-scale));color:var(--ink);overflow:hidden;background:var(--bg)}
.wordly-app button{font-family:inherit;font-size:inherit;border:none;background:none;cursor:pointer;color:inherit;padding:0}
.wordly-app input,.wordly-app select{font-family:inherit}
.wordly-app button:focus-visible,.wordly-app select:focus-visible,.wordly-app input:focus-visible,.wordly-app [contenteditable]:focus-visible{outline:2px solid var(--checked);outline-offset:1px}
.wordly-app #wd-app{display:flex;flex-direction:column;height:100%}
.wordly-app #wd-titlebar{position:relative;height:42px;background:var(--chrome);color:#fff;display:flex;align-items:center;padding:0 10px;flex:none;z-index:60}
.wordly-app #wd-logo{width:26px;height:26px;background:var(--chrome-deep);color:#fff;display:grid;place-items:center;font-weight:700;font-size:calc(15px * var(--text-scale));border-radius:3px;font-family:Cambria,Georgia,serif;margin-right:8px}
.wordly-app #wd-brand{font-size:calc(14px * var(--text-scale));font-weight:600;letter-spacing:.2px}
.wordly-app #wd-docName{position:absolute;left:50%;transform:translateX(-50%);width:280px;background:rgba(255,255,255,.0);border:1px solid transparent;color:#fff;text-align:center;font-size:calc(13px * var(--text-scale));padding:4px 8px;border-radius:2px;outline:none}
.wordly-app #wd-docName:hover{background:rgba(255,255,255,.10)}
.wordly-app #wd-docName:focus{background:#fff;color:var(--ink);border-color:#fff}
.wordly-app #wd-verTag{margin-left:8px;font-size:calc(10.5px * var(--text-scale));font-weight:600;letter-spacing:.3px;padding:1px 6px;border-radius:9px;background:rgba(255,255,255,.18);color:#fff;line-height:15px}
.wordly-app #wd-qat{margin-left:auto;display:flex;align-items:center;gap:1px}
.wordly-app .qbtn{width:32px;height:30px;display:grid;place-items:center;color:#eaf1fb;border-radius:2px}
.wordly-app .qbtn.dis{opacity:.4}
.wordly-app .qbtn:hover{background:rgba(255,255,255,.16)}
.wordly-app .qsep{width:1px;height:18px;background:rgba(255,255,255,.25);margin:0 6px}
.wordly-app #wd-tabstrip{height:35px;background:var(--chrome);display:flex;align-items:stretch;padding:0 10px;flex:none;z-index:55}
.wordly-app .tab{color:#dbe6f5;padding:0 15px;font-size:calc(12.5px * var(--text-scale));display:flex;align-items:center;border-radius:3px 3px 0 0}
.wordly-app .tab:hover{background:rgba(255,255,255,.12);color:#fff}
.wordly-app .tab.active{background:rgba(255,255,255,.18);color:#fff;font-weight:600}
.wordly-app .tab.file{font-weight:600;color:#fff}
.wordly-app #wd-minBtn{margin-left:auto;align-self:center;width:28px;height:24px;display:grid;place-items:center;color:#dbe6f5;border-radius:2px}
.wordly-app #wd-minBtn:hover{background:rgba(255,255,255,.16)}
.wordly-app #wd-ribbon{background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:stretch;padding:5px 8px 0;overflow-x:auto;flex:none;min-height:96px}
.wordly-app.rbmin #wd-ribbon{display:none}
.wordly-app .rgroup{display:flex;flex-direction:column;padding:2px 12px 0}
.wordly-app .rgroup + .rgroup{border-left:1px solid var(--border)}
.wordly-app .ritems{display:flex;flex-direction:column;gap:3px}
.wordly-app .rrow{display:flex;align-items:center;gap:1px}
.wordly-app .rcol{display:flex;flex-direction:column;gap:2px;justify-content:flex-start}
.wordly-app .rrow.fill{gap:4px;align-self:stretch}
.wordly-app .ritems>.rrow:has(+.rrow.fill){justify-content:center}
.wordly-app .rrow.fill>.tbtn{flex:1 1 0;justify-content:center;white-space:nowrap}
.wordly-app .rlabel{text-align:center;color:var(--label);font-size:calc(10.5px * var(--text-scale));margin-top:auto;padding:4px 0 3px}
.wordly-app .rb{width:28px;height:28px;display:grid;place-items:center;border-radius:2px;color:var(--ink);border:1px solid transparent}
.wordly-app .rb:hover{background:var(--hover);border-color:var(--checked)}
.wordly-app .rb.on{background:var(--checked);border-color:var(--checked);color:var(--chrome)}
.wordly-app .rb.big{width:auto;min-width:58px;height:64px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:4px 10px;font-size:calc(11px * var(--text-scale));color:var(--ink)}
.wordly-app .rb.big:hover{background:var(--hover)}
.wordly-app .rb.big.on,.wordly-app .rb.big[data-x="on"]{background:var(--checked)}
.wordly-app .rb.big svg{flex:none}
.wordly-app .tbtn{height:26px;padding:0 9px;border:1px solid var(--border);border-radius:2px;display:inline-flex;align-items:center;gap:5px;font-size:calc(12px * var(--text-scale));color:var(--ink);background:var(--surface)}
.wordly-app .tbtn:hover{background:var(--hover);border-color:var(--checked)}
.wordly-app .tbtn.danger{color:var(--danger)}
.wordly-app .split{display:inline-flex}
.wordly-app .split .rb{width:26px}
.wordly-app .split .arr{width:14px}
.wordly-app .vsep{width:1px;align-self:stretch;background:var(--border);margin:3px 4px}
.wordly-app .selwrap select{height:28px;border:1px solid var(--border);background:var(--surface2);color:var(--ink);font-size:calc(12px * var(--text-scale));padding:0 20px 0 8px;appearance:none;border-radius:2px;outline:none;background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6" viewBox="0 0 10 6"><path d="M1 1l4 4 4-4" fill="none" stroke="%23888" stroke-width="1.4"/></svg>');background-repeat:no-repeat;background-position:right 6px center}
.wordly-app .selwrap select:focus{border-color:var(--chrome)}
.wordly-app #fontFamily{width:138px}
.wordly-app #fontSize{width:58px}
.wordly-app .gal{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));grid-auto-rows:29px;gap:4px;width:100%}
.wordly-app .rg-styles{flex:1 1 auto;min-width:190px}
.wordly-app .rg-styles .ritems,.wordly-app .rg-styles .rrow{min-width:0;width:100%}
@container wordly (max-width:990px){
.wordly-app .rg-styles{display:none}
}
.wordly-app .sty{grid-column:span 2;min-width:0;border:1px solid var(--border);background:#fff;display:flex;align-items:center;justify-content:center;padding:0 4px;overflow:hidden;border-radius:3px;white-space:nowrap}
.wordly-app .sty:nth-child(n+4){grid-column:span 3}
.wordly-app .sty:hover{border-color:var(--chrome);box-shadow:inset 0 0 0 1px var(--chrome)}
.wordly-app .sty.on{border-color:var(--chrome);box-shadow:inset 0 0 0 2px var(--chrome)}
.wordly-app .sty .sp{line-height:1.1;overflow:hidden;text-overflow:ellipsis;font-family:Calibri,Carlito,sans-serif}
.wordly-app .sp-normal{font-size:12px;color:#222}
.wordly-app .sp-h1{font-family:'Calibri Light',Calibri,sans-serif;font-size:15px;color:#2F5496}
.wordly-app .sp-h2{font-family:'Calibri Light',Calibri,sans-serif;font-size:13.5px;color:#2F5496}
.wordly-app .sp-h3{font-family:'Calibri Light',Calibri,sans-serif;font-size:12.5px;color:#1F3763}
.wordly-app .sp-quote{font-style:italic;color:#404040;font-size:12px}
.wordly-app #wd-main{flex:1;display:flex;min-height:0}
.wordly-app #wd-navPane{width:230px;background:var(--panel);border-right:1px solid var(--border);flex:none;display:flex;flex-direction:column}
.wordly-app #wd-navPane.hidden{display:none}
.wordly-app .nv-head{display:flex;align-items:center;justify-content:space-between;padding:12px 10px 8px 14px;font-size:calc(12px * var(--text-scale));font-weight:600;color:var(--muted);letter-spacing:.3px;border-bottom:1px solid var(--line)}
.wordly-app #wd-navList{flex:1;overflow:auto;padding:8px 6px}
.wordly-app .nv{padding:5px 8px;border-radius:2px;font-size:calc(12px * var(--text-scale));color:var(--ink);cursor:pointer;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wordly-app .nv:hover{background:var(--hover);color:var(--chrome)}
.wordly-app .nv .nvp{float:right;color:var(--label);font-size:calc(10px * var(--text-scale))}
.wordly-app .nv.l2{padding-left:24px}
.wordly-app .nv.l3{padding-left:40px}
.wordly-app .nv.l4{padding-left:54px}
.wordly-app .nv-tabs{display:flex;gap:2px}
.wordly-app .nv-tabs button{font-size:calc(11px * var(--text-scale));padding:2px 8px;border-radius:10px;color:var(--ink2);letter-spacing:0}
.wordly-app .nv-tabs button:hover{background:var(--hover)}
.wordly-app .nv-tabs button.on{background:var(--checked);color:var(--ink);font-weight:600}
.wordly-app .nv-pages{display:flex;flex-direction:column;gap:10px;padding:10px 0 20px;align-items:center}
.wordly-app .pgt{position:relative;width:196px;cursor:pointer;border-radius:4px;padding:5px 5px 3px;outline:none}
.wordly-app .pgt:hover,.wordly-app .pgt:focus-visible{background:var(--hover)}
.wordly-app .pgt.cur{box-shadow:0 0 0 2px var(--chrome)}
.wordly-app .pgt.dragging{opacity:.4}
.wordly-app .pgt-box{position:relative;overflow:hidden;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.35)}
.wordly-app .pgt-sheet{position:absolute;left:0;top:0;transform-origin:0 0;pointer-events:none;user-select:none;overflow:hidden}
.wordly-app .pgt-sheet *{pointer-events:none}
.wordly-app .pgt-lab{text-align:center;font-size:calc(11px * var(--text-scale));color:var(--label);margin-top:4px}
.wordly-app .pgt-act{position:absolute;top:9px;right:9px;display:none;gap:1px;background:var(--card);border:1px solid var(--border);border-radius:4px;padding:1px;z-index:2;box-shadow:0 2px 6px rgba(0,0,0,.25)}
.wordly-app .pgt:hover .pgt-act,.wordly-app .pgt:focus-within .pgt-act{display:flex}
.wordly-app .pgt-act button{width:22px;height:22px;display:grid;place-items:center;border-radius:3px;color:var(--ink)}
.wordly-app .pgt-act button:hover{background:var(--hover)}
.wordly-app .pgt-act button.danger{color:var(--danger)}
.wordly-app .pgt-act button:disabled{opacity:.35;pointer-events:none}
.wordly-app .pgt.drop-before::before,.wordly-app .pgt.drop-after::after{content:"";position:absolute;left:4px;right:4px;height:3px;border-radius:2px;background:var(--chrome);z-index:3}
.wordly-app .pgt.drop-before::before{top:-3px}
.wordly-app .pgt.drop-after::after{bottom:-3px}
.wordly-app .nv-empty{padding:10px;color:var(--label);font-size:calc(12px * var(--text-scale));line-height:1.5}
.wordly-app #wd-workspace{position:relative;flex:1;min-width:0;overflow:hidden}
.wordly-app #wd-scroller{position:absolute;inset:0;overflow:auto;padding:26px 0 70px}
.wordly-app #wd-pageWrap{display:flex;flex-direction:column;align-items:flex-start;zoom:1}
.wordly-app #wd-pageWrap>#wd-ruler,.wordly-app #wd-pageWrap>#wd-pageBox{margin-left:auto;margin-right:auto}
.wordly-app #wd-ruler{position:sticky;top:0;z-index:4;margin-bottom:12px;flex:none}
.wordly-app #wd-pageBox{position:relative;flex:none}
.wordly-app #wd-page{background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.3),0 8px 26px rgba(0,0,0,.14);outline:none;flex:none;caret-color:#000}
.wordly-app #wd-page ::selection{background:#b4d5fe}
.wordly-app #wd-page img{cursor:pointer}
.wordly-app #wd-pgOverlay{position:absolute;inset:0;pointer-events:none;z-index:5}
.wordly-app .pgline{position:absolute;left:0;right:0;height:0;border-top:1px dashed #a9b8cd}
.wordly-app .pgfn{position:absolute;font:9pt Calibri,Carlito,'Segoe UI',sans-serif;color:#222;line-height:1.25;overflow:hidden;pointer-events:none}
.wordly-app .pgfn .sep{width:34%;border-top:1px solid #555;margin:0 0 5px}
.wordly-app .pgfn .fni{margin:0 0 3px;pointer-events:auto;cursor:pointer}
.wordly-app .pgfn .fni p{display:inline;margin:0}
.wordly-app .pgfn .fni p+p{display:block;margin-top:2px}
.wordly-app .pgfn .fnn{font-size:.75em;margin-right:2px;color:#2b579a;font-weight:600}
.wordly-app .pgsep{position:absolute;left:-30px;right:-30px;background:var(--bg);box-shadow:inset 0 7px 6px -7px rgba(0,0,0,.35),inset 0 -7px 6px -7px rgba(0,0,0,.35)}
.wordly-app .pghf{position:absolute;font:9pt Calibri,Carlito,'Segoe UI',sans-serif;color:#555;line-height:1.25;overflow:hidden}
.wordly-app .pghf p{margin:0}
.wordly-app .pgline span{position:absolute;right:8px;top:-16px;font-size:calc(9px * var(--text-scale));color:#7d8ca3;background:var(--page-bg,#fff);padding:0 5px;border-radius:2px;letter-spacing:.3px}
.wordly-app #wd-imgOv{position:absolute;border:1.5px solid var(--chrome);pointer-events:none;z-index:20}
.wordly-app .imgdrop{position:absolute;width:3px;background:var(--chrome);box-shadow:0 0 0 1px #fff;pointer-events:none;z-index:21;border-radius:2px}
.wordly-app .imgdrop[hidden]{display:none}
.wordly-app #wd-page img.imgdrag{opacity:.4}
.wordly-app #wd-page.img-moving,.wordly-app #wd-page.img-moving *{cursor:grabbing!important}
.wordly-app .ioh{position:absolute;width:10px;height:10px;background:#fff;border:1.5px solid var(--chrome);pointer-events:auto;border-radius:1px}
.wordly-app .ioh[data-h="nw"]{left:-6px;top:-6px;cursor:nwse-resize}
.wordly-app .ioh[data-h="ne"]{right:-6px;top:-6px;cursor:nesw-resize}
.wordly-app .ioh[data-h="sw"]{left:-6px;bottom:-6px;cursor:nesw-resize}
.wordly-app .ioh[data-h="se"]{right:-6px;bottom:-6px;cursor:nwse-resize}
.wordly-app #wd-selBar{position:absolute;display:flex;align-items:center;background:var(--card);border:1px solid var(--border);border-radius:4px;box-shadow:0 6px 20px rgba(0,0,0,.28);padding:3px;z-index:900}
.wordly-app #wd-selBar[hidden]{display:none}
::highlight(wf-all){background:#ffe58a;color:#000}
::highlight(wf-cur){background:#ff9632;color:#000}
.wordly-app #wd-selBar .rb{width:28px;height:28px}
.wordly-app #wd-selBar .vsep{margin:3px 2px;height:20px}
.wordly-app.focusmode #wd-tabstrip,.wordly-app.focusmode #wd-ribbon,.wordly-app.focusmode #wd-statusbar,.wordly-app.focusmode #wd-ruler{display:none!important}
.wordly-app.focusmode #wd-navPane{display:none!important}
.wordly-app.focusmode #wd-scroller{padding-top:34px}
.wordly-app .docbody.foc-on>*{opacity:.22;transition:opacity .25s ease}
.wordly-app .docbody.foc-on>.foc-cur{opacity:1}
.wordly-app #wd-findPane{position:absolute;top:14px;right:22px;background:var(--panel);border:1px solid var(--border);box-shadow:0 8px 26px rgba(0,0,0,.22);padding:10px;z-index:30;width:340px;border-radius:2px}
.wordly-app .fp-row{display:flex;gap:5px;align-items:center;margin-bottom:6px}
.wordly-app .fp-row:last-child{margin-bottom:0}
.wordly-app .fp-row input{flex:1;height:28px;border:1px solid var(--border);padding:0 8px;font-size:calc(12.5px * var(--text-scale));border-radius:2px;outline:none;min-width:0;background:var(--input);color:var(--ink)}
.wordly-app .fp-row input:focus{border-color:var(--chrome)}
.wordly-app #wd-findCount{font-size:calc(11px * var(--text-scale));color:var(--muted);min-width:44px;text-align:center}
.wordly-app .fbtn{width:26px;height:26px;display:grid;place-items:center;border:1px solid var(--border);border-radius:2px;color:var(--ink);background:var(--surface2)}
.wordly-app .fbtn:hover{background:var(--hover);border-color:var(--checked)}
.wordly-app .fbtn.t{width:auto;padding:0 10px;font-size:calc(12px * var(--text-scale))}
.wordly-app .fbtn.fo{width:auto;padding:0 7px;font-size:calc(10.5px * var(--text-scale));font-weight:700}
.wordly-app .fbtn.on{background:var(--checked);border-color:var(--checked);color:var(--chrome)}
.wordly-app #wd-statusbar{height:26px;background:var(--chrome);color:#fff;display:flex;align-items:center;flex:none;font-size:calc(11.5px * var(--text-scale));z-index:50}
.wordly-app .stitem{height:100%;display:flex;align-items:center;padding:0 11px;gap:5px}
.wordly-app .stitem.click:hover{background:rgba(255,255,255,.14);cursor:pointer}
.wordly-app .stsep{width:1px;height:14px;background:rgba(255,255,255,.3)}
.wordly-app #wd-stRight{margin-left:auto;display:flex;align-items:center;height:100%;padding-right:6px}
.wordly-app #wd-zoomRange{width:120px;accent-color:var(--chrome);cursor:pointer}
.wordly-app .zbtn{width:24px;height:22px;display:grid;place-items:center;border-radius:2px;font-size:calc(15px * var(--text-scale));line-height:1}
.wordly-app .zbtn:hover{background:rgba(255,255,255,.16)}
.wordly-app #wd-zoomVal{min-width:44px;text-align:center}
.wordly-app #wd-backstage{position:absolute;inset:0;background:var(--chrome);z-index:200;display:none;color:#fff}
.wordly-app #wd-backstage.open{display:flex}
.wordly-app .bs-nav{width:220px;background:var(--chrome-dark);flex:none;padding-top:14px;display:flex;flex-direction:column}
.wordly-app .bs-back{display:flex;align-items:center;gap:10px;padding:14px 20px;font-size:calc(16px * var(--text-scale));font-weight:600;color:#fff;text-align:left}
.wordly-app .bs-back:hover{background:rgba(255,255,255,.10)}
.wordly-app .bs-item{display:flex;align-items:center;gap:12px;padding:12px 20px;color:#d5e2f3;font-size:calc(13px * var(--text-scale));text-align:left;border-left:3px solid transparent}
.wordly-app .bs-item:hover{background:rgba(255,255,255,.09);color:#fff}
.wordly-app .bs-item.active{background:rgba(255,255,255,.13);color:#fff;border-left-color:#fff;font-weight:600}
.wordly-app .bs-body{flex:1;overflow:auto;padding:38px 52px}
.wordly-app .bs-body h2{font-size:calc(21px * var(--text-scale));font-weight:300;margin:0 0 18px}
.wordly-app .bs-sub{margin:26px 0 10px;font-size:calc(14px * var(--text-scale));font-weight:600}
.wordly-app .card{background:var(--card);color:var(--ink);border-radius:3px;padding:20px 24px;max-width:560px;box-shadow:0 2px 10px rgba(0,0,0,.18)}
.wordly-app .card p{margin:6px 0 14px;color:var(--ink2);line-height:1.55}
.wordly-app .wbtn{border:1px solid var(--border);background:var(--surface);color:var(--ink);padding:7px 16px;border-radius:2px;font-size:calc(12.5px * var(--text-scale))}
.wordly-app .wbtn:hover{background:var(--hover);border-color:var(--checked)}
.wordly-app .wbtn.primary{background:var(--chrome);border-color:var(--chrome);color:#fff}
.wordly-app .wbtn.primary:hover{filter:brightness(1.12);background:var(--chrome)}
.wordly-app .info-grid{display:grid;grid-template-columns:auto 1fr;gap:7px 22px;font-size:calc(13px * var(--text-scale))}
.wordly-app .info-grid span{color:var(--muted)}
.wordly-app .info-grid strong{font-weight:600}
.wordly-app .card-actions{margin-top:16px;display:flex;gap:8px;flex-wrap:wrap}
.wordly-app .new-grid{display:flex;gap:18px;flex-wrap:wrap}
.wordly-app .new-card{width:200px;background:var(--card);color:var(--ink);border-radius:3px;padding:20px;display:flex;flex-direction:column;align-items:center;gap:12px;box-shadow:0 2px 10px rgba(0,0,0,.18);text-align:center}
.wordly-app .new-card:hover{outline:3px solid rgba(255,255,255,.55)}
.wordly-app .wnp{width:92px;height:120px;background:#fdfdfd;border:1px solid #d6d6d6;display:block}
.wordly-app .wnp i{display:block;height:2px;background:#ccd0d5;margin:7px 13px 0}
.wordly-app .wnp i:first-child{height:6px;background:var(--chrome);margin-top:20px}
.wordly-app .nl{font-size:calc(12.5px * var(--text-scale))}
.wordly-app .new-card small{display:block;color:var(--label);margin-top:3px;font-size:calc(11px * var(--text-scale));line-height:1.35}
.wordly-app .f-label{display:block;font-size:calc(12px * var(--text-scale));color:var(--muted);margin:10px 0 4px}
.wordly-app .f-input{width:100%;height:30px;border:1px solid var(--border);padding:0 9px;font-size:calc(13px * var(--text-scale));border-radius:2px;outline:none;background:var(--input);color:var(--ink)}
.wordly-app .f-input:focus{border-color:var(--chrome)}
.wordly-app .fmt{display:flex;gap:10px;align-items:flex-start;padding:9px 10px;border:1px solid var(--border);border-radius:2px;margin-top:8px;cursor:pointer}
.wordly-app .fmt:hover{background:var(--hover);border-color:var(--checked)}
.wordly-app .fmt input{margin-top:3px;accent-color:var(--chrome)}
.wordly-app .fmt small{display:block;color:var(--label);margin-top:2px}
.wordly-app .bs-note{margin-top:22px;font-size:calc(12px * var(--text-scale));color:#eef3fa;max-width:560px;line-height:1.6}
.wordly-app .flyout{position:absolute;background:var(--card);border:1px solid var(--border);box-shadow:0 8px 28px rgba(0,0,0,.24);padding:8px;z-index:1000;border-radius:2px;color:var(--ink)}
.wordly-app .fly-title{font-size:calc(11px * var(--text-scale));color:var(--label);padding:0 4px 7px;border-bottom:1px solid var(--line);margin-bottom:8px;min-width:180px}
.wordly-app .cgrid{display:grid;grid-template-columns:repeat(10,22px);gap:3px}
.wordly-app .csw{width:22px;height:22px;border:1px solid rgba(128,128,128,.4);border-radius:1px}
.wordly-app .csw:hover{outline:2px solid var(--chrome);outline-offset:-1px}
.wordly-app .c-none{display:flex;align-items:center;gap:8px;margin-top:8px;padding:5px 6px;font-size:calc(12px * var(--text-scale));color:var(--ink);border-radius:2px;width:100%}
.wordly-app .c-none:hover{background:var(--hover)}
.wordly-app .c-none .sw{width:16px;height:16px;border:1px solid var(--border);position:relative;background:#fff}
.wordly-app .c-none .sw::after{content:'';position:absolute;left:-2px;right:-2px;top:50%;height:2px;background:#c00;transform:rotate(-45deg)}
.wordly-app .c-custom{display:flex;align-items:center;gap:8px;margin-top:4px;padding:5px 6px;font-size:calc(12px * var(--text-scale));color:var(--ink);cursor:pointer;border-radius:2px}
.wordly-app .c-custom:hover{background:var(--hover)}
.wordly-app .c-custom input{width:34px;height:24px;padding:0;border:1px solid var(--border);background:#fff;cursor:pointer}
.wordly-app .opt{display:flex;align-items:center;gap:12px;width:100%;padding:6px 8px;border-radius:2px;text-align:left}
.wordly-app .opt:hover{background:var(--hover)}
.wordly-app .opt .op{width:22px;height:28px;background:#fff;border:1px solid #b9bcc1;position:relative;flex:none}
.wordly-app .opt .op i{position:absolute;background:#e9edf2}
.wordly-app .opt .ol{line-height:1.25}
.wordly-app .opt small{color:var(--label);display:block}
.wordly-app .opt .ck{margin-left:auto;color:var(--chrome)}
.wordly-app .ls-line{display:inline-block;vertical-align:middle;margin-right:2px}
.wordly-app .tg-grid{display:grid;grid-template-columns:repeat(8,21px);gap:2px;padding:2px}
.wordly-app .tg{width:21px;height:21px;border:1px solid #c9ccd2;background:#fafbfc}
.wordly-app .tg.sel{background:var(--checked);border-color:var(--chrome)}
.wordly-app .tg-hint{text-align:center;font-size:calc(12px * var(--text-scale));color:var(--muted);padding:8px 0 2px}
.wordly-app .sym-grid{display:grid;grid-template-columns:repeat(8,32px);gap:2px}
.wordly-app .sym{width:32px;height:32px;display:grid;place-items:center;font-size:calc(15px * var(--text-scale));border:1px solid transparent;border-radius:2px;font-family:Cambria,Georgia,serif}
.wordly-app .sym:hover{background:var(--hover);border-color:var(--checked)}
.wordly-app .dlist button{display:flex;width:100%;padding:7px 9px;border-radius:2px;font-size:calc(12.5px * var(--text-scale));text-align:left;gap:8px;align-items:center}
.wordly-app .dlist button:hover{background:var(--hover)}
.wordly-app .f-actions{margin-top:12px;display:flex;justify-content:flex-end;gap:8px}
.wordly-app .df-bar{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end;margin-bottom:8px}
.wordly-app .df-bar label{display:flex;flex-direction:column;gap:3px;font-size:calc(11px * var(--text-scale));color:var(--label)}
.wordly-app .df-bar select{height:28px;border:1px solid var(--border);background:var(--input);color:var(--ink);padding:0 6px;max-width:260px}
.wordly-app .df-bar .df-only{flex-direction:row;align-items:center;gap:6px;font-size:calc(12px * var(--text-scale));color:var(--ink)}
.wordly-app .df-nav{display:flex;gap:3px;margin-left:auto}
.wordly-app .df-stat{display:flex;gap:14px;font-size:calc(12px * var(--text-scale));color:var(--ink2);margin-bottom:6px}
.wordly-app .df-s.ins{color:#1e7a46;font-weight:600}
.wordly-app .df-s.del{color:#b02a2a;font-weight:600}
.wordly-app .df-out{max-height:min(56cqh,520px);overflow:auto;border:1px solid var(--border);border-radius:3px;padding:6px 10px;background:var(--card);color:var(--ink);font-size:calc(13px * var(--text-scale));line-height:1.5}
.wordly-app .df-b{padding:3px 6px;border-left:3px solid transparent;margin:2px 0;color:var(--ink2)}
.wordly-app .df-b.df-h{font-weight:700;font-size:1.08em;color:var(--ink)}
.wordly-app .df-ins{border-left-color:#1e9a52;background:rgba(30,154,82,.10);color:var(--ink)}
.wordly-app .df-del{border-left-color:#c0392b;background:rgba(192,57,43,.10);color:var(--ink)}
.wordly-app .df-mod{border-left-color:#d19a00;background:rgba(209,154,0,.10);color:var(--ink)}
.wordly-app .df-b ins{background:rgba(30,154,82,.28);text-decoration:none;border-radius:2px}
.wordly-app .df-b del{background:rgba(192,57,43,.28);text-decoration:line-through;border-radius:2px}
.wordly-app .df-b.df-cur{outline:2px solid var(--chrome);outline-offset:1px}
.wordly-app #wd-modalCard.wide{width:min(940px,94%)!important;max-width:none!important}
.wordly-app .hf-diff{display:flex;gap:8px;align-items:center;margin:6px 0}
.wordly-app .hf-tabs{display:flex;gap:4px;margin-bottom:6px}
.wordly-app .hf-tabs .wbtn.on{background:var(--checked);border-color:var(--chrome)}
.wordly-app .hf-tabs[hidden],.wordly-app .hfe[hidden]{display:none}
.wordly-app .pn-opts{display:flex;gap:14px;align-items:center;padding:2px 4px 8px;font-size:calc(12px * var(--text-scale))}
.wordly-app .pn-opts label{display:flex;gap:5px;align-items:center;cursor:pointer}
.wordly-app .pn-row{display:flex;align-items:center;gap:6px;padding:3px 0}
.wordly-app .pn-l{width:82px;font-size:calc(12px * var(--text-scale));color:var(--ink2)}
.wordly-app .pn-pos{padding:2px;border:1px solid var(--border);border-radius:3px;color:var(--ink);background:var(--surface)}
.wordly-app .pn-pos:hover{background:var(--hover);border-color:var(--chrome)}
.wordly-app .theme-grid{display:grid;grid-template-columns:repeat(2,minmax(150px,1fr));gap:0 6px;max-height:min(420px,70cqh);overflow:auto}
.wordly-app .themeDot{width:16px;height:16px;border-radius:50%;border:1px solid rgba(128,128,128,.5);flex:none}
.wordly-app .hfe{min-height:120px;max-height:220px;overflow:auto;border:1px solid var(--border);padding:10px;background:var(--input);border-radius:2px;font-family:Calibri,Carlito,sans-serif;font-size:11pt;line-height:1.4}
.wordly-app .hfe:focus{outline:none;border-color:var(--chrome)}
.wordly-app .hfe p{margin:0 0 4pt}
.wordly-app .pgnum,.wordly-app .pgtotal{color:var(--label);font-style:italic;border:1px dashed #b9c4d4;padding:0 4px;border-radius:2px}
.wordly-app #wd-modalRoot{position:absolute;inset:0;background:rgba(18,32,52,.45);z-index:2000;display:grid;place-items:center}
.wordly-app #wd-modalRoot[hidden]{display:none}
.wordly-app #wd-modalCard{background:var(--card);color:var(--ink);border-radius:3px;width:460px;max-width:92cqw;box-shadow:0 14px 44px rgba(0,0,0,.35)}
.wordly-app #wd-modalTitle{padding:15px 20px 0;font-size:calc(16px * var(--text-scale));font-weight:600}
.wordly-app #wd-modalBody{padding:12px 20px;color:var(--ink);line-height:1.5;max-height:60cqh;overflow:auto}
.wordly-app #wd-modalBtns{padding:0 20px 16px;display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.wordly-app .stats div{display:flex;justify-content:space-between;padding:7px 2px;border-bottom:1px solid var(--line);font-size:calc(13px * var(--text-scale))}
.wordly-app .stats span{color:var(--muted)}
.wordly-app .ver{display:flex;justify-content:space-between;align-items:center;gap:10px;border-bottom:1px solid var(--line);padding:9px 2px}
.wordly-app .ver small{display:block;color:var(--muted);margin-top:2px}
.wordly-app .ver .vb{display:flex;gap:6px;flex:none}
.wordly-app .acr{display:flex;align-items:center;gap:10px;padding:7px 4px;border-bottom:1px solid var(--line)}
.wordly-app .acr .ar{color:var(--muted)}
.wordly-app .acr button{margin-left:auto;color:var(--muted)}
.wordly-app .acr button:hover{color:var(--danger)}
.wordly-app .hint{color:var(--muted);font-size:calc(12px * var(--text-scale));margin:0 0 10px}
.wordly-app #wd-cmdRoot{position:absolute;inset:0;background:transparent;z-index:3000;display:flex;justify-content:center;align-items:flex-start;padding-top:12cqh}
.wordly-app #wd-cmdBox{background:var(--card);width:520px;max-width:92cqw;border-radius:4px;border:1px solid var(--border);box-shadow:0 18px 50px rgba(0,0,0,.4);overflow:hidden}
.wordly-app #wd-cmdInput{width:100%;height:44px;border:none;border-bottom:1px solid var(--border);padding:0 16px;font-size:calc(14px * var(--text-scale));background:var(--input);color:var(--ink);outline:none}
.wordly-app #wd-cmdList{list-style:none;margin:0;padding:6px;max-height:320px;overflow:auto}
.wordly-app #wd-cmdList li{display:flex;justify-content:space-between;gap:12px;padding:8px 10px;border-radius:2px;font-size:calc(13px * var(--text-scale));cursor:pointer;color:var(--ink)}
.wordly-app #wd-cmdList li.sel{background:var(--checked)}
.wordly-app #wd-cmdList li.sel em{color:var(--ink2)}
.wordly-app #wd-cmdList li em{font-style:normal;color:var(--muted);font-size:calc(11px * var(--text-scale));flex:none}
.wordly-app #wd-cmdList li.none{color:var(--muted);cursor:default}
.wordly-app #wd-cmdFoot{padding:7px 12px;border-top:1px solid var(--line);color:var(--muted);font-size:calc(11px * var(--text-scale))}
.wordly-app #wd-toasts{position:absolute;right:18px;bottom:38px;z-index:4000;display:flex;flex-direction:column;gap:8px}
.wordly-app .wtoast{background:var(--toast);color:var(--ink);border-left:3px solid var(--chrome);box-shadow:0 6px 22px rgba(0,0,0,.3);padding:11px 12px;display:flex;align-items:center;gap:12px;font-size:calc(12.5px * var(--text-scale));border-radius:2px;max-width:380px;animation:wd-tin .18s ease}
.wordly-app .wtoast button.act{color:var(--chrome);font-weight:600}
.wordly-app .wtoast .tx{color:var(--muted);padding:2px}
.wordly-app .wtoast.out{opacity:0;transition:opacity .3s}
@keyframes wd-tin{from{transform:translateY(8px);opacity:0}}
.wordly-app #wd-dropHint{position:absolute;inset:14px;background:rgba(43,87,154,.88);border:2px dashed rgba(255,255,255,.85);z-index:5000;display:none;place-items:center;color:#fff;font-size:calc(20px * var(--text-scale));border-radius:6px}
.wordly-app #wd-dropHint.on{display:grid}
.wordly-app #wd-printHeader,.wordly-app #wd-printFooter{display:none;color:#000}
.wordly-app #wd-scroller::-webkit-scrollbar,.wordly-app #wd-navList::-webkit-scrollbar,.wordly-app #wd-cmdList::-webkit-scrollbar{width:11px;height:11px}
.wordly-app #wd-scroller::-webkit-scrollbar-thumb,.wordly-app #wd-navList::-webkit-scrollbar-thumb,.wordly-app #wd-cmdList::-webkit-scrollbar-thumb{background:#9aa0a8;border:3px solid transparent;border-radius:6px;background-clip:padding-box}
.wordly-app .docbody{font-family:Calibri,Carlito,'Segoe UI',sans-serif;font-size:11pt;line-height:1.15;color:#000}
.wordly-app .docbody p{margin:0 0 8pt}
.wordly-app .docbody>:first-child{margin-top:0}
.wordly-app .docbody h1{font-family:'Calibri Light',Calibri,sans-serif;font-size:16pt;font-weight:400;color:#2F5496;margin:12pt 0 2pt}
.wordly-app .docbody h2{font-family:'Calibri Light',Calibri,sans-serif;font-size:13pt;font-weight:400;color:#2F5496;margin:10pt 0 2pt}
.wordly-app .docbody h3{font-family:'Calibri Light',Calibri,sans-serif;font-size:12pt;font-weight:400;color:#1F3763;margin:10pt 0 2pt}
.wordly-app .docbody h4{font-size:11pt;font-weight:400;font-style:italic;color:#2F5496;margin:10pt 0 2pt}
.wordly-app .docbody h1,.wordly-app .docbody h2,.wordly-app .docbody h3,.wordly-app .docbody h4{scroll-margin-top:40px}
.wordly-app .docbody ul,.wordly-app .docbody ol{margin:0 0 8pt;padding-left:48px}
.wordly-app .docbody ul.chk{list-style:none;padding-left:8px}
.wordly-app .docbody ul.chk .ckb{margin-right:6px;vertical-align:-2px;accent-color:#2b579a}
.wordly-app .docbody ul.chk li.done{color:#8a8d92}
.wordly-app .docbody blockquote{font-style:italic;color:#404040;margin:8pt 0}
.wordly-app .docbody table{border-collapse:collapse;margin:8pt 0}
.wordly-app .docbody th{border:1px solid #7f7f7f;padding:3pt 8pt;background:#DEEAF6;font-weight:700;text-align:left;vertical-align:top}
.wordly-app .docbody td{border:1px solid #7f7f7f;padding:3pt 8pt;min-width:36px;vertical-align:top}
.wordly-app .docbody a{color:#0563C1;text-decoration:underline}
.wordly-app .docbody img{max-width:100%}
.wordly-app .docbody hr{border:none;border-top:1px solid #9aa0a8;margin:12pt 0}
.wordly-app .docbody pre{font-family:Consolas,'Courier New',monospace;font-size:10pt;background:#f4f5f7;border:1px solid #e3e1df;padding:8pt;margin:8pt 0;white-space:pre-wrap}
.wordly-app .docbody code{font-family:Consolas,'Courier New',monospace;background:#f4f5f7;padding:0 2px;border-radius:2px}
.wordly-app .docbody pre code{background:none;padding:0}
.wordly-app .docbody .fnref{vertical-align:super;font-size:.75em;color:#2b579a;cursor:pointer;font-weight:600;padding:0 1px}
.wordly-app .docbody .fnstore,.wordly-app .docbody .cmstore{display:none}
.wordly-app .docbody ins.tc{color:#1e7a46;text-decoration:underline;cursor:pointer}
.wordly-app .docbody del.tc{color:#b02a2a;text-decoration:line-through;cursor:pointer}
.wordly-app .docbody .cm{background:#fff3a6;border-bottom:2px solid #e0b73e;cursor:pointer}
.wordly-app .docbody .pagebreak{border-bottom:1px dashed #a9a9a9;margin:18px 0;position:relative;height:1px;user-select:none;display:block}
.wordly-app .docbody .pagebreak span{position:absolute;left:50%;top:0;transform:translate(-50%,-50%);background:var(--page-bg,#fff);color:#8a8a8a;font-size:8pt;padding:0 9px;letter-spacing:.5px}
.wordly-app .docbody .toc{border:1px solid #e3e1df;background:#fafbfc;padding:10pt 14pt 8pt;margin:8pt 0}
.wordly-app .docbody .toc-t{font-weight:600;font-size:12pt;color:#1f2328;margin-bottom:6pt}
.wordly-app .docbody .toc-e{display:flex;align-items:baseline;gap:4pt;color:#000;text-decoration:none;font-size:11pt;line-height:1.7;cursor:pointer;max-width:100%}
.wordly-app .docbody .toc-e .tx{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wordly-app .docbody .toc-e .ld{flex:1 1 auto;min-width:12pt;border-bottom:1pt dotted #999;transform:translateY(-3pt)}
.wordly-app .docbody .toc-e .pg{flex:none;font-size:10.5pt;color:#444}
.wordly-app .docbody .toc-e[data-lv="2"]{padding-left:18pt}
.wordly-app .docbody .toc-e[data-lv="3"]{padding-left:36pt}
.wordly-app .docbody .toc-f{margin-top:8pt;display:flex;gap:14pt}
.wordly-app .docbody .toc-f button{font-size:10pt;color:#2b579a;cursor:pointer;padding:0}

/* — mise en place dans la fenêtre — */
.wordly-app .docbody .pagebreak span{font-size:0;letter-spacing:0}
.wordly-app .docbody .pagebreak span::before{content:var(--wd-pb,"Saut de page");font-size:8pt;letter-spacing:.5px}
.wordly-app{position:relative;isolation:isolate;width:100%;height:100%;overflow:hidden;container:wordly/size;
  font-family:"Segoe UI Variable Text","Segoe UI",system-ui,sans-serif;font-size:calc(13px * var(--text-scale));color:var(--ink);background:var(--bg)}
.wordly-app .rb svg,.wordly-app .qbtn svg,.wordly-app .tbtn svg,.wordly-app .opt svg,.wordly-app .fbtn svg,.wordly-app .pgt-act svg,.wordly-app .toast svg,.wordly-app .wtoast svg{flex:none}
.wordly-app button{font-family:inherit}
.wordly-app .btn-row{display:flex;gap:8px;flex-wrap:wrap}
.wordly-app .bs-hint{margin-top:14px;color:var(--muted)}
.wordly-app .dest-row{display:flex;gap:18px;margin:2px 0 10px}
.wordly-app .dest{display:flex;gap:6px;align-items:center;cursor:pointer}
#wd-printFrame{position:absolute;left:-9999px;top:0;width:210mm;height:297mm;border:0;visibility:hidden}
/* — thème « WebOS » : suit le thème clair/sombre et la couleur d'accentuation du système — */
.wordly-app[data-wd-theme="webos"]{
  --chrome:color-mix(in srgb,var(--accent) 78%,#000); --chrome-dark:color-mix(in srgb,var(--accent) 56%,#000); --chrome-deep:color-mix(in srgb,var(--accent) 38%,#000);
  --surface:#ffffff; --surface2:#fafafa; --panel:#ffffff; --card:#ffffff; --input:#ffffff; --toast:#ffffff;
  --ink:#111; --ink2:#2b2b2b; --muted:#4a4e55; --label:#5a5e65;
  --border:#d6d3d0; --line:#f0eeec; --hover:color-mix(in srgb,var(--accent) 12%,#fff); --checked:color-mix(in srgb,var(--accent) 24%,#fff); --bg:#d9dce1;
}
html[data-theme=dark] .wordly-app[data-wd-theme="webos"]{
  color-scheme:dark;
  --surface:var(--solid2,#2b2b2b); --surface2:var(--solid,#202020); --panel:var(--solid,#202020); --card:var(--solid2,#2b2b2b); --input:var(--field,#2f2f2f); --toast:var(--solid2,#2b2b2b);
  --ink:#f2f2f2; --ink2:#d0d0d0; --muted:#a8a8a8; --label:#9a9a9a; --danger:#ff9a9a;
  --border:var(--stroke,#474747); --line:var(--stroke,#3d3d3d); --hover:color-mix(in srgb,var(--accent) 24%,#303030); --checked:color-mix(in srgb,var(--accent) 38%,#303030); --bg:#161616;
}

/* WORDLY:END */

/* ===== Pastille de version commune (applications versionnées : Wordly, Sheetly, Strata, Nabla Forge, Creepy Amp) ===== */
.os-ver{display:inline-block;flex:none;margin-left:8px;padding:1px 7px;border-radius:999px;background:color-mix(in srgb,currentColor 16%,transparent);color:inherit;font-family:inherit;font-size:calc(10.5px * var(--text-scale));font-weight:600;font-style:normal;letter-spacing:.3px;line-height:15px;text-transform:none;white-space:nowrap}
.strata-app #strata-brand .os-ver{margin:0;color:var(--tx2)}
.sheetly-app #sh-brand .os-ver{margin-left:0;color:var(--inkm)}
.nabla-forge-app .nf-brand span.os-ver{display:inline-block;margin:0 0 0 2px;font-family:var(--nf-mono);font-size:calc(10px * var(--text-scale));letter-spacing:.06em;text-transform:none;color:var(--nf-tx2,var(--nf-tx3))}
.creepyamp-app .ca-brand .os-ver{margin-left:0;font-family:var(--ca-mono,inherit);font-size:calc(9.5px * var(--text-scale));letter-spacing:.1em;color:var(--ca-label)}
.sound-forge-app .sf-brand .os-ver{margin-left:0;font-family:inherit;letter-spacing:.3px;color:var(--sf-dim)}
.weird01-app .brand .w1-title{display:flex;align-items:center;gap:10px}
.weird01-app .brand .os-ver{margin-left:0;color:var(--w1-mut)}
