@sortsys/ui 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev.js +1 -1
- package/dist/dev.jsx +49 -49
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.jsx +49 -49
- package/dist/styles/default.css +1 -1
- package/package.json +1 -1
package/dist/index.jsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
function F(e){let t=()=>["ss_button",e.isIconOnly?"ss_button--icon":"",e.class??""].filter(Boolean).join(" ");return<button type={e.type??"button"}class={t()}disabled={e.disabled}aria-label={e.ariaLabel}form={e.form}onclick={e.onclick}>
|
|
2
2
|
{e.children}
|
|
3
|
-
</button>}function we(e){let{icon:t,color:l,class:i,style:r,children:o,...
|
|
3
|
+
</button>}function we(e){let{icon:t,color:l,class:i,style:r,children:o,...f}=e;return<div{...f}class={`ss_callout ss_callout--${l} ${i??""}`}style={r}>
|
|
4
4
|
<span class="ss_callout__icon">
|
|
5
5
|
{t}
|
|
6
6
|
</span>
|
|
@@ -16,7 +16,7 @@ function F(e){let t=()=>["ss_button",e.isIconOnly?"ss_button--icon":"",e.class??
|
|
|
16
16
|
</button>}
|
|
17
17
|
</div>}import{createEffect as ye,createMemo as V,createResource as ke,createSignal as j,For as N}from"solid-js";function Me(e){let t=V(()=>e.render(e.row)),[l]=ke(async()=>{let i=t();return i&&typeof i.then=="function"?await i:null});return<div>
|
|
18
18
|
{(()=>{let i=t();return i&&typeof i.then=="function"?l()??"":i})()}
|
|
19
|
-
</div>}function Ee(e){let[t,l]=j(-1),[i,r]=j(null),[o,
|
|
19
|
+
</div>}function Ee(e){let[t,l]=j(-1),[i,r]=j(null),[o,f]=j(1),a=()=>Math.max(1,e.pageSize??25),h=V(()=>{let k=t(),E=i();if(k<0||!E)return e.rows;let D=e.columns[k];if(!D?.sortKey)return e.rows;let u=e.rows.map((b,n)=>({row:b,idx:n,key:D.sortKey(b)}));return u.sort((b,n)=>b.key===n.key?b.idx-n.idx:b.key<n.key?E==="asc"?-1:1:E==="asc"?1:-1),u.map(b=>b.row)}),c=V(()=>Math.max(1,Math.ceil(h().length/a()))),d=V(()=>{let E=(Math.min(o(),c())-1)*a();return h().slice(E,E+a())});ye(()=>{o()>c()&&f(c())});let s=k=>{if(t()!==k){l(k),r("asc"),f(1);return}if(i()==="asc"){r("desc");return}if(i()==="desc"){l(-1),r(null),f(1);return}r("asc"),f(1)},v=k=>{let E=Math.min(Math.max(1,k),c());f(E)},_=()=>e.paginationPosition??"bottom",y=()=>`ss_table ${_()==="top"?"ss_table--pagination-top":""} ${e.class??""}`,M=()=><div class="ss_table__pagination">
|
|
20
20
|
<button type="button"class="ss_table__page_button"disabled={o()===1}aria-label="Erste Seite"onclick={()=>v(1)}>
|
|
21
21
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-left-pipe"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M7 6v12"/><path d="M18 6l-6 6l6 6"/></svg>
|
|
22
22
|
</button>
|
|
@@ -24,12 +24,12 @@ function F(e){let t=()=>["ss_button",e.isIconOnly?"ss_button--icon":"",e.class??
|
|
|
24
24
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-left"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M15 6l-6 6l6 6"/></svg>
|
|
25
25
|
</button>
|
|
26
26
|
<span class="ss_table__page_info">
|
|
27
|
-
Seite {o()} von {
|
|
27
|
+
Seite {o()} von {c()}
|
|
28
28
|
</span>
|
|
29
|
-
<button type="button"class="ss_table__page_button"disabled={o()===
|
|
29
|
+
<button type="button"class="ss_table__page_button"disabled={o()===c()}aria-label="Nächste Seite"onclick={()=>v(o()+1)}>
|
|
30
30
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-right"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M9 6l6 6l-6 6"/></svg>
|
|
31
31
|
</button>
|
|
32
|
-
<button type="button"class="ss_table__page_button"disabled={o()===
|
|
32
|
+
<button type="button"class="ss_table__page_button"disabled={o()===c()}aria-label="Letzte Seite"onclick={()=>v(c())}>
|
|
33
33
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-right-pipe"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M6 6l6 6l-6 6"/><path d="M17 5v13"/></svg>
|
|
34
34
|
</button>
|
|
35
35
|
</div>;return<div class={y()}style={e.style}>
|
|
@@ -64,84 +64,84 @@ function F(e){let t=()=>["ss_button",e.isIconOnly?"ss_button--icon":"",e.class??
|
|
|
64
64
|
</table>
|
|
65
65
|
</div>
|
|
66
66
|
{_()==="bottom"&&M()}
|
|
67
|
-
</div>}import{createSignal as K,For as Te,onCleanup as Q,onMount as Pe,Show as Ce,createEffect as De}from"solid-js";function Fe(e){let[t,l]=K(!1),[i,r]=K(!1),[o,
|
|
68
|
-
<button type="button"class="ss_dropdown__trigger ss_button ss_button--icon"aria-haspopup="menu"aria-expanded={t()}aria-label={e.ariaLabel??"Aktionen \xF6ffnen"}onclick={()=>l(
|
|
67
|
+
</div>}import{createSignal as K,For as Te,onCleanup as Q,onMount as Pe,Show as Ce,createEffect as De}from"solid-js";function Fe(e){let[t,l]=K(!1),[i,r]=K(!1),[o,f]=K("closed"),a,h=()=>l(!1);return De(()=>{if(t()){r(!0),requestAnimationFrame(()=>f("open"));return}if(!i())return;f("closed");let c=window.setTimeout(()=>r(!1),160);Q(()=>window.clearTimeout(c))}),Pe(()=>{let c=s=>{let v=s.target;!a||!v||a.contains(v)||h()},d=s=>{s.key==="Escape"&&h()};document.addEventListener("mousedown",c),window.addEventListener("keydown",d),Q(()=>{document.removeEventListener("mousedown",c),window.removeEventListener("keydown",d)})}),<div class={`ss_dropdown ${e.class??""}`}style={e.style}ref={c=>a=c}>
|
|
68
|
+
<button type="button"class="ss_dropdown__trigger ss_button ss_button--icon"aria-haspopup="menu"aria-expanded={t()}aria-label={e.ariaLabel??"Aktionen \xF6ffnen"}onclick={()=>l(c=>!c)}>
|
|
69
69
|
{e.icon??<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-dots-vertical"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/><path d="M11 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/><path d="M11 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/></svg>}
|
|
70
70
|
</button>
|
|
71
71
|
|
|
72
72
|
<Ce when={i()}>
|
|
73
73
|
<div class="ss_dropdown__menu"role="menu"data-state={o()}>
|
|
74
74
|
<Te each={e.items}>
|
|
75
|
-
{
|
|
76
|
-
<span class="ss_dropdown__item_icon">{
|
|
77
|
-
<span class="ss_dropdown__item_label">{
|
|
78
|
-
{
|
|
75
|
+
{c=><button type="button"class="ss_dropdown__item"role={c.checked?"menuitemcheckbox":"menuitem"}aria-checked={c.checked?"true":void 0}onclick={async()=>{h(),await c.onclick?.()}}>
|
|
76
|
+
<span class="ss_dropdown__item_icon">{c.icon}</span>
|
|
77
|
+
<span class="ss_dropdown__item_label">{c.label}</span>
|
|
78
|
+
{c.checked&&<span class="ss_dropdown__item_check"aria-hidden="true">
|
|
79
79
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-check"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M5 12l5 5l10 -10"/></svg>
|
|
80
80
|
</span>}
|
|
81
81
|
</button>}
|
|
82
82
|
</Te>
|
|
83
83
|
</div>
|
|
84
84
|
</Ce>
|
|
85
|
-
</div>}import{createMemo as Le,createSignal as Ie,onCleanup as Je}from"solid-js";var ee=200;function Oe(e){let[t,l]=Ie(e.initiallyExpanded?"auto":0),i=Le(()=>t()!==0),r,o,
|
|
86
|
-
<div class="ss_expandable__header"role="button"tabindex="0"aria-expanded={i()}onclick={
|
|
85
|
+
</div>}import{createMemo as Le,createSignal as Ie,onCleanup as Je}from"solid-js";var ee=200;function Oe(e){let[t,l]=Ie(e.initiallyExpanded?"auto":0),i=Le(()=>t()!==0),r,o,f=()=>{o&&clearTimeout(o);let a=r?.scrollHeight??0;if(i()){l(a),o=window.setTimeout(()=>l(0),1);return}l(a),o=window.setTimeout(()=>l("auto"),ee)};return Je(()=>{o&&clearTimeout(o)}),<div class={`ss_expandable ${e.class??""}`}style={e.style}data-state={i()?"open":"closed"}>
|
|
86
|
+
<div class="ss_expandable__header"role="button"tabindex="0"aria-expanded={i()}onclick={f}onkeydown={a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),f())}}>
|
|
87
87
|
<span class="ss_expandable__icon"aria-hidden="true">
|
|
88
88
|
{i()?<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-down"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M6 9l6 6l6 -6"/></svg>:<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-right"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M9 6l6 6l-6 6"/></svg>}
|
|
89
89
|
</span>
|
|
90
90
|
<span class="ss_expandable__title">{e.title}</span>
|
|
91
91
|
</div>
|
|
92
92
|
|
|
93
|
-
<div ref={
|
|
93
|
+
<div ref={a=>r=a}class="ss_expandable__content"style={{height:typeof t()=="number"?`${t()}px`:t(),"transition-duration":`${ee}ms`}}>
|
|
94
94
|
<div class='ss_expandable__divider_wrapper'>
|
|
95
95
|
<div class="ss_expandable__divider"/>
|
|
96
96
|
{e.children}
|
|
97
97
|
</div>
|
|
98
98
|
</div>
|
|
99
|
-
</div>}import{createContext as He,createEffect as B,createMemo as Xe,createSignal as T,createUniqueId as X,For as Y,onCleanup as I,onMount as J,untrack as Re,useContext as H}from"solid-js";import{createSignal as Be}from"solid-js";function A(){let[e,t]=Be(!1);return[e,async l=>{if(!e())try{t(!0),await l()}finally{t(!1)}}]}var O=He(),C=function(e){let[t,l]=A(),i={},r={loading:t,process:o=>l(()=>o(r)),field:o=>i[o]??null,setField:(o,
|
|
99
|
+
</div>}import{createContext as He,createEffect as B,createMemo as Xe,createSignal as T,createUniqueId as X,For as Y,onCleanup as I,onMount as J,untrack as Re,useContext as H}from"solid-js";import{createSignal as Be}from"solid-js";function A(){let[e,t]=Be(!1);return[e,async l=>{if(!e())try{t(!0),await l()}finally{t(!1)}}]}var O=He(),C=function(e){let[t,l]=A(),i={},r={loading:t,process:o=>l(()=>o(r)),field:o=>i[o]??null,setField:(o,f)=>{i[o]=f},delField:o=>{delete i[o]},setValues:o=>Object.entries(o).forEach(([f,a])=>i[f]?.setValue(a)),getValues:async()=>{let o=Object.entries(i),f=await Promise.all(o.map(([,a])=>a.getValue()));return Object.fromEntries(o.map(([a],h)=>[a,f[h]]))},validate:()=>Promise.all(Object.values(i).map(o=>o.validate())).then(),hasError:()=>Object.values(i).some(o=>o.hasError()),submit:()=>l(async()=>{await r.validate(),!r.hasError()&&await e.onsubmit?.(r)})};return<form class="ss_form"onsubmit={o=>{o.preventDefault(),r.submit()}}>
|
|
100
100
|
<O.Provider value={r}>
|
|
101
101
|
{e.children}
|
|
102
102
|
</O.Provider>
|
|
103
|
-
</form>};C.Input=function(e){let t=H(O),[l,i]=T(""),[r,o]=T(null),
|
|
103
|
+
</form>};C.Input=function(e){let t=H(O),[l,i]=T(""),[r,o]=T(null),f={getValue:()=>{let u=l().trim();return u||null},setValue:u=>{if(typeof u=="number"){i(u.toLocaleString());return}i(`${u}`)},hasError:()=>!!r(),validate:async()=>{let u=[...e.rules??[]];e.required&&u.unshift(C.rules.required);let b=await f.getValue();for(let n of u){let g=await n(b);if(g){o(g);return}}o(null)}};if(e.name&&t){let u=e.name;J(()=>t.setField(u,f)),I(()=>t.delField(u))}let a=null,[h,c]=T([]),[d,s]=T(-1),v;if(e.suggestions){let u=e.suggestions,[b,n]=T(!u.prepare);u.prepare&&J(async()=>{u.prepare&&(a=await u.prepare(),n(!0))});let g;B(()=>{if(clearTimeout(g??void 0),!b())return;c([]);let x=l().trim().toLowerCase();x&&(g=setTimeout(async()=>{let w=await u.getItems({query:x,init:a});c(w)},250))}),I(()=>clearTimeout(g??void 0))}B(()=>{let u=h();if(!u.length){s(-1);return}d()>=u.length&&s(u.length-1)});let _=u=>{let b=v;if(!b||u<0)return;let n=b.querySelectorAll("li")[u];if(!n)return;let g=n.offsetTop,x=g+n.offsetHeight,w=b.scrollTop,m=w+b.clientHeight;g<w?b.scrollTop=g:x>m&&(b.scrollTop=x-b.clientHeight)},y=u=>{let b=h();if(!b.length)return;let n=Math.max(-1,Math.min(d()+u,b.length-1));s(n),_(n)},M=u=>{i(e.suggestions.stringify({item:u,init:a})),s(-1)},k=u=>{if(h().length)if(u.key==="ArrowDown")u.preventDefault(),y(1);else if(u.key==="ArrowUp")u.preventDefault(),y(-1);else if(u.key==="Enter"&&d()>=0){u.preventDefault();let b=h()[d()];b&&M(b)}else u.key==="Escape"&&s(-1)},E=u=>{i(u),s(-1)},D=X();return<div class="ss_form_input">
|
|
104
104
|
<label for={e.id||D}>{e.label}</label>
|
|
105
105
|
|
|
106
106
|
<div class="ss__wrapper">
|
|
107
107
|
{e.textArea?<textarea id={e.id||D}value={l()}oninput={u=>E(u.target.value)}onkeydown={k}disabled={e.disabled||t?.loading()}/>:<input id={e.id||D}value={l()}oninput={u=>E(u.target.value)}onkeydown={k}disabled={e.disabled||t?.loading()}type={e.type}/>}
|
|
108
108
|
|
|
109
|
-
{!!
|
|
110
|
-
<Y each={
|
|
109
|
+
{!!h().length&&<ul class="ss__suggestions"ref={u=>v=u}>
|
|
110
|
+
<Y each={h()}>
|
|
111
111
|
{(u,b)=>{let n=()=>{let g=document.activeElement;g instanceof HTMLElement&&g.blur(),M(u)};return<li onpointerdown={g=>g.preventDefault()}onclick={n}classList={{ss__hovered:b()===d()}}>
|
|
112
|
-
{e.suggestions.stringify({item:u,init:
|
|
112
|
+
{e.suggestions.stringify({item:u,init:a})}
|
|
113
113
|
</li>}}
|
|
114
114
|
</Y>
|
|
115
115
|
</ul>}
|
|
116
116
|
</div>
|
|
117
117
|
|
|
118
118
|
{!!r()&&<span role="alert">{r()}</span>}
|
|
119
|
-
</div>};C.Date=function(e){let t=H(O),[l,i]=T(""),[r,o]=T(null),[
|
|
119
|
+
</div>};C.Date=function(e){let t=H(O),[l,i]=T(""),[r,o]=T(null),[f,a]=T(!1),[h,c]=T(new Date),d,s=n=>`${n}`.padStart(2,"0"),v=n=>{let g=s(n.getDate()),x=s(n.getMonth()+1),w=n.getFullYear();return`${g}.${x}.${w}`},_=n=>{let g=n.trim();if(!g)return null;let x=/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/.exec(g);if(!x)return null;let w=Number(x[1]),m=Number(x[2]),S=Number(x[3]);if(!w||!m)return null;let p=new Date(S,m-1,w);return p.getFullYear()!==S||p.getMonth()!==m-1||p.getDate()!==w?null:p};B(()=>{if(!f())return;let n=_(l());c(n??new Date)});let y={getValue:()=>{let n=l().trim();return n||null},setValue:n=>{if(n instanceof Date){i(v(n));return}i(`${n??""}`)},hasError:()=>!!r(),validate:async()=>{let n=[...e.rules??[]];e.required&&n.unshift(C.rules.required);let g=await y.getValue();for(let x of n){let w=await x(g);if(w){o(w);return}}if(g&&!_(g)){o("Ung\xFCltiges Datum");return}o(null)}};if(e.name&&t){let n=e.name;J(()=>t.setField(n,y)),I(()=>t.delField(n))}let M=X(),k=n=>{let g=_(l());return g?g.getFullYear()===h().getFullYear()&&g.getMonth()===h().getMonth()&&g.getDate()===n:!1},E=n=>{let g=new Date;return g.getFullYear()===h().getFullYear()&&g.getMonth()===h().getMonth()&&g.getDate()===n},D=()=>{let n=h(),g=n.getFullYear(),x=n.getMonth(),w=new Date(g,x,1),m=new Date(g,x+1,0).getDate(),S=(w.getDay()+6)%7,p=[];for(let P=0;P<S;P+=1)p.push(null);for(let P=1;P<=m;P+=1)p.push(P);for(;p.length%7!==0;)p.push(null);return p},u=()=>h().toLocaleDateString("de-DE",{month:"long",year:"numeric"}),b=n=>{let g=new Date(h().getFullYear(),h().getMonth(),n);i(v(g)),a(!1)};return J(()=>{let n=x=>{if(!f())return;let w=x.target;d&&w&&!d.contains(w)&&a(!1)},g=x=>{x.key==="Escape"&&a(!1)};document.addEventListener("mousedown",n),window.addEventListener("keydown",g),I(()=>{document.removeEventListener("mousedown",n),window.removeEventListener("keydown",g)})}),<div class="ss_form_date"ref={n=>d=n}>
|
|
120
120
|
<label for={e.id||M}>{e.label}</label>
|
|
121
121
|
|
|
122
122
|
<div class="ss__wrapper">
|
|
123
|
-
<input id={e.id||M}value={l()}oninput={n=>i(n.target.value)}onfocus={()=>
|
|
124
|
-
<button type="button"class="ss_form_date__icon"aria-label="Kalender öffnen"aria-haspopup="dialog"aria-expanded={
|
|
123
|
+
<input id={e.id||M}value={l()}oninput={n=>i(n.target.value)}onfocus={()=>a(!0)}disabled={e.disabled||t?.loading()}readonly={!e.editable}type="text"inputmode="numeric"autocomplete="off"placeholder="TT.MM.JJJJ"/>
|
|
124
|
+
<button type="button"class="ss_form_date__icon"aria-label="Kalender öffnen"aria-haspopup="dialog"aria-expanded={f()}onclick={()=>a(n=>!n)}disabled={e.disabled||t?.loading()}>
|
|
125
125
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="currentColor"class="icon icon-tabler icons-tabler-filled icon-tabler-calendar-week"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M16 2c.183 0 .355 .05 .502 .135l.033 .02c.28 .177 .465 .49 .465 .845v1h1a3 3 0 0 1 2.995 2.824l.005 .176v12a3 3 0 0 1 -2.824 2.995l-.176 .005h-12a3 3 0 0 1 -2.995 -2.824l-.005 -.176v-12a3 3 0 0 1 2.824 -2.995l.176 -.005h1v-1a1 1 0 0 1 .514 -.874l.093 -.046l.066 -.025l.1 -.029l.107 -.019l.12 -.007q .083 0 .161 .013l.122 .029l.04 .012l.06 .023c.328 .135 .568 .44 .61 .806l.007 .117v1h6v-1a1 1 0 0 1 1 -1m3 7h-14v9.625c0 .705 .386 1.286 .883 1.366l.117 .009h12c.513 0 .936 -.53 .993 -1.215l.007 -.16z"/><path d="M9.015 13a1 1 0 0 1 -1 1a1.001 1.001 0 1 1 -.005 -2c.557 0 1.005 .448 1.005 1"/><path d="M13.015 13a1 1 0 0 1 -1 1a1.001 1.001 0 1 1 -.005 -2c.557 0 1.005 .448 1.005 1"/><path d="M17.02 13a1 1 0 0 1 -1 1a1.001 1.001 0 1 1 -.005 -2c.557 0 1.005 .448 1.005 1"/><path d="M12.02 15a1 1 0 0 1 0 2a1.001 1.001 0 1 1 -.005 -2z"/><path d="M9.015 16a1 1 0 0 1 -1 1a1.001 1.001 0 1 1 -.005 -2c.557 0 1.005 .448 1.005 1"/></svg>
|
|
126
126
|
</button>
|
|
127
127
|
</div>
|
|
128
128
|
|
|
129
|
-
{
|
|
129
|
+
{f()&&<div class="ss_form_date__picker"role="dialog"aria-label="Datum auswählen">
|
|
130
130
|
<div class="ss_form_date__header">
|
|
131
131
|
<div class="ss_form_date__nav_group">
|
|
132
|
-
<button type="button"class="ss_form_date__nav"onclick={()=>{let n=
|
|
132
|
+
<button type="button"class="ss_form_date__nav"onclick={()=>{let n=h();c(new Date(n.getFullYear()-1,n.getMonth(),1))}}>
|
|
133
133
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-left-pipe"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M7 6v12"/><path d="M18 6l-6 6l6 6"/></svg>
|
|
134
134
|
</button>
|
|
135
|
-
<button type="button"class="ss_form_date__nav"onclick={()=>{let n=
|
|
135
|
+
<button type="button"class="ss_form_date__nav"onclick={()=>{let n=h();c(new Date(n.getFullYear(),n.getMonth()-1,1))}}>
|
|
136
136
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-left"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M15 6l-6 6l6 6"/></svg>
|
|
137
137
|
</button>
|
|
138
138
|
</div>
|
|
139
139
|
<div class="ss_form_date__title">{u()}</div>
|
|
140
140
|
<div class="ss_form_date__nav_group">
|
|
141
|
-
<button type="button"class="ss_form_date__nav"onclick={()=>{let n=
|
|
141
|
+
<button type="button"class="ss_form_date__nav"onclick={()=>{let n=h();c(new Date(n.getFullYear(),n.getMonth()+1,1))}}>
|
|
142
142
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-right"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M9 6l6 6l-6 6"/></svg>
|
|
143
143
|
</button>
|
|
144
|
-
<button type="button"class="ss_form_date__nav"onclick={()=>{let n=
|
|
144
|
+
<button type="button"class="ss_form_date__nav"onclick={()=>{let n=h();c(new Date(n.getFullYear()+1,n.getMonth(),1))}}>
|
|
145
145
|
<svg xmlns="http://www.w3.org/2000/svg"width="24"height="24"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-right-pipe"><path stroke="none"d="M0 0h24v24H0z"fill="none"/><path d="M6 6l6 6l-6 6"/><path d="M17 5v13"/></svg>
|
|
146
146
|
</button>
|
|
147
147
|
</div>
|
|
@@ -157,14 +157,14 @@ function F(e){let t=()=>["ss_button",e.isIconOnly?"ss_button--icon":"",e.class??
|
|
|
157
157
|
</div>}
|
|
158
158
|
|
|
159
159
|
{!!r()&&<span role="alert">{r()}</span>}
|
|
160
|
-
</div>};C.Checkbox=function(e){let t=H(O),[l,i]=T(!1),[r,o]=T(null),
|
|
160
|
+
</div>};C.Checkbox=function(e){let t=H(O),[l,i]=T(!1),[r,o]=T(null),f={getValue:()=>l(),setValue:h=>i(!!h),hasError:()=>!!r(),validate:async()=>{let h=[...e.rules??[]];e.required&&h.unshift(C.rules.required);let c=await f.getValue();for(let d of h){let s=await d(c);if(s){o(s);return}}o(null)}};if(e.name&&t){let h=e.name;J(()=>t.setField(h,f)),I(()=>t.delField(h))}let a=X();return<div class="ss_form_checkbox">
|
|
161
161
|
<div class="ss__wrapper">
|
|
162
|
-
<input id={e.id||
|
|
163
|
-
<label for={e.id||
|
|
162
|
+
<input id={e.id||a}type="checkbox"checked={l()}onchange={h=>i(h.target.checked)}disabled={e.disabled||t?.loading()}/>
|
|
163
|
+
<label for={e.id||a}>{e.label}</label>
|
|
164
164
|
</div>
|
|
165
165
|
|
|
166
166
|
{!!r()&&<span role="alert">{r()}</span>}
|
|
167
|
-
</div>};C.useContext=function(){let e=H(O);if(!e)return null;let{setField:t,delField:l,...i}=e;return i};C.Select=function(e){let t=H(O),[l,i]=T([]),[r,o]=T(null),[
|
|
167
|
+
</div>};C.useContext=function(){let e=H(O);if(!e)return null;let{setField:t,delField:l,...i}=e;return i};C.Select=function(e){let t=H(O),[l,i]=T([]),[r,o]=T(null),[f,a]=T(null),h=s=>{let v=s.map(_=>({id:_.id,label:e.buildOption(_)}));if(i(v),!s.length){o(null);return}r()&&v.some(_=>_.id===r())||o(v[0].id)};B(()=>{let s=e.getOptions();"then"in s&&typeof s.then=="function"||s instanceof Promise?s.then(h):h(s)});let c={getValue:()=>{let s=r();return l().some(_=>_.id===s)?s:null},setValue:s=>{let v=l();if(!v.length){o(null);return}let _=v[0].id;if(typeof s!="string"){o(_);return}let y=s.trim();if(!v.some(M=>M.id===y)){o(_);return}o(y)},hasError:()=>!!f(),validate:async()=>{let s=l(),v=await c.getValue();if(!v){a("Pflichtfeld");return}if(!s.some(_=>_.id===v)){a("Option nicht verf\xFCgbar");return}for(let _ of e.rules??[]){let y=await _(v);if(y){a(y);return}}a(null)}};if(c.setOptions=h,e.name&&t){let s=e.name;J(()=>t.setField(s,c)),I(()=>t.delField(s))}let d=X();return<div class="ss_form_select">
|
|
168
168
|
<label for={e.id||d}>{e.label}</label>
|
|
169
169
|
|
|
170
170
|
<div class="ss_form_select__field">
|
|
@@ -178,13 +178,13 @@ function F(e){let t=()=>["ss_button",e.isIconOnly?"ss_button--icon":"",e.class??
|
|
|
178
178
|
</span>
|
|
179
179
|
</div>
|
|
180
180
|
|
|
181
|
-
{!!
|
|
182
|
-
</div>};C.ACSelect=function(e){let t=H(O),[l,i]=T(""),[r,o]=T([]),[
|
|
181
|
+
{!!f()&&<span role="alert">{f()}</span>}
|
|
182
|
+
</div>};C.ACSelect=function(e){let t=H(O),[l,i]=T(""),[r,o]=T([]),[f,a]=T(null),h={getValue:()=>r(),setValue:m=>o(m),hasError:()=>!!f(),validate:async()=>{let m=await h.getValue(),S=e.minSelectedItems,p=e.maxSelectedItems;if(S&&m.length<S){a(`Mindestens ${S} ${S>1?"Elemente m\xFCssen":"Element muss"} ausgew\xE4hlt werden`);return}if(p&&m.length>p){a(`Maximal ${p} ${p>1?"Elemente d\xFCrfen":"Element darf"} ausgew\xE4hlt werden`);return}for(let P of e.rules??[]){let L=await P(m);if(L){a(L);return}}a(null)}};if(e.name&&t){let m=e.name;J(()=>t.setField(m,h)),I(()=>t.delField(m))}let c=null,[d,s]=T(!e.prepare);e.prepare&&J(async()=>{e.prepare&&(c=await e.prepare(),s(!0))});let[v,_]=T([]),[y,M]=T(-1),k,E;B(()=>{if(!d())return;clearTimeout(E);let m=l().trim().toLowerCase();if(!m){_(Re(()=>r()));return}_([]),E=setTimeout(async()=>{let S=await e.getOptions({query:m,init:c});_(S)},250)}),B(()=>{l().trim().toLowerCase()||v().length!==r().length&&_(r())}),I(()=>clearTimeout(E)),B(()=>{let m=v();if(!m.length){M(-1);return}y()>=m.length&&M(m.length-1)});let D=m=>{let S=k;if(!S||m<0)return;let p=S.querySelectorAll("li")[m];if(!p)return;let P=p.offsetTop,L=P+p.offsetHeight,G=S.scrollTop,Se=G+S.clientHeight;P<G?S.scrollTop=P:L>Se&&(S.scrollTop=L-S.clientHeight)},u=m=>{let S=v();if(!S.length)return;let p=Math.max(-1,Math.min(y()+m,S.length-1));M(p),D(p)},b=X(),n=Xe(()=>new Set(r().map(({id:m})=>m))),g=(m,S=!0)=>{let p=n().has(m.id);if(e.maxSelectedItems===1){o(p?[]:[m]),i(""),S&&M(-1);return}o(p?P=>P.filter(({id:L})=>L!==m.id):P=>[...P.filter(({id:L})=>L!==m.id),m]),S&&M(-1)},x=m=>{if(v().length)if(m.key==="ArrowDown")m.preventDefault(),u(1);else if(m.key==="ArrowUp")m.preventDefault(),u(-1);else if(m.key==="Enter"&&y()>=0){m.preventDefault();let S=v()[y()];S&&g(S,!1)}else m.key==="Escape"&&M(-1)},w=()=>e.disabled||t?.loading();return<div class="ss_form_ac_select">
|
|
183
183
|
<label for={e.id||b}>{e.label}</label>
|
|
184
184
|
|
|
185
185
|
{e.maxSelectedItems===1&&e.renderSelection&&r().length===1?<div class="ss__selection">
|
|
186
186
|
<div class="ss__content">
|
|
187
|
-
{e.renderSelection({item:r()[0],init:
|
|
187
|
+
{e.renderSelection({item:r()[0],init:c})}
|
|
188
188
|
</div>
|
|
189
189
|
<button type="button"class="ss__clear"disabled={w()}aria-label="Auswahl entfernen"onclick={()=>{o([]),i(""),setTimeout(()=>document.getElementById(e.id||b)?.focus(),0)}}>
|
|
190
190
|
×
|
|
@@ -202,13 +202,13 @@ function F(e){let t=()=>["ss_button",e.isIconOnly?"ss_button--icon":"",e.class??
|
|
|
202
202
|
{!!v().length&&<ul class="ss__suggestions"ref={m=>k=m}>
|
|
203
203
|
<Y each={v()}>
|
|
204
204
|
{(m,S)=>{let p=()=>{w()||(g(m),document.getElementById(e.id||b)?.focus())};return<li onpointerdown={P=>P.preventDefault()}onclick={p}classList={{ss__selected:n().has(m.id),ss__hovered:S()===y()}}>
|
|
205
|
-
{e.renderItem({item:m,init:
|
|
205
|
+
{e.renderItem({item:m,init:c})}
|
|
206
206
|
</li>}}
|
|
207
207
|
</Y>
|
|
208
208
|
</ul>}
|
|
209
209
|
</div>}
|
|
210
210
|
|
|
211
|
-
{!!
|
|
211
|
+
{!!f()&&<span role="alert">{f()}</span>}
|
|
212
212
|
</div>};C.SubmitButton=function(e){let t=H(O);return<F type="submit"class="ss_form_submit"disabled={e.disabled||t?.loading()}>
|
|
213
213
|
{e.children}
|
|
214
214
|
</F>};C.rules={required:e=>e?null:"Pflichtfeld",minLength:e=>t=>{if(t===null&&(t=""),typeof t!="string")throw new Error(`invalid rule minLength(..) for non-string value ${t}`);return t.length<e?`Mindestens ${e} Zeichen`:null},maxLength:e=>t=>{if(t===null&&(t=""),typeof t!="string")throw new Error(`invalid rule maxLength(..) for non-string value ${t}`);return t.length<e?`Maximal ${e} Zeichen`:null},pattern:e=>t=>{if(t===null&&(t=""),typeof t!="string")throw new Error(`invalid rule pattern(..) for non-string value ${t}`);return e.test(t)?null:"Eingabe widerspricht erwartetem Muster"}};function Ve(e){return<div class={`ss_header ${e.class??""}`}style={e.style}>
|
|
@@ -217,11 +217,11 @@ function F(e){let t=()=>["ss_button",e.isIconOnly?"ss_button--icon":"",e.class??
|
|
|
217
217
|
{e.subtitle&&<h5 class="ss_header__subtitle">{e.subtitle}</h5>}
|
|
218
218
|
</div>
|
|
219
219
|
<div class="ss_header__actions">{e.actions}</div>
|
|
220
|
-
</div>}import{Show as U,createEffect as Ae,createSignal as te,createUniqueId as ze,onCleanup as W,onMount as $e}from"solid-js";import{Portal as Ne}from"solid-js/web";var Ke=180;function $(e){let[t,l]=te(e.open),[i,r]=te("closed"),o=ze(),
|
|
220
|
+
</div>}import{Show as U,createEffect as Ae,createSignal as te,createUniqueId as ze,onCleanup as W,onMount as $e}from"solid-js";import{Portal as Ne}from"solid-js/web";var Ke=180;function $(e){let[t,l]=te(e.open),[i,r]=te("closed"),o=ze(),f,a,h;Ae(()=>{f&&clearTimeout(f),a&&cancelAnimationFrame(a),e.open?(t()||l(!0),r("closed"),a=requestAnimationFrame(()=>r("open"))):(r("closed"),t()&&(f=window.setTimeout(()=>l(!1),Ke)))}),$e(()=>{if(!e.open)return;if(e.lockScroll!==!1){let s=document.body.style.overflowY;document.body.style.overflowY="hidden",W(()=>{document.body.style.overflowY=s})}a=requestAnimationFrame(()=>h?.focus());let d=s=>{s.key==="Escape"&&e.dismissible!==!1&&e.onClose?.()};window.addEventListener("keydown",d),W(()=>window.removeEventListener("keydown",d))}),W(()=>{f&&clearTimeout(f),a&&cancelAnimationFrame(a)});let c=()=>{e.dismissible!==!1&&e.onClose?.()};return<U when={t()}>
|
|
221
221
|
<Ne>
|
|
222
222
|
<div class="ss_modal"data-state={i()}aria-hidden={i()==="closed"}>
|
|
223
|
-
<div class="ss_modal__backdrop"onclick={
|
|
224
|
-
<div class="ss_modal__panel"classList={{"ss_modal__panel--sm":e.size==="sm","ss_modal__panel--lg":e.size==="lg","ss_modal__panel--fullscreen":e.fullscreen,"ss_modal__panel--no-fullscreen":e.disableResponsiveFullscreen}}ref={d=>
|
|
223
|
+
<div class="ss_modal__backdrop"onclick={c}/>
|
|
224
|
+
<div class="ss_modal__panel"classList={{"ss_modal__panel--sm":e.size==="sm","ss_modal__panel--lg":e.size==="lg","ss_modal__panel--fullscreen":e.fullscreen,"ss_modal__panel--no-fullscreen":e.disableResponsiveFullscreen}}ref={d=>h=d}role="dialog"aria-modal="true"aria-labelledby={e.title?o:void 0}tabindex="-1">
|
|
225
225
|
{(e.title||e.onClose)&&<div class="ss_modal__header">
|
|
226
226
|
{e.title&&<h2 id={o}class="ss_modal__title">
|
|
227
227
|
{e.title}
|
|
@@ -243,33 +243,33 @@ function F(e){let t=()=>["ss_button",e.isIconOnly?"ss_button--icon":"",e.class??
|
|
|
243
243
|
</div>
|
|
244
244
|
</div>
|
|
245
245
|
</Ne>
|
|
246
|
-
</U>}import{createContext as Ye,createSignal as ne,For as Ue,onCleanup as We,useContext as Ze}from"solid-js";import{useLocation as oe,useNavigate as se}from"@solidjs/router";var ie=Ye(),Ge=0,Qe=()=>`ss-modal-${Ge++}`;function et(){let e=Ze(ie);if(!e)throw new Error("useSSModals must be used within SSModalsProvider");return e}function _t(e){let t=se(),l=oe(),[i,r]=A(),o=()=>e.config.modalProps?.({hide:e.hide})??{},{primaryButtonText:
|
|
247
|
-
{!
|
|
248
|
-
{
|
|
246
|
+
</U>}import{createContext as Ye,createSignal as ne,For as Ue,onCleanup as We,useContext as Ze}from"solid-js";import{useLocation as oe,useNavigate as se}from"@solidjs/router";var ie=Ye(),Ge=0,Qe=()=>`ss-modal-${Ge++}`;function et(){let e=Ze(ie);if(!e)throw new Error("useSSModals must be used within SSModalsProvider");return e}function _t(e){let t=se(),l=oe(),[i,r]=A(),o=()=>e.config.modalProps?.({hide:e.hide})??{},{primaryButtonText:f,secondaryButtonText:a,hideSecondaryButton:h,danger:c,...d}=o();return<$ open={e.visible()}onClose={e.hide}{...d}footer={<>
|
|
247
|
+
{!h&&<F class="secondary"onclick={e.hide}>
|
|
248
|
+
{a??"Abbrechen"}
|
|
249
249
|
</F>}
|
|
250
|
-
<F class={
|
|
251
|
-
{
|
|
250
|
+
<F class={c?"danger":void 0}onclick={()=>r(()=>e.config.onPrimaryAction?.({hide:e.hide,navigate:t,pathname:l.pathname})??e.hide())}disabled={i()}>
|
|
251
|
+
{f??"Weiter"}
|
|
252
252
|
</F>
|
|
253
253
|
</>}>
|
|
254
254
|
{e.config.content({hide:e.hide})}
|
|
255
255
|
</$>}function St(e){let t=se(),l=oe();return<C onsubmit={i=>e.config.onSubmit({hide:e.hide,context:i,navigate:t,pathname:l.pathname})}>
|
|
256
256
|
<Mt visible={e.visible}hide={e.hide}config={e.config}/>
|
|
257
|
-
</C>}function Mt(e){let t=C.useContext();if(!t)return null;let l=()=>e.config.modalProps?.({hide:e.hide,context:t})??{},{primaryButtonText:i,secondaryButtonText:r,hideSecondaryButton:o,danger:
|
|
257
|
+
</C>}function Mt(e){let t=C.useContext();if(!t)return null;let l=()=>e.config.modalProps?.({hide:e.hide,context:t})??{},{primaryButtonText:i,secondaryButtonText:r,hideSecondaryButton:o,danger:f,...a}=l();return<$ open={e.visible()}onClose={e.hide}{...a}footer={<>
|
|
258
258
|
{!o&&<F class="secondary"onclick={e.hide}disabled={t.loading()}>
|
|
259
259
|
{r??"Abbrechen"}
|
|
260
260
|
</F>}
|
|
261
|
-
<F class={
|
|
261
|
+
<F class={f?"danger":void 0}onclick={()=>t.submit()}disabled={t.loading()}>
|
|
262
262
|
{i??"Speichern"}
|
|
263
263
|
</F>
|
|
264
264
|
</>}>
|
|
265
265
|
{e.config.content({hide:e.hide,context:t})}
|
|
266
|
-
</$>}function Et(e){let[t,l]=ne([]),i=new Map,r=new Map,o=220,
|
|
266
|
+
</$>}function Et(e){let[t,l]=ne([]),i=new Map,r=new Map,o=220,f=d=>{let s=i.get(d);if(!s)return;s.setVisible(!1);let v=r.get(d);v&&window.clearTimeout(v);let _=window.setTimeout(()=>{l(y=>y.filter(M=>M.id!==d)),i.delete(d),r.delete(d)},o);r.set(d,_)},a=d=>{let s=Qe(),[v,_]=ne(!0),y={id:s,visible:v,setVisible:_,render:d};return i.set(s,y),l(M=>[...M,y]),s},h=d=>a(({hide:s,visible:v})=><_t visible={v}hide={s}config={d}/>),c=d=>a(({hide:s,visible:v})=><St visible={v}hide={s}config={d}/>);return We(()=>{r.forEach(d=>window.clearTimeout(d)),r.clear()}),<ie.Provider value={{show:a,showDefault:h,showForm:c,hide:f}}>
|
|
267
267
|
{e.children}
|
|
268
268
|
|
|
269
269
|
<Ue each={t()}>
|
|
270
|
-
{d=>{let s=()=>
|
|
270
|
+
{d=>{let s=()=>f(d.id);return d.render({id:d.id,hide:s,visible:d.visible})}}
|
|
271
271
|
</Ue>
|
|
272
|
-
</ie.Provider>}import{createContext as Tt,createMemo as Pt,createSignal as Ct,createUniqueId as Dt,onCleanup as Ft,onMount as Lt,useContext as le}from"solid-js";import{useLocation as It}from"@solidjs/router";var Z=Tt();function R(e){let t=Dt(),l=It(),[i,r]=Ct([]),o=()=>{let
|
|
272
|
+
</ie.Provider>}import{createContext as Tt,createMemo as Pt,createSignal as Ct,createUniqueId as Dt,onCleanup as Ft,onMount as Lt,useContext as le}from"solid-js";import{useLocation as It}from"@solidjs/router";var Z=Tt();function R(e){let t=Dt(),l=It(),[i,r]=Ct([]),o=()=>{let c=document.getElementById(t);c&&(c.checked=!1)},f=c=>{r(d=>d.includes(c)?d:[...d,c])},a=c=>{r(d=>d.filter(s=>s!==c))},h=Pt(()=>{let c=l.pathname,d=null;for(let s of i())c.startsWith(s)&&(!d||s.length>d.length)&&(d=s);return d});return<Z.Provider value={{closeDrawer:o,activeHref:h,registerHref:f,unregisterHref:a}}>
|
|
273
273
|
<div class={`ss_shell ${e.class??""}`}style={e.style}>
|
|
274
274
|
<input id={t}type="checkbox"class="ss_shell__drawer_toggle_input"/>
|
|
275
275
|
|
package/dist/styles/default.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,sans-serif;--bg-page: #f5f5f7;--bg-surface: #ffffff;--bg-surface-subtle: #f3f4f6;--shell-bg: radial-gradient(circle at top left, #eef2ff 0, #f5f5f7 38%, #f3f4f6 100%);--shell-header-bg: rgba(255, 255, 255, .85);--shell-header-border: rgba(209, 213, 219, .8);--shell-nav-bg: rgba(255, 255, 255, .92);--shell-nav-border: rgba(209, 213, 219, .85);--fg-primary: #0f172a;--fg-secondary: #4b5563;--fg-muted: #6b7280;--fg-inverse: #ffffff;--border-subtle: #e5e7eb;--border-strong: #d1d5db;--card-accent: #2563eb;--input-bg: #ffffff;--input-fg: var(--fg-primary);--input-border: #d1d5db;--input-border-hover: #9ca3af;--input-border-disabled: #e5e7eb;--input-bg-disabled: #f3f4f6;--input-fg-disabled: #9ca3af;--input-bg-hover: #f9fafb;--input-bg-focus: #ffffff;--scrollbar-thumb: rgba(15, 23, 42, .24);--primary: #2563eb;--primary-soft: #e0ecff;--primary-soft-stronger: #d1e1ff;--on-primary: #ffffff;--error: #dc2626;--on-error: #ffffff;--error-strong: #b91c1c;--disabled: #9ca3af;--on-disabled: #f9fafb;--suggestion-bg: var(--bg-surface);--suggestion-hover-bg: #f3f4ff;--suggestion-focus-bg: #e0ebff;--suggestion-selected-bg: #e0ebff;--suggestion-indicator: #2563eb;--btn-primary-bg: var(--primary);--btn-primary-border: #1d4ed8;--btn-primary-bg-hover: #1d4ed8;--btn-primary-border-hover: #1e40af;--btn-secondary-bg: #eef1f7;--btn-secondary-border: #d1d5db;--btn-secondary-bg-hover: #e0e3ec;--btn-secondary-border-hover: #cbd0dd;--btn-tertiary-bg: transparent;--btn-tertiary-border: var(--border-subtle);--btn-tertiary-bg-hover: #e9effa;--btn-tertiary-border-hover: var(--border-strong);--clear-bg: #edeff4;--clear-border: #e2e4ec;--clear-bg-hover: #e1e4ee;--clear-border-hover: #cbd0dd;--clear-fg: #4b5563;--token-bg: #eef2ff;--token-fg: #1f2937;--radius-sm: .375rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-pill: 999px;--focus-ring: 0 0 0 1px rgba(37, 99, 235, .75), 0 0 0 4px rgba(191, 219, 254, .9);--focus-ring-error: 0 0 0 1px rgba(220, 38, 38, .85), 0 0 0 4px rgba(254, 202, 202, .85);--shadow-soft: 0 10px 30px rgba(15, 23, 42, .06);--btn-shadow: 0 6px 18px rgba(15, 23, 42, .16);--btn-shadow-hover: 0 10px 30px rgba(15, 23, 42, .18)}@media (prefers-color-scheme: dark){:root{--bg-page: #0f1115;--bg-surface: #14171c;--bg-surface-subtle: #1a1e24;--fg-primary: #e7e9ee;--fg-secondary: #c7cbd4;--fg-muted: #9ca3af;--fg-inverse: #0f1115;--border-subtle: #2a2f36;--border-strong: #3a4048;--card-accent: #94a3b8;--input-bg: #14171c;--input-fg: var(--fg-primary);--input-border: #2a2f36;--input-border-hover: #3a4048;--input-border-disabled: #111827;--input-bg-disabled: #14171c;--input-fg-disabled: #6b7280;--input-bg-hover: #1a1e24;--input-bg-focus: #20252c;--scrollbar-thumb: rgba(156, 163, 175, .38);--primary: #3b82f6;--primary-soft: #172554;--primary-soft-stronger: #1d4ed8;--on-primary: #ffffff;--error: #fb7185;--on-error: #0f1115;--error-strong: #f43f5e;--suggestion-bg: #14171c;--suggestion-hover-bg: #1b2027;--suggestion-focus-bg: #21262e;--suggestion-selected-bg: #262c35;--suggestion-indicator: #94a3b8;--btn-primary-bg: var(--primary);--btn-primary-border: #1d4ed8;--btn-primary-bg-hover: #1d4ed8;--btn-primary-border-hover: #1e3a8a;--btn-secondary-bg: #1a1e24;--btn-secondary-border: #2f353e;--btn-secondary-bg-hover: #232831;--btn-secondary-border-hover: #3a4048;--btn-tertiary-bg: transparent;--btn-tertiary-border: #2f353e;--btn-tertiary-bg-hover: #232831;--btn-tertiary-border-hover: #3a4048;--clear-bg: #1a1e24;--clear-border: #2f353e;--clear-bg-hover: #232831;--clear-border-hover: #3a4048;--clear-fg: #e5e7eb;--token-bg: #232831;--token-fg: #e5e7eb;--shadow-soft: 0 18px 50px rgba(0, 0, 0, .75);--btn-shadow: 0 12px 30px rgba(0, 0, 0, .65);--btn-shadow-hover: 0 16px 40px rgba(0, 0, 0, .85);--shell-bg: radial-gradient(circle at top left, #1c2129 0, #0f1115 45%, #12161b 100%);--shell-header-bg: rgba(20, 23, 28, .92);--shell-header-border: rgba(58, 64, 72, .9);--shell-nav-bg: rgba(20, 23, 28, .96);--shell-nav-border: rgba(58, 64, 72, .92)}}@keyframes input-alert-appear{0%{opacity:0;transform:translateY(-1px)}to{opacity:1;transform:translateY(0)}}*,*:before,*:after{box-sizing:border-box}*{-webkit-tap-highlight-color:transparent}body{margin:0;font-family:inherit;color:var(--fg-primary);background-color:var(--bg-page);font-size:14px}html,body,#root{height:100%;position:relative}.ss_form{max-width:48rem;width:100%;margin:0 auto;display:flex;flex-direction:column;gap:1rem;padding:.5rem 0}.ss__suggestions{position:absolute;top:calc(100% + .35rem);left:0;right:0;z-index:10;display:flex;flex-direction:column;max-height:clamp(7rem,35vh,14rem);margin:0;padding:.25rem 0;list-style-type:none;background-color:var(--suggestion-bg);border-width:1px;border-style:solid;border-color:var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);overflow-y:auto;overflow-x:hidden;li{display:flex;align-items:flex-start;gap:.4rem;padding:.45rem .8rem;font-size:.9rem;line-height:1.45;color:var(--fg-primary);cursor:pointer;user-select:none;outline:none;+li{border-top:1px solid var(--border-subtle)}&:hover{background-color:var(--suggestion-hover-bg)}&:focus{background-color:var(--suggestion-focus-bg)}&.ss__hovered{background-color:var(--suggestion-focus-bg)}&.ss__selected{font-weight:500;background-color:var(--suggestion-selected-bg);box-shadow:inset 2px 0 0 var(--suggestion-indicator)}&.ss__selected.ss__hovered,&.ss__selected:hover{background-color:#2563eb14}.ss__title{font-weight:500}.ss__description{font-size:.8rem;color:var(--fg-muted)}}&::-webkit-scrollbar{width:6px}&::-webkit-scrollbar-track{background:transparent}&::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:999px}}.ss_form_input,.ss_form_date{display:flex;flex-direction:column;gap:.35rem;label{margin:0;font-size:.78rem;font-weight:600;letter-spacing:.01em;text-transform:none;color:var(--fg-muted)}.ss__wrapper{position:relative;display:inline-block;width:100%}input{display:block;width:100%;min-width:0;padding:.55rem .7rem;font-size:.95rem;line-height:1.4;color:var(--input-fg);background-color:var(--input-bg);border-width:1px;border-style:solid;border-color:var(--input-border);border-radius:var(--radius-md);outline:none;box-shadow:none;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease,transform 80ms ease;&:hover:not([disabled]){border-color:var(--input-border-hover);background-color:var(--input-bg-hover)}&:focus-visible{border-color:var(--primary);box-shadow:var(--focus-ring);background-color:var(--input-bg-focus)}&[disabled]{cursor:not-allowed;color:var(--input-fg-disabled);background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled)}}.ss__suggestions{max-height:clamp(7rem,30vh,12rem)}&:not(:focus-within){.ss__suggestions{display:none}}&:has([role=alert]){input{border-color:var(--error);box-shadow:var(--focus-ring-error)}}[role=alert]{margin-top:.15rem;font-size:.8rem;line-height:1.4;color:var(--error);animation:.12s input-alert-appear ease-out}}.ss_form_date{position:relative;input{padding-right:2.1rem}input::-webkit-calendar-picker-indicator{opacity:0;display:none}}.ss_form_date__icon{position:absolute;right:.7rem;top:50%;width:1rem;height:1rem;transform:translateY(-50%);color:var(--fg-muted);padding:0;border:none;background:transparent;cursor:pointer;&:disabled{cursor:not-allowed;color:var(--input-fg-disabled)}svg{width:100%;height:100%;display:block}}.ss_form_date__picker{position:absolute;top:calc(100% + .35rem);left:0;z-index:10;width:min(18rem,100%);padding:.75rem;border-radius:var(--radius-md);border:1px solid var(--border-subtle);background:var(--bg-surface);box-shadow:var(--shadow-soft)}.ss_form_date__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.6rem}.ss_form_date__nav_group{display:flex;align-items:center;gap:.35rem}.ss_form_date__title{font-size:.9rem;font-weight:600;color:var(--fg-primary);text-transform:capitalize}.ss_form_date__nav{width:1.8rem;height:1.8rem;border-radius:var(--radius-pill);border:1px solid var(--border-subtle);background:var(--bg-surface-subtle);color:var(--fg-primary);cursor:pointer;transition:background-color .12s ease,border-color .12s ease;&:hover{border-color:var(--border-strong)}}.ss_form_date__nav svg{width:1rem;height:1rem;display:block;margin:0 auto}.ss_form_date__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:.2rem;margin-bottom:.35rem;font-size:.75rem;color:var(--fg-muted);text-align:center}.ss_form_date__grid{display:grid;grid-template-columns:repeat(7,1fr);gap:.2rem}.ss_form_date__day{height:2rem;border-radius:var(--radius-md);border:1px solid transparent;background:transparent;color:var(--fg-primary);cursor:pointer;transition:background-color .12s ease,border-color .12s ease;&:hover{background:var(--bg-surface-subtle)}&.is-selected{background:var(--primary-soft);border-color:var(--primary);color:var(--fg-primary);font-weight:600}&.is-today:not(.is-selected){border-color:var(--border-strong);background:var(--bg-surface-subtle);color:var(--fg-primary);font-weight:500}}.ss_form_date__day.is-empty{border:none;background:transparent;cursor:default}.ss_form_checkbox{display:flex;flex-direction:column;gap:.3rem;width:100%;font-size:.9rem;color:var(--fg-secondary);.ss__wrapper{display:inline-flex;align-items:flex-start;gap:.55rem;padding:.15rem .05rem;font-size:.9rem;line-height:1.5;color:var(--fg-secondary);background-color:transparent;border:none;outline:none}input[type=checkbox]{margin-top:.12rem;width:1.05rem;height:1.05rem;flex-shrink:0;position:relative;appearance:none;-webkit-appearance:none;-moz-appearance:none;accent-color:initial;border-radius:calc(var(--radius-sm) * .9);border:1px solid var(--border-strong);background-color:var(--bg-surface);box-shadow:0 1px 1px #0f172a0f;cursor:pointer;outline:none;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease,transform 80ms ease;&:hover:not(:disabled){border-color:var(--input-border-hover);background-color:var(--input-bg-hover)}&:active:not(:disabled){transform:translateY(1px)}&:after{content:"";position:absolute;inset:0;margin:auto;width:.55rem;height:.3rem;border-left:2px solid var(--on-primary);border-bottom:2px solid var(--on-primary);transform-origin:center;transform:translateY(-1px) rotate(-45deg) scale(.2);opacity:0;transition:transform .12s ease-out,opacity .12s ease-out}&:checked,&[aria-checked=true]{background-color:var(--primary)!important;border-color:var(--primary)!important;&:after{opacity:1;transform:translateY(-1px) rotate(-45deg) scale(1)}}&:checked[disabled],&[aria-checked=true][disabled]{background-color:color-mix(in srgb,var(--input-bg-disabled) 70%,var(--fg-primary))!important;border-color:var(--input-border-disabled)!important}&[disabled]{cursor:not-allowed;background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled);box-shadow:none;opacity:.75;&:after{border-color:#fff}}}&:has(input[type=checkbox]:focus-visible){input[type=checkbox]{outline:none;box-shadow:var(--focus-ring)}}label{margin:0;font-size:.9rem;line-height:1.5;color:var(--fg-primary);cursor:pointer;user-select:none}&:has(input[type=checkbox][disabled]){color:var(--input-fg-disabled);user-select:none;label{cursor:not-allowed;color:var(--input-fg-disabled)}}[role=alert]{font-size:.8rem;color:var(--error);animation:.12s input-alert-appear ease-out}}.ss_form_select{display:flex;flex-direction:column;gap:.35rem;width:100%;label{margin:0;font-size:.78rem;font-weight:600;letter-spacing:.01em;color:var(--fg-muted)}select{display:block;width:100%;padding:.55rem 2.1rem .55rem .7rem;font-size:.95rem;line-height:1.4;color:var(--input-fg);background-color:var(--input-bg);background-image:none;border-width:1px;border-style:solid;border-color:var(--input-border);border-radius:var(--radius-md);outline:none;appearance:none;box-shadow:none;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease;&:hover:not([disabled]){border-color:var(--input-border-hover);background-color:var(--input-bg-hover)}&:focus-visible{border-color:var(--primary);box-shadow:var(--focus-ring);background-color:var(--input-bg-focus)}&:has(+[role=alert]){border-color:var(--error);box-shadow:var(--focus-ring-error)}&[disabled]{cursor:not-allowed;color:var(--input-fg-disabled);background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled)}}.ss_form_select__field{position:relative}.ss_form_select__icon{position:absolute;right:.7rem;top:50%;width:1rem;height:1rem;transform:translateY(-50%);color:var(--fg-muted);pointer-events:none}.ss_form_select__icon svg{width:100%;height:100%;display:block}[role=alert]{font-size:.8rem;color:var(--error);animation:.12s input-alert-appear ease-out}}.ss_form_ac_select{display:flex;flex-direction:column;gap:.35rem;label{margin:0;font-size:.78rem;font-weight:600;letter-spacing:.01em;color:var(--fg-muted)}.ss__wrapper{position:relative;display:inline-block;width:100%}.ss__input_row{display:flex;align-items:center;gap:.4rem;width:100%;min-width:0;padding:.5rem .65rem;font-size:.95rem;line-height:1.4;color:var(--input-fg);background-color:var(--input-bg);border-width:1px;border-style:solid;border-color:var(--input-border);border-radius:var(--radius-md);outline:none;box-shadow:none;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease;&:hover:not(:has([disabled])){border-color:var(--input-border-hover);background-color:var(--input-bg-hover)}&:has([disabled]){cursor:not-allowed;color:var(--input-fg-disabled);background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled)}input{flex-grow:1;min-width:0;padding:0;font-size:inherit;line-height:inherit;color:inherit;background-color:transparent;border:none;outline:none}.ss__prefix{flex-shrink:0;padding:.2rem .6rem;font-size:.78rem;line-height:1.3;white-space:nowrap;color:var(--token-fg);background-color:var(--token-bg);border-radius:var(--radius-pill);cursor:pointer;user-select:none;border:1px solid rgba(37,99,235,.18);transition:background-color .1s ease,border-color .1s ease,transform 80ms ease,box-shadow .1s ease;&:hover{background-color:#2563eb0f;border-color:#2563eb59;box-shadow:0 0 0 1px #bfdbfecc}&:active{transform:translateY(1px)}}.ss__prefix[aria-disabled=true]{cursor:not-allowed;opacity:.6;pointer-events:none}.ss__suffix{flex-shrink:0}}.ss__selection{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0;padding:.5rem .65rem;font-size:.95rem;line-height:1.4;color:var(--input-fg);background-color:var(--input-bg);border-width:1px;border-style:solid;border-color:var(--input-border);border-radius:var(--radius-md);outline:none;box-shadow:none;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease;&:has(.ss__clear[disabled]){cursor:not-allowed;color:var(--input-fg-disabled);background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled)}}.ss__content{flex:1;min-width:0}.ss__clear{flex-shrink:0;width:1.7rem;height:1.7rem;display:inline-flex;align-items:center;justify-content:center;font-size:.9rem;line-height:1;color:var(--clear-fg);background:var(--clear-bg);border-width:1px;border-style:solid;border-color:var(--clear-border);border-radius:var(--radius-pill);cursor:pointer;user-select:none;transition:background-color .1s ease,border-color .1s ease,transform 80ms ease;&:hover:not([disabled]){border-color:var(--clear-border-hover);background-color:var(--clear-bg-hover)}&:active:not([disabled]){transform:translateY(1px)}&[disabled]{cursor:not-allowed;opacity:.55}}.ss__suggestions{max-height:clamp(8rem,40vh,16rem);li{padding-inline:.85rem}}&:not(:focus-within){.ss__suggestions{display:none}}&:focus-within{.ss__input_row,.ss__selection{border-color:var(--primary);box-shadow:var(--focus-ring);background-color:var(--input-bg-focus)}}&:has([role=alert]){.ss__input_row,.ss__selection{border-color:var(--error);box-shadow:var(--focus-ring-error)}}[role=alert]{font-size:.8rem;color:var(--error);animation:.12s input-alert-appear ease-out}}.ss_button{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.55rem 1.05rem;font-size:.9rem;font-weight:600;text-transform:none;text-align:center;letter-spacing:.01em;color:var(--on-primary);background:var(--btn-primary-bg);border:1px solid var(--btn-primary-border);border-radius:var(--radius-pill);outline:none;cursor:pointer;user-select:none;transition:background-color .12s ease,border-color .12s ease,opacity 80ms ease,transform 80ms ease,color .1s ease;&.secondary{color:var(--fg-primary);background:var(--btn-secondary-bg);border-color:var(--btn-secondary-border);box-shadow:none}&.tertiary{color:var(--fg-secondary);background:var(--btn-tertiary-bg);border-color:var(--btn-tertiary-border);box-shadow:none}&.danger{color:var(--on-error);background:var(--error);border-color:var(--error)}&:hover:not([disabled]){background-color:var(--btn-primary-bg-hover);border-color:var(--btn-primary-border-hover);&.secondary{background-color:var(--btn-secondary-bg-hover);border-color:var(--btn-secondary-border-hover)}&.tertiary{background-color:var(--btn-tertiary-bg-hover);border-color:var(--btn-tertiary-border-hover)}&.danger{background-color:var(--error-strong);border-color:var(--error-strong)}}&:active:not([disabled]){transform:translateY(1px)}&:focus-visible{outline:none;box-shadow:var(--focus-ring)}&[disabled]{cursor:not-allowed;color:var(--on-disabled);background:var(--disabled);border-color:var(--disabled);opacity:.9}}.ss_button--icon{width:2.1rem;height:2.1rem;padding:0;font-size:1.1rem;line-height:1;color:var(--fg-primary);background:transparent;border-color:transparent;border-radius:var(--radius-pill);box-shadow:none;transition:background-color .1s ease,border-color .1s ease,transform 80ms ease;&:hover:not([disabled]){background-color:var(--btn-tertiary-bg-hover);border-color:var(--btn-tertiary-border-hover)}&:active:not([disabled]){transform:translateY(1px)}&[disabled]{opacity:.5}}.ss_callout{--ss-callout-accent: var(--primary);--ss-callout-accent-soft: color-mix(in srgb, var(--ss-callout-accent) 22%, transparent);position:relative;display:flex;align-items:center;gap:1rem;width:100%;padding:1.15rem 1.4rem;font-size:.95rem;line-height:1.55;color:var(--fg-secondary);background:radial-gradient(circle at top left,var(--ss-callout-accent-soft) 0%,color-mix(in srgb,var(--ss-callout-accent-soft) 80%,var(--bg-surface) 20%) 28%,color-mix(in srgb,var(--ss-callout-accent-soft) 40%,var(--bg-surface) 60%) 62%,color-mix(in srgb,var(--ss-callout-accent-soft) 12%,var(--bg-surface) 88%) 82%,var(--bg-surface-subtle) 100%),var(--bg-surface);border-radius:calc(var(--radius-md) * 1.2);border:1px solid color-mix(in srgb,var(--border-subtle) 60%,var(--ss-callout-accent) 40%);.ss_callout__icon{flex-shrink:0;color:var(--ss-callout-accent);svg{width:1.6rem;height:1.6rem;display:block}}.ss_callout__content{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}.ss_callout__title{margin:0;font-size:1rem;font-weight:600;color:var(--fg-primary);line-height:1.45}.ss_callout__body{margin:.25rem 0 0;color:var(--fg-secondary)}.ss_callout__actions{margin-top:.65rem;display:inline-flex;gap:.65rem;font-size:.9rem;button,.ss_callout__link{padding:0;border:none;background:none;font:inherit;cursor:pointer;text-decoration:none;color:color-mix(in srgb,var(--ss-callout-accent) 80%,var(--fg-primary) 20%);&:hover{text-decoration:underline}}}&.ss_callout--subtle{box-shadow:none;border-color:var(--border-subtle);background:color-mix(in srgb,var(--bg-surface-subtle) 85%,var(--ss-callout-accent-soft) 15%)}}.ss_callout--red{--ss-callout-accent: #E53935}.ss_callout--pink{--ss-callout-accent: #D81B60}.ss_callout--purple{--ss-callout-accent: #8E24AA}.ss_callout--deep-purple{--ss-callout-accent: #5E35B1}.ss_callout--indigo{--ss-callout-accent: #3949AB}.ss_callout--blue{--ss-callout-accent: #1E88E5}.ss_callout--light-blue{--ss-callout-accent: #039BE5}.ss_callout--cyan{--ss-callout-accent: #00ACC1}.ss_callout--teal{--ss-callout-accent: #00897B}.ss_callout--green{--ss-callout-accent: #43A047}.ss_callout--light-green{--ss-callout-accent: #7CB342}.ss_callout--lime{--ss-callout-accent: #C0CA33}.ss_callout--yellow{--ss-callout-accent: #FDD835}.ss_callout--amber{--ss-callout-accent: #FFB300}.ss_callout--orange{--ss-callout-accent: #FB8C00}.ss_callout--deep-orange{--ss-callout-accent: #F4511E}.ss_callout--brown{--ss-callout-accent: #6D4C41}.ss_callout--grey{--ss-callout-accent: #757575}.ss_callout--blue-grey{--ss-callout-accent: #546E7A}.ss_dropdown{position:relative;display:inline-flex}.ss_dropdown__trigger{justify-content:center}.ss_dropdown__menu{position:absolute;top:calc(100% + .4rem);right:0;z-index:30;min-width:12rem;padding:.4rem;background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);opacity:0;transform:translateY(-6px) scale(.98);transition:opacity .14s ease,transform .16s ease;&[data-state=open]{opacity:1;transform:translateY(0) scale(1)}&[data-state=closed]{opacity:0;transform:translateY(-6px) scale(.98)}}.ss_dropdown__item{width:100%;display:flex;align-items:center;gap:.6rem;padding:.45rem .55rem;border-radius:var(--radius-md);border:none;background:transparent;color:var(--fg-primary);cursor:pointer;text-align:left;transition:background-color .12s ease,color .12s ease;&:hover{background:var(--bg-surface-subtle)}}.ss_dropdown__item_icon{display:inline-flex;align-items:center;justify-content:center;width:1.1rem;height:1.1rem;color:var(--fg-muted);svg{width:100%;height:100%}}.ss_dropdown__item_label{flex:1;min-width:0;font-size:.9rem}.ss_dropdown__item_check{display:inline-flex;align-items:center;justify-content:center;color:var(--primary);svg{width:1rem;height:1rem}}.ss_chip{--ss-chip-accent: var(--primary);--ss-chip-accent-soft: color-mix(in srgb, var(--ss-chip-accent) 16%, transparent);display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .65rem;border-radius:var(--radius-pill);border:1px solid color-mix(in srgb,var(--ss-chip-accent) 45%,var(--border-subtle) 55%);background:color-mix(in srgb,var(--ss-chip-accent-soft) 60%,var(--bg-surface) 40%);color:var(--fg-primary);font-size:.82rem;line-height:1.3}.ss_chip--clickable{cursor:pointer;transition:background-color .12s ease,border-color .12s ease,transform 80ms ease;&:hover{border-color:color-mix(in srgb,var(--ss-chip-accent) 65%,var(--border-strong) 35%);background:color-mix(in srgb,var(--ss-chip-accent-soft) 75%,var(--bg-surface) 25%)}&:active{transform:translateY(1px)}}.ss_chip__label{white-space:nowrap}.ss_chip__dismiss{width:1.3rem;height:1.3rem;padding:0;border:none;background:transparent;color:var(--fg-muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;svg{width:.9rem;height:.9rem}&:hover{color:var(--fg-primary)}}.ss_chip--red{--ss-chip-accent: #E53935}.ss_chip--pink{--ss-chip-accent: #D81B60}.ss_chip--purple{--ss-chip-accent: #8E24AA}.ss_chip--deep-purple{--ss-chip-accent: #5E35B1}.ss_chip--indigo{--ss-chip-accent: #3949AB}.ss_chip--blue{--ss-chip-accent: #1E88E5}.ss_chip--light-blue{--ss-chip-accent: #039BE5}.ss_chip--cyan{--ss-chip-accent: #00ACC1}.ss_chip--teal{--ss-chip-accent: #00897B}.ss_chip--green{--ss-chip-accent: #43A047}.ss_chip--light-green{--ss-chip-accent: #7CB342}.ss_chip--lime{--ss-chip-accent: #C0CA33}.ss_chip--yellow{--ss-chip-accent: #FDD835}.ss_chip--amber{--ss-chip-accent: #FFB300}.ss_chip--orange{--ss-chip-accent: #FB8C00}.ss_chip--deep-orange{--ss-chip-accent: #F4511E}.ss_chip--brown{--ss-chip-accent: #6D4C41}.ss_chip--grey{--ss-chip-accent: #757575}.ss_chip--blue-grey{--ss-chip-accent: #546E7A}.ss_table{width:100%;border:1px solid var(--border-subtle);border-radius:var(--radius-lg);background:var(--bg-surface);box-shadow:var(--shadow-soft);overflow:hidden}.ss_table__scroll{overflow:auto}.ss_table table{width:100%;border-collapse:collapse;min-width:32rem}.ss_table th{text-align:left;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-muted);background:color-mix(in srgb,var(--bg-surface-subtle) 80%,var(--bg-surface) 20%);border-bottom:1px solid var(--border-subtle);padding:.75rem .9rem}.ss_table__header_label{display:inline-flex;align-items:center;gap:.35rem}.ss_table__sort_button{border:none;background:transparent;padding:0;font:inherit;color:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:.35rem}.ss_table__sort_icon{display:inline-flex;align-items:center;justify-content:center;color:currentColor;opacity:.7}.ss_table__sort_icon svg{width:1rem;height:1rem}.ss_table td{padding:.8rem .9rem;border-bottom:1px solid var(--border-subtle);color:var(--fg-primary);font-size:.9rem}.ss_table tbody tr:last-child td{border-bottom:none}.ss_table__pagination{display:flex;align-items:center;justify-content:center;gap:.75rem;padding:.75rem .9rem;border-top:1px solid var(--border-subtle);background:color-mix(in srgb,var(--bg-surface-subtle) 80%,var(--bg-surface) 20%)}.ss_table--pagination-top .ss_table__pagination{border-top:none;border-bottom:1px solid var(--border-subtle)}.ss_table__page_button{border:1px solid var(--border-subtle);background:var(--bg-surface);color:var(--fg-primary);border-radius:var(--radius-pill);width:2rem;height:2rem;padding:0;font-size:.85rem;cursor:pointer;transition:background-color .12s ease,border-color .12s ease;&:hover:not(:disabled){border-color:var(--border-strong);background:var(--bg-surface)}&:disabled{cursor:not-allowed;color:var(--fg-muted);border-color:var(--border-subtle);background:var(--bg-surface);opacity:.6}}.ss_table__page_info{font-size:.85rem;color:var(--fg-muted)}.ss_table__page_button svg{width:1rem;height:1rem;display:block;margin:0 auto}.ss_table td>div{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.ss_table tbody tr[data-clickable=true]{cursor:pointer;transition:background-color .12s ease}.ss_table tbody tr[data-clickable=true]:hover{background:var(--bg-surface-subtle)}.ss_expandable{width:100%;background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);overflow:hidden;.ss_expandable__header{width:100%;display:flex;align-items:center;gap:.6rem;padding:.9rem 1rem;text-align:left;background:var(--bg-surface);border:none;color:var(--fg-primary);cursor:pointer;user-select:none;transition:background-color .12s ease;&:hover{background:var(--bg-surface-subtle)}&:focus-visible{outline:none;box-shadow:var(--focus-ring)}}.ss_expandable__icon{display:inline-flex;align-items:center;justify-content:center;width:1.1rem;height:1.1rem;color:var(--fg-muted);svg{width:1.1rem;height:1.1rem}}.ss_expandable__title{font-size:.96rem;font-weight:600;color:inherit}.ss_expandable__content{overflow:hidden;padding:0;background:var(--bg-surface);transition-property:height}.ss_expandable__divider_wrapper{padding:0 1rem 1rem}.ss_expandable__divider{height:1px;margin:.75rem 0 .8rem;background:var(--border-subtle)}}.ss_divider{width:100%;height:1px;background:var(--border-subtle)}.ss_divider--vertical{width:1px;height:100%}.ss_surface{width:100%;padding:1rem 1.25rem;background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft)}.ss_tile{width:100%;padding:.9rem 1rem;background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-soft)}.ss_tile__row{display:flex;align-items:center;gap:.5rem}.ss_tile__icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--fg-muted);svg{width:1.25rem;height:1.25rem}}.ss_tile__content{flex:1;min-width:0}.ss_tile__trailing{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--fg-muted);font-size:.8rem}.ss_tile__title{margin:0;font-size:.95rem;font-weight:600;color:var(--fg-primary)}.ss_tile__link,.ss_tile__text{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ss_tile__link{color:inherit;text-decoration:none;&:hover{text-decoration:underline}}.ss_tile__subtitle{margin-top:.2rem;font-size:.82rem;color:var(--fg-secondary)}.ss_header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.25rem}.ss_header__text{min-width:0}.ss_header__title{margin:0;font-size:1.8rem;font-weight:600;color:var(--fg-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ss_header__subtitle{margin:-.35rem 0 0;font-size:1rem;font-weight:500;color:var(--fg-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ss_header__actions{flex-shrink:0;display:inline-flex;align-items:center;gap:.5rem}.ss_shell{height:100%;overflow:hidden;display:flex;flex-direction:column;background:var(--shell-bg);color:var(--fg-primary);.ss_shell__drawer_toggle_input{position:absolute;opacity:0;pointer-events:none}.ss_shell__header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.7rem .9rem;background:var(--shell-header-bg);backdrop-filter:blur(18px);border-bottom:1px solid var(--shell-header-border)}.ss_shell__header_left{display:flex;align-items:center;gap:.75rem}.ss_shell__drawer_toggle{display:none}.ss_shell__title{font-size:1rem;font-weight:700;letter-spacing:.02em;color:var(--fg-primary)}.ss_shell__actions{display:flex;align-items:center;gap:.4rem}.ss_shell__body{flex:1 1 auto;min-height:0;display:flex;position:relative;overflow:hidden}.ss_shell__nav{flex:0 0 16rem;max-width:16rem;background:var(--shell-nav-bg);backdrop-filter:blur(12px);border-right:1px solid var(--shell-nav-border);overflow:auto}.ss_shell__nav_inner{padding:.75rem .7rem 1rem}.ss_shell__main{flex:1 1 auto;min-width:0;overflow:auto;padding:1.25rem 1.3rem 1.6rem}.ss_shell__scrim{display:none}.ss_shell__nav_list{display:flex;flex-direction:column;gap:.25rem}.ss_shell__nav_item{display:flex;align-items:center;gap:.55rem;padding:.4rem .55rem;border-radius:var(--radius-md);color:var(--fg-primary);text-decoration:none;background:transparent;border:none;cursor:pointer;transition:background-color .12s ease,color .12s ease;&:hover{background:#2563eb0f}}.ss_shell__nav_item--active{background:#2563eb24;color:var(--fg-primary)}.ss_shell__nav_icon{display:inline-flex;align-items:center;justify-content:center;width:1.1rem;height:1.1rem;color:var(--fg-muted)}.ss_shell__nav_label{font-size:.9rem;color:inherit}.ss_shell__nav_group{border:none;>summary{list-style:none;&::-webkit-details-marker{display:none}}}.ss_shell__nav_group_header{display:flex;align-items:center;gap:.55rem;padding:.4rem .55rem;cursor:pointer;user-select:none;background:transparent;border-radius:var(--radius-md);transition:background-color .12s ease,color .12s ease;&:hover{background:#2563eb0f}}.ss_shell__nav_group_chevron{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;color:var(--fg-muted)}.ss_shell__nav_group_chevron_svg{width:1rem;height:1rem}.ss_shell__nav_group[open]{.ss_shell__nav_group_chevron_svg{transform:rotate(90deg)}}.ss_shell__nav_group_items{padding-left:1.1rem;margin-top:.15rem;display:flex;flex-direction:column;gap:.2rem}@media (max-width: 55rem){.ss_shell__drawer_toggle{display:inline-flex}.ss_shell__nav{position:absolute;top:0;bottom:0;left:0;z-index:20;width:min(80vw,18rem);max-width:18rem;transform:translate(-100%);transition:transform .16s ease-out;box-shadow:var(--shadow-soft)}.ss_shell__main{padding:1.25rem}.ss_shell__scrim{display:block;position:absolute;inset:0;background:#02061766;opacity:0;pointer-events:none;transition:opacity .16s ease}.ss_shell__drawer_toggle_input:checked~.ss_shell__body{.ss_shell__nav{transform:translate(0)}.ss_shell__scrim{opacity:1;pointer-events:auto}}}}.ss_modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:2rem 1rem;&[data-state=closed]{pointer-events:none}.ss_modal__backdrop{position:absolute;inset:0;background:#0206178c;opacity:0;transition:opacity .16s ease}.ss_modal__panel{position:relative;z-index:1;width:min(92vw,46rem);max-height:min(85vh,720px);display:flex;flex-direction:column;gap:0;padding:0;background-color:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);opacity:0;transform:translateY(10px) scale(.985);transition:transform .18s ease,opacity .16s ease;outline:none}.ss_modal__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:1.3rem 1.5rem .75rem}.ss_modal__title{margin:0;font-size:1.08rem;font-weight:700;color:var(--fg-primary)}.ss_modal__close{flex-shrink:0;width:2rem;height:2rem;padding:0;display:inline-flex;align-items:center;justify-content:center;font-size:1.05rem;line-height:1;color:var(--clear-fg);background:var(--clear-bg);border:1px solid var(--clear-border);border-radius:var(--radius-pill);cursor:pointer;user-select:none;transition:background-color .1s ease,border-color .1s ease,transform 80ms ease;&:hover{background:var(--clear-bg-hover);border-color:var(--clear-border-hover)}&:focus-visible{outline:none;box-shadow:var(--focus-ring)}&:active{transform:translateY(1px)}}.ss_modal__body{color:var(--fg-secondary);line-height:1.6;overflow:auto}.ss_modal__body_inner{padding:0 1.5rem 1rem}.ss_modal__footer{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;padding:0 1.5rem 1.25rem}&[data-state=open]{.ss_modal__backdrop{opacity:1}.ss_modal__panel{opacity:1;transform:translateY(0) scale(1)}}@media (max-width: 40rem){padding:0;.ss_modal__panel:not(.ss_modal__panel--no-fullscreen){width:100vw;height:100vh;max-height:100vh;border-radius:0;border:none;.ss_modal__body{flex:1;min-height:0;overflow:auto}.ss_modal__footer{margin-top:auto;padding-top:.75rem;border-top:1px solid var(--border-subtle);background:var(--bg-surface)}}}}.ss_modal__panel--sm{width:min(90vw,26rem)}.ss_modal__panel--lg{width:min(92vw,48rem)}.ss_modal__panel--fullscreen{width:100vw;height:100vh;max-height:100vh;border-radius:0;border:none}.ss_modal__panel--fullscreen .ss_modal__body{flex:1;min-height:0;overflow:auto}.ss_modal__panel--fullscreen .ss_modal__footer{margin-top:auto;padding-top:.75rem;border-top:1px solid var(--border-subtle);background:var(--bg-surface)}@media (prefers-reduced-motion: reduce){*{animation-duration:0ms!important;transition-duration:0ms!important}}
|
|
1
|
+
:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,sans-serif;--bg-page: #f5f5f7;--bg-surface: #ffffff;--bg-surface-subtle: #f3f4f6;--shell-bg: radial-gradient(circle at top left, #eef2ff 0, #f5f5f7 38%, #f3f4f6 100%);--shell-header-bg: rgba(255, 255, 255, .85);--shell-header-border: rgba(209, 213, 219, .8);--shell-nav-bg: rgba(255, 255, 255, .92);--shell-nav-border: rgba(209, 213, 219, .85);--fg-primary: #0f172a;--fg-secondary: #4b5563;--fg-muted: #6b7280;--fg-inverse: #ffffff;--border-subtle: #e5e7eb;--border-strong: #d1d5db;--card-accent: #2563eb;--input-bg: #ffffff;--input-fg: var(--fg-primary);--input-border: #d1d5db;--input-border-hover: #9ca3af;--input-border-disabled: #e5e7eb;--input-bg-disabled: #f3f4f6;--input-fg-disabled: #9ca3af;--input-bg-hover: #f9fafb;--input-bg-focus: #ffffff;--scrollbar-thumb: rgba(15, 23, 42, .24);--primary: #2563eb;--primary-soft: #e0ecff;--primary-soft-stronger: #d1e1ff;--on-primary: #ffffff;--error: #dc2626;--on-error: #ffffff;--error-strong: #b91c1c;--disabled: #9ca3af;--on-disabled: #f9fafb;--suggestion-bg: var(--bg-surface);--suggestion-hover-bg: #f3f4ff;--suggestion-focus-bg: #e0ebff;--suggestion-selected-bg: #e0ebff;--suggestion-indicator: #2563eb;--btn-primary-bg: var(--primary);--btn-primary-border: #1d4ed8;--btn-primary-bg-hover: #1d4ed8;--btn-primary-border-hover: #1e40af;--btn-secondary-bg: #eef1f7;--btn-secondary-border: #d1d5db;--btn-secondary-bg-hover: #e0e3ec;--btn-secondary-border-hover: #cbd0dd;--btn-tertiary-bg: transparent;--btn-tertiary-border: var(--border-subtle);--btn-tertiary-bg-hover: #e9effa;--btn-tertiary-border-hover: var(--border-strong);--clear-bg: #edeff4;--clear-border: #e2e4ec;--clear-bg-hover: #e1e4ee;--clear-border-hover: #cbd0dd;--clear-fg: #4b5563;--token-bg: #eef2ff;--token-fg: #1f2937;--radius-sm: .375rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-pill: 999px;--focus-ring: 0 0 0 1px rgba(37, 99, 235, .75), 0 0 0 4px rgba(191, 219, 254, .9);--focus-ring-error: 0 0 0 1px rgba(220, 38, 38, .85), 0 0 0 4px rgba(254, 202, 202, .85);--shadow-soft: 0 10px 30px rgba(15, 23, 42, .06);--btn-shadow: 0 6px 18px rgba(15, 23, 42, .16);--btn-shadow-hover: 0 10px 30px rgba(15, 23, 42, .18)}@media (prefers-color-scheme: dark){:root{--bg-page: #0f1115;--bg-surface: #14171c;--bg-surface-subtle: #1a1e24;--fg-primary: #e7e9ee;--fg-secondary: #c7cbd4;--fg-muted: #9ca3af;--fg-inverse: #0f1115;--border-subtle: #2a2f36;--border-strong: #3a4048;--card-accent: #94a3b8;--input-bg: #14171c;--input-fg: var(--fg-primary);--input-border: #2a2f36;--input-border-hover: #3a4048;--input-border-disabled: #111827;--input-bg-disabled: #14171c;--input-fg-disabled: #6b7280;--input-bg-hover: #1a1e24;--input-bg-focus: #20252c;--scrollbar-thumb: rgba(156, 163, 175, .38);--primary: #3b82f6;--primary-soft: #172554;--primary-soft-stronger: #1d4ed8;--on-primary: #ffffff;--error: #fb7185;--on-error: #0f1115;--error-strong: #f43f5e;--suggestion-bg: #14171c;--suggestion-hover-bg: #1b2027;--suggestion-focus-bg: #21262e;--suggestion-selected-bg: #262c35;--suggestion-indicator: #94a3b8;--btn-primary-bg: var(--primary);--btn-primary-border: #1d4ed8;--btn-primary-bg-hover: #1d4ed8;--btn-primary-border-hover: #1e3a8a;--btn-secondary-bg: #1a1e24;--btn-secondary-border: #2f353e;--btn-secondary-bg-hover: #232831;--btn-secondary-border-hover: #3a4048;--btn-tertiary-bg: transparent;--btn-tertiary-border: #2f353e;--btn-tertiary-bg-hover: #232831;--btn-tertiary-border-hover: #3a4048;--clear-bg: #1a1e24;--clear-border: #2f353e;--clear-bg-hover: #232831;--clear-border-hover: #3a4048;--clear-fg: #e5e7eb;--token-bg: #232831;--token-fg: #e5e7eb;--shadow-soft: 0 18px 50px rgba(0, 0, 0, .75);--btn-shadow: 0 12px 30px rgba(0, 0, 0, .65);--btn-shadow-hover: 0 16px 40px rgba(0, 0, 0, .85);--shell-bg: radial-gradient(circle at top left, #1c2129 0, #0f1115 45%, #12161b 100%);--shell-header-bg: rgba(20, 23, 28, .92);--shell-header-border: rgba(58, 64, 72, .9);--shell-nav-bg: rgba(20, 23, 28, .96);--shell-nav-border: rgba(58, 64, 72, .92)}}@keyframes input-alert-appear{0%{opacity:0;transform:translateY(-1px)}to{opacity:1;transform:translateY(0)}}*,*:before,*:after{box-sizing:border-box}*{-webkit-tap-highlight-color:transparent}body{margin:0;font-family:inherit;color:var(--fg-primary);background-color:var(--bg-page);font-size:14px}html,body,#root{position:relative;height:100%;width:100%;overflow:hidden}.ss_form{max-width:48rem;width:100%;margin:0 auto;display:flex;flex-direction:column;gap:1rem;padding:.5rem 0}.ss__suggestions{position:absolute;top:calc(100% + .35rem);left:0;right:0;z-index:10;display:flex;flex-direction:column;max-height:clamp(7rem,35vh,14rem);margin:0;padding:.25rem 0;list-style-type:none;background-color:var(--suggestion-bg);border-width:1px;border-style:solid;border-color:var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);overflow-y:auto;overflow-x:hidden;li{display:flex;align-items:flex-start;gap:.4rem;padding:.45rem .8rem;font-size:.9rem;line-height:1.45;color:var(--fg-primary);cursor:pointer;user-select:none;outline:none;+li{border-top:1px solid var(--border-subtle)}&:hover{background-color:var(--suggestion-hover-bg)}&:focus{background-color:var(--suggestion-focus-bg)}&.ss__hovered{background-color:var(--suggestion-focus-bg)}&.ss__selected{font-weight:500;background-color:var(--suggestion-selected-bg);box-shadow:inset 2px 0 0 var(--suggestion-indicator)}&.ss__selected.ss__hovered,&.ss__selected:hover{background-color:#2563eb14}.ss__title{font-weight:500}.ss__description{font-size:.8rem;color:var(--fg-muted)}}&::-webkit-scrollbar{width:6px}&::-webkit-scrollbar-track{background:transparent}&::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:999px}}.ss_form_input,.ss_form_date{display:flex;flex-direction:column;gap:.35rem;label{margin:0;font-size:.78rem;font-weight:600;letter-spacing:.01em;text-transform:none;color:var(--fg-muted)}.ss__wrapper{position:relative;display:inline-block;width:100%}input{display:block;width:100%;min-width:0;padding:.55rem .7rem;font-size:.95rem;line-height:1.4;color:var(--input-fg);background-color:var(--input-bg);border-width:1px;border-style:solid;border-color:var(--input-border);border-radius:var(--radius-md);outline:none;box-shadow:none;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease,transform 80ms ease;&:hover:not([disabled]){border-color:var(--input-border-hover);background-color:var(--input-bg-hover)}&:focus-visible{border-color:var(--primary);box-shadow:var(--focus-ring);background-color:var(--input-bg-focus)}&[disabled]{cursor:not-allowed;color:var(--input-fg-disabled);background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled)}}.ss__suggestions{max-height:clamp(7rem,30vh,12rem)}&:not(:focus-within){.ss__suggestions{display:none}}&:has([role=alert]){input{border-color:var(--error);box-shadow:var(--focus-ring-error)}}[role=alert]{margin-top:.15rem;font-size:.8rem;line-height:1.4;color:var(--error);animation:.12s input-alert-appear ease-out}}.ss_form_date{position:relative;input{padding-right:2.1rem}input::-webkit-calendar-picker-indicator{opacity:0;display:none}}.ss_form_date__icon{position:absolute;right:.7rem;top:50%;width:1rem;height:1rem;transform:translateY(-50%);color:var(--fg-muted);padding:0;border:none;background:transparent;cursor:pointer;&:disabled{cursor:not-allowed;color:var(--input-fg-disabled)}svg{width:100%;height:100%;display:block}}.ss_form_date__picker{position:absolute;top:calc(100% + .35rem);left:0;z-index:10;width:min(18rem,100%);padding:.75rem;border-radius:var(--radius-md);border:1px solid var(--border-subtle);background:var(--bg-surface);box-shadow:var(--shadow-soft)}.ss_form_date__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.6rem}.ss_form_date__nav_group{display:flex;align-items:center;gap:.35rem}.ss_form_date__title{font-size:.9rem;font-weight:600;color:var(--fg-primary);text-transform:capitalize}.ss_form_date__nav{width:1.8rem;height:1.8rem;border-radius:var(--radius-pill);border:1px solid var(--border-subtle);background:var(--bg-surface-subtle);color:var(--fg-primary);cursor:pointer;transition:background-color .12s ease,border-color .12s ease;&:hover{border-color:var(--border-strong)}}.ss_form_date__nav svg{width:1rem;height:1rem;display:block;margin:0 auto}.ss_form_date__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:.2rem;margin-bottom:.35rem;font-size:.75rem;color:var(--fg-muted);text-align:center}.ss_form_date__grid{display:grid;grid-template-columns:repeat(7,1fr);gap:.2rem}.ss_form_date__day{height:2rem;border-radius:var(--radius-md);border:1px solid transparent;background:transparent;color:var(--fg-primary);cursor:pointer;transition:background-color .12s ease,border-color .12s ease;&:hover{background:var(--bg-surface-subtle)}&.is-selected{background:var(--primary-soft);border-color:var(--primary);color:var(--fg-primary);font-weight:600}&.is-today:not(.is-selected){border-color:var(--border-strong);background:var(--bg-surface-subtle);color:var(--fg-primary);font-weight:500}}.ss_form_date__day.is-empty{border:none;background:transparent;cursor:default}.ss_form_checkbox{display:flex;flex-direction:column;gap:.3rem;width:100%;font-size:.9rem;color:var(--fg-secondary);.ss__wrapper{display:inline-flex;align-items:flex-start;gap:.55rem;padding:.15rem .05rem;font-size:.9rem;line-height:1.5;color:var(--fg-secondary);background-color:transparent;border:none;outline:none}input[type=checkbox]{margin-top:.12rem;width:1.05rem;height:1.05rem;flex-shrink:0;position:relative;appearance:none;-webkit-appearance:none;-moz-appearance:none;accent-color:initial;border-radius:calc(var(--radius-sm) * .9);border:1px solid var(--border-strong);background-color:var(--bg-surface);box-shadow:0 1px 1px #0f172a0f;cursor:pointer;outline:none;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease,transform 80ms ease;&:hover:not(:disabled){border-color:var(--input-border-hover);background-color:var(--input-bg-hover)}&:active:not(:disabled){transform:translateY(1px)}&:after{content:"";position:absolute;inset:0;margin:auto;width:.55rem;height:.3rem;border-left:2px solid var(--on-primary);border-bottom:2px solid var(--on-primary);transform-origin:center;transform:translateY(-1px) rotate(-45deg) scale(.2);opacity:0;transition:transform .12s ease-out,opacity .12s ease-out}&:checked,&[aria-checked=true]{background-color:var(--primary)!important;border-color:var(--primary)!important;&:after{opacity:1;transform:translateY(-1px) rotate(-45deg) scale(1)}}&:checked[disabled],&[aria-checked=true][disabled]{background-color:color-mix(in srgb,var(--input-bg-disabled) 70%,var(--fg-primary))!important;border-color:var(--input-border-disabled)!important}&[disabled]{cursor:not-allowed;background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled);box-shadow:none;opacity:.75;&:after{border-color:#fff}}}&:has(input[type=checkbox]:focus-visible){input[type=checkbox]{outline:none;box-shadow:var(--focus-ring)}}label{margin:0;font-size:.9rem;line-height:1.5;color:var(--fg-primary);cursor:pointer;user-select:none}&:has(input[type=checkbox][disabled]){color:var(--input-fg-disabled);user-select:none;label{cursor:not-allowed;color:var(--input-fg-disabled)}}[role=alert]{font-size:.8rem;color:var(--error);animation:.12s input-alert-appear ease-out}}.ss_form_select{display:flex;flex-direction:column;gap:.35rem;width:100%;label{margin:0;font-size:.78rem;font-weight:600;letter-spacing:.01em;color:var(--fg-muted)}select{display:block;width:100%;padding:.55rem 2.1rem .55rem .7rem;font-size:.95rem;line-height:1.4;color:var(--input-fg);background-color:var(--input-bg);background-image:none;border-width:1px;border-style:solid;border-color:var(--input-border);border-radius:var(--radius-md);outline:none;appearance:none;box-shadow:none;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease;&:hover:not([disabled]){border-color:var(--input-border-hover);background-color:var(--input-bg-hover)}&:focus-visible{border-color:var(--primary);box-shadow:var(--focus-ring);background-color:var(--input-bg-focus)}&:has(+[role=alert]){border-color:var(--error);box-shadow:var(--focus-ring-error)}&[disabled]{cursor:not-allowed;color:var(--input-fg-disabled);background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled)}}.ss_form_select__field{position:relative}.ss_form_select__icon{position:absolute;right:.7rem;top:50%;width:1rem;height:1rem;transform:translateY(-50%);color:var(--fg-muted);pointer-events:none}.ss_form_select__icon svg{width:100%;height:100%;display:block}[role=alert]{font-size:.8rem;color:var(--error);animation:.12s input-alert-appear ease-out}}.ss_form_ac_select{display:flex;flex-direction:column;gap:.35rem;label{margin:0;font-size:.78rem;font-weight:600;letter-spacing:.01em;color:var(--fg-muted)}.ss__wrapper{position:relative;display:inline-block;width:100%}.ss__input_row{display:flex;align-items:center;gap:.4rem;width:100%;min-width:0;padding:.5rem .65rem;font-size:.95rem;line-height:1.4;color:var(--input-fg);background-color:var(--input-bg);border-width:1px;border-style:solid;border-color:var(--input-border);border-radius:var(--radius-md);outline:none;box-shadow:none;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease;&:hover:not(:has([disabled])){border-color:var(--input-border-hover);background-color:var(--input-bg-hover)}&:has([disabled]){cursor:not-allowed;color:var(--input-fg-disabled);background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled)}input{flex-grow:1;min-width:0;padding:0;font-size:inherit;line-height:inherit;color:inherit;background-color:transparent;border:none;outline:none}.ss__prefix{flex-shrink:0;padding:.2rem .6rem;font-size:.78rem;line-height:1.3;white-space:nowrap;color:var(--token-fg);background-color:var(--token-bg);border-radius:var(--radius-pill);cursor:pointer;user-select:none;border:1px solid rgba(37,99,235,.18);transition:background-color .1s ease,border-color .1s ease,transform 80ms ease,box-shadow .1s ease;&:hover{background-color:#2563eb0f;border-color:#2563eb59;box-shadow:0 0 0 1px #bfdbfecc}&:active{transform:translateY(1px)}}.ss__prefix[aria-disabled=true]{cursor:not-allowed;opacity:.6;pointer-events:none}.ss__suffix{flex-shrink:0}}.ss__selection{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0;padding:.5rem .65rem;font-size:.95rem;line-height:1.4;color:var(--input-fg);background-color:var(--input-bg);border-width:1px;border-style:solid;border-color:var(--input-border);border-radius:var(--radius-md);outline:none;box-shadow:none;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease;&:has(.ss__clear[disabled]){cursor:not-allowed;color:var(--input-fg-disabled);background-color:var(--input-bg-disabled);border-color:var(--input-border-disabled)}}.ss__content{flex:1;min-width:0}.ss__clear{flex-shrink:0;width:1.7rem;height:1.7rem;display:inline-flex;align-items:center;justify-content:center;font-size:.9rem;line-height:1;color:var(--clear-fg);background:var(--clear-bg);border-width:1px;border-style:solid;border-color:var(--clear-border);border-radius:var(--radius-pill);cursor:pointer;user-select:none;transition:background-color .1s ease,border-color .1s ease,transform 80ms ease;&:hover:not([disabled]){border-color:var(--clear-border-hover);background-color:var(--clear-bg-hover)}&:active:not([disabled]){transform:translateY(1px)}&[disabled]{cursor:not-allowed;opacity:.55}}.ss__suggestions{max-height:clamp(8rem,40vh,16rem);li{padding-inline:.85rem}}&:not(:focus-within){.ss__suggestions{display:none}}&:focus-within{.ss__input_row,.ss__selection{border-color:var(--primary);box-shadow:var(--focus-ring);background-color:var(--input-bg-focus)}}&:has([role=alert]){.ss__input_row,.ss__selection{border-color:var(--error);box-shadow:var(--focus-ring-error)}}[role=alert]{font-size:.8rem;color:var(--error);animation:.12s input-alert-appear ease-out}}.ss_button{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.55rem 1.05rem;font-size:.9rem;font-weight:600;text-transform:none;text-align:center;letter-spacing:.01em;color:var(--on-primary);background:var(--btn-primary-bg);border:1px solid var(--btn-primary-border);border-radius:var(--radius-pill);outline:none;cursor:pointer;user-select:none;transition:background-color .12s ease,border-color .12s ease,opacity 80ms ease,transform 80ms ease,color .1s ease;&.secondary{color:var(--fg-primary);background:var(--btn-secondary-bg);border-color:var(--btn-secondary-border);box-shadow:none}&.tertiary{color:var(--fg-secondary);background:var(--btn-tertiary-bg);border-color:var(--btn-tertiary-border);box-shadow:none}&.danger{color:var(--on-error);background:var(--error);border-color:var(--error)}&:hover:not([disabled]){background-color:var(--btn-primary-bg-hover);border-color:var(--btn-primary-border-hover);&.secondary{background-color:var(--btn-secondary-bg-hover);border-color:var(--btn-secondary-border-hover)}&.tertiary{background-color:var(--btn-tertiary-bg-hover);border-color:var(--btn-tertiary-border-hover)}&.danger{background-color:var(--error-strong);border-color:var(--error-strong)}}&:active:not([disabled]){transform:translateY(1px)}&:focus-visible{outline:none;box-shadow:var(--focus-ring)}&[disabled]{cursor:not-allowed;color:var(--on-disabled);background:var(--disabled);border-color:var(--disabled);opacity:.9}}.ss_button--icon{width:2.1rem;height:2.1rem;padding:0;font-size:1.1rem;line-height:1;color:var(--fg-primary);background:transparent;border-color:transparent;border-radius:var(--radius-pill);box-shadow:none;transition:background-color .1s ease,border-color .1s ease,transform 80ms ease;&:hover:not([disabled]){background-color:var(--btn-tertiary-bg-hover);border-color:var(--btn-tertiary-border-hover)}&:active:not([disabled]){transform:translateY(1px)}&[disabled]{opacity:.5}}.ss_callout{--ss-callout-accent: var(--primary);--ss-callout-accent-soft: color-mix(in srgb, var(--ss-callout-accent) 22%, transparent);position:relative;display:flex;align-items:center;gap:1rem;width:100%;padding:1.15rem 1.4rem;font-size:.95rem;line-height:1.55;color:var(--fg-secondary);background:radial-gradient(circle at top left,var(--ss-callout-accent-soft) 0%,color-mix(in srgb,var(--ss-callout-accent-soft) 80%,var(--bg-surface) 20%) 28%,color-mix(in srgb,var(--ss-callout-accent-soft) 40%,var(--bg-surface) 60%) 62%,color-mix(in srgb,var(--ss-callout-accent-soft) 12%,var(--bg-surface) 88%) 82%,var(--bg-surface-subtle) 100%),var(--bg-surface);border-radius:calc(var(--radius-md) * 1.2);border:1px solid color-mix(in srgb,var(--border-subtle) 60%,var(--ss-callout-accent) 40%);.ss_callout__icon{flex-shrink:0;color:var(--ss-callout-accent);svg{width:1.6rem;height:1.6rem;display:block}}.ss_callout__content{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}.ss_callout__title{margin:0;font-size:1rem;font-weight:600;color:var(--fg-primary);line-height:1.45}.ss_callout__body{margin:.25rem 0 0;color:var(--fg-secondary)}.ss_callout__actions{margin-top:.65rem;display:inline-flex;gap:.65rem;font-size:.9rem;button,.ss_callout__link{padding:0;border:none;background:none;font:inherit;cursor:pointer;text-decoration:none;color:color-mix(in srgb,var(--ss-callout-accent) 80%,var(--fg-primary) 20%);&:hover{text-decoration:underline}}}&.ss_callout--subtle{box-shadow:none;border-color:var(--border-subtle);background:color-mix(in srgb,var(--bg-surface-subtle) 85%,var(--ss-callout-accent-soft) 15%)}}.ss_callout--red{--ss-callout-accent: #E53935}.ss_callout--pink{--ss-callout-accent: #D81B60}.ss_callout--purple{--ss-callout-accent: #8E24AA}.ss_callout--deep-purple{--ss-callout-accent: #5E35B1}.ss_callout--indigo{--ss-callout-accent: #3949AB}.ss_callout--blue{--ss-callout-accent: #1E88E5}.ss_callout--light-blue{--ss-callout-accent: #039BE5}.ss_callout--cyan{--ss-callout-accent: #00ACC1}.ss_callout--teal{--ss-callout-accent: #00897B}.ss_callout--green{--ss-callout-accent: #43A047}.ss_callout--light-green{--ss-callout-accent: #7CB342}.ss_callout--lime{--ss-callout-accent: #C0CA33}.ss_callout--yellow{--ss-callout-accent: #FDD835}.ss_callout--amber{--ss-callout-accent: #FFB300}.ss_callout--orange{--ss-callout-accent: #FB8C00}.ss_callout--deep-orange{--ss-callout-accent: #F4511E}.ss_callout--brown{--ss-callout-accent: #6D4C41}.ss_callout--grey{--ss-callout-accent: #757575}.ss_callout--blue-grey{--ss-callout-accent: #546E7A}.ss_dropdown{position:relative;display:inline-flex}.ss_dropdown__trigger{justify-content:center}.ss_dropdown__menu{position:absolute;top:calc(100% + .4rem);right:0;z-index:30;min-width:12rem;padding:.4rem;background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);opacity:0;transform:translateY(-6px) scale(.98);transition:opacity .14s ease,transform .16s ease;&[data-state=open]{opacity:1;transform:translateY(0) scale(1)}&[data-state=closed]{opacity:0;transform:translateY(-6px) scale(.98)}}.ss_dropdown__item{width:100%;display:flex;align-items:center;gap:.6rem;padding:.45rem .55rem;border-radius:var(--radius-md);border:none;background:transparent;color:var(--fg-primary);cursor:pointer;text-align:left;transition:background-color .12s ease,color .12s ease;&:hover{background:var(--bg-surface-subtle)}}.ss_dropdown__item_icon{display:inline-flex;align-items:center;justify-content:center;width:1.1rem;height:1.1rem;color:var(--fg-muted);svg{width:100%;height:100%}}.ss_dropdown__item_label{flex:1;min-width:0;font-size:.9rem}.ss_dropdown__item_check{display:inline-flex;align-items:center;justify-content:center;color:var(--primary);svg{width:1rem;height:1rem}}.ss_chip{--ss-chip-accent: var(--primary);--ss-chip-accent-soft: color-mix(in srgb, var(--ss-chip-accent) 16%, transparent);display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .65rem;border-radius:var(--radius-pill);border:1px solid color-mix(in srgb,var(--ss-chip-accent) 45%,var(--border-subtle) 55%);background:color-mix(in srgb,var(--ss-chip-accent-soft) 60%,var(--bg-surface) 40%);color:var(--fg-primary);font-size:.82rem;line-height:1.3}.ss_chip--clickable{cursor:pointer;transition:background-color .12s ease,border-color .12s ease,transform 80ms ease;&:hover{border-color:color-mix(in srgb,var(--ss-chip-accent) 65%,var(--border-strong) 35%);background:color-mix(in srgb,var(--ss-chip-accent-soft) 75%,var(--bg-surface) 25%)}&:active{transform:translateY(1px)}}.ss_chip__label{white-space:nowrap}.ss_chip__dismiss{width:1.3rem;height:1.3rem;padding:0;border:none;background:transparent;color:var(--fg-muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;svg{width:.9rem;height:.9rem}&:hover{color:var(--fg-primary)}}.ss_chip--red{--ss-chip-accent: #E53935}.ss_chip--pink{--ss-chip-accent: #D81B60}.ss_chip--purple{--ss-chip-accent: #8E24AA}.ss_chip--deep-purple{--ss-chip-accent: #5E35B1}.ss_chip--indigo{--ss-chip-accent: #3949AB}.ss_chip--blue{--ss-chip-accent: #1E88E5}.ss_chip--light-blue{--ss-chip-accent: #039BE5}.ss_chip--cyan{--ss-chip-accent: #00ACC1}.ss_chip--teal{--ss-chip-accent: #00897B}.ss_chip--green{--ss-chip-accent: #43A047}.ss_chip--light-green{--ss-chip-accent: #7CB342}.ss_chip--lime{--ss-chip-accent: #C0CA33}.ss_chip--yellow{--ss-chip-accent: #FDD835}.ss_chip--amber{--ss-chip-accent: #FFB300}.ss_chip--orange{--ss-chip-accent: #FB8C00}.ss_chip--deep-orange{--ss-chip-accent: #F4511E}.ss_chip--brown{--ss-chip-accent: #6D4C41}.ss_chip--grey{--ss-chip-accent: #757575}.ss_chip--blue-grey{--ss-chip-accent: #546E7A}.ss_table{width:100%;border:1px solid var(--border-subtle);border-radius:var(--radius-lg);background:var(--bg-surface);box-shadow:var(--shadow-soft);overflow:hidden}.ss_table__scroll{overflow:auto}.ss_table table{width:100%;border-collapse:collapse;min-width:32rem}.ss_table th{text-align:left;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-muted);background:color-mix(in srgb,var(--bg-surface-subtle) 80%,var(--bg-surface) 20%);border-bottom:1px solid var(--border-subtle);padding:.75rem .9rem}.ss_table__header_label{display:inline-flex;align-items:center;gap:.35rem}.ss_table__sort_button{border:none;background:transparent;padding:0;font:inherit;color:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:.35rem}.ss_table__sort_icon{display:inline-flex;align-items:center;justify-content:center;color:currentColor;opacity:.7}.ss_table__sort_icon svg{width:1rem;height:1rem}.ss_table td{padding:.8rem .9rem;border-bottom:1px solid var(--border-subtle);color:var(--fg-primary);font-size:.9rem}.ss_table tbody tr:last-child td{border-bottom:none}.ss_table__pagination{display:flex;align-items:center;justify-content:center;gap:.75rem;padding:.75rem .9rem;border-top:1px solid var(--border-subtle);background:color-mix(in srgb,var(--bg-surface-subtle) 80%,var(--bg-surface) 20%)}.ss_table--pagination-top .ss_table__pagination{border-top:none;border-bottom:1px solid var(--border-subtle)}.ss_table__page_button{border:1px solid var(--border-subtle);background:var(--bg-surface);color:var(--fg-primary);border-radius:var(--radius-pill);width:2rem;height:2rem;padding:0;font-size:.85rem;cursor:pointer;transition:background-color .12s ease,border-color .12s ease;&:hover:not(:disabled){border-color:var(--border-strong);background:var(--bg-surface)}&:disabled{cursor:not-allowed;color:var(--fg-muted);border-color:var(--border-subtle);background:var(--bg-surface);opacity:.6}}.ss_table__page_info{font-size:.85rem;color:var(--fg-muted)}.ss_table__page_button svg{width:1rem;height:1rem;display:block;margin:0 auto}.ss_table td>div{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.ss_table tbody tr[data-clickable=true]{cursor:pointer;transition:background-color .12s ease}.ss_table tbody tr[data-clickable=true]:hover{background:var(--bg-surface-subtle)}.ss_expandable{width:100%;background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);overflow:hidden;.ss_expandable__header{width:100%;display:flex;align-items:center;gap:.6rem;padding:.9rem 1rem;text-align:left;background:var(--bg-surface);border:none;color:var(--fg-primary);cursor:pointer;user-select:none;transition:background-color .12s ease;&:hover{background:var(--bg-surface-subtle)}&:focus-visible{outline:none;box-shadow:var(--focus-ring)}}.ss_expandable__icon{display:inline-flex;align-items:center;justify-content:center;width:1.1rem;height:1.1rem;color:var(--fg-muted);svg{width:1.1rem;height:1.1rem}}.ss_expandable__title{font-size:.96rem;font-weight:600;color:inherit}.ss_expandable__content{overflow:hidden;padding:0;background:var(--bg-surface);transition-property:height}.ss_expandable__divider_wrapper{padding:0 1rem 1rem}.ss_expandable__divider{height:1px;margin:.75rem 0 .8rem;background:var(--border-subtle)}}.ss_divider{width:100%;height:1px;background:var(--border-subtle)}.ss_divider--vertical{width:1px;height:100%}.ss_surface{width:100%;padding:1rem 1.25rem;background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft)}.ss_tile{width:100%;padding:.9rem 1rem;background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-soft)}.ss_tile__row{display:flex;align-items:center;gap:.5rem}.ss_tile__icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--fg-muted);svg{width:1.25rem;height:1.25rem}}.ss_tile__content{flex:1;min-width:0}.ss_tile__trailing{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--fg-muted);font-size:.8rem}.ss_tile__title{margin:0;font-size:.95rem;font-weight:600;color:var(--fg-primary)}.ss_tile__link,.ss_tile__text{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ss_tile__link{color:inherit;text-decoration:none;&:hover{text-decoration:underline}}.ss_tile__subtitle{margin-top:.2rem;font-size:.82rem;color:var(--fg-secondary)}.ss_header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.25rem}.ss_header__text{min-width:0}.ss_header__title{margin:0;font-size:1.8rem;font-weight:600;color:var(--fg-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ss_header__subtitle{margin:-.35rem 0 0;font-size:1rem;font-weight:500;color:var(--fg-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ss_header__actions{flex-shrink:0;display:inline-flex;align-items:center;gap:.5rem}.ss_shell{height:100%;overflow:hidden;display:flex;flex-direction:column;background:var(--shell-bg);color:var(--fg-primary);.ss_shell__drawer_toggle_input{position:absolute;opacity:0;pointer-events:none}.ss_shell__header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.7rem .9rem;background:var(--shell-header-bg);backdrop-filter:blur(18px);border-bottom:1px solid var(--shell-header-border)}.ss_shell__header_left{display:flex;align-items:center;gap:.75rem}.ss_shell__drawer_toggle{display:none}.ss_shell__title{font-size:1rem;font-weight:700;letter-spacing:.02em;color:var(--fg-primary)}.ss_shell__actions{display:flex;align-items:center;gap:.4rem}.ss_shell__body{flex:1 1 auto;min-height:0;display:flex;position:relative;overflow:hidden}.ss_shell__nav{flex:0 0 16rem;max-width:16rem;background:var(--shell-nav-bg);backdrop-filter:blur(12px);border-right:1px solid var(--shell-nav-border);overflow:auto}.ss_shell__nav_inner{padding:.75rem .7rem 1rem}.ss_shell__main{flex:1 1 auto;min-width:0;overflow:auto;padding:1.25rem 1.3rem 1.6rem}.ss_shell__scrim{display:none}.ss_shell__nav_list{display:flex;flex-direction:column;gap:.25rem}.ss_shell__nav_item{display:flex;align-items:center;gap:.55rem;padding:.4rem .55rem;border-radius:var(--radius-md);color:var(--fg-primary);text-decoration:none;background:transparent;border:none;cursor:pointer;transition:background-color .12s ease,color .12s ease;&:hover{background:#2563eb0f}}.ss_shell__nav_item--active{background:#2563eb24;color:var(--fg-primary)}.ss_shell__nav_icon{display:inline-flex;align-items:center;justify-content:center;width:1.1rem;height:1.1rem;color:var(--fg-muted)}.ss_shell__nav_label{font-size:.9rem;color:inherit}.ss_shell__nav_group{border:none;>summary{list-style:none;&::-webkit-details-marker{display:none}}}.ss_shell__nav_group_header{display:flex;align-items:center;gap:.55rem;padding:.4rem .55rem;cursor:pointer;user-select:none;background:transparent;border-radius:var(--radius-md);transition:background-color .12s ease,color .12s ease;&:hover{background:#2563eb0f}}.ss_shell__nav_group_chevron{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;color:var(--fg-muted)}.ss_shell__nav_group_chevron_svg{width:1rem;height:1rem}.ss_shell__nav_group[open]{.ss_shell__nav_group_chevron_svg{transform:rotate(90deg)}}.ss_shell__nav_group_items{padding-left:1.1rem;margin-top:.15rem;display:flex;flex-direction:column;gap:.2rem}@media (max-width: 55rem){.ss_shell__drawer_toggle{display:inline-flex}.ss_shell__nav{position:absolute;top:0;bottom:0;left:0;z-index:20;width:min(80vw,18rem);max-width:18rem;transform:translate(-100%);transition:transform .16s ease-out;box-shadow:var(--shadow-soft)}.ss_shell__main{padding:1.25rem}.ss_shell__scrim{display:block;position:absolute;inset:0;background:#02061766;opacity:0;pointer-events:none;transition:opacity .16s ease}.ss_shell__drawer_toggle_input:checked~.ss_shell__body{.ss_shell__nav{transform:translate(0)}.ss_shell__scrim{opacity:1;pointer-events:auto}}}}.ss_modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:2rem 1rem;&[data-state=closed]{pointer-events:none}.ss_modal__backdrop{position:absolute;inset:0;background:#0206178c;opacity:0;transition:opacity .16s ease}.ss_modal__panel{position:relative;z-index:1;width:min(92vw,46rem);max-height:min(85vh,720px);display:flex;flex-direction:column;gap:0;padding:0;background-color:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);opacity:0;transform:translateY(10px) scale(.985);transition:transform .18s ease,opacity .16s ease;outline:none}.ss_modal__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:1.3rem 1.5rem .75rem}.ss_modal__title{margin:0;font-size:1.08rem;font-weight:700;color:var(--fg-primary)}.ss_modal__close{flex-shrink:0;width:2rem;height:2rem;padding:0;display:inline-flex;align-items:center;justify-content:center;font-size:1.05rem;line-height:1;color:var(--clear-fg);background:var(--clear-bg);border:1px solid var(--clear-border);border-radius:var(--radius-pill);cursor:pointer;user-select:none;transition:background-color .1s ease,border-color .1s ease,transform 80ms ease;&:hover{background:var(--clear-bg-hover);border-color:var(--clear-border-hover)}&:focus-visible{outline:none;box-shadow:var(--focus-ring)}&:active{transform:translateY(1px)}}.ss_modal__body{color:var(--fg-secondary);line-height:1.6;overflow:auto}.ss_modal__body_inner{padding:0 1.5rem 1rem}.ss_modal__footer{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;padding:0 1.5rem 1.25rem}&[data-state=open]{.ss_modal__backdrop{opacity:1}.ss_modal__panel{opacity:1;transform:translateY(0) scale(1)}}@media (max-width: 40rem){padding:0;.ss_modal__panel:not(.ss_modal__panel--no-fullscreen){width:100vw;height:100vh;max-height:100vh;border-radius:0;border:none;.ss_modal__body{flex:1;min-height:0;overflow:auto}.ss_modal__footer{margin-top:auto;padding-top:.75rem;border-top:1px solid var(--border-subtle);background:var(--bg-surface)}}}}.ss_modal__panel--sm{width:min(90vw,26rem)}.ss_modal__panel--lg{width:min(92vw,48rem)}.ss_modal__panel--fullscreen{width:100vw;height:100vh;max-height:100vh;border-radius:0;border:none}.ss_modal__panel--fullscreen .ss_modal__body{flex:1;min-height:0;overflow:auto}.ss_modal__panel--fullscreen .ss_modal__footer{margin-top:auto;padding-top:.75rem;border-top:1px solid var(--border-subtle);background:var(--bg-surface)}@media (prefers-reduced-motion: reduce){*{animation-duration:0ms!important;transition-duration:0ms!important}}
|