@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2) format("woff2"),url(/assets/KaTeX_AMS-Regular-DMm9YOAa.woff) format("woff"),url(/assets/KaTeX_AMS-Regular-DRggAlZN.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff) format("woff"),url(/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff) format("woff"),url(/assets/KaTeX_Fraktur-Regular-CB_wures.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Main-Bold-Cx986IdX.woff2) format("woff2"),url(/assets/KaTeX_Main-Bold-Jm3AIy58.woff) format("woff"),url(/assets/KaTeX_Main-Bold-waoOVXN0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2) format("woff2"),url(/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff) format("woff"),url(/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2) format("woff2"),url(/assets/KaTeX_Main-Italic-BMLOBm91.woff) format("woff"),url(/assets/KaTeX_Main-Italic-3WenGoN9.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Main-Regular-B22Nviop.woff2) format("woff2"),url(/assets/KaTeX_Main-Regular-Dr94JaBh.woff) format("woff"),url(/assets/KaTeX_Main-Regular-ypZvNtVU.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2) format("woff2"),url(/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff) format("woff"),url(/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Math-Italic-t53AETM-.woff2) format("woff2"),url(/assets/KaTeX_Math-Italic-DA0__PXp.woff) format("woff"),url(/assets/KaTeX_Math-Italic-flOr_0UB.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff) format("woff"),url(/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff) format("woff"),url(/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff) format("woff"),url(/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Script-Regular-D3wIWfF6.woff2) format("woff2"),url(/assets/KaTeX_Script-Regular-D5yQViql.woff) format("woff"),url(/assets/KaTeX_Script-Regular-C5JkGWo-.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2) format("woff2"),url(/assets/KaTeX_Size1-Regular-C195tn64.woff) format("woff"),url(/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2) format("woff2"),url(/assets/KaTeX_Size2-Regular-oD1tc_U0.woff) format("woff"),url(/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P89vcbIcmsQbRps3vCcXdYOKSWEPEKgZgQkprQQsxIXUgq0DqpGKmIvrgkeVGtEQD9DzAO29fM9jYhxZEsL2FeURH2JN4MIcTdO049NCVdxQ/w9NrSYFEBKTDKpLKfNkCGDc1RwjZLQcm3vqJ2UW9Xfa3tgAHz6ivp6vgC2yD4/6352ndnN0X0TL7seypkjZlMsjmZnf0Mm5Q+JykRWQBKCVCVPbARPXWyQtb5VgLB6Biq7/Uixcj2WGqdI8tGSgkuRG+t910GKP2D7AQH0DB9FMDW/obJZ8giFI3Wg8Cvevz0M+5m0rTh7XDBlvo9Y4vm13EXmfttwI4mBo1EG15fxJhUiCLbiiyCf/ZA6MFAhg3pGIZGdGIVjtPn6UcMk9A/UUr9PhoNsCENw1APAq0gpH73e+M+0ueyHbabc3vkbcdtzcf/fiy+NxQEjf9ud/ELBHAXJ0nk4z+MXH2Ev/kWyV4k7SkvpPc9Qr38F6RPWnM9cN6DJ0AdD1BhtgABtmoRoFCvPsBAumNm6soZG2Gk5GyVTo2sJncSyp0jQTYoR6WDvTwaaEcHsxHfvuWhHA3a6bN7twRKtcGok6NsCi7jYRrM2jExsUFMxMQYuJbMhuWNOumEJy9hi29Dmg5zMp/A5+hhPG19j1vBrq8JTLr8ki5VLPmG/PynJHVul440bxg5xuymHUFPBshC+nA9I1FmwbRBTNHAcik3Oae0cxKoI3MOriM42UrPe51nsaGxJ+WfXubAsP84aabUlQSJ1IiE0iPETLUU4CATgfXSCSpuRFRmCGbO+wSpAnzaeaCYW1VNEysRtuXCEL1kUFUbbtMv3Tilt/1c11jt3Q5bbMa84cpWipp8Elw3MZhOHsOlwwVUQM3lAR35JiFQbaYCRnMF2lxAWoOg2gyoIV4PouX8HytNIfLhqpJtXB4vjiViUI8IJ7bkC4ikkQvKksnOTKICwnqWSZ9YS5f0WCxmpgjbIq7EJcM4aI2nmhLNY2JIUgOjXZFWBHb+x5oh6cwb0Tv1ackHdKi0I9OO2wE9aogIOn540CCCziyhN+IaejtgAONKznHlHyutPrHGwCx9S6B8kfS4Mfi4Eyv7OU730bT1SCBjt834cXsf43zVjPUqqJjgrjeGnBxSG4aYAKFuVbeCfkDIjAqMb6yLNIbCuvXhMH2/+k2vkNpkORhR59N1CkzoOENvneIosjYmuTxlhUzaGEJQ/iWqx4dmwpmKjrwTiTGTCVozNAYqk/zXOndWxuWSmJkQpJw3pK5KX6QrLt5LATMqpmPAQhkhK6PUjzHUn7E0gHE0kPE0iKkolgkUx9SZmVAdDgpffdyJKg3k7VmzYGCwVXGz/tXmkOIp+vcWs+EMuhhvN0h9uhfzWJziBQmCREGSIFmQIkgVpAnSBRmC//6hkLZwaVhwxlrJSOdqlFtOYxlau9F2QN5Y98xmIAsiM1HVp2VFX+DHHGg6Ecjh3vmqtidX3qHI2qycTk/iwxSt5UzTmEP92ZBnEWTk4Mx8Mpl78ZDokxg/KWb+Q0QkvdKVmq3TMW+RXEgrsziSAfNXFMhDc60N5N9jQzjfO0kBKpUZl0ZmwJ41j/B9Hz6wmRaJB84niNmQrzp9eSlQCDDzazGDdVi3P36VZQ+Jy4f9UBNp+3zTjqI4abaFAm+GShVaXlsGdF3FYzZcDI6cori4kMxUECl9IjJZpzkvitAoxKue+90pDMvcKRxLl53TmOKCmV/xRolNKSqqUxc6LStOETmFOiLZZptlZepcKiAzteG8PEdpnQpbOMNcMsR4RR2Bs0cKFEvSmIjAFcnarqwUL4lDhHmnVkwu1IwshbiCcgvOheZuYyOteufZZwlcTlLgnZ3o/WcYdzZHW/WGaqaVfmTZ1aWCceJjkbZqsfbkOtcFlUZM/jy+hXHDbaUobWqqXaeWobbLO99yG5N3U4wxco0rQGGcOLASFMXeJoham8M+/x6O2WywK2l4HGbq1CoUyC/IZikQhdq3SiuNrvAEj0AVu9x2x3lp/xWzahaxidezFVtdcb5uEnzyl0ZmYiuKI0exvCd4Xc9CV1KB0db00z92wDPde0kukbvZIWN6jUWFTmPIC/Y4UPCm8UfDTFZpZNon1qLFTkBhxzB+FjQRA2Q/YRJT8pQigslMaUpFyAG8TMlXigiqmAZX4xgijKjRlGpLE0GdplRfCaJo0JQaSxNBk6ZmMzcya0FmrcisDdn0Q3HI2sWSppYigmlM1XT/kLQZSNpMJG0WkjYbSZuDpM1F0uYhFc1HxU4m1QJjDK6iL0S5uSj5rgXc3RejEigtcRBtqYPQsiTskmO5vosV+q4VGIKbOkDg0jtRrq+Em1YloaTFar3EGr1EUC8R0kus1Uus00usL97ABr2BjXoDm/QGNhuWtMVBKOwg/i78lT7hBsAvDmwHc/ao3vmUbBmhjeYySZNWvGkfZAgISDSaDo1SVpzGDsAEkF8B+gEapViUoZgUWXcRIGFZNm6gWbAKk0bp0k1MHG9fLYtV4iS2SmLEQFARzRcnf9PUS0LVn05/J9MiRRBU3v2IrvW974v4N00L7ZMk0wXP1409CHo/an8zTRHD3eSJ6m8D4YMkZNl3M79sqeuAsr/m3f+8/yl7A50aiAEJgeBeMWzu7ui9UfUBCe2TIqZIoOd/3/udRBOQidQZUERzb2/VwZN1H/Sju82ew2H2Wfr6qvfVf3hqwDvAIpkQVFy4B9Pe9e4/XvPeceu7h3dvO56iJPf0+A6cqA2ip18ER+iFgggiuOkvj24bby0N9j2UHIkgqIt+sVgfodC4YghLSMjSZbH0VR/6dMDrYJeKHilKTemt6v6kvzvn3/RrdWtr0GoN/xL+Sex/cPYLUpepx9cz/D46UPU5KXgAQa+NDps1v6J3xP1i2HtaDB0M9aX2deA7SYff//+gUCovMmIK/qfsFcOk+4Y5ZN97XlG6zebqtMbKgeRFi51vnxTQYBUik2rS/Cn6PC8ADR8FGxsRPB82dzfND90gIcshOcYUkfjherBz53odpm6TP8txlwOZ71xmfHHOvq053qFF/MRlS3jP0ELudrf2OeN8DHvp6ZceLe8qKYvWz/7yp0u4dKPfli3CYq0O13Ih71mylJ80tOi10On8wi+F4+LWgDPeJ30msSQt9/vkmHq9/Lvo2b461mP801v3W4xTcs6CbvF9UDdrSt+A8OUbpSh55qAUFXWznBBfdeJ8a4d7ugT5tvxUza3h9m4H7ptTqiG4z0g5dc0X29OcGlhpGFMpQo9ytTS+NViZpNdvU4kWx+LKxNY10kQ1yqGXrhe4/1nvP7E+nd5A92TtaRplbHSqoIdOqtRWti+fkB5/n1+/VvCmz12pG1kpQWsfi1ftlBobm0bpngs16CHkbIwdLnParxtTV3QYRlfJ0KFskH7pdN/YDn+yRuSd7sNH3aO0DYPggk6uWuXrfOc+fa3VTxFVvKaNxHsiHmsXyCLIE5yuOeN3/Jdf8HBL/5M6shjyhxHx9BjB1O0+4NLOnjLLSxwO7ukN4jMbOIcD879KLSi6Pk61Oqm2377n8079PXEEQ7cy7OKEC9nbpet118fxweTafpt69x/Bt8UqGzNQt7aelpc44dn5cqhwf71+qKp/Zf/+a0zcizOUWpl/iBcSXip0pplkatCchoH5c5aUM8I7/dWxAej8WicPL1URFZ9BDJelUwEwTkGqUhgSlydVes95YdXvhh9Gfz/aeFWvgVb4tuLbcv4+wLdutVZv/cUonwBD/6eDlE0aSiKK/uoH3+J1wDE/jMVqY2ysGufN84oIXB0sPzy8ollX/LegY74DgJXJR57sn+VGza0x3DnuIgABFM15LmajjjsNlYj+JEZGbuRYcAMOWxFkPN2w6Wd46xo4gVWQR/X4lyI/R6K/YK0110GzudPRW7Y+UOBGTfNNzHeYT0fiH0taunBpq9HEW8OKSaBGj21L0MqenEmNRWBAWDWAk4CpNoEZJ2tTaPFgbQYj8HxtFilErs3BTRwT8uO1NXQaWfIotchmPkAF5mMBAliEmZiOGVgCG9LgRzpscMAOOwowlT3JhusdazXGSC/hxR3UlmWVwWHpOIKheqONvjyhSiTHIkVUco5bnji8m//zL7PKaT1Vl5I6UE609f+gkr6MZKVyKc7zJRmCahLsdlyA5fdQkRSan9LgnnLEyGSkaKJCJog0wAgvepWBt80+1yKln1bMVtCljfNWDueKLsWwaEbBSfSPTEmVRsUcYYMnEjcjeyCZzBXK9E9BYBXLKjOSpUDR+nEV3TFSUdQaz+ot98QxgXwx0GQ+EEUAKB2qZPkQQ0GqFD8UPFMqyaCHM24BZmSGic9EYMagKizOw9Hz50DMrDLrqqLkTAhplMictiCAx5S3BIUQdeJeLnBy2CNtMfz6cV4u8XKoFZQesbf9YZiIERiHjaNodDW6LgcirX/mPnJIkBGDUpTBhSa0EIr38D5hCIszhCM8URGBqImoWjpvpt1ebu/v3Gl3qJfMnNM+9V+kiRFyROTPHQWOcs1dNW94/ukKMPZBvDi55i5CttdeJz84DLngLqjcdwEZ87bFFR8CIG35OAkDVN6VRDZ7aq67NteYqZ2lpT8oYB2CytoBd6VuAx4WgiAsnuj3WohG+LugzXiQRDeM3XYXlULv4dp5VFYC) format("woff2"),url(/assets/KaTeX_Size3-Regular-CTq5MqoE.woff) format("woff"),url(/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2) format("woff2"),url(/assets/KaTeX_Size4-Regular-BF-4gkZK.woff) format("woff"),url(/assets/KaTeX_Size4-Regular-DWFBv043.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2) format("woff2"),url(/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff) format("woff"),url(/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.44"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}
*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}/*
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
*//*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/

*,
::before,
::after {
  box-sizing: border-box; /* 1 */
  border-width: 0; /* 2 */
  border-style: solid; /* 2 */
  border-color: #e5e7eb; /* 2 */
}

::before,
::after {
  --tw-content: '';
}

/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/

html,
:host {
  line-height: 1.5; /* 1 */
  -webkit-text-size-adjust: 100%; /* 2 */
  -moz-tab-size: 4; /* 3 */
  -o-tab-size: 4;
     tab-size: 4; /* 3 */
  font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */
  font-feature-settings: normal; /* 5 */
  font-variation-settings: normal; /* 6 */
  -webkit-tap-highlight-color: transparent; /* 7 */
}

/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/

body {
  margin: 0; /* 1 */
  line-height: inherit; /* 2 */
}

/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/

hr {
  height: 0; /* 1 */
  color: inherit; /* 2 */
  border-top-width: 1px; /* 3 */
}

/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/

abbr:where([title]) {
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}

/*
Remove the default font size and weight for headings.
*/

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}

/*
Reset links to optimize for opt-in styling instead of opt-out.
*/

a {
  color: inherit;
  text-decoration: inherit;
}

/*
Add the correct font weight in Edge and Safari.
*/

b,
strong {
  font-weight: bolder;
}

/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/

code,
kbd,
samp,
pre {
  font-family: var(--mono); /* 1 */
  font-feature-settings: normal; /* 2 */
  font-variation-settings: normal; /* 3 */
  font-size: 1em; /* 4 */
}

/*
Add the correct font size in all browsers.
*/

small {
  font-size: 80%;
}

/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/

table {
  text-indent: 0; /* 1 */
  border-color: inherit; /* 2 */
  border-collapse: collapse; /* 3 */
}

/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/

button,
input,
optgroup,
select,
textarea {
  font-family: inherit; /* 1 */
  font-feature-settings: inherit; /* 1 */
  font-variation-settings: inherit; /* 1 */
  font-size: 100%; /* 1 */
  font-weight: inherit; /* 1 */
  line-height: inherit; /* 1 */
  letter-spacing: inherit; /* 1 */
  color: inherit; /* 1 */
  margin: 0; /* 2 */
  padding: 0; /* 3 */
}

/*
Remove the inheritance of text transform in Edge and Firefox.
*/

button,
select {
  text-transform: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/

button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
  -webkit-appearance: button; /* 1 */
  background-color: transparent; /* 2 */
  background-image: none; /* 2 */
}

/*
Use the modern Firefox focus style for all focusable elements.
*/

:-moz-focusring {
  outline: auto;
}

/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/

:-moz-ui-invalid {
  box-shadow: none;
}

/*
Add the correct vertical alignment in Chrome and Firefox.
*/

progress {
  vertical-align: baseline;
}

/*
Correct the cursor style of increment and decrement buttons in Safari.
*/

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/

[type='search'] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}

/*
Remove the inner padding in Chrome and Safari on macOS.
*/

::-webkit-search-decoration {
  -webkit-appearance: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/

::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

/*
Add the correct display in Chrome and Safari.
*/

summary {
  display: list-item;
}

/*
Removes the default spacing and border for appropriate elements.
*/

blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}

fieldset {
  margin: 0;
  padding: 0;
}

legend {
  padding: 0;
}

ol,
ul,
menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

/*
Reset default styling for dialogs.
*/
dialog {
  padding: 0;
}

/*
Prevent resizing textareas horizontally by default.
*/

textarea {
  resize: vertical;
}

/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/

input::-moz-placeholder, textarea::-moz-placeholder {
  opacity: 1; /* 1 */
  color: #9ca3af; /* 2 */
}

input::placeholder,
textarea::placeholder {
  opacity: 1; /* 1 */
  color: #9ca3af; /* 2 */
}

/*
Set the default cursor for buttons.
*/

button,
[role="button"] {
  cursor: pointer;
}

/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
  cursor: default;
}

/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
   This can trigger a poorly considered lint error in some tools but is included by design.
*/

img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block; /* 1 */
  vertical-align: middle; /* 2 */
}

/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/

img,
video {
  max-width: 100%;
  height: auto;
}

/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden]:where(:not([hidden="until-found"])) {
  display: none;
}
  *{box-sizing:border-box;margin:0;padding:0}
  /* overscroll-behavior-y lives on `html`, NOT `body`: from Chromium 140 the
     viewport propagates overscroll-behavior from the ROOT element, so a `body`
     declaration is ignored and the macOS rubber-band bounce returns. Keep it
     here or the "no document bounce" behaviour App.tsx relies on silently
     regresses on Electron >= 41 / Chrome >= 140. */
  html{overscroll-behavior-y:none}
  html,body,#root{height:100%}
  body{font:400 0.875rem/1.55 var(--font-body);letter-spacing:normal;background:var(--bg);color:var(--text);
    -webkit-font-smoothing:antialiased;overflow-x:hidden;overflow-y:auto;
    transition:background-color .25s ease,color .25s ease}
  /* The dashboard shell is height-locked (h-screen + overflow-hidden), so the
     document has no reason to scroll on those routes. Lock it. A third-party
     node appended to <body> — browser extensions do this routinely — otherwise
     leaves a few pixels of slack, and a wheel event that lands on the document
     rather than on a pane drags the whole app through them. Containment on the
     panes cannot cover that path because no chaining is involved.
     Scoped with :has() so the onboarding and welcome views, which legitimately
     grow past the viewport, keep their document scroll. */
  body:has([data-testid="dashboard-shell"]){overflow:hidden}
  /* Global focus ring for keyboard navigation */
  /* TESTING: disabled to check scroll bug */
  /* :focus-visible{outline:2px solid var(--accent);outline-offset:2px} */
  @media(prefers-reduced-motion:reduce){*:not([data-virtuoso-scroller] *),*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important}}
  /* The rule above zeroes animation-DURATION but not animation-DELAY, and
     `animate-rise` uses fill-mode `backwards` — so a stagger-delayed card
     (Overview stat tiles, Settings cards) would sit fully invisible for its
     whole delay when the user asked for no motion. Zero the delay for the
     rise entrance specifically; `!important` is required to beat the inline
     `animationDelay` the stagger ladder sets. Deliberately NOT global:
     mc-line-reveal (below) documents that it relies on delays surviving
     reduced motion. */
  @media(prefers-reduced-motion:reduce){.animate-rise{animation-delay:0s !important}}
  ::-moz-selection{background:var(--accent-subtle);color:var(--text-strong)}
  ::selection{background:var(--accent-subtle);color:var(--text-strong)}
  .\!bg-accent::-moz-selection{background:rgba(255,255,255,.25) !important;color:white !important}
  .\!bg-accent::selection{background:rgba(255,255,255,.25) !important;color:white !important}
  .bg-accent::-moz-selection{background:rgba(255,255,255,.25);color:white}
  .bg-accent::selection{background:rgba(255,255,255,.25);color:white}
  ::-webkit-scrollbar{width:6px;height:6px}
  ::-webkit-scrollbar-track{background:transparent}
  ::-webkit-scrollbar-thumb{background:var(--border);border-radius:9999px}
  ::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}
.\!container {
  width: 100% !important;
}
.container {
  width: 100%;
}
@media (min-width: 640px) {

  .\!container {
    max-width: 640px !important;
  }

  .container {
    max-width: 640px;
  }
}
@media (min-width: 768px) {

  .\!container {
    max-width: 768px !important;
  }

  .container {
    max-width: 768px;
  }
}
@media (min-width: 1024px) {

  .\!container {
    max-width: 1024px !important;
  }

  .container {
    max-width: 1024px;
  }
}
@media (min-width: 1280px) {

  .\!container {
    max-width: 1280px !important;
  }

  .container {
    max-width: 1280px;
  }
}
@media (min-width: 1536px) {

  .\!container {
    max-width: 1536px !important;
  }

  .container {
    max-width: 1536px;
  }
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}
.pointer-events-none {
  pointer-events: none;
}
.\!visible {
  visibility: visible !important;
}
.visible {
  visibility: visible;
}
.invisible {
  visibility: hidden;
}
.\!collapse {
  visibility: collapse !important;
}
.collapse {
  visibility: collapse;
}
.static {
  position: static;
}
.fixed {
  position: fixed;
}
.absolute {
  position: absolute;
}
.\!relative {
  position: relative !important;
}
.relative {
  position: relative;
}
.sticky {
  position: sticky;
}
.inset-0 {
  inset: 0px;
}
.inset-y-0 {
  top: 0px;
  bottom: 0px;
}
.-left-4 {
  left: -1rem;
}
.-right-0\.5 {
  right: -0.125rem;
}
.-top-0\.5 {
  top: -0.125rem;
}
.bottom-0 {
  bottom: 0px;
}
.bottom-4 {
  bottom: 1rem;
}
.left-0 {
  left: 0px;
}
.left-1\/2 {
  left: 50%;
}
.left-2\.5 {
  left: 0.625rem;
}
.left-3 {
  left: 0.75rem;
}
.left-\[13px\] {
  left: 13px;
}
.right-0 {
  right: 0px;
}
.right-1 {
  right: 0.25rem;
}
.right-1\.5 {
  right: 0.375rem;
}
.right-12 {
  right: 3rem;
}
.right-2 {
  right: 0.5rem;
}
.right-3 {
  right: 0.75rem;
}
.right-4 {
  right: 1rem;
}
.top-0 {
  top: 0px;
}
.top-0\.5 {
  top: 0.125rem;
}
.top-1 {
  top: 0.25rem;
}
.top-1\/2 {
  top: 50%;
}
.top-2 {
  top: 0.5rem;
}
.top-2\.5 {
  top: 0.625rem;
}
.top-3 {
  top: 0.75rem;
}
.top-7 {
  top: 1.75rem;
}
.top-full {
  top: 100%;
}
.z-10 {
  z-index: 10;
}
.z-20 {
  z-index: 20;
}
.z-30 {
  z-index: 30;
}
.z-50 {
  z-index: 50;
}
.z-\[100\] {
  z-index: 100;
}
.z-\[101\] {
  z-index: 101;
}
.z-\[120\] {
  z-index: 120;
}
.z-\[121\] {
  z-index: 121;
}
.z-\[140\] {
  z-index: 140;
}
.z-\[141\] {
  z-index: 141;
}
.z-\[1\] {
  z-index: 1;
}
.z-\[45\] {
  z-index: 45;
}
.z-\[46\] {
  z-index: 46;
}
.z-\[80\] {
  z-index: 80;
}
.z-\[90\] {
  z-index: 90;
}
.z-\[9999\] {
  z-index: 9999;
}
.col-start-1 {
  grid-column-start: 1;
}
.row-start-1 {
  grid-row-start: 1;
}
.m-0 {
  margin: 0px;
}
.m-2 {
  margin: 0.5rem;
}
.mx-1 {
  margin-left: 0.25rem;
  margin-right: 0.25rem;
}
.mx-1\.5 {
  margin-left: 0.375rem;
  margin-right: 0.375rem;
}
.mx-2 {
  margin-left: 0.5rem;
  margin-right: 0.5rem;
}
.mx-2\.5 {
  margin-left: 0.625rem;
  margin-right: 0.625rem;
}
.mx-5 {
  margin-left: 1.25rem;
  margin-right: 1.25rem;
}
.mx-auto {
  margin-left: auto;
  margin-right: auto;
}
.my-1 {
  margin-top: 0.25rem;
  margin-bottom: 0.25rem;
}
.my-2 {
  margin-top: 0.5rem;
  margin-bottom: 0.5rem;
}
.my-3 {
  margin-top: 0.75rem;
  margin-bottom: 0.75rem;
}
.my-5 {
  margin-top: 1.25rem;
  margin-bottom: 1.25rem;
}
.mb-0 {
  margin-bottom: 0px;
}
.mb-0\.5 {
  margin-bottom: 0.125rem;
}
.mb-1 {
  margin-bottom: 0.25rem;
}
.mb-1\.5 {
  margin-bottom: 0.375rem;
}
.mb-2 {
  margin-bottom: 0.5rem;
}
.mb-3 {
  margin-bottom: 0.75rem;
}
.mb-3\.5 {
  margin-bottom: 0.875rem;
}
.mb-4 {
  margin-bottom: 1rem;
}
.mb-5 {
  margin-bottom: 1.25rem;
}
.mb-6 {
  margin-bottom: 1.5rem;
}
.mb-\[7px\] {
  margin-bottom: 7px;
}
.ml-0 {
  margin-left: 0px;
}
.ml-0\.5 {
  margin-left: 0.125rem;
}
.ml-1 {
  margin-left: 0.25rem;
}
.ml-1\.5 {
  margin-left: 0.375rem;
}
.ml-2 {
  margin-left: 0.5rem;
}
.ml-4 {
  margin-left: 1rem;
}
.ml-8 {
  margin-left: 2rem;
}
.ml-\[0\.875rem\] {
  margin-left: 0.875rem;
}
.ml-auto {
  margin-left: auto;
}
.mr-1 {
  margin-right: 0.25rem;
}
.mr-2 {
  margin-right: 0.5rem;
}
.mr-4 {
  margin-right: 1rem;
}
.mr-auto {
  margin-right: auto;
}
.mt-0 {
  margin-top: 0px;
}
.mt-0\.5 {
  margin-top: 0.125rem;
}
.mt-1 {
  margin-top: 0.25rem;
}
.mt-1\.5 {
  margin-top: 0.375rem;
}
.mt-2 {
  margin-top: 0.5rem;
}
.mt-3 {
  margin-top: 0.75rem;
}
.mt-4 {
  margin-top: 1rem;
}
.mt-5 {
  margin-top: 1.25rem;
}
.mt-auto {
  margin-top: auto;
}
.line-clamp-2 {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
}
.line-clamp-3 {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
}
.block {
  display: block;
}
.inline-block {
  display: inline-block;
}
.inline {
  display: inline;
}
.flex {
  display: flex;
}
.inline-flex {
  display: inline-flex;
}
.table {
  display: table;
}
.grid {
  display: grid;
}
.contents {
  display: contents;
}
.hidden {
  display: none;
}
.aspect-video {
  aspect-ratio: 16 / 9;
}
.h-1 {
  height: 0.25rem;
}
.h-1\.5 {
  height: 0.375rem;
}
.h-10 {
  height: 2.5rem;
}
.h-11 {
  height: 2.75rem;
}
.h-16 {
  height: 4rem;
}
.h-2 {
  height: 0.5rem;
}
.h-2\.5 {
  height: 0.625rem;
}
.h-20 {
  height: 5rem;
}
.h-28 {
  height: 7rem;
}
.h-3 {
  height: 0.75rem;
}
.h-3\.5 {
  height: 0.875rem;
}
.h-4 {
  height: 1rem;
}
.h-40 {
  height: 10rem;
}
.h-5 {
  height: 1.25rem;
}
.h-56 {
  height: 14rem;
}
.h-6 {
  height: 1.5rem;
}
.h-7 {
  height: 1.75rem;
}
.h-8 {
  height: 2rem;
}
.h-9 {
  height: 2.25rem;
}
.h-\[13px\] {
  height: 13px;
}
.h-\[18px\] {
  height: 18px;
}
.h-\[260px\] {
  height: 260px;
}
.h-\[420px\] {
  height: 420px;
}
.h-\[46vh\] {
  height: 46vh;
}
.h-\[5px\] {
  height: 5px;
}
.h-\[720px\] {
  height: 720px;
}
.h-\[min\(32rem\2c calc\(100dvh-8rem\)\)\] {
  height: min(32rem, calc(100dvh - 8rem));
}
.h-\[min\(620px\2c calc\(100dvh-1rem\)\)\] {
  height: min(620px, calc(100dvh - 1rem));
}
.h-\[min\(640px\2c calc\(100dvh-2rem\)\)\] {
  height: min(640px, calc(100dvh - 2rem));
}
.h-\[min\(680px\2c calc\(100dvh-2rem\)\)\] {
  height: min(680px, calc(100dvh - 2rem));
}
.h-\[min\(720px\2c calc\(100dvh-2rem\)\)\] {
  height: min(720px, calc(100dvh - 2rem));
}
.h-full {
  height: 100%;
}
.h-px {
  height: 1px;
}
.h-screen {
  height: 100vh;
}
.max-h-0 {
  max-height: 0px;
}
.max-h-20 {
  max-height: 5rem;
}
.max-h-24 {
  max-height: 6rem;
}
.max-h-48 {
  max-height: 12rem;
}
.max-h-56 {
  max-height: 14rem;
}
.max-h-60 {
  max-height: 15rem;
}
.max-h-64 {
  max-height: 16rem;
}
.max-h-72 {
  max-height: 18rem;
}
.max-h-\[240px\] {
  max-height: 240px;
}
.max-h-\[360px\] {
  max-height: 360px;
}
.max-h-\[400px\] {
  max-height: 400px;
}
.max-h-\[50vh\] {
  max-height: 50vh;
}
.max-h-\[52vh\] {
  max-height: 52vh;
}
.max-h-\[60vh\] {
  max-height: 60vh;
}
.max-h-\[calc\(100dvh-1\.5rem\)\] {
  max-height: calc(100dvh - 1.5rem);
}
.max-h-\[calc\(100dvh-1rem\)\] {
  max-height: calc(100dvh - 1rem);
}
.max-h-\[calc\(100vh-2rem\)\] {
  max-height: calc(100vh - 2rem);
}
.max-h-\[calc\(90vh-5rem\)\] {
  max-height: calc(90vh - 5rem);
}
.min-h-0 {
  min-height: 0px;
}
.min-h-12 {
  min-height: 3rem;
}
.min-h-20 {
  min-height: 5rem;
}
.min-h-24 {
  min-height: 6rem;
}
.min-h-32 {
  min-height: 8rem;
}
.min-h-7 {
  min-height: 1.75rem;
}
.min-h-8 {
  min-height: 2rem;
}
.min-h-9 {
  min-height: 2.25rem;
}
.min-h-\[104px\] {
  min-height: 104px;
}
.min-h-\[12rem\] {
  min-height: 12rem;
}
.min-h-\[150px\] {
  min-height: 150px;
}
.min-h-\[16rem\] {
  min-height: 16rem;
}
.min-h-\[420px\] {
  min-height: 420px;
}
.min-h-\[44px\] {
  min-height: 44px;
}
.min-h-\[45vh\] {
  min-height: 45vh;
}
.min-h-\[52vh\] {
  min-height: 52vh;
}
.min-h-\[65px\] {
  min-height: 65px;
}
.min-h-\[96px\] {
  min-height: 96px;
}
.min-h-full {
  min-height: 100%;
}
.min-h-screen {
  min-height: 100vh;
}
.w-1\.5 {
  width: 0.375rem;
}
.w-1\/3 {
  width: 33.333333%;
}
.w-10 {
  width: 2.5rem;
}
.w-11 {
  width: 2.75rem;
}
.w-14 {
  width: 3.5rem;
}
.w-16 {
  width: 4rem;
}
.w-2 {
  width: 0.5rem;
}
.w-2\.5 {
  width: 0.625rem;
}
.w-24 {
  width: 6rem;
}
.w-28 {
  width: 7rem;
}
.w-3 {
  width: 0.75rem;
}
.w-3\.5 {
  width: 0.875rem;
}
.w-36 {
  width: 9rem;
}
.w-4 {
  width: 1rem;
}
.w-40 {
  width: 10rem;
}
.w-44 {
  width: 11rem;
}
.w-48 {
  width: 12rem;
}
.w-5 {
  width: 1.25rem;
}
.w-52 {
  width: 13rem;
}
.w-6 {
  width: 1.5rem;
}
.w-60 {
  width: 15rem;
}
.w-64 {
  width: 16rem;
}
.w-7 {
  width: 1.75rem;
}
.w-72 {
  width: 18rem;
}
.w-8 {
  width: 2rem;
}
.w-80 {
  width: 20rem;
}
.w-9 {
  width: 2.25rem;
}
.w-\[1\.5px\] {
  width: 1.5px;
}
.w-\[13px\] {
  width: 13px;
}
.w-\[18px\] {
  width: 18px;
}
.w-\[200px\] {
  width: 200px;
}
.w-\[2px\] {
  width: 2px;
}
.w-\[72px\] {
  width: 72px;
}
.w-\[calc\(100\%-1rem\)\] {
  width: calc(100% - 1rem);
}
.w-\[calc\(100vw-1rem\)\] {
  width: calc(100vw - 1rem);
}
.w-\[calc\(100vw-2rem\)\] {
  width: calc(100vw - 2rem);
}
.w-\[min\(236px\2c calc\(100vw-1rem\)\)\] {
  width: min(236px, calc(100vw - 1rem));
}
.w-\[min\(36rem\2c calc\(100vw-2rem\)\)\] {
  width: min(36rem, calc(100vw - 2rem));
}
.w-\[min\(38rem\2c calc\(100vw-2rem\)\)\] {
  width: min(38rem, calc(100vw - 2rem));
}
.w-\[min\(460px\2c 100\%\)\] {
  width: min(460px, 100%);
}
.w-\[min\(620px\2c calc\(100vw-28px\)\)\] {
  width: min(620px, calc(100vw - 28px));
}
.w-\[var\(--radix-select-trigger-width\)\] {
  width: var(--radix-select-trigger-width);
}
.w-fit {
  width: -moz-fit-content;
  width: fit-content;
}
.w-full {
  width: 100%;
}
.w-max {
  width: -moz-max-content;
  width: max-content;
}
.w-px {
  width: 1px;
}
.w-screen {
  width: 100vw;
}
.min-w-0 {
  min-width: 0px;
}
.min-w-10 {
  min-width: 2.5rem;
}
.min-w-28 {
  min-width: 7rem;
}
.min-w-\[110px\] {
  min-width: 110px;
}
.min-w-\[140px\] {
  min-width: 140px;
}
.min-w-\[190px\] {
  min-width: 190px;
}
.min-w-\[1rem\] {
  min-width: 1rem;
}
.min-w-\[220px\] {
  min-width: 220px;
}
.min-w-\[240px\] {
  min-width: 240px;
}
.min-w-\[260px\] {
  min-width: 260px;
}
.min-w-\[3\.5rem\] {
  min-width: 3.5rem;
}
.min-w-\[56px\] {
  min-width: 56px;
}
.min-w-\[640px\] {
  min-width: 640px;
}
.min-w-\[70px\] {
  min-width: 70px;
}
.min-w-\[760px\] {
  min-width: 760px;
}
.min-w-\[8rem\] {
  min-width: 8rem;
}
.min-w-\[980px\] {
  min-width: 980px;
}
.min-w-\[var\(--radix-select-trigger-width\)\] {
  min-width: var(--radix-select-trigger-width);
}
.min-w-full {
  min-width: 100%;
}
.min-w-max {
  min-width: -moz-max-content;
  min-width: max-content;
}
.max-w-10 {
  max-width: 2.5rem;
}
.max-w-24 {
  max-width: 6rem;
}
.max-w-2xl {
  max-width: 42rem;
}
.max-w-3xl {
  max-width: 48rem;
}
.max-w-48 {
  max-width: 12rem;
}
.max-w-4xl {
  max-width: 56rem;
}
.max-w-52 {
  max-width: 13rem;
}
.max-w-5xl {
  max-width: 64rem;
}
.max-w-6xl {
  max-width: 72rem;
}
.max-w-\[110px\] {
  max-width: 110px;
}
.max-w-\[11rem\] {
  max-width: 11rem;
}
.max-w-\[1320px\] {
  max-width: 1320px;
}
.max-w-\[140px\] {
  max-width: 140px;
}
.max-w-\[1440px\] {
  max-width: 1440px;
}
.max-w-\[14rem\] {
  max-width: 14rem;
}
.max-w-\[150px\] {
  max-width: 150px;
}
.max-w-\[170px\] {
  max-width: 170px;
}
.max-w-\[180px\] {
  max-width: 180px;
}
.max-w-\[190px\] {
  max-width: 190px;
}
.max-w-\[200px\] {
  max-width: 200px;
}
.max-w-\[220px\] {
  max-width: 220px;
}
.max-w-\[260px\] {
  max-width: 260px;
}
.max-w-\[300px\] {
  max-width: 300px;
}
.max-w-\[320px\] {
  max-width: 320px;
}
.max-w-\[360px\] {
  max-width: 360px;
}
.max-w-\[390px\] {
  max-width: 390px;
}
.max-w-\[42rem\] {
  max-width: 42rem;
}
.max-w-\[440px\] {
  max-width: 440px;
}
.max-w-\[480px\] {
  max-width: 480px;
}
.max-w-\[55\%\] {
  max-width: 55%;
}
.max-w-\[720px\] {
  max-width: 720px;
}
.max-w-\[85\%\] {
  max-width: 85%;
}
.max-w-\[9rem\] {
  max-width: 9rem;
}
.max-w-\[calc\(100vw-1\.5rem\)\] {
  max-width: calc(100vw - 1.5rem);
}
.max-w-\[min\(24rem\2c var\(--radix-select-content-available-width\)\)\] {
  max-width: min(24rem, var(--radix-select-content-available-width));
}
.max-w-\[min\(36vw\2c 14rem\)\] {
  max-width: min(36vw, 14rem);
}
.max-w-\[min\(78\%\2c 42rem\)\] {
  max-width: min(78%, 42rem);
}
.max-w-\[min\(88\%\2c 54rem\)\] {
  max-width: min(88%, 54rem);
}
.max-w-full {
  max-width: 100%;
}
.max-w-lg {
  max-width: 32rem;
}
.max-w-md {
  max-width: 28rem;
}
.max-w-none {
  max-width: none;
}
.max-w-sm {
  max-width: 24rem;
}
.max-w-xl {
  max-width: 36rem;
}
.max-w-xs {
  max-width: 20rem;
}
.flex-1 {
  flex: 1 1 0%;
}
.flex-none {
  flex: none;
}
.shrink-0 {
  flex-shrink: 0;
}
.grow {
  flex-grow: 1;
}
.border-collapse {
  border-collapse: collapse;
}
.border-separate {
  border-collapse: separate;
}
.border-spacing-0 {
  --tw-border-spacing-x: 0px;
  --tw-border-spacing-y: 0px;
  border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
}
.-translate-x-1\/2 {
  --tw-translate-x: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.-translate-y-1\/2 {
  --tw-translate-y: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.translate-x-0\.5 {
  --tw-translate-x: 0.125rem;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.translate-x-\[18px\] {
  --tw-translate-x: 18px;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.rotate-0 {
  --tw-rotate: 0deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.rotate-180 {
  --tw-rotate: 180deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.rotate-90 {
  --tw-rotate: 90deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
@keyframes pulse {

  50% {
    opacity: .5;
  }
}
.animate-pulse {
  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes rise {

  from {
    opacity: 0;
    transform: translateY(8px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}
.animate-rise {
  animation: rise .35s cubic-bezier(.16,1,.3,1) backwards;
}
@keyframes spin {

  to {
    transform: rotate(360deg);
  }
}
.animate-spin {
  animation: spin 1s linear infinite;
}
.cursor-default {
  cursor: default;
}
.cursor-grab {
  cursor: grab;
}
.cursor-grabbing {
  cursor: grabbing;
}
.cursor-not-allowed {
  cursor: not-allowed;
}
.cursor-pointer {
  cursor: pointer;
}
.cursor-zoom-in {
  cursor: zoom-in;
}
.touch-none {
  touch-action: none;
}
.touch-pan-x {
  --tw-pan-x: pan-x;
  touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
}
.touch-pan-y {
  --tw-pan-y: pan-y;
  touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
}
.select-none {
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}
.resize-none {
  resize: none;
}
.resize-y {
  resize: vertical;
}
.resize {
  resize: both;
}
.list-decimal {
  list-style-type: decimal;
}
.list-disc {
  list-style-type: disc;
}
.list-none {
  list-style-type: none;
}
.auto-rows-max {
  grid-auto-rows: max-content;
}
.grid-cols-1 {
  grid-template-columns: repeat(1, minmax(0, 1fr));
}
.grid-cols-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-cols-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-cols-5 {
  grid-template-columns: repeat(5, minmax(0, 1fr));
}
.grid-cols-\[3\.5rem_minmax\(0\2c 1fr\)\] {
  grid-template-columns: 3.5rem minmax(0,1fr);
}
.flex-row {
  flex-direction: row;
}
.flex-col {
  flex-direction: column;
}
.flex-wrap {
  flex-wrap: wrap;
}
.flex-nowrap {
  flex-wrap: nowrap;
}
.content-start {
  align-content: flex-start;
}
.\!items-start {
  align-items: flex-start !important;
}
.items-start {
  align-items: flex-start;
}
.items-end {
  align-items: flex-end;
}
.items-center {
  align-items: center;
}
.items-baseline {
  align-items: baseline;
}
.justify-start {
  justify-content: flex-start;
}
.justify-end {
  justify-content: flex-end;
}
.justify-center {
  justify-content: center;
}
.justify-between {
  justify-content: space-between;
}
.gap-0 {
  gap: 0px;
}
.gap-0\.5 {
  gap: 0.125rem;
}
.gap-1 {
  gap: 0.25rem;
}
.gap-1\.5 {
  gap: 0.375rem;
}
.gap-2 {
  gap: 0.5rem;
}
.gap-2\.5 {
  gap: 0.625rem;
}
.gap-3 {
  gap: 0.75rem;
}
.gap-4 {
  gap: 1rem;
}
.gap-5 {
  gap: 1.25rem;
}
.gap-6 {
  gap: 1.5rem;
}
.gap-x-2 {
  -moz-column-gap: 0.5rem;
       column-gap: 0.5rem;
}
.gap-x-4 {
  -moz-column-gap: 1rem;
       column-gap: 1rem;
}
.gap-x-5 {
  -moz-column-gap: 1.25rem;
       column-gap: 1.25rem;
}
.gap-y-1\.5 {
  row-gap: 0.375rem;
}
.gap-y-2 {
  row-gap: 0.5rem;
}
.gap-y-2\.5 {
  row-gap: 0.625rem;
}
.gap-y-3 {
  row-gap: 0.75rem;
}
.space-y-0\.5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));
}
.space-y-1 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
}
.space-y-1\.5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
}
.space-y-2 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
}
.space-y-2\.5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.625rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.625rem * var(--tw-space-y-reverse));
}
.space-y-3 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
}
.space-y-3\.5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.875rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.875rem * var(--tw-space-y-reverse));
}
.space-y-4 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}
.space-y-5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));
}
.space-y-6 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
}
.divide-y > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-y-reverse: 0;
  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
}
.divide-border > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-opacity: 1;
  border-color: color-mix(in srgb, var(--border) calc(var(--tw-divide-opacity, 1) * 100%), transparent);
}
.self-stretch {
  align-self: stretch;
}
.overflow-auto {
  overflow: auto;
}
.overflow-hidden {
  overflow: hidden;
}
.overflow-visible {
  overflow: visible;
}
.overflow-x-auto {
  overflow-x: auto;
}
.overflow-y-auto {
  overflow-y: auto;
}
.overflow-x-hidden {
  overflow-x: hidden;
}
.overscroll-contain {
  overscroll-behavior: contain;
}
.overscroll-y-contain {
  overscroll-behavior-y: contain;
}
.overscroll-x-contain {
  overscroll-behavior-x: contain;
}
.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.whitespace-normal {
  white-space: normal;
}
.whitespace-nowrap {
  white-space: nowrap;
}
.whitespace-pre-wrap {
  white-space: pre-wrap;
}
.break-words {
  overflow-wrap: break-word;
}
.break-all {
  word-break: break-all;
}
.rounded {
  border-radius: 0.25rem;
}
.rounded-2xl {
  border-radius: 1rem;
}
.rounded-\[28\%\] {
  border-radius: 28%;
}
.rounded-\[5px\] {
  border-radius: 5px;
}
.rounded-full {
  border-radius: 9999px;
}
.rounded-lg {
  border-radius: var(--radius-lg);
}
.rounded-md {
  border-radius: var(--radius-md);
}
.rounded-none {
  border-radius: 0px;
}
.rounded-sm {
  border-radius: var(--radius-sm);
}
.rounded-xl {
  border-radius: var(--radius-xl);
}
.rounded-l-none {
  border-top-left-radius: 0px;
  border-bottom-left-radius: 0px;
}
.rounded-r-none {
  border-top-right-radius: 0px;
  border-bottom-right-radius: 0px;
}
.rounded-tl-sm {
  border-top-left-radius: var(--radius-sm);
}
.rounded-tr-sm {
  border-top-right-radius: var(--radius-sm);
}
.\!border-0 {
  border-width: 0px !important;
}
.border {
  border-width: 1px;
}
.border-0 {
  border-width: 0px;
}
.border-2 {
  border-width: 2px;
}
.border-b {
  border-bottom-width: 1px;
}
.border-b-\[0\.5px\] {
  border-bottom-width: 0.5px;
}
.border-l {
  border-left-width: 1px;
}
.border-l-0 {
  border-left-width: 0px;
}
.border-l-2 {
  border-left-width: 2px;
}
.border-r {
  border-right-width: 1px;
}
.border-t {
  border-top-width: 1px;
}
.border-dashed {
  border-style: dashed;
}
.border-none {
  border-style: none;
}
.\!border-accent {
  --tw-border-opacity: 1 !important;
  border-color: color-mix(in srgb, var(--accent) calc(var(--tw-border-opacity, 1) * 100%), transparent) !important;
}
.border-accent {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--accent) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.border-accent\/35 {
  border-color: color-mix(in srgb, var(--accent) calc(0.35 * 100%), transparent);
}
.border-accent\/40 {
  border-color: color-mix(in srgb, var(--accent) calc(0.4 * 100%), transparent);
}
.border-accent\/50 {
  border-color: color-mix(in srgb, var(--accent) calc(0.5 * 100%), transparent);
}
.border-accent\/60 {
  border-color: color-mix(in srgb, var(--accent) calc(0.6 * 100%), transparent);
}
.border-aim\/30 {
  border-color: color-mix(in srgb, var(--aim) calc(0.3 * 100%), transparent);
}
.border-black\/10 {
  border-color: rgb(0 0 0 / 0.1);
}
.border-border {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--border) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.border-border-strong {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--border-strong) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.border-border\/60 {
  border-color: color-mix(in srgb, var(--border) calc(0.6 * 100%), transparent);
}
.border-border\/70 {
  border-color: color-mix(in srgb, var(--border) calc(0.7 * 100%), transparent);
}
.border-current {
  border-color: currentColor;
}
.border-danger {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--danger) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.border-danger\/20 {
  border-color: color-mix(in srgb, var(--danger) calc(0.2 * 100%), transparent);
}
.border-danger\/30 {
  border-color: color-mix(in srgb, var(--danger) calc(0.3 * 100%), transparent);
}
.border-danger\/40 {
  border-color: color-mix(in srgb, var(--danger) calc(0.4 * 100%), transparent);
}
.border-emerald-500\/40 {
  border-color: rgb(16 185 129 / 0.4);
}
.border-ok\/20 {
  border-color: color-mix(in srgb, var(--ok) calc(0.2 * 100%), transparent);
}
.border-ok\/30 {
  border-color: color-mix(in srgb, var(--ok) calc(0.3 * 100%), transparent);
}
.border-ok\/40 {
  border-color: color-mix(in srgb, var(--ok) calc(0.4 * 100%), transparent);
}
.border-primary {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--accent) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.border-transparent {
  border-color: transparent;
}
.border-warn\/20 {
  border-color: color-mix(in srgb, var(--warn) calc(0.2 * 100%), transparent);
}
.border-warn\/30 {
  border-color: color-mix(in srgb, var(--warn) calc(0.3 * 100%), transparent);
}
.border-warn\/40 {
  border-color: color-mix(in srgb, var(--warn) calc(0.4 * 100%), transparent);
}
.\!bg-accent {
  --tw-bg-opacity: 1 !important;
  background-color: color-mix(in srgb, var(--accent) calc(var(--tw-bg-opacity, 1) * 100%), transparent) !important;
}
.\!bg-accent-subtle {
  --tw-bg-opacity: 1 !important;
  background-color: color-mix(in srgb, var(--accent-subtle) calc(var(--tw-bg-opacity, 1) * 100%), transparent) !important;
}
.\!bg-bg-hover {
  --tw-bg-opacity: 1 !important;
  background-color: color-mix(in srgb, var(--bg-hover) calc(var(--tw-bg-opacity, 1) * 100%), transparent) !important;
}
.\!bg-transparent {
  background-color: transparent !important;
}
.bg-\[\#101317\] {
  --tw-bg-opacity: 1;
  background-color: rgb(16 19 23 / var(--tw-bg-opacity, 1));
}
.bg-\[var\(--bg-hover\)\] {
  background-color: var(--bg-hover);
}
.bg-accent {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--accent) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-accent-subtle {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--accent-subtle) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-accent-subtle\/60 {
  background-color: color-mix(in srgb, var(--accent-subtle) calc(0.6 * 100%), transparent);
}
.bg-accent\/\[0\.28\] {
  background-color: color-mix(in srgb, var(--accent) calc(0.28 * 100%), transparent);
}
.bg-aim-subtle {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--aim-subtle) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-bg {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--bg) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-bg-accent {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--bg-accent) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-bg-elevated {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--bg-elevated) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-bg-elevated\/45 {
  background-color: color-mix(in srgb, var(--bg-elevated) calc(0.45 * 100%), transparent);
}
.bg-bg-elevated\/60 {
  background-color: color-mix(in srgb, var(--bg-elevated) calc(0.6 * 100%), transparent);
}
.bg-bg-elevated\/65 {
  background-color: color-mix(in srgb, var(--bg-elevated) calc(0.65 * 100%), transparent);
}
.bg-bg-elevated\/70 {
  background-color: color-mix(in srgb, var(--bg-elevated) calc(0.7 * 100%), transparent);
}
.bg-bg-elevated\/95 {
  background-color: color-mix(in srgb, var(--bg-elevated) calc(0.95 * 100%), transparent);
}
.bg-bg-hover {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--bg-hover) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-bg-hover\/40 {
  background-color: color-mix(in srgb, var(--bg-hover) calc(0.4 * 100%), transparent);
}
.bg-bg-hover\/60 {
  background-color: color-mix(in srgb, var(--bg-hover) calc(0.6 * 100%), transparent);
}
.bg-bg\/15 {
  background-color: color-mix(in srgb, var(--bg) calc(0.15 * 100%), transparent);
}
.bg-bg\/20 {
  background-color: color-mix(in srgb, var(--bg) calc(0.2 * 100%), transparent);
}
.bg-bg\/35 {
  background-color: color-mix(in srgb, var(--bg) calc(0.35 * 100%), transparent);
}
.bg-bg\/40 {
  background-color: color-mix(in srgb, var(--bg) calc(0.4 * 100%), transparent);
}
.bg-bg\/60 {
  background-color: color-mix(in srgb, var(--bg) calc(0.6 * 100%), transparent);
}
.bg-black {
  --tw-bg-opacity: 1;
  background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
}
.bg-black\/50 {
  background-color: rgb(0 0 0 / 0.5);
}
.bg-black\/60 {
  background-color: rgb(0 0 0 / 0.6);
}
.bg-black\/65 {
  background-color: rgb(0 0 0 / 0.65);
}
.bg-border {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--border) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-border-strong {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--border-strong) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-card {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--card) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-card\/50 {
  background-color: color-mix(in srgb, var(--card) calc(0.5 * 100%), transparent);
}
.bg-card\/60 {
  background-color: color-mix(in srgb, var(--card) calc(0.6 * 100%), transparent);
}
.bg-card\/95 {
  background-color: color-mix(in srgb, var(--card) calc(0.95 * 100%), transparent);
}
.bg-current {
  background-color: currentColor;
}
.bg-danger {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--danger) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-danger-subtle {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--danger-subtle) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-danger\/10 {
  background-color: color-mix(in srgb, var(--danger) calc(0.1 * 100%), transparent);
}
.bg-emerald-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));
}
.bg-emerald-500\/10 {
  background-color: rgb(16 185 129 / 0.1);
}
.bg-muted {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--muted) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-muted\/50 {
  background-color: color-mix(in srgb, var(--muted) calc(0.5 * 100%), transparent);
}
.bg-ok {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--ok) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-ok-subtle {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--ok-subtle) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-primary {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--accent) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-text\/\[0\.08\] {
  background-color: color-mix(in srgb, var(--text) calc(0.08 * 100%), transparent);
}
.bg-transparent {
  background-color: transparent;
}
.bg-warn {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--warn) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-warn-subtle {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--warn-subtle) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.bg-warn\/10 {
  background-color: color-mix(in srgb, var(--warn) calc(0.1 * 100%), transparent);
}
.bg-white {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
}
.bg-\[radial-gradient\(circle_at_50\%_0\%\2c var\(--accent-subtle\)\2c transparent_46\%\)\] {
  background-image: radial-gradient(circle at 50% 0%,var(--accent-subtle),transparent 46%);
}
.fill-current {
  fill: currentColor;
}
.fill-none {
  fill: none;
}
.fill-warn {
  fill: var(--warn);
}
.stroke-current {
  stroke: currentColor;
}
.object-contain {
  -o-object-fit: contain;
     object-fit: contain;
}
.\!p-0 {
  padding: 0px !important;
}
.p-0 {
  padding: 0px;
}
.p-0\.5 {
  padding: 0.125rem;
}
.p-1 {
  padding: 0.25rem;
}
.p-1\.5 {
  padding: 0.375rem;
}
.p-10 {
  padding: 2.5rem;
}
.p-2 {
  padding: 0.5rem;
}
.p-2\.5 {
  padding: 0.625rem;
}
.p-3 {
  padding: 0.75rem;
}
.p-4 {
  padding: 1rem;
}
.p-5 {
  padding: 1.25rem;
}
.p-6 {
  padding: 1.5rem;
}
.p-7 {
  padding: 1.75rem;
}
.p-8 {
  padding: 2rem;
}
.p-\[3px\] {
  padding: 3px;
}
.p-\[4px\] {
  padding: 4px;
}
.px-0 {
  padding-left: 0px;
  padding-right: 0px;
}
.px-1 {
  padding-left: 0.25rem;
  padding-right: 0.25rem;
}
.px-1\.5 {
  padding-left: 0.375rem;
  padding-right: 0.375rem;
}
.px-2 {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}
.px-2\.5 {
  padding-left: 0.625rem;
  padding-right: 0.625rem;
}
.px-3 {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}
.px-3\.5 {
  padding-left: 0.875rem;
  padding-right: 0.875rem;
}
.px-4 {
  padding-left: 1rem;
  padding-right: 1rem;
}
.px-5 {
  padding-left: 1.25rem;
  padding-right: 1.25rem;
}
.px-6 {
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}
.py-0 {
  padding-top: 0px;
  padding-bottom: 0px;
}
.py-0\.5 {
  padding-top: 0.125rem;
  padding-bottom: 0.125rem;
}
.py-1 {
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
}
.py-1\.5 {
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
}
.py-10 {
  padding-top: 2.5rem;
  padding-bottom: 2.5rem;
}
.py-12 {
  padding-top: 3rem;
  padding-bottom: 3rem;
}
.py-14 {
  padding-top: 3.5rem;
  padding-bottom: 3.5rem;
}
.py-16 {
  padding-top: 4rem;
  padding-bottom: 4rem;
}
.py-2 {
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}
.py-2\.5 {
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
}
.py-3 {
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
}
.py-3\.5 {
  padding-top: 0.875rem;
  padding-bottom: 0.875rem;
}
.py-4 {
  padding-top: 1rem;
  padding-bottom: 1rem;
}
.py-5 {
  padding-top: 1.25rem;
  padding-bottom: 1.25rem;
}
.py-6 {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
}
.py-8 {
  padding-top: 2rem;
  padding-bottom: 2rem;
}
.py-\[2px\] {
  padding-top: 2px;
  padding-bottom: 2px;
}
.py-\[5px\] {
  padding-top: 5px;
  padding-bottom: 5px;
}
.pb-0 {
  padding-bottom: 0px;
}
.pb-0\.5 {
  padding-bottom: 0.125rem;
}
.pb-1 {
  padding-bottom: 0.25rem;
}
.pb-1\.5 {
  padding-bottom: 0.375rem;
}
.pb-2 {
  padding-bottom: 0.5rem;
}
.pb-3 {
  padding-bottom: 0.75rem;
}
.pb-4 {
  padding-bottom: 1rem;
}
.pb-5 {
  padding-bottom: 1.25rem;
}
.pb-8 {
  padding-bottom: 2rem;
}
.pl-0 {
  padding-left: 0px;
}
.pl-1 {
  padding-left: 0.25rem;
}
.pl-2 {
  padding-left: 0.5rem;
}
.pl-3 {
  padding-left: 0.75rem;
}
.pl-4 {
  padding-left: 1rem;
}
.pl-5 {
  padding-left: 1.25rem;
}
.pl-7 {
  padding-left: 1.75rem;
}
.pl-8 {
  padding-left: 2rem;
}
.pr-1 {
  padding-right: 0.25rem;
}
.pr-10 {
  padding-right: 2.5rem;
}
.pr-12 {
  padding-right: 3rem;
}
.pr-3 {
  padding-right: 0.75rem;
}
.pr-8 {
  padding-right: 2rem;
}
.pt-0\.5 {
  padding-top: 0.125rem;
}
.pt-1 {
  padding-top: 0.25rem;
}
.pt-1\.5 {
  padding-top: 0.375rem;
}
.pt-2 {
  padding-top: 0.5rem;
}
.pt-2\.5 {
  padding-top: 0.625rem;
}
.pt-3 {
  padding-top: 0.75rem;
}
.pt-4 {
  padding-top: 1rem;
}
.pt-5 {
  padding-top: 1.25rem;
}
.pt-\[12vh\] {
  padding-top: 12vh;
}
.text-left {
  text-align: left;
}
.text-center {
  text-align: center;
}
.text-right {
  text-align: right;
}
.align-top {
  vertical-align: top;
}
.font-body {
  font-family: var(--font-body);
}
.font-mono {
  font-family: var(--mono);
}
.text-2xl {
  font-size: 1.5rem;
  line-height: 2rem;
}
.text-\[0\.9em\] {
  font-size: 0.9em;
}
.text-\[10\.5px\] {
  font-size: 10.5px;
}
.text-\[10px\] {
  font-size: 10px;
}
.text-\[11\.5px\] {
  font-size: 11.5px;
}
.text-\[11px\] {
  font-size: 11px;
}
.text-\[12\.5px\] {
  font-size: 12.5px;
}
.text-\[12px\] {
  font-size: 12px;
}
.text-\[13\.5px\] {
  font-size: 13.5px;
}
.text-\[13px\] {
  font-size: 13px;
}
.text-\[14px\] {
  font-size: 14px;
}
.text-\[15px\] {
  font-size: 15px;
}
.text-\[40px\] {
  font-size: 40px;
}
.text-base {
  font-size: 1rem;
  line-height: 1.5rem;
}
.text-lg {
  font-size: 1.125rem;
  line-height: 1.75rem;
}
.text-sm {
  font-size: 0.875rem;
  line-height: 1.25rem;
}
.text-xl {
  font-size: 1.25rem;
  line-height: 1.75rem;
}
.text-xs {
  font-size: 0.75rem;
  line-height: 1rem;
}
.font-bold {
  font-weight: 700;
}
.font-medium {
  font-weight: 500;
}
.font-normal {
  font-weight: 400;
}
.font-semibold {
  font-weight: 600;
}
.uppercase {
  text-transform: uppercase;
}
.italic {
  font-style: italic;
}
.tabular-nums {
  --tw-numeric-spacing: tabular-nums;
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
}
.leading-4 {
  line-height: 1rem;
}
.leading-5 {
  line-height: 1.25rem;
}
.leading-6 {
  line-height: 1.5rem;
}
.leading-7 {
  line-height: 1.75rem;
}
.leading-none {
  line-height: 1;
}
.leading-relaxed {
  line-height: 1.625;
}
.tracking-\[\.04em\] {
  letter-spacing: .04em;
}
.tracking-\[\.06em\] {
  letter-spacing: .06em;
}
.tracking-\[0\.08em\] {
  letter-spacing: 0.08em;
}
.tracking-\[0\.18em\] {
  letter-spacing: 0.18em;
}
.tracking-tight {
  letter-spacing: -0.025em;
}
.tracking-wide {
  letter-spacing: 0.025em;
}
.tracking-wider {
  letter-spacing: 0.05em;
}
.\!text-accent {
  --tw-text-opacity: 1 !important;
  color: color-mix(in srgb, var(--accent) calc(var(--tw-text-opacity, 1) * 100%), transparent) !important;
}
.\!text-accent-fg {
  --tw-text-opacity: 1 !important;
  color: color-mix(in srgb, var(--accent-fg) calc(var(--tw-text-opacity, 1) * 100%), transparent) !important;
}
.\!text-muted {
  --tw-text-opacity: 1 !important;
  color: color-mix(in srgb, var(--muted) calc(var(--tw-text-opacity, 1) * 100%), transparent) !important;
}
.\!text-text {
  --tw-text-opacity: 1 !important;
  color: color-mix(in srgb, var(--text) calc(var(--tw-text-opacity, 1) * 100%), transparent) !important;
}
.\!text-warn {
  --tw-text-opacity: 1 !important;
  color: color-mix(in srgb, var(--warn) calc(var(--tw-text-opacity, 1) * 100%), transparent) !important;
}
.text-\[\#79c0ff\] {
  --tw-text-opacity: 1;
  color: rgb(121 192 255 / var(--tw-text-opacity, 1));
}
.text-\[\#7d8590\] {
  --tw-text-opacity: 1;
  color: rgb(125 133 144 / var(--tw-text-opacity, 1));
}
.text-\[\#9da7b3\] {
  --tw-text-opacity: 1;
  color: rgb(157 167 179 / var(--tw-text-opacity, 1));
}
.text-\[\#d29922\] {
  --tw-text-opacity: 1;
  color: rgb(210 153 34 / var(--tw-text-opacity, 1));
}
.text-\[\#d8dee9\] {
  --tw-text-opacity: 1;
  color: rgb(216 222 233 / var(--tw-text-opacity, 1));
}
.text-\[\#ff7b72\] {
  --tw-text-opacity: 1;
  color: rgb(255 123 114 / var(--tw-text-opacity, 1));
}
.text-\[var\(--muted\)\] {
  color: var(--muted);
}
.text-accent {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--accent) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-accent-fg {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--accent-fg) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-accent\/60 {
  color: color-mix(in srgb, var(--accent) calc(0.6 * 100%), transparent);
}
.text-aim {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--aim) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-amber-500 {
  --tw-text-opacity: 1;
  color: rgb(245 158 11 / var(--tw-text-opacity, 1));
}
.text-danger {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--danger) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-danger\/90 {
  color: color-mix(in srgb, var(--danger) calc(0.9 * 100%), transparent);
}
.text-emerald-500 {
  --tw-text-opacity: 1;
  color: rgb(16 185 129 / var(--tw-text-opacity, 1));
}
.text-emerald-600 {
  --tw-text-opacity: 1;
  color: rgb(5 150 105 / var(--tw-text-opacity, 1));
}
.text-muted {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--muted) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-muted\/40 {
  color: color-mix(in srgb, var(--muted) calc(0.4 * 100%), transparent);
}
.text-muted\/45 {
  color: color-mix(in srgb, var(--muted) calc(0.45 * 100%), transparent);
}
.text-muted\/50 {
  color: color-mix(in srgb, var(--muted) calc(0.5 * 100%), transparent);
}
.text-muted\/60 {
  color: color-mix(in srgb, var(--muted) calc(0.6 * 100%), transparent);
}
.text-muted\/70 {
  color: color-mix(in srgb, var(--muted) calc(0.7 * 100%), transparent);
}
.text-ok {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--ok) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-slate-900 {
  --tw-text-opacity: 1;
  color: rgb(15 23 42 / var(--tw-text-opacity, 1));
}
.text-text {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--text) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-text-strong {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--text-strong) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-warn {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--warn) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-warn-fg {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--warn-fg) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.text-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
.underline {
  text-decoration-line: underline;
}
.underline-offset-2 {
  text-underline-offset: 2px;
}
.underline-offset-4 {
  text-underline-offset: 4px;
}
.accent-\[hsl\(var\(--accent\)\)\] {
  accent-color: hsl(var(--accent));
}
.accent-\[var\(--accent\)\] {
  accent-color: var(--accent);
}
.opacity-0 {
  opacity: 0;
}
.opacity-100 {
  opacity: 1;
}
.opacity-40 {
  opacity: 0.4;
}
.opacity-50 {
  opacity: 0.5;
}
.opacity-60 {
  opacity: 0.6;
}
.opacity-70 {
  opacity: 0.7;
}
.opacity-80 {
  opacity: 0.8;
}
.opacity-\[\.12\] {
  opacity: .12;
}
.shadow {
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-2xl {
  --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
  --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-\[-8px_0_10px_-10px_hsl\(var\(--text\)\)\] {
  --tw-shadow: -8px 0 10px -10px hsl(var(--text));
  --tw-shadow-colored: -8px 0 10px -10px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-\[0_-6px_16px_rgba\(0\2c 0\2c 0\2c 0\.04\)\] {
  --tw-shadow: 0 -6px 16px rgba(0,0,0,0.04);
  --tw-shadow-colored: 0 -6px 16px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-\[0_0_0_3px_var\(--danger-subtle\)\] {
  --tw-shadow: 0 0 0 3px var(--danger-subtle);
  --tw-shadow-colored: 0 0 0 3px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-\[0_1px_3px_rgba\(0\2c 0\2c 0\2c \.3\)\2c 0_0\.5px_1px_rgba\(0\2c 0\2c 0\2c \.2\)\] {
  --tw-shadow: 0 1px 3px rgba(0,0,0,.3),0 0.5px 1px rgba(0,0,0,.2);
  --tw-shadow-colored: 0 1px 3px var(--tw-shadow-color), 0 0.5px 1px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-\[8px_0_10px_-10px_hsl\(var\(--text\)\)\] {
  --tw-shadow: 8px 0 10px -10px hsl(var(--text));
  --tw-shadow-colored: 8px 0 10px -10px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-\[inset_0_1px_0_var\(--card-hl\)\] {
  --tw-shadow: inset 0 1px 0 var(--card-hl);
  --tw-shadow-colored: inset 0 1px 0 var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-lg {
  --tw-shadow: var(--shadow-lg);
  --tw-shadow-colored: var(--shadow-lg);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-md {
  --tw-shadow: var(--shadow-md);
  --tw-shadow-colored: var(--shadow-md);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-none {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-sm {
  --tw-shadow: var(--shadow-sm);
  --tw-shadow-colored: var(--shadow-sm);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.outline-none {
  outline: 2px solid transparent;
  outline-offset: 2px;
}
.outline {
  outline-style: solid;
}
.ring {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.ring-1 {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.ring-accent\/30 {
  --tw-ring-color: color-mix(in srgb, var(--accent) calc(0.3 * 100%), transparent);
}
.ring-accent\/40 {
  --tw-ring-color: color-mix(in srgb, var(--accent) calc(0.4 * 100%), transparent);
}
.ring-danger\/20 {
  --tw-ring-color: color-mix(in srgb, var(--danger) calc(0.2 * 100%), transparent);
}
.\!filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) !important;
}
.filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.backdrop-blur-md {
  --tw-backdrop-blur: blur(12px);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-blur-sm {
  --tw-backdrop-blur: blur(4px);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.transition {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-\[color\2c transform\] {
  transition-property: color,transform;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-all {
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-colors {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-opacity {
  transition-property: opacity;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-transform {
  transition-property: transform;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.duration-100 {
  transition-duration: 100ms;
}
.duration-150 {
  transition-duration: 150ms;
}
.duration-200 {
  transition-duration: 200ms;
}
.ease-out {
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
.\[-webkit-overflow-scrolling\:touch\] {
  -webkit-overflow-scrolling: touch;
}
.\[scrollbar-width\:none\] {
  scrollbar-width: none;
}

/* ── Script fallback faces ──
   zh-CN, ja, ko, hi and bn have no font coverage otherwise: every family in --font-body
   and --mono below covers Latin only, so those scripts fall through to the
   browser's per-script fallback, which picks a face per character and silently
   mismatches. CJK punctuation makes it visible — Unicode uses one code point for
   the Chinese and Japanese comma and full stop, so only the FONT decides where in
   the em box the glyph sits.

   Each alias below is a `unicode-range`-restricted @font-face over locally
   installed faces. That restriction is the whole point: a face whose range
   excludes Latin is never consulted for Latin, so the alias can sit FIRST in a
   family list without changing how Latin renders. Ordering therefore stops
   mattering — this works regardless of what follows, including the terminal
   `sans-serif`/`monospace` generic, which is what a plain appended tail could not
   guarantee (on macOS `-apple-system` resolves Han from the OS cascade before any
   appended family is reached).

   Each alias declares a REAL 400 and 700 face rather than one face spanning
   100-900. Weight matching happens *within* the selected family, so a single
   Regular face would make every `font-semibold` in these scripts render as
   Chromium's SYNTHETIC bold — worse than today, where browser fallback reaches the
   platform's real Semibold/Bold. Declaring the bold locals keeps the real face.

   Not claimed on purpose: CJK quotes, dashes and ellipsis (U+2018/2019/201C/201D/
   2014/2026) live in General Punctuation, which the aliases must exclude or they
   would take over Latin punctuation too. Those glyphs keep coming from the Latin
   face, exactly as today.

   `src` is local()-only, so nothing is ever downloaded. Several candidates per
   face, by family and PostScript name, because local() matching differs by
   platform. If none is installed the face has no usable source and matching falls
   through to the next family — i.e. exactly today's behaviour, never worse. */
@font-face {
  font-family: 'KC Han Fallback';
  font-style: normal; font-weight: 400;
  src: local('PingFang SC'), local('PingFangSC-Regular'), local('Hiragino Sans GB'),
       local('Microsoft YaHei'), local('MicrosoftYaHei'), local('Noto Sans CJK SC'),
       local('NotoSansCJKsc-Regular'), local('Source Han Sans SC'),
       local('WenQuanYi Micro Hei');
  unicode-range: U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3100-312F, U+31C0-31EF,
                 U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+F900-FAFF,
                 U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: 'KC Han Fallback';
  font-style: normal; font-weight: 700;
  src: local('PingFang SC Semibold'), local('PingFangSC-Semibold'),
       local('Hiragino Sans GB W6'), local('Microsoft YaHei Bold'),
       local('MicrosoftYaHei-Bold'), local('Noto Sans CJK SC Bold'),
       local('NotoSansCJKsc-Bold'), local('Source Han Sans SC Bold');
  unicode-range: U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3100-312F, U+31C0-31EF,
                 U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+F900-FAFF,
                 U+FE30-FE4F, U+FF00-FFEF;
}
/* Japanese and Simplified Chinese share Han code points but not always glyph
   forms. A separate alias lets html:lang(ja) select Japanese faces without
   changing the SC default used by zh-CN. Kana joins the Han ranges so Japanese
   punctuation and syllabaries come from the same face. */
@font-face {
  font-family: 'KC Japanese Fallback';
  font-style: normal; font-weight: 400;
  src: local('Hiragino Sans W3'), local('HiraginoSans-W3'),
       local('Yu Gothic Regular'), local('YuGothic-Regular'),
       local('Yu Gothic UI Regular'), local('YuGothicUI-Regular'), local('Meiryo'),
       local('Noto Sans CJK JP'), local('NotoSansCJKjp-Regular'),
       local('Noto Sans JP'), local('NotoSansJP-Regular'),
       local('Source Han Sans JP'), local('SourceHanSansJP-Regular');
  unicode-range: U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3040-309F, U+30A0-30FF,
                 U+31C0-31FF, U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF,
                 U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: 'KC Japanese Fallback';
  font-style: normal; font-weight: 700;
  src: local('Hiragino Sans W6'), local('HiraginoSans-W6'),
       local('Yu Gothic Bold'), local('YuGothic-Bold'),
       local('Yu Gothic UI Bold'), local('YuGothicUI-Bold'), local('Meiryo Bold'),
       local('Meiryo-Bold'), local('Noto Sans CJK JP Bold'),
       local('NotoSansCJKjp-Bold'), local('Noto Sans JP Bold'),
       local('NotoSansJP-Bold'), local('Source Han Sans JP Bold'),
       local('SourceHanSansJP-Bold');
  unicode-range: U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3040-309F, U+30A0-30FF,
                 U+31C0-31FF, U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF,
                 U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
/* Korean needs its own alias for a different reason than Japanese does: Hangul
   (U+AC00-D7AF and the Jamo blocks) is absent from the SC and JP faces' coverage
   in practice, so leaving zh-CN's alias in front for html:lang(ko) puts an alias
   that cannot draw Hangul ahead of one that can, and the browser resolves each
   syllable from the OS cascade instead. The Han ranges are claimed too — Korean
   copy is Hangul-only, but a quoted 한자 in user content should draw the Korean
   glyph form, not the Simplified one. */
@font-face {
  font-family: 'KC Korean Fallback';
  font-style: normal; font-weight: 400;
  src: local('Apple SD Gothic Neo'), local('AppleSDGothicNeo-Regular'),
       local('Malgun Gothic'), local('MalgunGothic'), local('Noto Sans CJK KR'),
       local('NotoSansCJKkr-Regular'), local('Noto Sans KR'), local('NotoSansKR-Regular'),
       local('Source Han Sans KR'), local('SourceHanSansKR-Regular'),
       local('Nanum Gothic'), local('NanumGothic');
  unicode-range: U+1100-11FF, U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3130-318F,
                 U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+A960-A97F,
                 U+AC00-D7AF, U+D7B0-D7FF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: 'KC Korean Fallback';
  font-style: normal; font-weight: 700;
  src: local('Apple SD Gothic Neo Bold'), local('AppleSDGothicNeo-Bold'),
       local('Malgun Gothic Bold'), local('MalgunGothic-Bold'),
       local('Noto Sans CJK KR Bold'), local('NotoSansCJKkr-Bold'),
       local('Noto Sans KR Bold'), local('NotoSansKR-Bold'),
       local('Source Han Sans KR Bold'), local('SourceHanSansKR-Bold'),
       local('Nanum Gothic Bold'), local('NanumGothic-Bold');
  unicode-range: U+1100-11FF, U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3130-318F,
                 U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+A960-A97F,
                 U+AC00-D7AF, U+D7B0-D7FF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
/* Monospace Han, for code and CLI surfaces. Rarely installed on a stock machine;
   when absent 'KC Han Fallback' follows it in --script-fallbacks-mono, so Han in a
   code block draws from a proportional face — the same pairing the browser's own
   fallback produces today, and better than a missing glyph. */
@font-face {
  font-family: 'KC Han Mono Fallback';
  font-style: normal; font-weight: 400;
  src: local('Sarasa Mono SC'), local('SarasaMonoSC-Regular'), local('Noto Sans Mono CJK SC'),
       local('NotoSansMonoCJKsc-Regular');
  unicode-range: U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3100-312F, U+31C0-31EF,
                 U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+F900-FAFF,
                 U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: 'KC Han Mono Fallback';
  font-style: normal; font-weight: 700;
  src: local('Sarasa Mono SC Bold'), local('SarasaMonoSC-Bold'),
       local('Noto Sans Mono CJK SC Bold'), local('NotoSansMonoCJKsc-Bold');
  unicode-range: U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3100-312F, U+31C0-31EF,
                 U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+F900-FAFF,
                 U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: 'KC Japanese Mono Fallback';
  font-style: normal; font-weight: 400;
  src: local('Sarasa Mono J'), local('SarasaMonoJ-Regular'),
       local('Noto Sans Mono CJK JP'), local('NotoSansMonoCJKjp-Regular');
  unicode-range: U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3040-309F, U+30A0-30FF,
                 U+31C0-31FF, U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF,
                 U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: 'KC Japanese Mono Fallback';
  font-style: normal; font-weight: 700;
  src: local('Sarasa Mono J Bold'), local('SarasaMonoJ-Bold'),
       local('Noto Sans Mono CJK JP Bold'), local('NotoSansMonoCJKjp-Bold');
  unicode-range: U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3040-309F, U+30A0-30FF,
                 U+31C0-31FF, U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF,
                 U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: 'KC Korean Mono Fallback';
  font-style: normal; font-weight: 400;
  src: local('D2Coding'), local('D2Coding-Regular'), local('Sarasa Mono K'),
       local('SarasaMonoK-Regular'), local('Noto Sans Mono CJK KR'),
       local('NotoSansMonoCJKkr-Regular');
  unicode-range: U+1100-11FF, U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3130-318F,
                 U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+A960-A97F,
                 U+AC00-D7AF, U+D7B0-D7FF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: 'KC Korean Mono Fallback';
  font-style: normal; font-weight: 700;
  src: local('D2Coding Bold'), local('D2Coding-Bold'), local('Sarasa Mono K Bold'),
       local('SarasaMonoK-Bold'), local('Noto Sans Mono CJK KR Bold'),
       local('NotoSansMonoCJKkr-Bold');
  unicode-range: U+1100-11FF, U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3130-318F,
                 U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+A960-A97F,
                 U+AC00-D7AF, U+D7B0-D7FF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: 'KC Devanagari Fallback';
  font-style: normal; font-weight: 400;
  src: local('Noto Sans Devanagari'), local('NotoSansDevanagari-Regular'), local('Nirmala UI'),
       local('NirmalaUI'), local('Kohinoor Devanagari'), local('Devanagari Sangam MN');
  unicode-range: U+0900-097F, U+1CD0-1CFF, U+A8E0-A8FF;
}
@font-face {
  font-family: 'KC Devanagari Fallback';
  font-style: normal; font-weight: 700;
  src: local('Noto Sans Devanagari Bold'), local('NotoSansDevanagari-Bold'),
       local('Nirmala UI Bold'), local('NirmalaUI-Bold'), local('Kohinoor Devanagari Semibold');
  unicode-range: U+0900-097F, U+1CD0-1CFF, U+A8E0-A8FF;
}
@font-face {
  font-family: 'KC Bengali Fallback';
  font-style: normal; font-weight: 400;
  src: local('Noto Sans Bengali'), local('NotoSansBengali-Regular'), local('Nirmala UI'),
       local('NirmalaUI'), local('Vrinda'), local('Bangla Sangam MN');
  unicode-range: U+0980-09FF;
}
@font-face {
  font-family: 'KC Bengali Fallback';
  font-style: normal; font-weight: 700;
  src: local('Noto Sans Bengali Bold'), local('NotoSansBengali-Bold'), local('Nirmala UI Bold'),
       local('NirmalaUI-Bold'), local('Vrinda Bold');
  unicode-range: U+0980-09FF;
}

/* ── Design tokens ── */
/* Shared across all themes */
:root {
  /* Single source of truth for the script fallbacks. Every declaration of
     --font-body / --mono — here, in the theme blocks below, and the ones built in
     hooks/useTheme.tsx and hooks/useZoom.ts — references these by name instead of
     repeating the list. Locale-specific overrides below swap regional Han faces
     without changing any consumer stack. They lead each stack; unicode-range is
     what makes leading safe. */
  --script-fallbacks:'KC Han Fallback','KC Devanagari Fallback','KC Bengali Fallback';
  --script-fallbacks-mono:'KC Han Mono Fallback','KC Han Fallback','KC Devanagari Fallback','KC Bengali Fallback';
  /* An installed theme pack fills --theme-font-sans / --theme-font-mono with its
     own faces (see hooks/themeCss.ts). Reading them here means code surfaces
     follow a pack's monospace face without the user having to switch the whole UI
     to monospace, and the pack's proportional face is already in place on first
     paint rather than swapping in when the preference effect runs. Unfilled, each
     var() falls back to the built-in stack. */
  --font-body:var(--theme-font-sans, var(--script-fallbacks),'Space Grotesk',-apple-system,BlinkMacSystemFont,sans-serif);
  --mono:var(--theme-font-mono, var(--script-fallbacks-mono),'JetBrains Mono',ui-monospace,SFMono-Regular,monospace);
  --radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;
}
html:lang(ja) {
  /* Never retain the SC aliases here. If no named Japanese face is installed,
     falling through lets the browser use its lang-aware Japanese fallback. */
  --script-fallbacks:'KC Japanese Fallback','KC Devanagari Fallback','KC Bengali Fallback';
  --script-fallbacks-mono:'KC Japanese Mono Fallback','KC Japanese Fallback','KC Devanagari Fallback','KC Bengali Fallback';
}
html:lang(ko) {
  /* Never retain the SC or JP aliases here. Neither draws Hangul, so leaving one
     in front only delays resolution to the browser's lang-aware Korean fallback. */
  --script-fallbacks:'KC Korean Fallback','KC Devanagari Fallback','KC Bengali Fallback';
  --script-fallbacks-mono:'KC Korean Mono Fallback','KC Korean Fallback','KC Devanagari Fallback','KC Bengali Fallback';
}
/* Dark theme shadows */
:root,[data-theme="dark"],[data-theme="monokai-dark"],[data-theme="solarized-dark"],[data-theme="amber-dark"],[data-theme="nord-dark"],[data-theme="dracula-dark"],[data-theme="rosepine-dark"],[data-theme="catppuccin-dark"],[data-theme="tokyonight-dark"],[data-theme="gruvbox-dark"],[data-theme="ice-dark"]{
  --shadow-sm:0 1px 2px rgba(0,0,0,.2);
  --shadow-md:0 4px 12px rgba(0,0,0,.25),0 0 0 1px rgba(255,255,255,.03);
  --shadow-lg:0 12px 28px rgba(0,0,0,.35);
}

/* Context-breakdown ramp. Eight discrete steps mixed from the existing
   foreground/surface tokens rather than invented hex, so the ramp tracks every
   theme and its polarity. Rank 0 is the largest block; --ctx-fgN is the inverse
   mix so a label stays legible at either end. --ctx-hatch marks the portion of
   the window KiroCrew did not inject, which is an estimate. */
:root{
  --ctx-k1:color-mix(in srgb, var(--text) 60%, var(--card));
  --ctx-k2:color-mix(in srgb, var(--text) 54%, var(--card));
  --ctx-k3:color-mix(in srgb, var(--text) 49%, var(--card));
  --ctx-k4:color-mix(in srgb, var(--text) 43%, var(--card));
  --ctx-k5:color-mix(in srgb, var(--text) 38%, var(--card));
  --ctx-k6:color-mix(in srgb, var(--text) 33%, var(--card));
  --ctx-k7:color-mix(in srgb, var(--text) 27%, var(--card));
  --ctx-k8:color-mix(in srgb, var(--text) 22%, var(--card));
  /* A label sits on a fill that is N% --text mixed into --card, so the readable
     choice is the OPPOSITE endpoint, not another mid-mix: a mid-mix on a mid-mix
     has almost no contrast. Steps at or above ~45% text take --card; the lighter
     steps take --text. Because every fill is the same "text into card" mix, this
     mapping holds in both theme polarities. */
  --ctx-fg1:var(--card);
  --ctx-fg2:var(--card);
  --ctx-fg3:var(--card);
  --ctx-fg4:var(--text);
  --ctx-fg5:var(--text);
  --ctx-fg6:var(--text);
  --ctx-fg7:var(--text);
  --ctx-fg8:var(--text);
  --ctx-user-fg:var(--accent-fg, var(--bg));
  --ctx-hatch:repeating-linear-gradient(135deg, color-mix(in srgb, var(--text) 9%, var(--card)) 0 5px, color-mix(in srgb, var(--text) 20%, var(--card)) 5px 10px);
}
/* Stronger shadows for some dark themes */
[data-theme="monokai-dark"],[data-theme="solarized-dark"],[data-theme="nord-dark"],[data-theme="dracula-dark"],[data-theme="rosepine-dark"],[data-theme="catppuccin-dark"],[data-theme="tokyonight-dark"],[data-theme="gruvbox-dark"],[data-theme="ice-dark"]{
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.02);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
}
/* Light theme shadows */
[data-theme="light"],[data-theme="monokai-light"],[data-theme="solarized-light"],[data-theme="amber-light"],[data-theme="nord-light"],[data-theme="dracula-light"],[data-theme="rosepine-light"],[data-theme="catppuccin-light"],[data-theme="tokyonight-light"],[data-theme="gruvbox-light"],[data-theme="ice-light"]{
  --search-highlight:rgba(255,167,38,.35);--search-highlight-current:rgba(255,120,0,.7);--search-highlight-current-border:rgba(0,0,0,.8);
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
}
:root,[data-theme="dark"],[data-theme="amber-dark"]{
  --search-highlight:rgba(255,167,38,.45);--search-highlight-current:rgba(255,120,0,.85);--search-highlight-current-border:rgba(255,255,255,.9);
  --bg:#12141a;--bg-accent:#14161d;--bg-elevated:#1a1d25;--bg-hover:#262a35;
  --card:#181b22;--card-fg:#f4f4f5;--card-hl:rgba(255,255,255,.05);
  --panel:#12141a;--panel-strong:#1a1d25;
  --chrome:rgba(18,20,26,.95);
  --text:#e4e4e7;--text-strong:#fafafa;--muted:#7f7f88;--muted-fg:#fff;--muted-strong:#52525b;
  --border:#27272a;--border-strong:#3f3f46;--border-hover:#52525b;
  --accent:#00d492;--accent-fg:#000;--accent-hover:#34d399;--accent-subtle:rgba(4,117,88,.2);
  --accent-glow:rgba(4,117,88,.35);--ring:#10b981;
  --ok:#22c55e;--ok-fg:#000;--ok-subtle:rgba(34,197,94,.12);
  --warn:#eab308;--warn-fg:#000;--warn-subtle:rgba(234,179,8,.12);
  --danger:#ef4444;--danger-fg:#000;--danger-subtle:rgba(239,68,68,.12);
  --info:#0891b2;--info-fg:#000;
  --aim:#a78bfa;--aim-fg:#000;--aim-subtle:rgba(167,139,250,.15);
  --clarify:#eab308;--clarify-subtle:rgba(234,179,8,.08);
  --diff-add:rgba(46,160,67,.15);--diff-add-text:#7ee787;
  --diff-del:rgba(248,81,73,.15);--diff-del-text:#ffa198;
  --diff-hunk:rgba(4,117,88,.2);--diff-hunk-text:#6ee7b7;
  --diff-meta-text:#e6edf3;
  --json-key:#9CDCFE;--json-str:#CE9178;--json-num:#B5CEA8;--json-bool:#569CD6;
  --shadow-sm:0 1px 2px rgba(0,0,0,.2);
  --shadow-md:0 4px 12px rgba(0,0,0,.25),0 0 0 1px rgba(255,255,255,.03);
  --shadow-lg:0 12px 28px rgba(0,0,0,.35);
  color-scheme:dark;
}
[data-theme="light"],[data-theme="amber-light"]{
  --search-highlight:rgba(255,167,38,.35);--search-highlight-current:rgba(255,120,0,.7);--search-highlight-current-border:rgba(0,0,0,.8);
  --bg:#fafafa;--bg-accent:#f5f5f5;--bg-elevated:#ffffff;--bg-hover:#f0f0f0;
  --card:#ffffff;--card-fg:#18181b;--card-hl:rgba(0,0,0,.03);
  --panel:#fafafa;--panel-strong:#f5f5f5;
  --chrome:rgba(250,250,250,.95);
  --text:#3f3f46;--text-strong:#18181b;--muted:#71717a;--muted-fg:#fff;--muted-strong:#52525b;
  --border:#e4e4e7;--border-strong:#d4d4d8;--border-hover:#a1a1aa;
  --accent:#047558;--accent-fg:#fff;--accent-hover:#059669;--accent-subtle:rgba(4,117,88,.12);
  --accent-glow:rgba(4,117,88,.18);--ring:#047558;
  --ok:#16a34a;--ok-fg:#000;--ok-subtle:rgba(22,163,74,.1);
  --warn:#a16207;--warn-fg:#fff;--warn-subtle:rgba(161,98,7,.1);
  --danger:#dc2626;--danger-fg:#fff;--danger-subtle:rgba(220,38,38,.1);
  --info:#0891b2;--info-fg:#000;
  --aim:#7c3aed;--aim-fg:#fff;--aim-subtle:rgba(124,58,237,.12);
  --clarify:#a16207;--clarify-subtle:rgba(161,98,7,.06);
  --diff-add:rgba(22,163,74,.12);--diff-add-text:#1a7f37;
  --diff-del:rgba(220,38,38,.12);--diff-del-text:#cf222e;
  --diff-hunk:rgba(4,117,88,.12);--diff-hunk-text:#065f46;
  --diff-meta-text:#1f2328;
  --json-key:#001080;--json-str:#A31515;--json-num:#098658;--json-bool:#0000FF;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Monokai ── */
[data-theme="monokai-dark"]{
  --bg:#272822;--bg-accent:#2d2e27;--bg-elevated:#3e3d32;--bg-hover:#49483e;
  --card:#2d2e27;--card-fg:#f8f8f2;--card-hl:rgba(255,255,255,.05);
  --panel:#272822;--panel-strong:#3e3d32;
  --chrome:rgba(39,40,34,.95);
  --text:#f8f8f2;--text-strong:#ffffff;--muted:#94907a;--muted-fg:#fff;--muted-strong:#6a6a5b;
  --border:#49483e;--border-strong:#5c5b50;--border-hover:#75715e;
  --accent:#a6e22e;--accent-fg:#000;--accent-hover:#b6f23e;--accent-subtle:rgba(166,226,46,.15);
  --accent-glow:rgba(166,226,46,.25);--ring:#a6e22e;
  --ok:#a6e22e;--ok-fg:#000;--ok-subtle:rgba(166,226,46,.12);
  --warn:#e6db74;--warn-fg:#000;--warn-subtle:rgba(230,219,116,.12);
  --danger:#f92672;--danger-fg:#000;--danger-subtle:rgba(249,38,114,.12);
  --info:#66d9ef;--info-fg:#000;
  --aim:#ae81ff;--aim-fg:#000;--aim-subtle:rgba(174,129,255,.15);
  --clarify:#e6db74;--clarify-subtle:rgba(230,219,116,.08);
  --diff-add:rgba(166,226,46,.15);--diff-add-text:#a6e22e;
  --diff-del:rgba(249,38,114,.15);--diff-del-text:#f92672;
  --diff-hunk:rgba(102,217,239,.15);--diff-hunk-text:#66d9ef;
  --diff-meta-text:#f8f8f2;
  --json-key:#66d9ef;--json-str:#e6db74;--json-num:#ae81ff;--json-bool:#f92672;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.03);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  color-scheme:dark;
}
[data-theme="monokai-light"]{
  --bg:#fafaf5;--bg-accent:#f0f0e8;--bg-elevated:#ffffff;--bg-hover:#e8e8e0;
  --card:#ffffff;--card-fg:#272822;--card-hl:rgba(0,0,0,.03);
  --panel:#fafaf5;--panel-strong:#f0f0e8;
  --chrome:rgba(250,250,245,.95);
  --text:#49483e;--text-strong:#272822;--muted:#75715e;--muted-fg:#fff;--muted-strong:#6a6a5b;
  --border:#d8d8d0;--border-strong:#c8c8c0;--border-hover:#a0a090;
  --accent:#467c00;--accent-fg:#fff;--accent-hover:#7da022;--accent-subtle:rgba(106,139,30,.12);
  --accent-glow:rgba(106,139,30,.15);--ring:#6a8b1e;
  --ok:#6a8b1e;--ok-fg:#000;--ok-subtle:rgba(106,139,30,.1);
  --warn:#9a8b20;--warn-fg:#000;--warn-subtle:rgba(154,139,32,.1);
  --danger:#c4175a;--danger-fg:#fff;--danger-subtle:rgba(196,23,90,.1);
  --info:#2a8a9e;--info-fg:#000;
  --aim:#7c3aed;--aim-fg:#fff;--aim-subtle:rgba(124,58,237,.12);
  --clarify:#9a8b20;--clarify-subtle:rgba(154,139,32,.06);
  --diff-add:rgba(106,139,30,.12);--diff-add-text:#4a6b10;
  --diff-del:rgba(196,23,90,.12);--diff-del-text:#c4175a;
  --diff-hunk:rgba(42,138,158,.12);--diff-hunk-text:#1a6a7e;
  --diff-meta-text:#272822;
  --json-key:#2a8a9e;--json-str:#9a8b20;--json-num:#7c3aed;--json-bool:#c4175a;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Solarized ── */
[data-theme="solarized-dark"]{
  --bg:#002b36;--bg-accent:#073642;--bg-elevated:#0a3f4c;--bg-hover:#134956;
  --card:#073642;--card-fg:#eee8d5;--card-hl:rgba(255,255,255,.04);
  --panel:#002b36;--panel-strong:#073642;
  --chrome:rgba(0,43,54,.95);
  --text:#93a1a1;--text-strong:#eee8d5;--muted:#879da5;--muted-fg:#000;--muted-strong:#586e75;
  --border:#1a4f5c;--border-strong:#2a6070;--border-hover:#3a7080;
  --accent:#7ad8cd;--accent-fg:#000;--accent-hover:#35bdb3;--accent-subtle:rgba(42,161,152,.15);
  --accent-glow:rgba(42,161,152,.25);--ring:#2aa198;
  --ok:#859900;--ok-fg:#000;--ok-subtle:rgba(133,153,0,.12);
  --warn:#b58900;--warn-fg:#000;--warn-subtle:rgba(181,137,0,.12);
  --danger:#dc322f;--danger-fg:#fff;--danger-subtle:rgba(220,50,47,.12);
  --info:#268bd2;--info-fg:#000;
  --aim:#6c71c4;--aim-fg:#000;--aim-subtle:rgba(108,113,196,.15);
  --clarify:#b58900;--clarify-subtle:rgba(181,137,0,.08);
  --diff-add:rgba(133,153,0,.15);--diff-add-text:#859900;
  --diff-del:rgba(220,50,47,.15);--diff-del-text:#dc322f;
  --diff-hunk:rgba(38,139,210,.15);--diff-hunk-text:#268bd2;
  --diff-meta-text:#eee8d5;
  --json-key:#268bd2;--json-str:#2aa198;--json-num:#d33682;--json-bool:#859900;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.02);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  color-scheme:dark;
}
[data-theme="solarized-light"]{
  --bg:#fdf6e3;--bg-accent:#eee8d5;--bg-elevated:#ffffff;--bg-hover:#e6dfcc;
  --card:#ffffff;--card-fg:#073642;--card-hl:rgba(0,0,0,.03);
  --panel:#fdf6e3;--panel-strong:#eee8d5;
  --chrome:rgba(253,246,227,.95);
  --text:#586e75;--text-strong:#073642;--muted:#657272;--muted-fg:#000;--muted-strong:#839496;
  --border:#d6cdb5;--border-strong:#c6bda5;--border-hover:#a09880;
  --accent:#007b72;--accent-fg:#fff;--accent-hover:#35bdb3;--accent-subtle:rgba(42,161,152,.12);
  --accent-glow:rgba(42,161,152,.15);--ring:#2aa198;
  --ok:#859900;--ok-fg:#000;--ok-subtle:rgba(133,153,0,.1);
  --warn:#b58900;--warn-fg:#000;--warn-subtle:rgba(181,137,0,.1);
  --danger:#dc322f;--danger-fg:#fff;--danger-subtle:rgba(220,50,47,.1);
  --info:#268bd2;--info-fg:#000;
  --aim:#6c71c4;--aim-fg:#000;--aim-subtle:rgba(108,113,196,.12);
  --clarify:#b58900;--clarify-subtle:rgba(181,137,0,.06);
  --diff-add:rgba(133,153,0,.12);--diff-add-text:#586e00;
  --diff-del:rgba(220,50,47,.12);--diff-del-text:#dc322f;
  --diff-hunk:rgba(38,139,210,.12);--diff-hunk-text:#1a6ba2;
  --diff-meta-text:#073642;
  --json-key:#268bd2;--json-str:#2aa198;--json-num:#d33682;--json-bool:#859900;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Amber (original KiroCrew) ── */
/* amber-dark inherits from :root (default dark) — only accent overrides */
[data-theme="amber-dark"]{
  --accent:#ffd230;--accent-fg:#000;--accent-hover:#fbb860;--accent-subtle:rgba(245,158,50,.15);
  --accent-glow:rgba(245,158,50,.25);--ring:#f59e32;
  --diff-hunk:rgba(56,139,253,.15);--diff-hunk-text:#79c0ff;
  --diff-meta-text:#e6edf3;
  --json-key:#3b82f6;--json-str:#22c55e;--json-num:#a78bfa;--json-bool:#ef4444;
  --shadow-sm:0 1px 2px rgba(0,0,0,.2);
  --shadow-md:0 4px 12px rgba(0,0,0,.25),0 0 0 1px rgba(255,255,255,.03);
  --shadow-lg:0 12px 28px rgba(0,0,0,.35);
  color-scheme:dark;
}
/* amber-light inherits from [data-theme="light"] — only accent overrides */
[data-theme="amber-light"]{
  --accent:#bb4d00;--accent-fg:#fff;--accent-hover:#f59e0b;--accent-subtle:rgba(217,119,6,.12);
  --accent-glow:rgba(217,119,6,.15);--ring:#d97706;
  --info:#2563eb;--info-fg:#fff;
  --diff-hunk:rgba(37,99,235,.12);--diff-hunk-text:#0550ae;
  --diff-meta-text:#1f2328;
  --json-key:#2563eb;--json-str:#16a34a;--json-num:#7c3aed;--json-bool:#dc2626;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Nord ── */
[data-theme="nord-dark"]{
  --bg:#2e3440;--bg-accent:#333a47;--bg-elevated:#3b4252;--bg-hover:#434c5e;
  --card:#333a47;--card-fg:#eceff4;--card-hl:rgba(255,255,255,.04);
  --panel:#2e3440;--panel-strong:#3b4252;
  --chrome:rgba(46,52,64,.95);
  --text:#d8dee9;--text-strong:#eceff4;--muted:#949eb3;--muted-fg:#000;--muted-strong:#6b7893;
  --border:#434c5e;--border-strong:#4c566a;--border-hover:#5e6a82;
  --accent:#88c0d0;--accent-fg:#000;--accent-hover:#9dd0de;--accent-subtle:rgba(136,192,208,.15);
  --accent-glow:rgba(136,192,208,.25);--ring:#88c0d0;
  --ok:#a3be8c;--ok-fg:#000;--ok-subtle:rgba(163,190,140,.12);
  --warn:#ebcb8b;--warn-fg:#000;--warn-subtle:rgba(235,203,139,.12);
  --danger:#bf616a;--danger-fg:#000;--danger-subtle:rgba(191,97,106,.12);
  --info:#81a1c1;--info-fg:#000;
  --aim:#b48ead;--aim-fg:#000;--aim-subtle:rgba(180,142,173,.15);
  --clarify:#ebcb8b;--clarify-subtle:rgba(235,203,139,.08);
  --diff-add:rgba(163,190,140,.15);--diff-add-text:#a3be8c;
  --diff-del:rgba(191,97,106,.15);--diff-del-text:#bf616a;
  --diff-hunk:rgba(129,161,193,.15);--diff-hunk-text:#81a1c1;
  --diff-meta-text:#eceff4;
  --json-key:#88c0d0;--json-str:#a3be8c;--json-num:#b48ead;--json-bool:#81a1c1;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.02);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  color-scheme:dark;
}
[data-theme="nord-light"]{
  --bg:#eceff4;--bg-accent:#e5e9f0;--bg-elevated:#ffffff;--bg-hover:#d8dee9;
  --card:#ffffff;--card-fg:#2e3440;--card-hl:rgba(0,0,0,.03);
  --panel:#eceff4;--panel-strong:#e5e9f0;
  --chrome:rgba(236,239,244,.95);
  --text:#4c566a;--text-strong:#2e3440;--muted:#5d6982;--muted-fg:#000;--muted-strong:#6b7893;
  --border:#d8dee9;--border-strong:#c8ced9;--border-hover:#a0a8b8;
  --accent:#4a6a98;--accent-fg:#fff;--accent-hover:#6d91bc;--accent-subtle:rgba(94,129,172,.12);
  --accent-glow:rgba(94,129,172,.15);--ring:#5e81ac;
  --ok:#689d6a;--ok-fg:#000;--ok-subtle:rgba(104,157,106,.1);
  --warn:#d08770;--warn-fg:#000;--warn-subtle:rgba(208,135,112,.1);
  --danger:#bf616a;--danger-fg:#000;--danger-subtle:rgba(191,97,106,.1);
  --info:#5e81ac;--info-fg:#000;
  --aim:#b48ead;--aim-fg:#000;--aim-subtle:rgba(180,142,173,.12);
  --clarify:#d08770;--clarify-subtle:rgba(208,135,112,.06);
  --diff-add:rgba(104,157,106,.12);--diff-add-text:#4a7a4c;
  --diff-del:rgba(191,97,106,.12);--diff-del-text:#a5444d;
  --diff-hunk:rgba(94,129,172,.12);--diff-hunk-text:#4a6d96;
  --diff-meta-text:#2e3440;
  --json-key:#4a6a98;--json-str:#689d6a;--json-num:#b48ead;--json-bool:#5e81ac;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Dracula ── */
[data-theme="dracula-dark"]{
  --bg:#282a36;--bg-accent:#2d2f3d;--bg-elevated:#383a4a;--bg-hover:#44475a;
  --card:#2d2f3d;--card-fg:#f8f8f2;--card-hl:rgba(255,255,255,.05);
  --panel:#282a36;--panel-strong:#383a4a;
  --chrome:rgba(40,42,54,.95);
  --text:#f8f8f2;--text-strong:#ffffff;--muted:#8692b9;--muted-fg:#fff;--muted-strong:#7283b5;
  --border:#44475a;--border-strong:#565970;--border-hover:#6272a4;
  --accent:#d5acff;--accent-fg:#000;--accent-hover:#d4b0ff;--accent-subtle:rgba(189,147,249,.15);
  --accent-glow:rgba(189,147,249,.25);--ring:#bd93f9;
  --ok:#50fa7b;--ok-fg:#000;--ok-subtle:rgba(80,250,123,.12);
  --warn:#f1fa8c;--warn-fg:#000;--warn-subtle:rgba(241,250,140,.12);
  --danger:#ff5555;--danger-fg:#000;--danger-subtle:rgba(255,85,85,.12);
  --info:#8be9fd;--info-fg:#000;
  --aim:#ff79c6;--aim-fg:#000;--aim-subtle:rgba(255,121,198,.15);
  --clarify:#f1fa8c;--clarify-subtle:rgba(241,250,140,.08);
  --diff-add:rgba(80,250,123,.15);--diff-add-text:#50fa7b;
  --diff-del:rgba(255,85,85,.15);--diff-del-text:#ff5555;
  --diff-hunk:rgba(139,233,253,.15);--diff-hunk-text:#8be9fd;
  --diff-meta-text:#f8f8f2;
  --json-key:#8be9fd;--json-str:#f1fa8c;--json-num:#bd93f9;--json-bool:#ff79c6;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.03);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  color-scheme:dark;
}
[data-theme="dracula-light"]{
  --bg:#f8f8f2;--bg-accent:#f0f0e8;--bg-elevated:#ffffff;--bg-hover:#e8e8e0;
  --card:#ffffff;--card-fg:#282a36;--card-hl:rgba(0,0,0,.03);
  --panel:#f8f8f2;--panel-strong:#f0f0e8;
  --chrome:rgba(248,248,242,.95);
  --text:#44475a;--text-strong:#282a36;--muted:#5f6fa2;--muted-fg:#fff;--muted-strong:#7283b5;
  --border:#d8d8d0;--border-strong:#c8c8c0;--border-hover:#a0a098;
  --accent:#7c3aed;--accent-fg:#fff;--accent-hover:#9055ff;--accent-subtle:rgba(124,58,237,.12);
  --accent-glow:rgba(124,58,237,.15);--ring:#7c3aed;
  --ok:#16a34a;--ok-fg:#000;--ok-subtle:rgba(22,163,74,.1);
  --warn:#a16207;--warn-fg:#fff;--warn-subtle:rgba(161,98,7,.1);
  --danger:#dc2626;--danger-fg:#fff;--danger-subtle:rgba(220,38,38,.1);
  --info:#0891b2;--info-fg:#000;
  --aim:#c026d3;--aim-fg:#fff;--aim-subtle:rgba(192,38,211,.12);
  --clarify:#a16207;--clarify-subtle:rgba(161,98,7,.06);
  --diff-add:rgba(22,163,74,.12);--diff-add-text:#1a7f37;
  --diff-del:rgba(220,38,38,.12);--diff-del-text:#cf222e;
  --diff-hunk:rgba(8,145,178,.12);--diff-hunk-text:#0e7490;
  --diff-meta-text:#282a36;
  --json-key:#0e7490;--json-str:#16a34a;--json-num:#7c3aed;--json-bool:#c026d3;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Rosé Pine ── */
[data-theme="rosepine-dark"]{
  --bg:#191724;--bg-accent:#1f1d2e;--bg-elevated:#26233a;--bg-hover:#2a2740;
  --card:#1f1d2e;--card-fg:#e0def4;--card-hl:rgba(255,255,255,.04);
  --panel:#191724;--panel-strong:#26233a;
  --chrome:rgba(25,23,36,.95);
  --text:#e0def4;--text-strong:#ffffff;--muted:#84809a;--muted-fg:#fff;--muted-strong:#908cad;
  --border:#2a2740;--border-strong:#393552;--border-hover:#524f67;
  --accent:#ebbcba;--accent-fg:#000;--accent-hover:#f0d0ce;--accent-subtle:rgba(235,188,186,.15);
  --accent-glow:rgba(235,188,186,.25);--ring:#ebbcba;
  --ok:#9ccfd8;--ok-fg:#000;--ok-subtle:rgba(156,207,216,.12);
  --warn:#f6c177;--warn-fg:#000;--warn-subtle:rgba(246,193,119,.12);
  --danger:#eb6f92;--danger-fg:#000;--danger-subtle:rgba(235,111,146,.12);
  --info:#c4a7e7;--info-fg:#000;
  --aim:#c4a7e7;--aim-fg:#000;--aim-subtle:rgba(196,167,231,.15);
  --clarify:#f6c177;--clarify-subtle:rgba(246,193,119,.08);
  --diff-add:rgba(156,207,216,.15);--diff-add-text:#9ccfd8;
  --diff-del:rgba(235,111,146,.15);--diff-del-text:#eb6f92;
  --diff-hunk:rgba(196,167,231,.15);--diff-hunk-text:#c4a7e7;
  --diff-meta-text:#e0def4;
  --json-key:#9ccfd8;--json-str:#f6c177;--json-num:#c4a7e7;--json-bool:#eb6f92;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.02);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  color-scheme:dark;
}
[data-theme="rosepine-light"]{
  --bg:#faf4ed;--bg-accent:#f2e9e1;--bg-elevated:#ffffff;--bg-hover:#ebe5dd;
  --card:#ffffff;--card-fg:#575279;--card-hl:rgba(0,0,0,.03);
  --panel:#faf4ed;--panel-strong:#f2e9e1;
  --chrome:rgba(250,244,237,.95);
  --text:#575279;--text-strong:#26233a;--muted:#716c7f;--muted-fg:#000;--muted-strong:#797593;
  --border:#e0d8d0;--border-strong:#d0c8c0;--border-hover:#b0a8a0;
  --accent:#d7827e;--accent-fg:#fff;--accent-hover:#e09490;--accent-subtle:rgba(215,130,126,.12);
  --accent-glow:rgba(215,130,126,.15);--ring:#d7827e;
  --ok:#56949f;--ok-fg:#000;--ok-subtle:rgba(86,148,159,.1);
  --warn:#ea9d34;--warn-fg:#000;--warn-subtle:rgba(234,157,52,.1);
  --danger:#b4637a;--danger-fg:#000;--danger-subtle:rgba(180,99,122,.1);
  --info:#907aa9;--info-fg:#000;
  --aim:#907aa9;--aim-fg:#000;--aim-subtle:rgba(144,122,169,.12);
  --clarify:#ea9d34;--clarify-subtle:rgba(234,157,52,.06);
  --diff-add:rgba(86,148,159,.12);--diff-add-text:#3e7a84;
  --diff-del:rgba(180,99,122,.12);--diff-del-text:#9e4a64;
  --diff-hunk:rgba(144,122,169,.12);--diff-hunk-text:#705a8e;
  --diff-meta-text:#26233a;
  --json-key:#56949f;--json-str:#ea9d34;--json-num:#907aa9;--json-bool:#b4637a;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Catppuccin ── */
[data-theme="catppuccin-dark"]{
  --bg:#1e1e2e;--bg-accent:#232334;--bg-elevated:#313244;--bg-hover:#45475a;
  --card:#232334;--card-fg:#cdd6f4;--card-hl:rgba(255,255,255,.04);
  --panel:#1e1e2e;--panel-strong:#313244;
  --chrome:rgba(30,30,46,.95);
  --text:#cdd6f4;--text-strong:#ffffff;--muted:#83879b;--muted-fg:#fff;--muted-strong:#7f849c;
  --border:#45475a;--border-strong:#585b70;--border-hover:#6c7086;
  --accent:#cba6f7;--accent-fg:#000;--accent-hover:#d8bcff;--accent-subtle:rgba(203,166,247,.15);
  --accent-glow:rgba(203,166,247,.25);--ring:#cba6f7;
  --ok:#a6e3a1;--ok-fg:#000;--ok-subtle:rgba(166,227,161,.12);
  --warn:#f9e2af;--warn-fg:#000;--warn-subtle:rgba(249,226,175,.12);
  --danger:#f38ba8;--danger-fg:#000;--danger-subtle:rgba(243,139,168,.12);
  --info:#89b4fa;--info-fg:#000;
  --aim:#f5c2e7;--aim-fg:#000;--aim-subtle:rgba(245,194,231,.15);
  --clarify:#f9e2af;--clarify-subtle:rgba(249,226,175,.08);
  --diff-add:rgba(166,227,161,.15);--diff-add-text:#a6e3a1;
  --diff-del:rgba(243,139,168,.15);--diff-del-text:#f38ba8;
  --diff-hunk:rgba(137,180,250,.15);--diff-hunk-text:#89b4fa;
  --diff-meta-text:#cdd6f4;
  --json-key:#89b4fa;--json-str:#a6e3a1;--json-num:#cba6f7;--json-bool:#f38ba8;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.02);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  color-scheme:dark;
}
[data-theme="catppuccin-light"]{
  --bg:#eff1f5;--bg-accent:#e6e9ef;--bg-elevated:#ffffff;--bg-hover:#dce0e8;
  --card:#ffffff;--card-fg:#4c4f69;--card-hl:rgba(0,0,0,.03);
  --panel:#eff1f5;--panel-strong:#e6e9ef;
  --chrome:rgba(239,241,245,.95);
  --text:#4c4f69;--text-strong:#1e1e2e;--muted:#676a7d;--muted-fg:#000;--muted-strong:#7c7f93;
  --border:#dce0e8;--border-strong:#ccd0da;--border-hover:#acb0be;
  --accent:#8839ef;--accent-fg:#fff;--accent-hover:#9d50ff;--accent-subtle:rgba(136,57,239,.12);
  --accent-glow:rgba(136,57,239,.15);--ring:#8839ef;
  --ok:#40a02b;--ok-fg:#000;--ok-subtle:rgba(64,160,43,.1);
  --warn:#df8e1d;--warn-fg:#000;--warn-subtle:rgba(223,142,29,.1);
  --danger:#d20f39;--danger-fg:#fff;--danger-subtle:rgba(210,15,57,.1);
  --info:#1e66f5;--info-fg:#fff;
  --aim:#ea76cb;--aim-fg:#000;--aim-subtle:rgba(234,118,203,.12);
  --clarify:#df8e1d;--clarify-subtle:rgba(223,142,29,.06);
  --diff-add:rgba(64,160,43,.12);--diff-add-text:#2a8a1a;
  --diff-del:rgba(210,15,57,.12);--diff-del-text:#b80d30;
  --diff-hunk:rgba(30,102,245,.12);--diff-hunk-text:#1654cc;
  --diff-meta-text:#1e1e2e;
  --json-key:#1e66f5;--json-str:#40a02b;--json-num:#8839ef;--json-bool:#d20f39;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Tokyo Night ── */
[data-theme="tokyonight-dark"]{
  --bg:#1a1b26;--bg-accent:#1e1f2b;--bg-elevated:#24283b;--bg-hover:#2f3347;
  --card:#1e1f2b;--card-fg:#c0caf5;--card-hl:rgba(255,255,255,.04);
  --panel:#1a1b26;--panel-strong:#24283b;
  --chrome:rgba(26,27,38,.95);
  --text:#a9b1d6;--text-strong:#c0caf5;--muted:#7b83aa;--muted-fg:#fff;--muted-strong:#737aa2;
  --border:#2f3347;--border-strong:#3b4261;--border-hover:#565f89;
  --accent:#9fc1ff;--accent-fg:#000;--accent-hover:#90b4ff;--accent-subtle:rgba(122,162,247,.15);
  --accent-glow:rgba(122,162,247,.25);--ring:#7aa2f7;
  --ok:#9ece6a;--ok-fg:#000;--ok-subtle:rgba(158,206,106,.12);
  --warn:#e0af68;--warn-fg:#000;--warn-subtle:rgba(224,175,104,.12);
  --danger:#f7768e;--danger-fg:#000;--danger-subtle:rgba(247,118,142,.12);
  --info:#7dcfff;--info-fg:#000;
  --aim:#bb9af7;--aim-fg:#000;--aim-subtle:rgba(187,154,247,.15);
  --clarify:#e0af68;--clarify-subtle:rgba(224,175,104,.08);
  --diff-add:rgba(158,206,106,.15);--diff-add-text:#9ece6a;
  --diff-del:rgba(247,118,142,.15);--diff-del-text:#f7768e;
  --diff-hunk:rgba(125,207,255,.15);--diff-hunk-text:#7dcfff;
  --diff-meta-text:#c0caf5;
  --json-key:#7dcfff;--json-str:#9ece6a;--json-num:#bb9af7;--json-bool:#f7768e;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.02);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  color-scheme:dark;
}
[data-theme="tokyonight-light"]{
  --bg:#d5d6db;--bg-accent:#cbccd1;--bg-elevated:#ffffff;--bg-hover:#c4c5ca;
  --card:#ffffff;--card-fg:#343b58;--card-hl:rgba(0,0,0,.03);
  --panel:#d5d6db;--panel-strong:#cbccd1;
  --chrome:rgba(213,214,219,.95);
  --text:#565a6e;--text-strong:#343b58;--muted:#595c63;--muted-fg:#000;--muted-strong:#8389a0;
  --border:#c4c5ca;--border-strong:#b4b5ba;--border-hover:#9a9ba0;
  --accent:#1d60d4;--accent-fg:#fff;--accent-hover:#4090f0;--accent-subtle:rgba(46,125,233,.12);
  --accent-glow:rgba(46,125,233,.15);--ring:#2e7de9;
  --ok:#587539;--ok-fg:#fff;--ok-subtle:rgba(88,117,57,.1);
  --warn:#8f5e15;--warn-fg:#fff;--warn-subtle:rgba(143,94,21,.1);
  --danger:#f52a65;--danger-fg:#000;--danger-subtle:rgba(245,42,101,.1);
  --info:#166775;--info-fg:#fff;
  --aim:#7847bd;--aim-fg:#fff;--aim-subtle:rgba(120,71,189,.12);
  --clarify:#8f5e15;--clarify-subtle:rgba(143,94,21,.06);
  --diff-add:rgba(88,117,57,.12);--diff-add-text:#3f5a24;
  --diff-del:rgba(245,42,101,.12);--diff-del-text:#c41a50;
  --diff-hunk:rgba(22,103,117,.12);--diff-hunk-text:#0e4f5c;
  --diff-meta-text:#343b58;
  --json-key:#166775;--json-str:#587539;--json-num:#7847bd;--json-bool:#f52a65;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Gruvbox ── */
[data-theme="gruvbox-dark"]{
  --bg:#282828;--bg-accent:#2e2e2e;--bg-elevated:#3c3836;--bg-hover:#504945;
  --card:#2e2e2e;--card-fg:#ebdbb2;--card-hl:rgba(255,255,255,.05);
  --panel:#282828;--panel-strong:#3c3836;
  --chrome:rgba(40,40,40,.95);
  --text:#ebdbb2;--text-strong:#fbf1c7;--muted:#9c8e80;--muted-fg:#000;--muted-strong:#a89984;
  --border:#504945;--border-strong:#665c54;--border-hover:#7c6f64;
  --accent:#ffa44b;--accent-fg:#000;--accent-hover:#ffa040;--accent-subtle:rgba(254,128,25,.15);
  --accent-glow:rgba(254,128,25,.25);--ring:#fe8019;
  --ok:#b8bb26;--ok-fg:#000;--ok-subtle:rgba(184,187,38,.12);
  --warn:#fabd2f;--warn-fg:#000;--warn-subtle:rgba(250,189,47,.12);
  --danger:#fb4934;--danger-fg:#000;--danger-subtle:rgba(251,73,52,.12);
  --info:#83a598;--info-fg:#000;
  --aim:#d3869b;--aim-fg:#000;--aim-subtle:rgba(211,134,155,.15);
  --clarify:#fabd2f;--clarify-subtle:rgba(250,189,47,.08);
  --diff-add:rgba(184,187,38,.15);--diff-add-text:#b8bb26;
  --diff-del:rgba(251,73,52,.15);--diff-del-text:#fb4934;
  --diff-hunk:rgba(131,165,152,.15);--diff-hunk-text:#83a598;
  --diff-meta-text:#ebdbb2;
  --json-key:#83a598;--json-str:#b8bb26;--json-num:#d3869b;--json-bool:#fb4934;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.03);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  color-scheme:dark;
}
[data-theme="gruvbox-light"]{
  --bg:#fbf1c7;--bg-accent:#f2e5bc;--bg-elevated:#ffffff;--bg-hover:#ebdbb2;
  --card:#ffffff;--card-fg:#3c3836;--card-hl:rgba(0,0,0,.03);
  --panel:#fbf1c7;--panel-strong:#f2e5bc;
  --chrome:rgba(251,241,199,.95);
  --text:#504945;--text-strong:#282828;--muted:#76695d;--muted-fg:#000;--muted-strong:#7c6f64;
  --border:#d5c4a1;--border-strong:#bdae93;--border-hover:#a89984;
  --accent:#af3a03;--accent-fg:#fff;--accent-hover:#c44a10;--accent-subtle:rgba(175,58,3,.12);
  --accent-glow:rgba(175,58,3,.15);--ring:#af3a03;
  --ok:#79740e;--ok-fg:#fff;--ok-subtle:rgba(121,116,14,.1);
  --warn:#b57614;--warn-fg:#000;--warn-subtle:rgba(181,118,20,.1);
  --danger:#cc241d;--danger-fg:#fff;--danger-subtle:rgba(204,36,29,.1);
  --info:#458588;--info-fg:#000;
  --aim:#8f3f71;--aim-fg:#fff;--aim-subtle:rgba(143,63,113,.12);
  --clarify:#b57614;--clarify-subtle:rgba(181,118,20,.06);
  --diff-add:rgba(121,116,14,.12);--diff-add-text:#5a5508;
  --diff-del:rgba(204,36,29,.12);--diff-del-text:#9d2017;
  --diff-hunk:rgba(69,133,136,.12);--diff-hunk-text:#2e6d70;
  --diff-meta-text:#282828;
  --json-key:#458588;--json-str:#79740e;--json-num:#8f3f71;--json-bool:#cc241d;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── Ice ── */
[data-theme="ice-dark"]{
  --bg:#0f1729;--bg-accent:#131c30;--bg-elevated:#1a2540;--bg-hover:#243050;
  --card:#131c30;--card-fg:#e2e8f0;--card-hl:rgba(255,255,255,.04);
  --panel:#0f1729;--panel-strong:#1a2540;
  --chrome:rgba(15,23,41,.95);
  --text:#cbd5e1;--text-strong:#f1f5f9;--muted:#72839a;--muted-fg:#fff;--muted-strong:#94a3b8;
  --border:#1e3050;--border-strong:#2a4060;--border-hover:#3a5070;
  --accent:#00d4ff;--accent-fg:#000;--accent-hover:#33dfff;--accent-subtle:rgba(0,212,255,.15);
  --accent-glow:rgba(0,212,255,.25);--ring:#00d4ff;
  --ok:#22c55e;--ok-fg:#000;--ok-subtle:rgba(34,197,94,.12);
  --warn:#eab308;--warn-fg:#000;--warn-subtle:rgba(234,179,8,.12);
  --danger:#f43f5e;--danger-fg:#000;--danger-subtle:rgba(244,63,94,.12);
  --info:#60a5fa;--info-fg:#000;
  --aim:#a78bfa;--aim-fg:#000;--aim-subtle:rgba(167,139,250,.15);
  --clarify:#eab308;--clarify-subtle:rgba(234,179,8,.08);
  --diff-add:rgba(34,211,238,.15);--diff-add-text:#22d3ee;
  --diff-del:rgba(244,63,94,.15);--diff-del-text:#f43f5e;
  --diff-hunk:rgba(96,165,250,.15);--diff-hunk-text:#60a5fa;
  --diff-meta-text:#f1f5f9;
  --json-key:#60a5fa;--json-str:#22d3ee;--json-num:#a78bfa;--json-bool:#f43f5e;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.02);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  color-scheme:dark;
}
[data-theme="ice-light"]{
  --bg:#f0f9ff;--bg-accent:#e0f2fe;--bg-elevated:#ffffff;--bg-hover:#d4edfc;
  --card:#ffffff;--card-fg:#0c4a6e;--card-hl:rgba(0,0,0,.03);
  --panel:#f0f9ff;--panel-strong:#e0f2fe;
  --chrome:rgba(240,249,255,.95);
  --text:#475569;--text-strong:#0f172a;--muted:#607086;--muted-fg:#000;--muted-strong:#64748b;
  --border:#bae6fd;--border-strong:#7dd3fc;--border-hover:#38bdf8;
  --accent:#007598;--accent-fg:#fff;--accent-hover:#0ea5c9;--accent-subtle:rgba(8,145,178,.12);
  --accent-glow:rgba(8,145,178,.15);--ring:#0891b2;
  --ok:#16a34a;--ok-fg:#000;--ok-subtle:rgba(22,163,74,.1);
  --warn:#a16207;--warn-fg:#fff;--warn-subtle:rgba(161,98,7,.1);
  --danger:#e11d48;--danger-fg:#fff;--danger-subtle:rgba(225,29,72,.1);
  --info:#2563eb;--info-fg:#fff;
  --aim:#7c3aed;--aim-fg:#fff;--aim-subtle:rgba(124,58,237,.12);
  --clarify:#a16207;--clarify-subtle:rgba(161,98,7,.06);
  --diff-add:rgba(13,148,136,.12);--diff-add-text:#0a7a70;
  --diff-del:rgba(225,29,72,.12);--diff-del-text:#b91c3c;
  --diff-hunk:rgba(37,99,235,.12);--diff-hunk-text:#1d4ed8;
  --diff-meta-text:#0f172a;
  --json-key:#0891b2;--json-str:#16a34a;--json-num:#7c3aed;--json-bool:#e11d48;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── AMOLED ── */
[data-theme="amoled-dark"]{
  --bg:#000000;--bg-accent:#0a0a0a;--bg-elevated:#111111;--bg-hover:#1a1a1a;
  --card:#0a0a0a;--card-fg:#e4e4e7;--card-hl:rgba(255,255,255,.04);
  --panel:#000000;--panel-strong:#111111;
  --chrome:rgba(0,0,0,.98);
  --text:#e4e4e7;--text-strong:#ffffff;--muted:#767679;--muted-fg:#fff;--muted-strong:#48484a;
  --border:#1c1c1e;--border-strong:#2c2c2e;--border-hover:#3a3a3c;
  --accent:#0a84ff;--accent-fg:#fff;--accent-hover:#409cff;--accent-subtle:rgba(10,132,255,.18);
  --accent-glow:rgba(10,132,255,.3);--ring:#0a84ff;
  --ok:#30d158;--ok-fg:#000;--ok-subtle:rgba(48,209,88,.12);
  --warn:#ffd60a;--warn-fg:#000;--warn-subtle:rgba(255,214,10,.12);
  --danger:#ff453a;--danger-fg:#000;--danger-subtle:rgba(255,69,58,.12);
  --info:#64d2ff;--info-fg:#000;
  --aim:#bf5af2;--aim-fg:#fff;--aim-subtle:rgba(191,90,242,.15);
  --clarify:#ffd60a;--clarify-subtle:rgba(255,214,10,.08);
  --diff-add:rgba(48,209,88,.15);--diff-add-text:#30d158;
  --diff-del:rgba(255,69,58,.15);--diff-del-text:#ff453a;
  --diff-hunk:rgba(10,132,255,.15);--diff-hunk-text:#64d2ff;
  --diff-meta-text:#e4e4e7;
  --json-key:#64d2ff;--json-str:#30d158;--json-num:#bf5af2;--json-bool:#0a84ff;
  --font-body:var(--script-fallbacks),'Space Grotesk',-apple-system,BlinkMacSystemFont,sans-serif;
  --mono:var(--script-fallbacks-mono),'JetBrains Mono',ui-monospace,SFMono-Regular,monospace;
  --shadow-sm:none;
  --shadow-md:0 0 0 1px rgba(255,255,255,.06);
  --shadow-lg:0 0 0 1px rgba(255,255,255,.08);
  --radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;
  color-scheme:dark;
}
[data-theme="amoled-light"]{
  --bg:#fafafa;--bg-accent:#f2f2f7;--bg-elevated:#ffffff;--bg-hover:#e5e5ea;
  --card:#ffffff;--card-fg:#1c1c1e;--card-hl:rgba(0,0,0,.03);
  --panel:#ffffff;--panel-strong:#f2f2f7;
  --chrome:rgba(255,255,255,.98);
  --text:#1c1c1e;--text-strong:#000000;--muted:#6f6f74;--muted-fg:#000;--muted-strong:#636366;
  --border:#d1d1d6;--border-strong:#c7c7cc;--border-hover:#aeaeb2;
  --accent:#007aff;--accent-fg:#fff;--accent-hover:#0a84ff;--accent-subtle:rgba(0,122,255,.12);
  --accent-glow:rgba(0,122,255,.15);--ring:#007aff;
  --ok:#34c759;--ok-fg:#000;--ok-subtle:rgba(52,199,89,.1);
  --warn:#ff9500;--warn-fg:#000;--warn-subtle:rgba(255,149,0,.1);
  --danger:#ff3b30;--danger-fg:#fff;--danger-subtle:rgba(255,59,48,.1);
  --info:#5ac8fa;--info-fg:#000;
  --aim:#af52de;--aim-fg:#fff;--aim-subtle:rgba(175,82,222,.12);
  --clarify:#ff9500;--clarify-subtle:rgba(255,149,0,.06);
  --diff-add:rgba(52,199,89,.12);--diff-add-text:#248a3d;
  --diff-del:rgba(255,59,48,.12);--diff-del-text:#d70015;
  --diff-hunk:rgba(0,122,255,.12);--diff-hunk-text:#0040dd;
  --diff-meta-text:#1c1c1e;
  --json-key:#007aff;--json-str:#248a3d;--json-num:#af52de;--json-bool:#ff3b30;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

[data-theme="kiro-dark"]{
  --bg:#19161d;--bg-accent:#1c1922;--bg-elevated:#211d25;--bg-hover:#28242e;
  --card:#211d25;--card-fg:#f2f1f4;--card-hl:rgba(255,255,255,.04);
  --panel:#211d25;--panel-strong:#28242e;
  --chrome:rgba(25,22,29,.95);
  --text:#dcdadf;--text-strong:#f2f1f4;--muted:#938f9b;--muted-strong:#5e5966;
  --border:#352f3d;--border-strong:#4a464f;--border-hover:#5e5966;
  --accent:#8e48ff;--accent-fg:#ffffff;--accent-hover:#9f63ff;--accent-subtle:rgba(178,127,255,.16);
  --accent-glow:rgba(142,72,255,.3);--ring:#8e48ff;
  --ok:#008543;--ok-subtle:rgba(0,133,67,.15);
  --warn:#e0b94d;--warn-subtle:rgba(224,185,77,.12);
  --danger:#f94359;--danger-subtle:rgba(249,67,89,.12);
  --info:#6f9ae0;
  --aim:#c19aff;--aim-subtle:rgba(193,154,255,.15);
  --clarify:#e0b94d;--clarify-subtle:rgba(224,185,77,.08);
  --diff-add:rgba(46,160,67,.15);--diff-add-text:#7ee787;
  --diff-del:rgba(249,67,89,.15);--diff-del-text:#ffa198;
  --diff-hunk:rgba(159,99,255,.15);--diff-hunk-text:#b07fff;
  --diff-meta-text:#e6edf3;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.02);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  --json-key:#b07fff;--json-str:#7ee787;--json-num:#c19aff;--json-bool:#f94359;
  color-scheme:dark;
}
[data-theme="kiro-light"]{
  --bg:#ffffff;--bg-accent:#f5f5f5;--bg-elevated:#ffffff;--bg-hover:#f0f0f0;
  --card:#ffffff;--card-fg:#19161d;--card-hl:rgba(0,0,0,.03);
  --panel:#fafafa;--panel-strong:#f5f5f5;
  --chrome:rgba(255,255,255,.95);
  --text:#4a464f;--text-strong:#19161d;--muted:#5e5966;--muted-strong:#4a464f;
  --border:#e4e4e7;--border-strong:#d4d4d8;--border-hover:#a1a1aa;
  --accent:#8e48ff;--accent-fg:#ffffff;--accent-hover:#7a35e0;--accent-subtle:rgba(142,72,255,.12);
  --accent-glow:rgba(142,72,255,.15);--ring:#8e48ff;
  --ok:#008543;--ok-subtle:rgba(0,133,67,.12);
  --warn:#a38a00;--warn-subtle:rgba(163,138,0,.1);
  --danger:#d92544;--danger-subtle:rgba(217,37,68,.1);
  --info:#285092;
  --aim:#8041e6;--aim-subtle:rgba(128,65,230,.12);
  --clarify:#a38a00;--clarify-subtle:rgba(163,138,0,.06);
  --diff-add:rgba(22,163,74,.12);--diff-add-text:#15803d;
  --diff-del:rgba(217,37,68,.12);--diff-del-text:#be123c;
  --diff-hunk:rgba(128,65,230,.12);--diff-hunk-text:#723acc;
  --diff-meta-text:#19161d;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  --json-key:#723acc;--json-str:#16a34a;--json-num:#8041e6;--json-bool:#d92544;
  color-scheme:light;
}

[data-theme="intellij-dark"]{
  --bg:#191a1c;--bg-accent:#1e1f21;--bg-elevated:#222427;--bg-hover:#2e3034;
  --card:#25272a;--card-fg:#dfe1e5;--card-hl:rgba(255,255,255,.04);
  --panel:#191a1c;--panel-strong:#25272a;
  --chrome:rgba(25,26,28,.95);
  --text:#bcc0cc;--text-strong:#dfe1e5;--muted:#7f848b;--muted-strong:#9da0a8;
  --border:#393b40;--border-strong:#4e5157;--border-hover:#5a5d65;
  --accent:#4d8ee9;--accent-hover:#6ba1ed;--accent-subtle:rgba(77,142,233,.15);
  --accent-glow:rgba(77,142,233,.3);--ring:#4d8ee9;
  --ok:#5fad65;--ok-subtle:rgba(95,173,101,.12);
  --warn:#e6c95c;--warn-subtle:rgba(230,201,92,.12);
  --danger:#f75464;--danger-subtle:rgba(247,84,100,.12);
  --info:#4d8ee9;
  --aim:#c084fc;--aim-subtle:rgba(192,132,252,.15);
  --clarify:#e6c95c;--clarify-subtle:rgba(230,201,92,.08);
  --diff-add:rgba(95,173,101,.15);--diff-add-text:#7ee787;
  --diff-del:rgba(247,84,100,.15);--diff-del-text:#ffa198;
  --diff-hunk:rgba(77,142,233,.15);--diff-hunk-text:#6ba1ed;
  --diff-meta-text:#dfe1e5;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow-md:0 4px 12px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.02);
  --shadow-lg:0 12px 28px rgba(0,0,0,.45);
  --json-key:#6ba1ed;--json-str:#5fad65;--json-num:#c084fc;--json-bool:#f75464;
  color-scheme:dark;
}
[data-theme="intellij-light"]{
  --bg:#eff0f2;--bg-accent:#e5e7ea;--bg-elevated:#f7f8fa;--bg-hover:#dcdee2;
  --card:#f7f8fa;--card-fg:#2b2d30;--card-hl:rgba(0,0,0,.03);
  --panel:#eff0f2;--panel-strong:#e5e7ea;
  --chrome:rgba(239,240,242,.95);
  --text:#5c6370;--text-strong:#2b2d30;--muted:#666b74;--muted-strong:#6f737a;
  --border:#c8cad0;--border-strong:#b0b3ba;--border-hover:#9a9da6;
  --accent:#5a8fd4;--accent-hover:#4a7dc0;--accent-subtle:rgba(90,143,212,.12);
  --accent-glow:rgba(90,143,212,.15);--ring:#5a8fd4;
  --ok:#369b43;--ok-subtle:rgba(54,155,67,.1);
  --warn:#b5a300;--warn-subtle:rgba(181,163,0,.1);
  --danger:#db3b3b;--danger-subtle:rgba(219,59,59,.1);
  --info:#5a8fd4;
  --aim:#9333ea;--aim-subtle:rgba(147,51,234,.12);
  --clarify:#b5a300;--clarify-subtle:rgba(181,163,0,.06);
  --diff-add:rgba(54,155,67,.12);--diff-add-text:#15803d;
  --diff-del:rgba(219,59,59,.12);--diff-del-text:#be123c;
  --diff-hunk:rgba(90,143,212,.12);--diff-hunk-text:#5a8fd4;
  --diff-meta-text:#2b2d30;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  --json-key:#5a8fd4;--json-str:#369b43;--json-num:#7c3aed;--json-bool:#db3b3b;
  color-scheme:light;
}

/* ── High Contrast ── */
[data-theme="highcontrast-dark"]{
  --bg:#000000;--bg-accent:#0a0a0a;--bg-elevated:#111111;--bg-hover:#222222;
  --card:#0a0a0a;--card-fg:#ffffff;--card-hl:rgba(255,255,255,.06);
  --panel:#000000;--panel-strong:#111111;
  --chrome:rgba(0,0,0,.98);
  --text:#ffffff;--text-strong:#ffffff;--muted:#dddddd;--muted-fg:#fff;--muted-strong:#bbbbbb;
  --border:#666666;--border-strong:#999999;--border-hover:#bbbbbb;
  --accent:#00d4ff;--accent-fg:#000;--accent-hover:#33ddff;--accent-subtle:rgba(0,212,255,.2);
  --accent-glow:rgba(0,212,255,.35);--ring:#00d4ff;
  --ok:#00ff41;--ok-fg:#000;--ok-subtle:rgba(0,255,65,.15);
  --warn:#ffcc00;--warn-fg:#000;--warn-subtle:rgba(255,204,0,.15);
  --danger:#ff0000;--danger-fg:#000;--danger-subtle:rgba(255,0,0,.15);
  --info:#00d4ff;--info-fg:#000;
  --aim:#bf5af2;--aim-fg:#fff;--aim-subtle:rgba(191,90,242,.18);
  --clarify:#ffcc00;--clarify-subtle:rgba(255,204,0,.1);
  --diff-add:rgba(0,255,65,.18);--diff-add-text:#00ff41;
  --diff-del:rgba(255,0,0,.18);--diff-del-text:#ff4444;
  --diff-hunk:rgba(0,212,255,.18);--diff-hunk-text:#00d4ff;
  --diff-meta-text:#ffffff;
  --json-key:#00d4ff;--json-str:#00ff41;--json-num:#bf5af2;--json-bool:#ffcc00;
  --shadow-sm:none;
  --shadow-md:0 0 0 1px rgba(255,255,255,.12);
  --shadow-lg:0 0 0 1px rgba(255,255,255,.18);
  color-scheme:dark;
}
[data-theme="highcontrast-light"]{
  --bg:#ffffff;--bg-accent:#f5f5f5;--bg-elevated:#ffffff;--bg-hover:#e8e8e8;
  --card:#ffffff;--card-fg:#000000;--card-hl:rgba(0,0,0,.05);
  --panel:#ffffff;--panel-strong:#f0f0f0;
  --chrome:rgba(255,255,255,.98);
  --text:#111111;--text-strong:#000000;--muted:#222222;--muted-fg:#000;--muted-strong:#111111;
  --border:#555555;--border-strong:#333333;--border-hover:#111111;
  --accent:#0055cc;--accent-fg:#fff;--accent-hover:#0066ee;--accent-subtle:rgba(0,85,204,.15);
  --accent-glow:rgba(0,85,204,.2);--ring:#0055cc;
  --ok:#007a1e;--ok-fg:#fff;--ok-subtle:rgba(0,122,30,.12);
  --warn:#8a6500;--warn-fg:#fff;--warn-subtle:rgba(138,101,0,.12);
  --danger:#cc0000;--danger-fg:#fff;--danger-subtle:rgba(204,0,0,.12);
  --info:#0055cc;--info-fg:#fff;
  --aim:#7b2fbe;--aim-fg:#fff;--aim-subtle:rgba(123,47,190,.12);
  --clarify:#8a6500;--clarify-subtle:rgba(138,101,0,.08);
  --diff-add:rgba(0,122,30,.15);--diff-add-text:#005a14;
  --diff-del:rgba(204,0,0,.15);--diff-del-text:#990000;
  --diff-hunk:rgba(0,85,204,.15);--diff-hunk-text:#003d99;
  --diff-meta-text:#000000;
  --json-key:#0055cc;--json-str:#007a1e;--json-num:#7b2fbe;--json-bool:#cc0000;
  --shadow-sm:0 1px 2px rgba(0,0,0,.1);
  --shadow-md:0 4px 12px rgba(0,0,0,.12),0 0 0 1px rgba(0,0,0,.08);
  --shadow-lg:0 12px 28px rgba(0,0,0,.18);
  color-scheme:light;
}
/* ── Everforest ── */
/* Color palette from https://github.com/sainnhe/everforest
   MIT License Copyright (c) 2019 sainnhe */
[data-theme="everforest-dark"]{
  --bg:#1E2326;--bg-accent:#272E33;--bg-elevated:#2E383C;--bg-hover:#374145;
  --card:#272E33;--card-fg:#D3C6AA;--card-hl:rgba(211,198,170,.06);
  --panel:#1E2326;--panel-strong:#272E33;
  --chrome:rgba(30,35,38,.96);
  --text:#D3C6AA;--text-strong:#E5DCC8;--muted:#838d81;--muted-fg:#000;--muted-strong:#859289;
  --border:#374145;--border-strong:#414B50;--border-hover:#495156;
  --accent:#A7C080;--accent-fg:#000;--accent-hover:#83C092;--accent-subtle:rgba(167,192,128,.18);
  --accent-glow:rgba(167,192,128,.28);--ring:#A7C080;
  --ok:#A7C080;--ok-fg:#000;--ok-subtle:rgba(167,192,128,.12);
  --warn:#DBBC7F;--warn-fg:#000;--warn-subtle:rgba(219,188,127,.14);
  --danger:#E67E80;--danger-fg:#000;--danger-subtle:rgba(230,126,128,.14);
  --info:#7FBBB3;--info-fg:#000;
  --aim:#D699B6;--aim-fg:#000;--aim-subtle:rgba(214,153,182,.15);
  --clarify:#E69875;--clarify-subtle:rgba(230,152,117,.10);
  --diff-add:rgba(167,192,128,.18);--diff-add-text:#A7C080;
  --diff-del:rgba(230,126,128,.18);--diff-del-text:#E67E80;
  --diff-hunk:rgba(127,187,179,.18);--diff-hunk-text:#7FBBB3;
  --diff-meta-text:#D3C6AA;
  --json-key:#7FBBB3;--json-str:#A7C080;--json-num:#D699B6;--json-bool:#E69875;
  --shadow-sm:0 1px 2px rgba(0,0,0,.25);
  --shadow-md:0 4px 12px rgba(0,0,0,.30),0 0 0 1px rgba(211,198,170,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.40);
  color-scheme:dark;
}
[data-theme="everforest-light"]{
  --bg:#FFFBEF;--bg-accent:#F2EFDF;--bg-elevated:#FFFBEF;--bg-hover:#EDEADA;
  --card:#FFFBEF;--card-fg:#5C6A72;--card-hl:rgba(92,106,114,.04);
  --panel:#F2EFDF;--panel-strong:#F2EFDF;
  --chrome:rgba(255,251,239,.95);
  --text:#5C6A72;--text-strong:#4A5860;--muted:#687561;--muted-fg:#000;--muted-strong:#939F91;
  --border:#EDEADA;--border-strong:#E8E5D5;--border-hover:#A6B0A0;
  --accent:#8DA101;--accent-fg:#000;--accent-hover:#7A8C01;--accent-subtle:rgba(141,161,1,.12);
  --accent-glow:rgba(141,161,1,.15);--ring:#8DA101;
  --ok:#8DA101;--ok-fg:#000;--ok-subtle:rgba(141,161,1,.1);
  --warn:#DFA000;--warn-fg:#000;--warn-subtle:rgba(223,160,0,.1);
  --danger:#F85552;--danger-fg:#000;--danger-subtle:rgba(248,85,82,.1);
  --info:#3A94C5;--info-fg:#000;
  --aim:#DF69BA;--aim-fg:#000;--aim-subtle:rgba(223,105,186,.12);
  --clarify:#F57D26;--clarify-subtle:rgba(245,125,38,.06);
  --diff-add:rgba(141,161,1,.12);--diff-add-text:#6a7a00;
  --diff-del:rgba(248,85,82,.12);--diff-del-text:#F85552;
  --diff-hunk:rgba(58,148,197,.12);--diff-hunk-text:#2a7aa5;
  --diff-meta-text:#5C6A72;
  --json-key:#3A94C5;--json-str:#8DA101;--json-num:#DF69BA;--json-bool:#F85552;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── AMOLED Midnight — pure-black dark + a true light variant ── */
[data-theme="amoled-midnight-dark"]{
  --bg:#000000;--bg-accent:#09090b;--bg-elevated:#121214;--bg-hover:#1a1a1d;
  --card:#070708;--card-fg:#f4f4f5;--card-hl:rgba(255,255,255,.03);
  --panel:#000000;--panel-strong:#09090b;
  --chrome:rgba(0,0,0,.9);
  --text:#d4d4d8;--text-strong:#ffffff;--muted:#6b6b72;--muted-fg:#fff;--muted-strong:#a1a1aa;
  --border:#1a1a1d;--border-strong:#27272a;--border-hover:#3f3f46;
  --accent:#7c73e6;--accent-fg:#fff;--accent-hover:#948df0;--accent-subtle:rgba(124,115,230,.12);
  --accent-glow:rgba(124,115,230,.25);--ring:#5e54d9;
  --ok:#10b981;--ok-fg:#000;--ok-subtle:rgba(16,185,129,.1);
  --warn:#f59e0b;--warn-fg:#000;--warn-subtle:rgba(245,158,11,.1);
  --danger:#ef4444;--danger-fg:#fff;--danger-subtle:rgba(239,68,68,.1);
  --info:#6366f1;--info-fg:#fff;
  --aim:#a855f7;--aim-fg:#fff;--aim-subtle:rgba(168,85,247,.12);
  --clarify:#f59e0b;--clarify-subtle:rgba(245,158,11,.08);
  --diff-add:rgba(16,185,129,.12);--diff-add-text:#6ee7b7;
  --diff-del:rgba(239,68,68,.12);--diff-del-text:#fca5a5;
  --diff-hunk:rgba(124,115,230,.12);--diff-hunk-text:#948df0;
  --diff-meta-text:#a1a1aa;
  --json-key:#948df0;--json-str:#6ee7b7;--json-num:#fbbf24;--json-bool:#fca5a5;
  --shadow-sm:0 1px 2px rgba(0,0,0,1);
  --shadow-md:0 4px 12px rgba(0,0,0,.8),0 0 0 1px #1a1a1d;
  --shadow-lg:0 12px 28px rgba(0,0,0,.9);
  color-scheme:dark;
}
[data-theme="amoled-midnight-light"]{
  --bg:#ffffff;--bg-accent:#fafafa;--bg-elevated:#ffffff;--bg-hover:#f4f4f5;
  --card:#ffffff;--card-fg:#18181b;--card-hl:rgba(0,0,0,.03);
  --panel:#ffffff;--panel-strong:#fafafa;
  --chrome:rgba(255,255,255,.92);
  --text:#18181b;--text-strong:#000000;--muted:#71717a;--muted-fg:#000;--muted-strong:#52525b;
  --border:#e4e4e7;--border-strong:#d4d4d8;--border-hover:#a1a1aa;
  --accent:#5e54d9;--accent-fg:#fff;--accent-hover:#4f46c4;--accent-subtle:rgba(94,84,217,.10);
  --accent-glow:rgba(94,84,217,.18);--ring:#5e54d9;
  --ok:#059669;--ok-fg:#fff;--ok-subtle:rgba(5,150,105,.1);
  --warn:#d97706;--warn-fg:#fff;--warn-subtle:rgba(217,119,6,.1);
  --danger:#dc2626;--danger-fg:#fff;--danger-subtle:rgba(220,38,38,.1);
  --info:#4f46e5;--info-fg:#fff;
  --aim:#7c3aed;--aim-fg:#fff;--aim-subtle:rgba(124,58,237,.10);
  --clarify:#d97706;--clarify-subtle:rgba(217,119,6,.08);
  --diff-add:rgba(5,150,105,.12);--diff-add-text:#047857;
  --diff-del:rgba(220,38,38,.12);--diff-del-text:#b91c1c;
  --diff-hunk:rgba(94,84,217,.10);--diff-hunk-text:#4f46c4;
  --diff-meta-text:#52525b;
  --json-key:#5e54d9;--json-str:#047857;--json-num:#b45309;--json-bool:#b91c1c;
  --shadow-sm:0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 12px rgba(0,0,0,.08),0 0 0 1px rgba(0,0,0,.04);
  --shadow-lg:0 12px 28px rgba(0,0,0,.12);
  color-scheme:light;
}

/* ── AMOLED Grey Calm ── */
[data-theme="amoled-grey-calm-dark"]{
  --bg:#000000;--bg-accent:#0a0a0a;--bg-elevated:#111111;--bg-hover:#1a1a1a;
  --card:#0d0d0d;--card-fg:#e5e7eb;--card-hl:rgba(255,255,255,.03);
  --panel:#000000;--panel-strong:#111111;
  --chrome:rgba(0,0,0,.95);
  --text:#d1d5db;--text-strong:#f9fafb;--muted:#6b7280;--muted-fg:#fff;--muted-strong:#9ca3af;
  --border:#1f1f1f;--border-strong:#2a2a2a;--border-hover:#3a3a3a;
  --accent:#9ca3af;--accent-fg:#000;--accent-hover:#cbd5e1;--accent-subtle:rgba(156,163,175,.15);
  --accent-glow:rgba(156,163,175,.2);--ring:#9ca3af;
  --ok:#22c55e;--ok-fg:#000;--ok-subtle:rgba(34,197,94,.12);
  --warn:#eab308;--warn-fg:#000;--warn-subtle:rgba(234,179,8,.12);
  --danger:#f43f5e;--danger-fg:#fff;--danger-subtle:rgba(244,63,94,.12);
  --info:#60a5fa;--info-fg:#000;
  --aim:#a78bfa;--aim-fg:#fff;--aim-subtle:rgba(167,139,250,.12);
  --clarify:#eab308;--clarify-subtle:rgba(234,179,8,.08);
  --diff-add:rgba(34,211,238,.12);--diff-add-text:#22d3ee;
  --diff-del:rgba(244,63,94,.12);--diff-del-text:#f43f5e;
  --diff-hunk:rgba(96,165,250,.12);--diff-hunk-text:#60a5fa;
  --diff-meta-text:#f3f4f6;
  --json-key:#60a5fa;--json-str:#22c55e;--json-num:#a78bfa;--json-bool:#f43f5e;
  --shadow-sm:0 1px 2px rgba(0,0,0,.6);
  --shadow-md:0 4px 12px rgba(0,0,0,.7);
  --shadow-lg:0 12px 28px rgba(0,0,0,.85);
  color-scheme:dark;
}
[data-theme="amoled-grey-calm-light"]{
  --bg:#f9fafb;--bg-accent:#f3f4f6;--bg-elevated:#ffffff;--bg-hover:#e5e7eb;
  --card:#ffffff;--card-fg:#111827;--card-hl:rgba(0,0,0,.03);
  --panel:#f9fafb;--panel-strong:#ffffff;
  --chrome:rgba(255,255,255,.9);
  --text:#1f2933;--text-strong:#000000;--muted:#6b7280;--muted-fg:#000;--muted-strong:#374151;
  --border:#e5e7eb;--border-strong:#d1d5db;--border-hover:#cbd5e1;
  --accent:#4b5563;--accent-fg:#fff;--accent-hover:#1f2937;--accent-subtle:rgba(75,85,99,.12);
  --accent-glow:rgba(75,85,99,.18);--ring:#6b7280;
  --ok:#16a34a;--ok-fg:#fff;--ok-subtle:rgba(22,163,74,.1);
  --warn:#ca8a04;--warn-fg:#fff;--warn-subtle:rgba(202,138,4,.1);
  --danger:#dc2626;--danger-fg:#fff;--danger-subtle:rgba(220,38,38,.1);
  --info:#2563eb;--info-fg:#fff;
  --aim:#7c3aed;--aim-fg:#fff;--aim-subtle:rgba(124,58,237,.1);
  --clarify:#ca8a04;--clarify-subtle:rgba(202,138,4,.08);
  --diff-add:rgba(34,211,238,.1);--diff-add-text:#0891b2;
  --diff-del:rgba(244,63,94,.1);--diff-del-text:#be123c;
  --diff-hunk:rgba(96,165,250,.1);--diff-hunk-text:#2563eb;
  --diff-meta-text:#111827;
  --json-key:#2563eb;--json-str:#16a34a;--json-num:#7c3aed;--json-bool:#dc2626;
  --shadow-sm:0 1px 2px rgba(0,0,0,.08);
  --shadow-md:0 4px 10px rgba(0,0,0,.12);
  --shadow-lg:0 10px 20px rgba(0,0,0,.15);
  color-scheme:light;
}

/* ── Base ── */

/* ── Ambient background ── */
body::before{content:'';position:fixed;top:-50%;left:-50%;width:200%;height:200%;
  background:radial-gradient(ellipse at 20% 50%,color-mix(in srgb,var(--accent) 4%,transparent) 0%,transparent 50%),
             radial-gradient(ellipse at 80% 20%,color-mix(in srgb,var(--accent) 2.5%,transparent) 0%,transparent 50%),
             radial-gradient(ellipse at 50% 80%,color-mix(in srgb,var(--accent) 2%,transparent) 0%,transparent 50%);
  animation:gradient-shift 20s ease infinite;background-size:200% 200%;
  pointer-events:none;z-index:0}
[data-mode="light"] body::before{
  background:radial-gradient(ellipse at 20% 50%,color-mix(in srgb,var(--accent) 5%,transparent) 0%,transparent 50%),
             radial-gradient(ellipse at 80% 20%,color-mix(in srgb,var(--accent) 3%,transparent) 0%,transparent 50%),
             radial-gradient(ellipse at 50% 80%,color-mix(in srgb,var(--accent) 3%,transparent) 0%,transparent 50%)}

/* ── Nav brand glow pseudo-elements ── */
.nav-brand-glow::before{content:'';position:absolute;inset:-48px 0 0 0;
  background:radial-gradient(ellipse at 50% 50%,var(--accent-glow) 0%,var(--accent-subtle) 40%,transparent 70%);
  opacity:.8;pointer-events:none;animation:brand-glow 5s ease-in-out infinite alternate}
.nav-brand-glow::after{content:'';position:absolute;bottom:0;left:16px;right:16px;height:1px;
  background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.3}

/* ── App icons (two-color, theme-reactive) ──
   Idle: muted structure + accent detail. Lit (selected OR hovered inside a
   .group container): accent structure + text detail. Icons are inlined SVGs
   that paint via --ico-a / --ico-b (see AppIcon.tsx). */
.app-icon{--ico-a:var(--muted);--ico-b:var(--accent)}
.app-icon svg *{transition:fill .2s ease,stroke .2s ease,fill-opacity .2s ease}
.app-icon[data-selected],
.group:hover .app-icon,
a:hover .app-icon,
button:hover .app-icon{--ico-a:var(--accent);--ico-b:var(--text)}
/* Left-nav icons: lit when the row is active, and on row hover. The nav row
   uses Tailwind's named group `group/nav` (not `.group`) and is a div, so it
   needs its own selectors. */
.app-icon-nav.is-lit .app-icon{--ico-a:var(--accent);--ico-b:var(--text)}
.group\/nav:hover .app-icon{--ico-a:var(--accent);--ico-b:var(--text)}

/* ── Streaming highlight (shimmer sweep on trailing words) ── */
.streaming-glow{background:linear-gradient(90deg,transparent 0%,var(--accent-glow) 40%,var(--accent-glow) 100%);border-radius:2px;padding:0 8px 0 2px;margin:0 -2px;position:relative;overflow:hidden}
.streaming-glow::before{content:'';position:absolute;inset:0;border-radius:inherit;background:linear-gradient(90deg,transparent 25%,color-mix(in srgb,var(--accent) 50%,transparent) 50%,transparent 75%);background-size:250% 100%;animation:stream-sweep 2.5s ease-in-out infinite;-webkit-mask:linear-gradient(90deg,transparent 0%,black 40%,black 100%);mask:linear-gradient(90deg,transparent 0%,black 40%,black 100%)}
@keyframes stream-sweep{0%{background-position:150% 0}100%{background-position:-50% 0}}

/* ── Streaming caret ──
   Blinking cursor appended after a streaming assistant message. Rendered
   whenever the message is streaming, independent of the smooth-stream buffer
   state, so the response never looks frozen during a token pause (network
   jitter, model thinking between tokens) — the caret keeps blinking even when
   no new text is arriving and the per-word fade has gone idle. Vertical bar in
   the accent colour, sized to the surrounding text. */
.streaming-caret{display:inline-block;width:2px;height:1.05em;margin-left:1px;vertical-align:text-bottom;border-radius:1px;background:var(--accent);animation:caret-blink 1.1s step-end infinite}
@keyframes caret-blink{0%,50%{opacity:1}50.01%,100%{opacity:0}}
@media (prefers-reduced-motion:reduce){
  .streaming-caret{animation:none;opacity:.9}
}

/* ── Tool-pill entrance fade ──
   ToolCallLine's container uses `.ft-block-reveal` for a smooth opacity
   fade-in on mount. Reuses the existing `ft-fade` keyframe (no new keyframe);
*/
.ft-block-reveal{animation:ft-fade .6s ease-in-out both}
@media (prefers-reduced-motion:reduce){
  .ft-block-reveal{animation:none}
}

/* ── Per-char streaming reveal ──
   `.ft-word` spans are injected by rehypeStreamingReveal around each character
   of the streaming EDGE, each carrying `--ft-o` = an opacity derived from that
   char's distance to the tip (revealOpacity). The reveal is therefore driven
   by a POSITIONAL opacity, not a mount-triggered keyframe: react-markdown
   remounts edge spans whenever a markdown token completes, and a mount
   animation re-fired on every such remount → the visible "flashing" bug. A
   remounted span now re-appears at the identical `--ft-o`, so it cannot
   re-fade; only the tip advancing changes a char's opacity. The short
   transition smooths that per-frame climb for spans that persist across frames
   (a fresh mount paints its value directly, with no transition → no flash).
   `.ft-anim-smooth` (MarkdownRenderer's root) scopes this to smooth mode; it
   reverts to plain text when streaming ends. */
@keyframes ft-fade{from{opacity:0}to{opacity:1}}
.ft-word{white-space:pre-wrap;opacity:1}
.ft-anim-smooth .ft-word{opacity:var(--ft-o,1);transition:opacity .25s linear}
/* Reveal-edge settle. `--ft-o` above is positional, so a stream that pauses
   mid-turn or has finished leaves its last REVEAL_FADE_CHARS characters pinned
   below full opacity with nothing to advance the tip. MarkdownRenderer adds
   `.ft-idle` after REVEAL_IDLE_SETTLE_MS of unchanged content; this overrides
   the edge to 1 and the transition on the rule above animates that settle. The
   reduced-motion block below still wins on `transition` (not redeclared here),
   so that path snaps instead of animating. */
.ft-anim-smooth.ft-idle .ft-word{opacity:1}
/* NOTE: `.ft-anim-smooth.ft-idle .ft-word` above is (0,3,0) and out-specifies
   this block's (0,2,0) on `opacity`. Harmless today -- both declare 1, and the
   settle rule does not redeclare `transition`, so `transition:none` still wins
   here. If you ever change the opacity below, change the settle rule too. */
@media (prefers-reduced-motion:reduce){
  .ft-anim-smooth .ft-word{opacity:1;transition:none}
}

/* ── Streaming block: height grow (code/diff) + per-line rise (diff) ──
   SmoothResize wraps streaming code/diff blocks and eases their height as new
   lines arrive instead of snapping. The block's own 8px margin is relocated
   onto the `.ft-resize` wrapper (and zeroed on the child) so overflow:hidden
   during the height animation doesn't swallow inter-block spacing. DiffBlock
   rows additionally rise+fade in while the diff is still streaming
   (`.ft-stream-block` scope) — gated so completed / history-reloaded diffs
   render statically and never re-animate on a virtualizer re-mount. */
.msg-content .ft-resize{margin:8px 0}
.msg-content .ft-resize .code-block,.msg-content .ft-resize .diff-block{margin:0}
@keyframes ft-line-rise{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
.ft-stream-block .ft-drow{animation:ft-line-rise .5s cubic-bezier(.4,0,.2,1) both}
@media (prefers-reduced-motion:reduce){
  .ft-resize{transition:none!important}
  .ft-stream-block .ft-drow{animation:none}
}

/* ── Shimmer bar ── */
.think-bar{width:48px;height:3px;border-radius:2px;
  background:linear-gradient(90deg,var(--border),var(--accent),var(--border));
  background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite}
.activity-viewer{background:var(--bg)}
.subagent-pane{border:1px solid var(--border);border-radius:6px;margin:4px;position:relative}
.subagent-pane.focused{border-color:var(--accent)}
.subagent-pane-body{max-height:200px;overflow-y:auto}
.status-running{animation:pulse 1.5s infinite}
.status-tool{opacity:0.9}
.status-done{opacity:0.7}
.status-error{opacity:0.9}

/* ── Sidebar running indicator (skeleton line) ── */
.pulse-bar-sm{display:block;padding:2px 0}
.pulse-bar-sm::before{content:'';display:block;height:8px;border-radius:3px;background:var(--accent-subtle);width:70%;animation:skel-pulse 1.5s ease-in-out infinite}
@keyframes skel-pulse{0%,100%{opacity:.4}50%{opacity:.8}}
/* Update card: indeterminate download segment sweeps across the track.
   translateX is relative to the segment's own width (w-1/4 of the track), so
   -100%..400% covers off-left to off-right for a 25% segment. */
@keyframes progress-indeterminate{0%{transform:translateX(-100%)}100%{transform:translateX(400%)}}
.progress-indeterminate{animation:progress-indeterminate 1.2s ease-in-out infinite}

/* ── Chat footer icon carousel (cascade-swap-bounce) ──
   Two layers per slot cross-fade and trade places; slots cascade .25s apart.
   The animation sits on the persistent `.lyr` wrapper rather than the icon itself,
   because the carousel re-samples which icon a layer shows every beat — animating
   the icon would restart its animation on each swap (see chat/ChatFooter). */
.csb4{display:flex;gap:5px;padding:2px 0}
.csb4 .slot{position:relative;width:14px;height:14px}
.csb4 .slot .lyr{position:absolute;inset:0;display:block;color:var(--accent)}
.csb4 .slot .lyr>svg,.csb4 .slot .lyr>img{display:block;width:100%;height:100%;overflow:visible}
.csb4 .slot .lyr:nth-child(1){animation:csb-a 2.8s ease-in-out infinite both}
.csb4 .slot .lyr:nth-child(2){animation:csb-b 2.8s ease-in-out infinite both}
.csb4 .slot:nth-child(2) .lyr{animation-delay:.25s}
.csb4 .slot:nth-child(3) .lyr{animation-delay:.5s}
.csb4 .slot:nth-child(4) .lyr{animation-delay:.75s}
@keyframes csb-a{0%,30%{opacity:1;transform:translateY(0) scale(1)}38%{opacity:0;transform:translateY(-3px) scale(.6)}45%,82%{opacity:0;transform:translateY(3px) scale(.6)}90%,100%{opacity:1;transform:translateY(0) scale(1)}}
@keyframes csb-b{0%,30%{opacity:0;transform:translateY(3px) scale(.6)}38%{opacity:0;transform:translateY(3px) scale(.6)}45%{opacity:1;transform:translateY(-2px) scale(1)}55%{opacity:1;transform:translateY(0) scale(1)}82%{opacity:1;transform:translateY(0) scale(1)}90%{opacity:0;transform:translateY(-3px) scale(.6)}100%{opacity:0;transform:translateY(3px) scale(.6)}}

/* ── Kiro themes: the ghost-pose loader icons ──
   The icons come from the themeBranding `loaderIcons` seam (see ChatFooter); they
   are brand ASSETS rendered as <img> (the use-lucide-icons brand-mark exception
   requires that), so they are themed from here rather than by editing the art.
   This is the pattern a new theme follows: register the artwork, then style it. */
.csb4 .lyr>.kp{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}
/* The outline is a REAL vector stroke baked into each pose asset (black, scaled
   per-viewBox so all 8 render at the same 1px), not a CSS effect. Chained
   drop-shadows were tried first and rejected: each pass shadows the *result* of
   the previous one, so the weight compounds and reads as a soft, heavy band
   rather than a line. A stroke with paint-order:stroke sits outside the
   silhouette and stays crisp at any size.
   The stroke is in the shared asset, so it applies on both palettes — on the
   dark surface a black edge against a near-black background is imperceptible,
   which is why no dark-theme override is needed. */
@keyframes grow{0%{width:15%}50%{width:45%}100%{width:60%}}
@property --glow-strength{syntax:'<number>';inherits:false;initial-value:0}
@keyframes approval-glow{0%,100%{--glow-strength:0}50%{--glow-strength:1}}
.approval-glow{--glow-strength:0;animation:approval-glow 2.5s ease-in-out infinite;box-shadow:0 0 0 1.5px color-mix(in srgb, var(--warn) calc(var(--glow-strength) * 55%), transparent),0 0 14px 1px color-mix(in srgb, var(--warn) calc(var(--glow-strength) * 40%), transparent)}
@keyframes shimmer{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
.animate-shimmer{animation:shimmer 2s ease-in-out infinite}
@keyframes slide-in-right{0%{transform:translateX(100%);opacity:0}100%{transform:translateX(0);opacity:1}}
.animate-slide-in-right{animation:slide-in-right .2s ease-out}
@keyframes hourglass-flip{
  0%,40%{transform:rotate(0deg)}
  50%,90%{transform:rotate(180deg)}
  100%{transform:rotate(360deg)}
}

/* ── Code in messages ── */
.msg-content code{font-family:var(--mono);font-size:.9em}
.msg-content :not(pre)>code{background:rgba(0,0,0,.15);padding:.15em .4em;border-radius:4px;overflow-wrap:break-word;word-break:break-all}
[data-mode="light"] .msg-content :not(pre)>code{background:rgba(0,0,0,.06)}
/* Kiro theme: inline code = neutral elevated surface (Prey/750) + light-purple text (Figma 3906:185658) */
[data-theme="kiro-dark"] .msg-content :not(pre)>code{background:#28242e;color:#c19aff}
[data-theme="kiro-light"] .msg-content :not(pre)>code{background:var(--bg-hover);color:#723acc}
/* Kiro dark: brighten message links — #8e48ff (=accent, same as the button fill) reads dull as thin
   text on the dark bg, so step up to Purple/300 for equal perceived vibrancy. Scoped to Kiro. */
[data-theme="kiro-dark"] .msg-content a{color:#b07fff;text-decoration-color:rgba(176,127,255,.45)}
/* Kiro dark: accent FOREGROUND (icons, spinners, accent text) reads dull/blue as thin strokes at
   #8e48ff, so brighten the text-accent utility to Purple/300. Fills (bg-accent, e.g. buttons) are a
   separate utility and stay #8e48ff. More-specific rules (e.g. .nav-active .text-accent) still win. */
[data-theme="kiro-dark"] .text-accent{color:#b07fff}
/* Kiro theme: selected nav item + session row = neutral surface (Prey/700) with purple text/icon,
   not a purple-tinted fill (Figma SessionTitle 2010:46988). Hover stays --bg-hover (Prey/750). */
[data-theme="kiro-dark"] .nav-active,[data-theme="kiro-dark"] .session-row.session-active,[data-theme="kiro-dark"] .list-selected{background:#352f3d;color:#c19aff;border-color:#4a464f}
[data-theme="kiro-dark"] .nav-active .text-accent{color:#c19aff}
[data-theme="kiro-light"] .nav-active,[data-theme="kiro-light"] .session-row.session-active,[data-theme="kiro-light"] .list-selected{background:#d8d2e0;color:#723acc;border-color:#c4bcd0}
[data-theme="kiro-light"] .nav-active .text-accent{color:#723acc}
/* Kiro theme: lift unselected nav labels + section headers to Prey/300 (#c1bec6, ~9.8:1) per the
   Figma settings-panel guideline (was Prey/400 #938f9b ~5.7:1). Inactive icons inherit this color
   (they only carry opacity-70), lifting them from ~3.4:1 to ~5.6:1. Active items keep .nav-active. */
[data-theme="kiro-dark"] .nav-item:not(.nav-active),[data-theme="kiro-dark"] .nav-section{color:#c1bec6}
/* Kiro theme: lift the chat-header session title and the "Sessions" panel title from muted grey to
   primary text (var(--text) = Prey/200 #dcdadf in dark) — titles were dim at ~5.7:1; now ~9-10:1. */
[data-theme="kiro-dark"] .session-header-title,[data-theme="kiro-light"] .session-header-title,
[data-theme="kiro-dark"] .sessions-panel-title,[data-theme="kiro-light"] .sessions-panel-title{color:var(--text)}
/* Kiro dark: panel resize-handle highlight is a thin line, so match it to the brightened thin-accent
   (#B07FFF) rather than the #8E48FF fill it inherits from bg-accent. Only applies while dragging-hover. */
[data-theme="kiro-dark"] .group\/drag:hover .resize-accent{background-color:#b07fff}
/* Kiro dark: queued-message bar matches the Figma "Waiting for input" snackbar (1793:25695) —
   semi-transparent olive bg + Yellow/800 border + Yellow/100 text. */
[data-theme="kiro-dark"] .queue-card{background-color:#2a2810;border-color:#5c5500;color:#fff7cc}
/* Kiro theme: the session agent-label is intentionally NOT tinted — it is metadata, not a link, and
   the purple tint made every row's agent name compete with the session title for attention. It keeps
   the row's neutral grey (`text-muted`), leaving purple to carry meaning: the running-state accent on
   the last-message subtitle, and `--aim` on package-sourced agents. */
.msg-content pre{background:rgba(0,0,0,.15);border-radius:var(--radius-sm);padding:10px 12px;overflow-x:auto;margin:4px 0;font-size:0.8125rem;font-family:var(--mono);line-height:1.5}
[data-mode="light"] .msg-content pre{background:rgba(0,0,0,.04)}
/* Reset pre inside new code/diff block components */
.msg-content .code-block>pre{background:transparent;border-radius:0;margin:0}
.msg-content .diff-block>pre{padding:0}
.msg-content .diff-block,.msg-content .code-block{margin:8px 0}

/* Auto-sizing message-edit bubble. A hidden::after mirror, fed by
   the data-replicated-value attribute, drives the single grid track so the
   overlapping <textarea> grows with its own content in BOTH dimensions —
   matching the read-only bubble's width for any message length, capped by the
   bubble's max-width. No JS measurement, no hardcoded width. The textarea and
   the mirror must share identical font + wrapping so their line breaks agree. */
.edit-grow{display:grid}
.edit-grow::after{content:attr(data-replicated-value) " ";visibility:hidden}
.edit-grow>textarea,.edit-grow::after{grid-area:1/1;font:inherit;line-height:inherit;letter-spacing:inherit;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}
.edit-grow>textarea{width:100%;min-width:0}

/* ── Auto-hiding scrollbar for code/diff blocks ── */
.scroll-fade::-webkit-scrollbar{height:6px}
.scroll-fade::-webkit-scrollbar-thumb{background:transparent;border-radius:3px;-webkit-transition:background .2s;transition:background .2s}
.scroll-fade:hover::-webkit-scrollbar-thumb{background:var(--border)}
.scroll-fade{scrollbar-width:thin;scrollbar-color:transparent transparent}
.scroll-fade:hover{scrollbar-color:var(--border) transparent}

/* ── Zigzag rule (diff "unchanged lines" separator) ──
 * A tiling chevron painted as a CSS mask over currentColor (the BrandGlyph
 * pattern from components/BrandIcon.tsx), so it follows the theme's hunk tint
 * and no SVG element lives in TSX (AUTOSDE use-lucide-icons). The data URI is
 * quoted — commas break an unquoted url() token and the mask silently fails. */
.zigzag-rule{
  flex:1 1 0%;min-width:0;height:7px;background-color:currentColor;
  -webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='7'%3E%3Cpath d='M0 5.5 L4 1.5 L8 5.5' fill='none' stroke='black' stroke-width='1.2'/%3E%3C/svg%3E");
  mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='7'%3E%3Cpath d='M0 5.5 L4 1.5 L8 5.5' fill='none' stroke='black' stroke-width='1.2'/%3E%3C/svg%3E");
  -webkit-mask-repeat:repeat-x;mask-repeat:repeat-x;
  -webkit-mask-position:left center;mask-position:left center;
  -webkit-mask-size:8px 7px;mask-size:8px 7px;
}

/* ── Overlay auto-hiding vertical scrollbar ──
 * Reveals the thumb only on hover and overlays the content so it never
 * consumes horizontal layout width (no reflow when scrollable vs not).
 * On WebKit the scrollbar is laid over the padding box (overlay); on
 * Firefox ``scrollbar-width:thin`` + transparent track approximates it. */
.scrollbar-overlay{scrollbar-width:thin;scrollbar-color:transparent transparent}
.scrollbar-overlay:hover{scrollbar-color:var(--border) transparent}
.scrollbar-overlay::-webkit-scrollbar{width:6px}
.scrollbar-overlay::-webkit-scrollbar-track{background:transparent}
.scrollbar-overlay::-webkit-scrollbar-thumb{background:transparent;border-radius:9999px;-webkit-transition:background .2s;transition:background .2s}
.scrollbar-overlay:hover::-webkit-scrollbar-thumb{background:var(--border)}
.scrollbar-overlay:hover::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}

/* ── Auto-hiding list scrollbar ──
 * The table header is sticky, so the vertical track starts below it instead
 * of running through the pinned detail/action heading. Scrolling reveals the
 * thumb; ListTable removes data-scrolling after a short idle delay so it
 * fades away without changing the table's available width. */
.list-scrollbar{scrollbar-width:thin;scrollbar-color:transparent transparent}
.list-scrollbar[data-scrolling="true"]{scrollbar-color:var(--border) transparent}
.list-scrollbar::-webkit-scrollbar-track:vertical{
  background:transparent;
  margin-top:var(--list-scrollbar-start,0px)
}
.list-scrollbar::-webkit-scrollbar-thumb:vertical{
  background:transparent;
  border-radius:9999px;
  -webkit-transition:background-color .25s ease;
  transition:background-color .25s ease
}
.list-scrollbar[data-scrolling="true"]::-webkit-scrollbar-thumb:vertical{background:var(--border)}
.list-scrollbar[data-scrolling="true"]::-webkit-scrollbar-thumb:vertical:hover{background:var(--border-strong)}

/* ── Send button sweep ── */
.btn-sweep{position:relative;overflow:hidden}
.btn-sweep::after{content:'';position:absolute;inset:0;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.15),transparent);
  transform:translateX(-100%);transition:none}
.btn-sweep:hover::after{transform:translateX(100%);transition:transform .5s ease}

/* ── Card hover glow ── */
.card-glow{position:relative;overflow:hidden}
.card-glow>*{position:relative;z-index:1}

/* ── Stat top-line accent ── */
.stat-accent::after{content:'';position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,transparent,var(--accent),transparent);
  opacity:0;transition:opacity .3s ease}
.stat-accent:hover::after{opacity:1}

/* ── Top-bar pill buttons ── */
.top-bar-pill{
  display:inline-flex;align-items:center;gap:0.375rem;
  padding:5px 10px;border-radius:var(--radius-sm,0.5rem);
  font-size:13px;font-weight:500;
  border:1px solid var(--border);
  cursor:pointer;transition:all .15s ease;
  color:var(--muted)}
.top-bar-pill:hover{border-color:var(--border-strong)}

/* ── Topbar layout ── */
/* Keep the search trigger in the same centered grid track as the official
   Kiro shell. The side tracks absorb the remaining width so the trigger is
   part of the chrome surface rather than an independently positioned pill. */
.topbar{
  display:grid;
  grid-template-columns:minmax(0,1fr) clamp(240px,22vw,480px) minmax(0,1fr);
  align-items:center;
  gap:12px}
@media (max-width:767px){
  .topbar{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr)}
}
.tb-left,.tb-right{
  container-type:inline-size;
  min-width:0;
  display:flex;
  align-items:center;
  overflow:hidden}
.tb-left{justify-content:flex-start;gap:.5rem}
.tb-right{justify-content:flex-end;gap:.375rem;padding:6px 6px 0 0;margin:-6px -6px 0 0}

/* ── Topbar glass ── */
.topbar-glass{
  background:color-mix(in srgb, var(--chrome) 74%, transparent);
  backdrop-filter:blur(18px) saturate(1.8);
  -webkit-backdrop-filter:blur(18px) saturate(1.8);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.10);
  transform:translateZ(0);
  backface-visibility:hidden;
  transition:background-color .25s ease}

/* ── Frameless Electron window (macOS) ──
   The SPA header row doubles as the title bar; the native traffic lights are
   inset at the window's top-left (electron/main.js trafficLightPositionForZoom),
   sitting over the header. Inset the header content clear of them. Keep 84px
   in sync with TRAFFIC_LIGHT_INSET_PX in src/lib/electron.ts. */
.mac-electron header.topbar-glass{padding-left:84px}
/* Fullscreen: AppKit hides the traffic lights, so the clearance inset drops
   and the branding sits flush left again (back to the header's own pl-5). */
.mac-electron.mac-fullscreen header.topbar-glass{padding-left:1.25rem}

/* ── Frameless Electron window (Windows) ──
   titleBarOverlay places native caption controls (min/max/close) in a 138px
   overlay strip at the top-right of the window. Inset the header's right side
   so interactive elements (bell, settings, actions) stay clear of the overlay.
   Keep 138px in sync with WIN_CAPTION_OVERLAY_WIDTH in src/lib/electron.ts. */
.win-electron header.topbar-glass{padding-right:142px}
/* Embedded remote pane (option B): the pane is a separate document loaded in an
   iframe, so its SPA can't see Electron — `isMacElectron` is false inside it and
   the `.mac-electron` rule never applies. The parent relays whether it is a
   non-fullscreen macOS Electron window; the embedded bridge toggles
   `.embedded-mac-inset` on <html> so the pane's now-topmost header insets clear
   of the parent window's native traffic lights.
   Keep 84px in sync with TRAFFIC_LIGHT_INSET_PX in src/lib/electron.ts. */
.embedded-mac-inset header.topbar-glass{padding-left:84px}
/* The injected #electron-drag-bar (electron/main.js) marks the top 42px as a
   window drag region and only exempts native controls (button/a/input/
   [role="button"]/[tabindex]). The side panel's tab strip lives in that zone
   and its chips are divs — punch the whole strip out of the drag region so
   chips are clickable, hoverable, and drag-reorderable. Ignored in browsers. */
.side-panel-strip,.side-panel-strip *{-webkit-app-region:no-drag}

/* Draggable title-bar strips laid over a remote-instance pane. The pane is a
   cross-origin iframe, so the host's injected #electron-drag-bar can't reach
   into it and the blanket marks the whole iframe no-drag — the pane's header
   can't move the window. InstancesViewport renders these strips (positioned by
   the gaps the pane reports) AFTER the iframe, so they re-add a drag region in
   the pane header's control-free gaps. pointer-events:none so the strip never
   intercepts a click; app-region drag is honored regardless. Ignored in
   browsers (no native window). */
.host-drag-strip{position:absolute;top:0;height:42px;-webkit-app-region:drag;pointer-events:none;z-index:2}

/* Scrollbar-free scroll container (used by the side panel tab strip — the
   strip scrolls horizontally but a visible scrollbar under the chips reads
   as clutter). Referenced before Tailwind ever defined it; real rules here. */
.scrollbar-none{scrollbar-width:none;-ms-overflow-style:none}
.scrollbar-none::-webkit-scrollbar{display:none}

/* ── Scroll shadow (fade at top/bottom of scrollable panels) ── */
.scroll-shadow{
  mask-image:linear-gradient(to bottom,transparent,black 16px,black calc(100% - 16px),transparent);
  -webkit-mask-image:linear-gradient(to bottom,transparent,black 16px,black calc(100% - 16px),transparent)}

/* ── Table row striping ── */
.table-striped tbody tr:nth-child(even){background:var(--card-hl)}

/* ── Skeleton shimmer placeholder ── */
.skeleton{
  background:linear-gradient(90deg,var(--bg-elevated) 25%,var(--bg-hover) 50%,var(--bg-elevated) 75%);
  background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite;
  border-radius:var(--radius-sm)}

/* ── Consistent focus ring ── */
.focus-ring{transition:border-color 0.2s,box-shadow 0.2s}
.focus-ring:focus{outline:none;border-color:var(--ring);
  box-shadow:0 0 0 3px var(--accent-subtle),0 0 20px color-mix(in srgb,var(--accent) 8%,transparent)}

/* ── Syntax highlighting (highlight.js) ── */
.hljs{color:var(--text)}
.hljs-keyword,.hljs-selector-tag,.hljs-built_in,.hljs-name,.hljs-tag{color:#c678dd}
.hljs-string,.hljs-title.class_.inherited__,.hljs-attr,.hljs-template-variable,.hljs-template-tag,.hljs-addition{color:#98c379}
.hljs-comment,.hljs-quote{color:var(--muted);font-style:italic}
.hljs-number,.hljs-literal,.hljs-variable,.hljs-regexp{color:#d19a66}
.hljs-title,.hljs-title.function_{color:#61afef}
.hljs-type,.hljs-params{color:#e5c07b}
.hljs-meta,.hljs-meta .hljs-keyword{color:#e06c75}
.hljs-section{color:var(--accent)}
.hljs-deletion{color:var(--diff-del-text)}
.hljs-subst{color:var(--text)}
.hljs-property{color:#56b6c2}
.hljs-punctuation,.hljs-operator{color:#abb2bf}
[data-mode="light"] .hljs-keyword,[data-mode="light"] .hljs-selector-tag,[data-mode="light"] .hljs-built_in,[data-mode="light"] .hljs-name,[data-mode="light"] .hljs-tag{color:#a626a4}
[data-mode="light"] .hljs-string,[data-mode="light"] .hljs-addition{color:#50a14f}
[data-mode="light"] .hljs-comment,[data-mode="light"] .hljs-quote{color:#a0a1a7}
[data-mode="light"] .hljs-number,[data-mode="light"] .hljs-literal,[data-mode="light"] .hljs-variable,[data-mode="light"] .hljs-regexp{color:#986801}
[data-mode="light"] .hljs-title,[data-mode="light"] .hljs-title.function_{color:#4078f2}
[data-mode="light"] .hljs-type,[data-mode="light"] .hljs-params{color:#c18401}
[data-mode="light"] .hljs-meta,[data-mode="light"] .hljs-meta .hljs-keyword{color:#e45649}
[data-mode="light"] .hljs-property{color:#0184bc}
[data-mode="light"] .hljs-punctuation,[data-mode="light"] .hljs-operator{color:#383a42}

/* ── Session color (set via style="--session-color:#hex" on row elements) ──
   Option A: left-edge color bar. The color identifies the session at a glance
   without fighting hover/active background states, which now use the standard
   neutral tokens (hover:bg-bg-hover, bg-accent-subtle when active). */
.session-row{--_sc:var(--session-color,transparent);--session-muted:var(--muted)}
.session-row.session-colored{position:relative}
.session-row.session-colored::before{
  content:"";
  position:absolute;
  left:5px;
  top:6px;
  bottom:6px;
  width:3px;
  border-radius:2px;
  background:var(--_sc);
}
/* Bar-plus-gradient idle decoration: solid 3px bar starting at 5px from the
   row's edge, then a soft gradient extending further right to give the row a
   "lit from the left" feel. Single pseudo-element, doesn't interact with the
   row's main background so hover/active Tailwind tokens still win. */
.session-row.session-colored.session-gradient::before{
  content:"";
  position:absolute;
  left:5px;
  top:6px;
  bottom:6px;
  width:40px;
  border-radius:2px;
  pointer-events:none;
  background:linear-gradient(
    to right,
    var(--_sc) 0px,
    var(--_sc) 3px,
    color-mix(in srgb,var(--_sc) 28%,transparent) 3px,
    transparent 100%
  );
}
.session-row.session-colored{--muted:var(--session-muted)}

/* lucide-react icons — inline sizing to match surrounding text */
.lucide-inline { display: inline-block; width: 1em; height: 1em; vertical-align: -0.125em; flex-shrink: 0; }

/* ── Panel icon pane morph (components/icons/panels.tsx) ──
   Pure mechanism: all geometry arrives as CSS custom properties emitted by the
   icon component (PANE_GEOMETRY is the single source of truth). Resting values
   also exist as SVG attributes, the fallback for browsers without SVG
   geometry-property CSS support (they render static icons, no morph).
   The hover morph — previewing the click's outcome by flipping the pane to the
   opposite state — is OPT-IN via the `pi-morph` class on the enclosing
   control: apply it to live panel toggles/openers, never to pure indicators
   (e.g. SplitGlyph's split-direction glyph). */
.pi-pane {
  transition: x .18s ease, y .18s ease, width .18s ease, height .18s ease, rx .18s ease, fill-opacity .18s ease;
  x: var(--pi-x); y: var(--pi-y); width: var(--pi-w); height: var(--pi-h); rx: var(--pi-rx); fill-opacity: var(--pi-o);
}
:is(button, [role="button"], a).pi-morph:hover .pi-pane {
  x: var(--pi-hx); y: var(--pi-hy); width: var(--pi-hw); height: var(--pi-hh); rx: var(--pi-hrx); fill-opacity: var(--pi-ho);
}

/* ── Search highlights ── */
.search-match {
  background-color: var(--search-highlight);
  border-radius: 2px;
  padding: 0 1px;
}
.search-current {
  background-color: var(--search-highlight-current);
  border-radius: 2px;
  padding: 0 1px;
  outline: 2px solid var(--search-highlight-current-border);
  outline-offset: 1px;
}

/* Preview find (MarkdownPanel) uses the CSS Custom Highlight API — paints over
   Range objects without mutating the react-markdown DOM. Only color /
   background-color are honored by ::highlight(); box properties are ignored. */
::highlight(mc-find) {
  background-color: var(--search-highlight);
}
::highlight(mc-find-current) {
  background-color: var(--search-highlight-current);
}

/* Line reveal — a `path/to/file.py:447` chip in the transcript opens the file in
   the side panel and flashes line 447; `file.md:10-16` flashes the whole span.
   Monaco decoration classes (not the CSS Custom Highlight API), so unlike
   ::highlight() these DO honor box properties, which is what allows the gutter
   bar. --accent-subtle is theme-defined for all palettes and is the same wash
   flashCommentRow uses, so the two "here is what you clicked" signals read as one
   idea. Held ~1.8s, then faded out over ~1s. */
.mc-line-reveal {
  background-color: var(--accent-subtle, rgba(99, 102, 241, 0.25));
  animation: var(--mc-line-reveal-anim, mc-line-reveal-out)
             var(--mc-line-reveal-fade, 1000ms) ease-out
             var(--mc-line-reveal-hold, 1800ms) forwards;
}
.mc-line-reveal-gutter {
  border-left: 2px solid var(--accent);
  margin-left: 3px;
  animation: var(--mc-line-reveal-gutter-anim, mc-line-reveal-gutter-out)
             var(--mc-line-reveal-fade, 1000ms) ease-out
             var(--mc-line-reveal-hold, 1800ms) forwards;
}
/* An ANIMATION, not a transition. A transition cannot fade this out: clearing the
   decoration removes Monaco's DOM node outright, and a removed element does not
   animate — which is why this used to disappear in a single frame despite
   carrying `transition: background-color`. So the class fades ITSELF on a delay
   and useLineReveal only clears the (by then invisible) decoration afterwards.
   Both timings come from that module as custom properties, so these fallbacks
   apply only if the properties are somehow unset.

   The `-b` aliases are byte-identical on purpose. Monaco reuses a rendered line
   node when the overlay HTML is unchanged, so a repeat reveal would otherwise
   inherit the finished animation and stay transparent; useLineReveal alternates
   the requested name between reveals, and changing `animation-name` is what
   restarts it. Global `prefers-reduced-motion` (above) zeroes animation-DURATION
   but not the delay, so this degrades to "hold, then switch off" rather than
   losing the hold. */
@keyframes mc-line-reveal-out {
  to { background-color: transparent; }
}
@keyframes mc-line-reveal-out-b {
  to { background-color: transparent; }
}
@keyframes mc-line-reveal-gutter-out {
  to { border-left-color: transparent; }
}
@keyframes mc-line-reveal-gutter-out-b {
  to { border-left-color: transparent; }
}

/* Anchored-comment highlights on the markdown / text artifact body are drawn
   as a real overlay layer (InlineCommentOverlay), NOT the CSS Custom Highlight
   API — real elements always paint and support box-shadow + a persistent active
   state. Translucent marker over the text; the drop shadow gives contrast with
   the page; the active comment stays lit.

   Without these rules the overlay still mounts its rects and gutter bubbles
   into the DOM, but they paint as zero-styled transparent divs — anchors look
   like they are "not rendering" at all. */
.mc-cmt-overlay { contain: layout style; }
.mc-cmt-rect {
  background-color: var(--warn-subtle);
  border-bottom: 2px solid var(--warn);
  border-radius: 2px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.38);
  cursor: pointer;
  transition: background-color 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}
.mc-cmt-rect:hover { box-shadow: 0 3px 9px rgba(0, 0, 0, 0.45); }
.mc-cmt-rect.active {
  background-color: var(--accent-subtle);
  border-bottom-color: var(--accent);
  box-shadow: 0 3px 12px rgba(0, 0, 0, 0.45), 0 0 0 1px var(--accent);
}
/* Gutter bubble, one per anchored thread: OUTLINE = read, FILLED = unread. */
.mc-cmt-bubble {
  width: 19px; height: 19px;
  display: flex; align-items: center; justify-content: center;
  font-size: 10px; font-weight: 700; line-height: 1;
  color: var(--warn); background-color: var(--card);
  border: 1.5px solid var(--warn); border-radius: 10px 10px 10px 2px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
  cursor: pointer; padding: 0;
  transition: background-color 0.12s ease, transform 0.12s ease, color 0.12s ease;
}
.mc-cmt-bubble:hover { transform: scale(1.1); }
.mc-cmt-bubble.unread { background-color: var(--warn); color: var(--warn-fg, #1a1a1a); }
.mc-cmt-bubble.active { background-color: var(--accent); color: var(--accent-fg); border-color: var(--accent); }

/* Artifact toolbar: every control (version select + buttons) the same height.
   Icon-only buttons become squares; labeled buttons keep their padding-driven
   width. ArtifactDetailPage already carries the `mc-art-toolbar` class. */
.mc-art-toolbar > button,
.mc-art-toolbar > select {
  height: 32px;
  box-sizing: border-box;
}
.mc-art-toolbar > button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* Mobile: force ChatSidebar to fill overlay drawer width */
@media (max-width: 767px) {
  .mobile-sessions-overlay .sidebar-inner { width: 100% !important; }
  .mobile-sessions-overlay .sidebar-resize-handle { display: none !important; }
}

/* Composer text must reach WebKit's 16px standard focus size on touch devices.
   When a field takes focus WebKit scales the viewport by
   clampTo(16 / fontSize, minimumScale, maximumScale), so anything computing
   below 16px zooms. The 16 is the hardcoded webViewStandardFontSize:
   https://github.com/WebKit/WebKit/blob/f010ba868212b2113ca0727ce46f06273cb5fd0a/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm#L1752
   The textarea and paste mirror share this hook to keep their font metrics
   aligned; pointer: coarse leaves desktop typography unchanged.

   The placeholder stays at the desktop size because the zoom scale is computed
   from the FIELD's font-size, not this pseudo-element's — so holding the hint
   at 0.875rem costs no zoom protection and keeps it on one line. At 16px the
   hint wraps, and an empty composer cannot grow to show the second line: a
   placeholder contributes nothing to scrollHeight, so applyHeight pins the box
   at INPUT_MIN_H and the wrapped line is clipped.

   The field selector repeats the attribute to reach specificity (0,2,0). Tailwind's
   `.text-sm` on the same element is (0,1,0), so a single `[data-composer-typo]`
   would only TIE and win on source order — leaving the fix inert on device, with
   no test able to see it, if the utilities are ever emitted after this file. The
   repeat is used instead of qualifying by element because the hook is on the
   composer's <textarea> and on the paste mirror's <div>, and the mirror's font
   metrics must track the field's. */
@media (pointer: coarse) {
  [data-composer-typo][data-composer-typo] { font-size: 16px; }
  [data-composer-typo]::-moz-placeholder { font-size: 0.875rem; }
  [data-composer-typo]::placeholder { font-size: 0.875rem; }
}

/* ── Diff panel header: theme-conditional bg/border to match Monaco vs/vs-dark ── */
.diff-panel-header {
  background-color: #ffffff;
  border-color: #e5e5e5;
}
[data-theme*="dark"] .diff-panel-header {
  background-color: #1e1e1e;
  border-color: #333333;
}

/* ── Monaco find widget: prevent clipping and ensure buttons are visible ── */
.monaco-editor .find-widget {
  max-width: calc(100% - 28px) !important;
}
.monaco-editor .sticky-widget {
  background-color: var(--vscode-editorStickyScroll-background, var(--color-chrome)) !important;
  opacity: 1 !important;
}
.monaco-editor .find-widget .monaco-inputbox {
  flex: 1 1 auto !important;
  min-width: 50px !important;
}
.monaco-editor .find-widget .find-actions,
.monaco-editor .find-widget .replace-actions {
  flex-shrink: 0 !important;
}

/* ── Liquid-glass design system ──
 * Two composable classes for any surface that should look like Apple-style
 * liquid glass — file chips, sidebar, chat input, follow-up bar, etc.
 *
 * Usage:
 *   <div className="glass-surface ...">         — flat glass (good for tooltips, popovers)
 *   <div className="glass-surface glass-refract ..."> — glass with inner light refraction
 *
 * The two classes split because .glass-refract sets position:relative + ::before,
 * which would clash on absolutely-positioned wrappers. Use .glass-surface alone there.
 */
.glass-surface {
  /* Light mode default: faint dark tint, white top highlight, soft shadow */
  background: linear-gradient(135deg,
    rgba(0, 0, 0, 0.05),
    rgba(0, 0, 0, 0.02));
  backdrop-filter: blur(10px) saturate(140%);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  border: 1px solid rgba(0, 0, 0, 0.08);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.6),
    0 1px 2px rgba(0, 0, 0, 0.05);
  transition: background 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
}
.glass-surface:not(.glass-static):hover {
  background: linear-gradient(135deg,
    rgba(0, 0, 0, 0.08),
    rgba(0, 0, 0, 0.04));
  border-color: rgba(0, 0, 0, 0.14);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.7),
    0 2px 6px rgba(0, 0, 0, 0.08);
}

[data-theme*="dark"] .glass-surface {
  background: linear-gradient(135deg,
    rgba(255, 255, 255, 0.08),
    rgba(255, 255, 255, 0.03));
  border-color: rgba(255, 255, 255, 0.14);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.22),
    0 1px 3px rgba(0, 0, 0, 0.15);
}
[data-theme*="dark"] .glass-surface:not(.glass-static):hover {
  background: linear-gradient(135deg,
    rgba(255, 255, 255, 0.12),
    rgba(255, 255, 255, 0.05));
  border-color: rgba(255, 255, 255, 0.2);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.3),
    0 2px 6px rgba(0, 0, 0, 0.2);
}

/* Refraction add-on — inner light highlight via ::before. Compose with .glass-surface.
 * Sets position:relative on the host, so don't apply this to elements that are themselves
 * absolutely-positioned (use .glass-surface alone in that case). */
.glass-refract {
  position: relative;
  overflow: hidden;
}
.glass-refract::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0.35) 0%,
    transparent 45%);
  pointer-events: none;
}
[data-theme*="dark"] .glass-refract::before {
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0.03) 0%,
    transparent 50%);
}
.glass-refract > * {
  position: relative;
  z-index: 1;
}

/* File-diff chips (FileChangeChips.tsx): flatter edge — no top highlight or
 * refraction, just a hairline border. Composes with .glass-surface (keeps the
 * themed background + blur). Placed after the .glass-surface rules so it wins on
 * equal specificity; mirrored per-theme to override the dark/light glass shadows. */
.file-chip {
  border-color: rgba(0, 0, 0, 0.06);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}
.file-chip:not(.glass-static):hover {
  border-color: rgba(0, 0, 0, 0.10);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
[data-theme*="dark"] .file-chip {
  border-color: rgba(255, 255, 255, 0.05);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
}
[data-theme*="dark"] .file-chip:not(.glass-static):hover {
  border-color: rgba(255, 255, 255, 0.09);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
}

/* ── No-backdrop-filter fallback (issue #1817) ──
 * Every glass surface gets ALL of its real opacity from backdrop-filter: the
 * background tints are 3-8% alpha (.glass-surface) or a transparent color-mix
 * (.topbar-glass, .notif-material). Where the engine does not support the
 * property — older Chromium/Electron builds where it was flag-gated, or Linux
 * builds compiled without it — the blur declaration is dropped at parse time
 * and only the near-invisible tint remains, i.e. a transparent panel
 * (issue #1817, Linux AppImage).
 *
 * Mirror of the prefers-reduced-transparency fallback below so there is ONE
 * degradation story: solid themed background, borders/shadows untouched so
 * panels stay delimited. !important is required — the dark-theme and :hover
 * glass rules outrank these selectors on specificity, and Tailwind hover
 * utilities outrank .notif-material — and it matches the a11y overrides,
 * which stay later in source order so they still win when both apply.
 * Test BOTH prefixes: Electron/Chromium historically supported one or the
 * other. Scoped to the glass classes: platforms with working backdrop-filter
 * never match this query and keep the glass look. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .topbar-glass,.glass-surface{ background:var(--bg) !important }
  /* Floating notification cards (NotificationFeed mac variant) sit OVER page
     content, so they solidify to the card color, not the page background. */
  .notif-material{ background:var(--card) !important }
}

/* ── TIER1 a11y: reduced motion / transparency / contrast ── */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{ transition-duration:0.01ms !important; scroll-behavior:auto !important }
}
@media (prefers-reduced-transparency: reduce){
  .topbar-glass,.glass-surface{ backdrop-filter:none !important; -webkit-backdrop-filter:none !important; background:var(--bg) !important }
}
@media (prefers-contrast: more){
  .glass-surface,.topbar-glass{ background:var(--bg) !important; border:1px solid var(--text) !important }
}

/* ── Mono-family compensation ─────────────────────────────────────────────
   JetBrains Mono is ~20% wider than Space Grotesk at the same size, so chrome
   sized against the default family can overflow once a user picks Mono in
   Settings -> Display (or lands in CLI mode, which auto-resolves to mono).
   `useZoom` publishes the RESOLVED family as html[data-font-family].

   The nav rail's community row is the tight case: it has to fit two links, a
   GitHub mark and the Discord icon inside a 236px rail. Measured label widths
   for "Star us" + "Report issue" at 12px against its budget:

     tracking      mono labels   slack
     normal            136.8     -9.0  (truncates: "Report is…")
     -0.03em           130.0     -1.8
     -0.05em           125.4     +6.0  <- this rule, with the spacing below
     -0.06em           123.1          (visibly condensed)

   Two spacing overrides ride along, because mono and sans want OPPOSITE
   treatment and a single set of numbers cannot serve both.

   MEASURED glyph metrics at 12px (fontTools, the shipped Google Fonts files):

                        advance   ink    sidebearing
     Space Grotesk  S    7.36     6.19      0.58
     JetBrains Mono S    7.20     5.47      0.86
     Space Grotesk  ·    2.24     1.63      0.30
     JetBrains Mono ·    7.20     1.99      2.60

   The two capitals are effectively identical, so the mark gap is the SAME for
   both families (ml-1.5 = 6px on the element) — an earlier version of this rule
   tightened sans to 2px on the false premise that its "S" had more sidebearing
   than mono's. It does not; it has slightly less.

   The middot is where they genuinely differ, and it is the only gap this rule
   still overrides:

   * gap 3px on mono vs 5px on sans. Mono's middot carries 2.6px of built-in
     space either side, sans's carries 0.3px, so equal CSS values would render
     as very unequal optical gaps. Targeting ~5.5px of visible space either side
     of the dot ink yields 2.9px for mono and 5.2px for sans.
   * word-spacing -2.5px (mono only) — fixes "Star us" looking looser than it
     should. Mono's space character is a full 7.2px cell, over 3x Space
     Grotesk's 2.24px, so the gap INSIDE each label dominated the gaps BETWEEN
     the labels and the row read as four floating words. Pulling it to 4.7px
     restores the hierarchy (space inside a label < gap around the separator)
     while staying wider than sans.

   word-spacing is also what PAYS for the wider gaps on mono: it recovers 5px
   across the pair's two spaces, leaving ~6px of slack.

   Scoped to mono ON PURPOSE: sans has ~13px of slack and needs no tightening,
   and applying letter/word-spacing there would make this row inconsistent with
   every other label in the app (everything else inherits letter-spacing:normal
   from body). Do not promote any of this to an unscoped rule. */
html[data-font-family="mono"] .rail-community-links{ letter-spacing:-0.05em; word-spacing:-2.5px; gap:3px }
.placeholder\:text-muted::-moz-placeholder {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--muted) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.placeholder\:text-muted::placeholder {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--muted) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.placeholder\:text-muted\/50::-moz-placeholder {
  color: color-mix(in srgb, var(--muted) calc(0.5 * 100%), transparent);
}
.placeholder\:text-muted\/50::placeholder {
  color: color-mix(in srgb, var(--muted) calc(0.5 * 100%), transparent);
}
.placeholder\:text-muted\/60::-moz-placeholder {
  color: color-mix(in srgb, var(--muted) calc(0.6 * 100%), transparent);
}
.placeholder\:text-muted\/60::placeholder {
  color: color-mix(in srgb, var(--muted) calc(0.6 * 100%), transparent);
}
.first\:mt-0:first-child {
  margin-top: 0px;
}
.first\:border-0:first-child {
  border-width: 0px;
}
.first\:pt-0:first-child {
  padding-top: 0px;
}
.last\:mb-0:last-child {
  margin-bottom: 0px;
}
.last\:border-0:last-child {
  border-width: 0px;
}
.last\:border-b-0:last-child {
  border-bottom-width: 0px;
}
.last\:pb-0:last-child {
  padding-bottom: 0px;
}
.focus-within\:border-accent\/50:focus-within {
  border-color: color-mix(in srgb, var(--accent) calc(0.5 * 100%), transparent);
}
.focus-within\:opacity-100:focus-within {
  opacity: 1;
}
.hover\:-translate-y-0\.5:hover {
  --tw-translate-y: -0.125rem;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.hover\:\!border-accent:hover {
  --tw-border-opacity: 1 !important;
  border-color: color-mix(in srgb, var(--accent) calc(var(--tw-border-opacity, 1) * 100%), transparent) !important;
}
.hover\:border-accent:hover {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--accent) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.hover\:border-accent\/40:hover {
  border-color: color-mix(in srgb, var(--accent) calc(0.4 * 100%), transparent);
}
.hover\:border-accent\/50:hover {
  border-color: color-mix(in srgb, var(--accent) calc(0.5 * 100%), transparent);
}
.hover\:border-accent\/60:hover {
  border-color: color-mix(in srgb, var(--accent) calc(0.6 * 100%), transparent);
}
.hover\:border-border-strong:hover {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--border-strong) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.hover\:border-border\/70:hover {
  border-color: color-mix(in srgb, var(--border) calc(0.7 * 100%), transparent);
}
.hover\:border-danger:hover {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--danger) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.hover\:border-text\/30:hover {
  border-color: color-mix(in srgb, var(--text) calc(0.3 * 100%), transparent);
}
.hover\:\!bg-accent-hover:hover {
  --tw-bg-opacity: 1 !important;
  background-color: color-mix(in srgb, var(--accent-hover) calc(var(--tw-bg-opacity, 1) * 100%), transparent) !important;
}
.hover\:\!bg-bg-hover:hover {
  --tw-bg-opacity: 1 !important;
  background-color: color-mix(in srgb, var(--bg-hover) calc(var(--tw-bg-opacity, 1) * 100%), transparent) !important;
}
.hover\:bg-accent-hover:hover {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--accent-hover) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.hover\:bg-accent-subtle:hover {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--accent-subtle) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.hover\:bg-bg-elevated:hover {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--bg-elevated) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.hover\:bg-bg-hover:hover {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--bg-hover) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.hover\:bg-danger-subtle:hover {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--danger-subtle) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.hover\:bg-text\/\[0\.04\]:hover {
  background-color: color-mix(in srgb, var(--text) calc(0.04 * 100%), transparent);
}
.hover\:\!text-accent-fg:hover {
  --tw-text-opacity: 1 !important;
  color: color-mix(in srgb, var(--accent-fg) calc(var(--tw-text-opacity, 1) * 100%), transparent) !important;
}
.hover\:\!text-danger:hover {
  --tw-text-opacity: 1 !important;
  color: color-mix(in srgb, var(--danger) calc(var(--tw-text-opacity, 1) * 100%), transparent) !important;
}
.hover\:\!text-text:hover {
  --tw-text-opacity: 1 !important;
  color: color-mix(in srgb, var(--text) calc(var(--tw-text-opacity, 1) * 100%), transparent) !important;
}
.hover\:text-accent:hover {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--accent) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.hover\:text-accent-hover:hover {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--accent-hover) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.hover\:text-danger:hover {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--danger) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.hover\:text-text:hover {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--text) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.hover\:text-text-strong:hover {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--text-strong) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.hover\:underline:hover {
  text-decoration-line: underline;
}
.hover\:opacity-90:hover {
  opacity: 0.9;
}
.hover\:shadow-\[0_0_12px_var\(--accent-glow\)\]:hover {
  --tw-shadow: 0 0 12px var(--accent-glow);
  --tw-shadow-colored: 0 0 12px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.hover\:shadow-\[0_0_20px_var\(--accent-glow\)\]:hover {
  --tw-shadow: 0 0 20px var(--accent-glow);
  --tw-shadow-colored: 0 0 20px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.hover\:shadow-md:hover {
  --tw-shadow: var(--shadow-md);
  --tw-shadow-colored: var(--shadow-md);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.focus\:border-0:focus {
  border-width: 0px;
}
.focus\:border-accent:focus {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--accent) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.focus\:border-accent\/60:focus {
  border-color: color-mix(in srgb, var(--accent) calc(0.6 * 100%), transparent);
}
.focus\:bg-bg-hover:focus {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--bg-hover) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.focus\:text-danger:focus {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--danger) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.focus\:outline-none:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
}
.focus-visible\:border-accent:focus-visible {
  --tw-border-opacity: 1;
  border-color: color-mix(in srgb, var(--accent) calc(var(--tw-border-opacity, 1) * 100%), transparent);
}
.focus-visible\:outline-none:focus-visible {
  outline: 2px solid transparent;
  outline-offset: 2px;
}
.focus-visible\:ring-2:focus-visible {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.focus-visible\:ring-accent\/40:focus-visible {
  --tw-ring-color: color-mix(in srgb, var(--accent) calc(0.4 * 100%), transparent);
}
.active\:scale-\[0\.97\]:active {
  --tw-scale-x: 0.97;
  --tw-scale-y: 0.97;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.active\:duration-75:active {
  transition-duration: 75ms;
}
.disabled\:pointer-events-none:disabled {
  pointer-events: none;
}
.disabled\:cursor-default:disabled {
  cursor: default;
}
.disabled\:cursor-not-allowed:disabled {
  cursor: not-allowed;
}
.disabled\:border-border\/60:disabled {
  border-color: color-mix(in srgb, var(--border) calc(0.6 * 100%), transparent);
}
.disabled\:text-muted:disabled {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--muted) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.disabled\:text-muted\/35:disabled {
  color: color-mix(in srgb, var(--muted) calc(0.35 * 100%), transparent);
}
.disabled\:no-underline:disabled {
  text-decoration-line: none;
}
.disabled\:opacity-30:disabled {
  opacity: 0.3;
}
.disabled\:opacity-40:disabled {
  opacity: 0.4;
}
.disabled\:opacity-45:disabled {
  opacity: 0.45;
}
.disabled\:opacity-50:disabled {
  opacity: 0.5;
}
.disabled\:opacity-60:disabled {
  opacity: 0.6;
}
.disabled\:hover\:bg-transparent:hover:disabled {
  background-color: transparent;
}
.disabled\:hover\:text-muted\/35:hover:disabled {
  color: color-mix(in srgb, var(--muted) calc(0.35 * 100%), transparent);
}
.group\/code:focus-within .group-focus-within\/code\:opacity-100 {
  opacity: 1;
}
.group:focus-within .group-focus-within\:opacity-100 {
  opacity: 1;
}
.group:hover .group-hover\:visible {
  visibility: visible;
}
.group:hover .group-hover\:bg-bg-hover {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--bg-hover) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.group:hover .group-hover\:text-muted {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--muted) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.group:hover .group-hover\:text-text-strong {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--text-strong) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.group\/code:hover .group-hover\/code\:opacity-100 {
  opacity: 1;
}
.group:hover .group-hover\:opacity-100 {
  opacity: 1;
}
.group:focus-visible .group-focus-visible\:ring-2 {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.group:focus-visible .group-focus-visible\:ring-\[var\(--ring\)\] {
  --tw-ring-color: var(--ring);
}
.group:focus-visible .group-focus-visible\:ring-offset-1 {
  --tw-ring-offset-width: 1px;
}
.group:focus-visible .group-focus-visible\:ring-offset-\[var\(--bg\)\] {
  --tw-ring-offset-color: var(--bg);
}
.data-\[disabled\]\:pointer-events-none[data-disabled] {
  pointer-events: none;
}
@keyframes dialog-out {

  from {
    opacity: 1;
    transform: translate(-50%, -50%) scale(1);
  }

  to {
    opacity: 0;
    transform: translate(-50%, -50%) scale(.96);
  }
}
.data-\[state\=closed\]\:animate-dialog-out[data-state="closed"] {
  animation: dialog-out .15s cubic-bezier(.3,0,.8,.15) forwards;
}
@keyframes fade-out {

  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}
.data-\[state\=closed\]\:animate-fade-out[data-state="closed"] {
  animation: fade-out .15s ease forwards;
}
@keyframes dialog-in {

  from {
    opacity: 0;
    transform: translate(-50%, -50%) scale(.92);
  }

  to {
    opacity: 1;
    transform: translate(-50%, -50%) scale(1);
  }
}
.data-\[state\=open\]\:animate-dialog-in[data-state="open"] {
  animation: dialog-in .2s cubic-bezier(.16,1,.3,1) backwards;
}
@keyframes fade-in {

  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}
.data-\[state\=open\]\:animate-fade-in[data-state="open"] {
  animation: fade-in .2s ease;
}
.data-\[state\=checked\]\:bg-accent-subtle[data-state="checked"] {
  --tw-bg-opacity: 1;
  background-color: color-mix(in srgb, var(--accent-subtle) calc(var(--tw-bg-opacity, 1) * 100%), transparent);
}
.data-\[state\=checked\]\:bg-transparent[data-state="checked"] {
  background-color: transparent;
}
.data-\[state\=checked\]\:font-semibold[data-state="checked"] {
  font-weight: 600;
}
.data-\[state\=checked\]\:text-accent[data-state="checked"] {
  --tw-text-opacity: 1;
  color: color-mix(in srgb, var(--accent) calc(var(--tw-text-opacity, 1) * 100%), transparent);
}
.data-\[disabled\]\:opacity-40[data-disabled] {
  opacity: 0.4;
}
.data-\[disabled\]\:opacity-50[data-disabled] {
  opacity: 0.5;
}
@supports (height:100dvh) {

  .supports-\[height\:100dvh\]\:h-dvh {
    height: 100dvh;
  }
}
@media (min-width: 640px) {

  .sm\:col-span-2 {
    grid-column: span 2 / span 2;
  }

  .sm\:col-span-3 {
    grid-column: span 3 / span 3;
  }

  .sm\:ml-1 {
    margin-left: 0.25rem;
  }

  .sm\:inline {
    display: inline;
  }

  .sm\:h-\[22rem\] {
    height: 22rem;
  }

  .sm\:max-h-\[90vh\] {
    max-height: 90vh;
  }

  .sm\:max-h-none {
    max-height: none;
  }

  .sm\:min-h-11 {
    min-height: 2.75rem;
  }

  .sm\:w-32 {
    width: 8rem;
  }

  .sm\:w-36 {
    width: 9rem;
  }

  .sm\:w-44 {
    width: 11rem;
  }

  .sm\:w-52 {
    width: 13rem;
  }

  .sm\:w-56 {
    width: 14rem;
  }

  .sm\:w-72 {
    width: 18rem;
  }

  .sm\:w-\[34rem\] {
    width: 34rem;
  }

  .sm\:w-\[calc\(100\%-4rem\)\] {
    width: calc(100% - 4rem);
  }

  .sm\:w-auto {
    width: auto;
  }

  .sm\:w-full {
    width: 100%;
  }

  .sm\:max-w-4xl {
    max-width: 56rem;
  }

  .sm\:max-w-\[14rem\] {
    max-width: 14rem;
  }

  .sm\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .sm\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .sm\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  .sm\:grid-cols-5 {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }

  .sm\:grid-cols-\[132px_minmax\(0\2c 1fr\)\] {
    grid-template-columns: 132px minmax(0,1fr);
  }

  .sm\:grid-cols-\[96px_1fr_auto\] {
    grid-template-columns: 96px 1fr auto;
  }

  .sm\:grid-cols-\[minmax\(0\2c 1fr\)_150px\] {
    grid-template-columns: minmax(0,1fr) 150px;
  }

  .sm\:flex-row {
    flex-direction: row;
  }

  .sm\:\!flex-col {
    flex-direction: column !important;
  }

  .sm\:flex-col {
    flex-direction: column;
  }

  .sm\:flex-nowrap {
    flex-wrap: nowrap;
  }

  .sm\:\!items-start {
    align-items: flex-start !important;
  }

  .sm\:items-start {
    align-items: flex-start;
  }

  .sm\:items-center {
    align-items: center;
  }

  .sm\:justify-between {
    justify-content: space-between;
  }

  .sm\:gap-1 {
    gap: 0.25rem;
  }

  .sm\:gap-3 {
    gap: 0.75rem;
  }

  .sm\:overflow-y-auto {
    overflow-y: auto;
  }

  .sm\:overflow-x-hidden {
    overflow-x: hidden;
  }

  .sm\:border-b-0 {
    border-bottom-width: 0px;
  }

  .sm\:border-r {
    border-right-width: 1px;
  }

  .sm\:p-5 {
    padding: 1.25rem;
  }

  .sm\:px-4 {
    padding-left: 1rem;
    padding-right: 1rem;
  }

  .sm\:px-5 {
    padding-left: 1.25rem;
    padding-right: 1.25rem;
  }

  .sm\:px-6 {
    padding-left: 1.5rem;
    padding-right: 1.5rem;
  }

  .sm\:px-8 {
    padding-left: 2rem;
    padding-right: 2rem;
  }

  .sm\:py-4 {
    padding-top: 1rem;
    padding-bottom: 1rem;
  }

  .sm\:py-6 {
    padding-top: 1.5rem;
    padding-bottom: 1.5rem;
  }

  .sm\:pb-0 {
    padding-bottom: 0px;
  }

  .sm\:pt-4 {
    padding-top: 1rem;
  }

  .sm\:opacity-0 {
    opacity: 0;
  }

  .group:focus-within .sm\:group-focus-within\:opacity-100 {
    opacity: 1;
  }

  .group:hover .sm\:group-hover\:opacity-100 {
    opacity: 1;
  }
}
@media (min-width: 768px) {

  .md\:col-span-2 {
    grid-column: span 2 / span 2;
  }

  .md\:flex {
    display: flex;
  }

  .md\:hidden {
    display: none;
  }

  .md\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .md\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  .md\:grid-cols-\[200px_minmax\(0\2c 1fr\)\] {
    grid-template-columns: 200px minmax(0,1fr);
  }

  .md\:grid-cols-\[minmax\(160px\2c 0\.9fr\)_minmax\(220px\2c 1\.6fr\)_auto\] {
    grid-template-columns: minmax(160px,0.9fr) minmax(220px,1.6fr) auto;
  }

  .md\:flex-row {
    flex-direction: row;
  }

  .md\:items-center {
    align-items: center;
  }

  .md\:gap-x-6 {
    -moz-column-gap: 1.5rem;
         column-gap: 1.5rem;
  }

  .md\:divide-x > :not([hidden]) ~ :not([hidden]) {
    --tw-divide-x-reverse: 0;
    border-right-width: calc(1px * var(--tw-divide-x-reverse));
    border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
  }

  .md\:divide-y-0 > :not([hidden]) ~ :not([hidden]) {
    --tw-divide-y-reverse: 0;
    border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
    border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
  }

  .md\:p-7 {
    padding: 1.75rem;
  }

  .md\:px-6 {
    padding-left: 1.5rem;
    padding-right: 1.5rem;
  }

  .md\:py-5 {
    padding-top: 1.25rem;
    padding-bottom: 1.25rem;
  }

  .md\:pl-0 {
    padding-left: 0px;
  }

  .md\:pr-5 {
    padding-right: 1.25rem;
  }
}
@media (min-width: 1024px) {

  .lg\:h-full {
    height: 100%;
  }

  .lg\:min-h-0 {
    min-height: 0px;
  }

  .lg\:flex-1 {
    flex: 1 1 0%;
  }

  .lg\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .lg\:grid-cols-\[18rem_minmax\(0\2c 1fr\)\] {
    grid-template-columns: 18rem minmax(0,1fr);
  }

  .lg\:grid-cols-\[240px_minmax\(0\2c 1fr\)\] {
    grid-template-columns: 240px minmax(0,1fr);
  }

  .lg\:overflow-hidden {
    overflow: hidden;
  }

  .lg\:overflow-y-auto {
    overflow-y: auto;
  }
}
@media (min-width: 1280px) {

  .xl\:sticky {
    position: sticky;
  }

  .xl\:top-4 {
    top: 1rem;
  }

  .xl\:w-full {
    width: 100%;
  }

  .xl\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .xl\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  .xl\:grid-cols-\[minmax\(0\2c 1fr\)_300px\] {
    grid-template-columns: minmax(0,1fr) 300px;
  }

  .xl\:grid-cols-\[minmax\(0\2c 1fr\)_minmax\(360px\2c 0\.46fr\)\] {
    grid-template-columns: minmax(0,1fr) minmax(360px,0.46fr);
  }

  .xl\:flex-col {
    flex-direction: column;
  }

  .xl\:content-start {
    align-content: flex-start;
  }

  .xl\:items-start {
    align-items: flex-start;
  }
}
@media (min-width: 1536px) {

  .\32xl\:w-auto {
    width: auto;
  }

  .\32xl\:flex-row {
    flex-direction: row;
  }
}
.dark\:text-emerald-400:where([data-theme="dark"], [data-theme="dark"] *) {
  --tw-text-opacity: 1;
  color: rgb(52 211 153 / var(--tw-text-opacity, 1));
}
.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar {
  display: none;
}
.\[\&\>span\:first-child\]\:min-w-0>span:first-child {
  min-width: 0px;
}
.\[\&\>span\:first-child\]\:truncate>span:first-child {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.\[\&\>span\]\:min-w-0>span {
  min-width: 0px;
}
.\[\&\>span\]\:truncate>span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.\[\&\>span\]\:text-left>span {
  text-align: left;
}
.\[\&\>svg\:last-child\]\:hidden>svg:last-child {
  display: none;
}
@media not all and (min-width: 1024px) {

  .max-lg\:\[\&_\.invisible\]\:\!visible .invisible {
    visibility: visible !important;
  }
}
.\[\&_svg\]\:mx-auto svg {
  margin-left: auto;
  margin-right: auto;
}
.\[\&_svg\]\:h-auto svg {
  height: auto;
}
.\[\&_svg\]\:max-w-none svg {
  max-width: none;
}
