@font-face{font-family:'Switzer';font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:600;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:700;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAEvoAA8AAAAA/SAAAEuHAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGjIbgdUsHIU6BmAAh04RCAqB4iyBrhcLhggAATYCJAOMCgQgBY8wB49IG/zeR9Bt2xUliiB3AaFafpf8kNmIGnSnJzqEr83ZgRo2DsAz+b84+///PynpGMOBNQC0zHr/BRWDmaTBI4JERIoSjkQfcPQDFnBDxylmt8ErvKgV2JxUk82D2pKLCEkPE6vgQXE78ukfC3EJryPuQ2TPnBNPXlXpYEfgaVkYJ4a87RC+Vd/iVV7ti1Ptojb7tnf8Gj44caGE9yW8fahDZ8ulnOqjj2ypzYqqoYqKJ+96BXUqKaw5RCpseHQTcxz49alyf/OmFk6NMI1mu1m7/z9Fk9RzWLCVVIPbF1xLzbiXVWDs8hhRKzn1wv9/a+h9f2YBA0UkBwSKSQE7IF3V46OiSqSiy7bd4WGb/cNoLAzsGagoKgLmdEMlhFYQFZVIEwMQAwWxY2JNnc5tLvp2Lm73d7lb5R3bbbf+t8vmn+/3vlv73J83E5XoqAJYhCvNlqZxtQjTHEajJEIhPBjR+af+np27b+ZjTSmEJRQABp7aQoB2NQs5m4MeUlEU79ea9e90ZPen04YUnBBx082A2gawGviU43v6tCzr2c9ebvgc5VNK+HQKRyihQyghPEq4CTdtsgevg4egHi/0hwmTg4Wjw8L8eqZawrWb3mXppnBTXPWBd868/8wPUY8zP62TQDz4aR0kn6hA3nIkSwS1Yjh5R4kgBvvCgj7Kmc5IdmDGWxcZFmSv8chOGaXkJ6XPALMPQngkWwW6poD88/vJ7iu/OBGXBg5Mq9EVSwrHxDX7dAVSbkbO+DxiOlAZWv63IsbCLIfLOjrGHMmtOjVg3ZETRoquMMZy3in4nDnJfcXAX2fYaMcF97YQQgghJo/ncuGf/eJkMIUjHThd5VCZa5FCu9crXIVbUV5Erx4RKqIibmACJRQejpiHV708pvhgXIuS9TVUeoFz9Rf8hQaPmzQDtlwu0fB+YQ3Ag5HcfrJpb7sjuMhBO8QfFKRaTrgErLqZN1qtZmYFXplWPh3IHwQfZOAP2pV9WZFvZVn+5wCjJN8nxCqAUFUpunR1ipagTlHV6QiIp19WSStv40d0nzxg++HAAmwt5L9revfuTcm51kTL+FLLlXzLjzvjsHzwI2gNknXwGJeFzHlERBBWNdDE9VM/qfc8uuqU6sDaAbrmS++odED89mm1J8n2lV5Tulb75C9LdnpDrQFYKwoMQsFBPATELDg0UC0jpXrhL5GDpxGNWY5jGIaNjAJjHAn5nfj//3vSe+/7feqq2mKriqqIGjHGiCVGxHkM5xGm16VircLH35j7nruNx/nRSjciba4jGxv9Y/2MrfpzNlrv50YZiGCCAoLwEMZbC+OsPNCRn/cvdoKf2oAAjRdWrwPw+We3AMCXr7+pQEAJ+gKA8eQoiGOMrJzMCNLJTKx4YEAgtVAp6+uviYTXY1YNtr1InAaKDaD6X3i3rGV14zMRwP3ufPqpHK2l51/WcABad/BMfGrTa29Art6AB03dsuhz2b0N7MKmwC56vI9/XXqmfaV+d0l2uQiVuEa7prvT3SfcLZ73vFBeP3qzfTx9yn0+d5/wywjgB/WFxISOWV8OWw0vQqgQn0RiyNVEnnaNjvz7wvIgPjnEaAwSh2xBLiMfxxyMlaD0w08iThXvEt+SkOH4O+Fx1OWi/eE5oBIv1C3dJx4jJCbxAoaNUAVyBYj+qZAWK1nv6fg7QvVcLhcjMUmoBGN6Gp6Yhl53+g8oPuo+8YB1FPZG5N+e9xZ8AD9JTVbUC7XklV7a3cczGkNPVY7EPUjSFrIlNZA+RqZZAXzk45CYWAmL/Sg9QbLHo57+Gxac0VVOieL5x7gnd1y6/tQqOybxsyXHQ5AAiO7iwqoKkpKKmoY2cC0s2sVn8TABolAs7Zqer1MgIqr+X27QOYCFRqFzMLhYDo3aGTMuHhD0zcVGJKZkBD1kMCMTM4upOk2ZMWuuDzu0YWfTlm07DlnZ2Dk4uWuAEJqSUGolHQgUJiObHMmjoKikrJpar54GmlraOl13EbAMBIEhUBh8+nAeaTS28qwEYpWpVDqTzf3mPrfAtNBhEVFMPs+kyWp5CilV6jT9L9MSnosCPOwlZn6/Av/31vz05X8cm/+zSElu/LrbkWHSqMoYuNPD2GgJCGgUCMYNN9xww42DN+g4Fi1lGStWrVmvGyqbtmzbccjKxs7Byb0LuyEiwBYxcYmk6iCGycrJKygqKauqa2rr9nuOAlXBUHglYBQGJ7n8jwvz/67pQnhukohG1b8D2GgaetmJsF17iLGTbEW4fjgRIvYPiZjMGT3JYEYmZhZTmf4wk1nMfWNh11ibPIgXPv4acCb0siRzSQcChclciMXUevU0pKmlrdN1FwGHrAYCDIHC4BPPbrciYE8k9WWYglJpdAaTxeZweWsViF1z1vj4lN0XSSUusdi1+VkDr9Gmbn5OvRECADjouhgCTIDFxSaJIQkiFZBtE1F0UYqKmoaWLvBJApMxZJwAAE4z8d6+oAAVcotMdJX+geyIOjm7uCadyuQpUKrUaU4GHX70lz0bui5P5bxE8Qo16Xd/GBjFjeHiAUFVQBJVBY+SipqGdlDypFcywMjEzGKqLgJLlq1YtWa9buA2bdm245CVjZ2Dk7t6SF4+/l2YJ8Jei5i4RD+plMKlIVCYjGxykldQVFJWTa1XT0OaWto6uu/teRXAIvBVQYAhUBh8IsgoY3AUGoPF4XXJR3mtVLLJVoY9Vge/Kh4C8WG/WhQui6XJ7imkSjO92/kQEADQwQiz2LEEpCKEEEII4UsCYdHLcRi/TIgofg0FxUl3MhSqNCd3+qunSK+4Afe67Cpug26uEI2q/4cfVAMwNDN0DzG8wnLsXs7V4iNgJ0RE7V5HePAPcoFfJz1gMCMTM4upOm1mxqy5byzsuO3HAy/f6McAf/gjDQBYAAAAAADw7DZ1RJAoNAaL6/NYO5RgTyRNsllKFxUancFksTlc3jf3vSoQFjou8kdxpk91Sb2fYn2hsl6eQkqVOs0s7XzqQL3rgDeazD/dKugbtgFXcoWuM8I3O5aYqPmWAY5sGYZhmObAfcJJVF38NKWQBmVAkuR80AAbMXXz29zK/drhSPhi5CqlUtGX2PY4PLlcLpc3RTcbYTPa5KLq4gfiVQnEh30e0m892HdySVrLUlhVG7JOPy487aQ3cy9sJxGUTejjKQigwxkQzTvYVu71EwcnTVs3ujd8XKf53EUPxeskmLjWv05jd7DqWHSLs4tr0voUW3jCDr8HWkhPbbDO+m57G1UvXNvXuMx/MxdB4DruphpRfYoHqGr9jZcdACeETXj1AzsfBtzGAwV/K7BEqaEpbxYmzsjHX6EUx3Ecx+dP6dUMZmRiZjF1AWCFEEJ4jI5MBkII4RMjem3DOMQWfolPSbXUNOlAoDAZ2eQsr6CopKyaWq+ehjS1tHV093sedGfXg8YfJqSGaqiG6g32vPJK3l0JyygMbkCzaDBYHN7REVZWuCaZfJG4P+C2QkP4eAlXqoXuWnYsffca1Lwfb5FgIr+G+sVJdzIUqjTzI7yaD5V8RKBDzDmIOCKKKE1FTUM7AFnCSVTiY0+ux+g3cVacN65NN40QFcpG1b9PQ+gMFv1haFRsDBcPCNoJpESYaPrNlmSAHKc3YoCRiZnFVJ1GZsya68OMRWjJshWr1qzXDbFNW7btOGRlY+fg5D4VpGoACL04AldITEkjqVnSgUBhMrLJSV5BUUlZNTWpa2imJW0d3ff2yIC9CHxVEGAIFAafCGmUMbhjGYFUVNHoDCaLzeHy7h5YFjJFoDhTIi1/prQ6DWnrqfOmXu9d8bbcFxTiK7jXrlqRZROq/h3gMlqD8O0v+xiL5Z6HRDSxdyQiMgE5oJ/GIEYmZhZTdVplxqy5PszioXn5+GtAIJQkSQOVUdPQ6jrLABAEVnmXE4j7siqFTg2NzmCy2Bwu7/6+xwWiQlYR/rFcbpU8hZQqdZou7WTqvK53HfQbTeb3rqCtOl8TI/+xytdJILg43bycn8ydDe9jAq9VfSbFU0xj7GKf+petZbD3RC3e73naQdnJ5dkWtjf4ud78KvHF3Jibm5ubm5dZmf/jzl93OJ4HDbB1uEy8C0ts4mJbW1srsdjWyspqHtfR9e62VznHBxqAlIPPVVjGOAASNRqNRqMx1mg0UqmUMjaWUhR1vzFLT0EvSGq9xXHqPX/qAumiP/kacB3zfN5CceD73H3QJxyWYS2jfcaMi1c/MPFhwG08UPCfG4E2kVNiBYkFKSAjTUjIWX41pZhFuaioaWhXP8HP7RWt0NLS0tLS0sIwDMPmzJEJa2IzOwcnd/U45eXjrwFSKOF6imiJSkxcYu0nFVZYYRiGYRiGFVZYYYU19nsOsjXpwX6s/aXCCiusKc99Xu19/8OnCO1IodAYLG5SnKbBYHF4u8CiyI3ZJJ1xzedcMthjSqnHFuY5nO9mt7L6Nm3j0IqLdKLrBIcFH/PQsXkRZy0sIUEQhFpNqAm18Dgn9ae+GZLz/Cqj8JDSVNQ0tF+PzrGrIxQKhUKhkCAIgmj0j9SsBBs7Byd39ch5+fj3wx6KCEUjJi6xdnaKKKIIgiAIgiCKKKKIIoi50526B/mxdnmKKKKIljz3ebX3SgijMLiqyNMYLA6vHmFn134iVKHOT/13X3ynnAp/bX5EovAUnsJ/+WdaM61tiYhXsvBKXqqPL3qbvYThZowxxp7Ol9VIKaWUEhER0QcREVEppby9mWSSlSwsLERERMTCwsJCVE4IRKNGjfpmqJRSqrkfeQd4dXYdRJL2OQlFvdZ9k+Oeh3r0Wi+7+hR0iEokGoQgacbFA4LuLrAggsRSEn+pzMBnE4lEIpFoqKBEIpFImljZ2Dk4uasH8vLx14CB0JQUSXVJK0igMBnZ5CyvoKikrJpar56GNLW0dXTX/YVIIpKIJCKJhUUDd6QMF1ZmsDi8/UBaZFDSJ98ppU77vOV3nYpCJ+llk0YPXOO6xjMiVVtIix8QeP6HAQBVKNR+2RlOuPqy54P4bRERER9Jks19dJHBhKIZtjrwgijJU1E1aeiGadXtOK63+573nogYMWIIgiAAAABBEISlqgRBEKqN/Q8vwo4MCo3B4ibFISsNBovDe7YAFnkl+byPyWBng5VW91tUx63fX1xr9bTvfrdxDTWK6aYNoiYKjZr0cy6vfdB59F0MZmRiZjH1tqveeZic+x65t/E207rxNt7G24za7KRHB2zyyb2Nt4HNSsUcQXfUFMNkcFKgqTXgKbpXGFYTWBv8wQ7H+tygE3iSZAbgCIqMmoZW1zkEhRiKNr20E0zc+jDMazuxpNsMBnYFBfub2k1AZKTMSwCUS1r2YAiGc97uQNB6qKwdYQAAAEBKKZ/Ow3PinHPOOeecX8/NtQY4cODAOeeccw4GDBgwEHiLrKiaPh2uLpueb19aA+myypJaaqmlllpqW3iYpuMX12zGeihtC1vYwmN/nCh0wf3e3RPwxmnYCmqTCbgLzQqooshTok57v+28n2xQt5z4eiZX55sK3rmnt3L8bbTY2hjSeieTm5gQkB/nBZ7agLIINdecqVSnrfcHulHVFPPDi97htVyRdkPwHGY5HPXMV2SUgLrQskh7hrtwd/Ja0Ei5di73w+B1v6sFh08tK/OmfJI3qtBapKxsMjc+GloRXP7xniJs7DZLAXehWYFdUeQpUae9TwPViKmbP5zjHThfgvMBt3z9Sdg2wPigMQH2W4P0dKRDsSMQS5yS+jFEY+hF4M0Gu2GdsIn5hotwa0E2hA0o4MowW8cjA3a6mPShuQ6o0WT+3FWvzQf3Rj7umbg31P9utmHGKDImXDwgaJSjBsMwDMMwCCGEGqxs7Byc3DXCiEnUFILAZOXkFRSVlFXVNbW77jIQDIXXzqS+Dr3MaDLvFvdadXY0Ed4LgP9Uj8019UC1QqVSPXE+tHzJ8+G+hFCwphchK/u5B9q92mveJwUfhGGE+Rj5GO6sIsv7DaIeitEYq2oa1RgzLh4QFHmfjWRTtmzbccjKxs7ByS0FgcnKySsoKimrqmtqd91lIBgKrx2qP+MhYrQl5FEOPiejlDHh4gFBo1yDFEVRFEVRFNXgloLAZOXkFRSVlFXVNbW77jIQDIXXDq9f8/8+biTA7l7nlxGpX4Y+wOsnLkehAQ3aCmz1olQqlUql8uxx5blGlSsplUoInxaOH1dACCGEsLkStlEYnOTWePB0OW//fmFlJzHzsNynSnMkx3tyJwIhhBB6ZgltE5knZomkgMAuhLUD0qbJ6rvsgLGH+BrYUHgl7KMwOMktBlYLaf0V280J2hWsxFPHVGzgTlIaKqOmoXXUgaKVmTK2eSDGGAAwANjC2Skk8ue+NGdPIJ09fUREV97kdl+6h4k8YTmOsK+cK0cIIYTQV24hhGVZ5ZRtlylTxiqnnHIu7fm8mwrRE0XYEjZJYo33HKnH2mwgaoQ6CS19ug+GwQpblUMKBtwYi7p/lxh6PKWUUqq5zvu1YNFSdusC3T0RUVM9bBxxdDxmJERERI161uWc8y4MSz5k3dUrUqRIERERESlSpEjN5ZWPN9SvjW985wc/+aX/q/CHj7/80/23rPG4fIoUKTI7mvYMh5iUljRfitDBYHHDfGfdCRLsI0Lqy9IUkEqjM5gsNofL2/raPcTGLvbq58OAXavFEZR2aZf2m+x+zSwvKhh8wofgeRgyTgCBni3DcrpVb4CFI0tD5xsubmG9weID81k8kWDi6A/fN71iBp0MGhn0kbSWpbAqTffRC/BSr2R7aKb2NQU9BUJPTAg0B4NjluW1OvgNXLz6gdyHAbfxQMEfRR73JvPJydNT+Vh8Pp/P58v5fD6fzz85QXhS2El1QQyTlZNXUFRSVlXX1O66B7qT9+BHwHtgoPD6LO/Ve1Xs0hgsDq8eZZ1d65A6o8n8P2OFfpp3+fN71uUrRmDG5cz5lj/u0bboX6X30v13qfsS3Wz3hrp/vOK6svvfB93Xfz6L1/zHMB68D6fSF1kts+qCRVYHsooJIU2/TH8VkqbpX90dYWz8XirppbLYCcH5K/qeyGBGJmYWUxfAIZqmaZqmaZpucNdAF3p/PXVesGCHy57o9CoQKEymQdM0TdN0p5c90ekVmlraOg36jUHAXszjVUHyhHjBvIevu4QyBld3Bc+eNAV5TaQkla/k95RWp8VkxcL7amZaBcciY7/jBvoXUhiLjMAIJjCDBaaGh2qohmroAqIaqqEaMmGqIQMjGAKF/cHQ8PVxRTOq/t8H4AKaNbojDM+wXKjeycptRYwHAhQKhUKhUFhbW1s/sxeqMXkYXvPxb5MK9ktRipstSlGKUiiGUbiiBQSGQGHwiXchwcR92TqFSYVGZzBZbA6Xt/M9K5gLdqFJmuwpTxGlSr3fuBAHrAxj834JpC+R/CWm/L96Ti0YGx2FcNBdLCcDoXnCwvOWI0c4IrIIFFRR6OiQmFhi5OFC4SmCxieEJSOTRkUlXZs223UYlmHCBIops6jmHMJy3BlSW7ZUes8tVe54zOCJJwZ85SuDnntuyCuvDHvjjRE/+9Oov/1txr/Braxk3M1WAfeyV8T9HNXTYtFFO1tMMc6FCuV88cW7EDq098KU4WI7yvZZ7IRuJE3qSfIUnqZO7Rmrc3+wwbH9/SbBDFd8w+WT2x/FGfH20RxIizw5wgK6T1mvdZ+ebVGCsfk69CNjgf8pjN3rzcTj4B3kdLtnEH3cDNvH/J8/Wab8yWgJH/MpbIdUB08SB7PpPte6A38xJ6HFRrPka/qvmSAPvzEWBeH95r0UNDKGCR4KqcWF46q2iC4719S5Cjq7jbnnIypkIpYKRP8qpEfTdfGKlkgPVJOtSAh5hWthf1lA67flMnxPnh+RV35m4UNdO1sovPdXfjucYrVmhDL7dR2V8sNSb8H7OWrtDVNSbtUX3JaEzERvLMvDcs4JT3SD0T8k6Sm20VqVBkEX0qO6zbi53M/gyPjph2qKXZ7LmGyLbvqK0hxmQ1oTTsg5W/7BCShSw48PgHIQh5lh9ATVDumOdrWC1laTSchFvN8rTrDHcsKLfjqdLGXDdkikLT0eK3HnAu3ddEfr/jBn8Jg/Cx9sHP63+a+Rz6xi8nYQXGGZh7qamoRqITPiMnirbjgviJHGAHEHWn1CDM4Cwb9okbGSrFwb8YJRq1pocNf/tJsjLtQqOCCt1qG3a+3yabCT9kHR0C0GUWMEZUxRybSDA02seoYVD1lAwaaKgY6L9OBRVCHpf+q1nGPJO1vB2VXz6BmowZzo3h4a4x9+7LfXOomU9r2ons1ajfmAzdjKabJNRwvK8AQjflwr47m2rvqWJ2kt5inPJKj1XH8+ZYdFXNDo1DuaCWCbmmqfGz8SrRWbpy5FG3jPLqWnomZ4HGHX1DHNQETJgJgy7bFPE5RlWZ4sJuAWgCVCDKl/UTXMxTG2pIgkN4+VncEjR815je4JcQcO6O3gJb+bWN5qtKPXmoMXlH3ejqMeGGb3RXS9G677ptL9dkVMRkC/ZvAxtpPqaJ+Ox/6zZScDi2PuEvlY7txR4JaUaj6Io/MqEJEMuMxK7iWZJptq/wlqo8HwMuYHXACiE71mts+PrN+nCH8gDIMjzr+QXN1hzxVRHmDBhd5R0h3D6fpYIVkZBEQH9pFCDAmFmyWhFJUeECZjEu7dUYhL85Q08qrx9T1LJOIIf7gIVq9WslkOMGtqMyxuISFjkEoQhy3zU/AXcwtrU2lJDCiq7/oLtGWk7bK0kemWXriZ4m4i9VDKd6jxUC2xe24e4B/epyw+Of8M6skL7Pmj2nHr/15hbYXIdyj6NwyQAB02IQ0lvAyjVoc945OIdxKFQ/GjHxrTzXD4bUk/ttD22NsjW56bxdj2LWqgmOWu4v3JpSVZvwZBY+9jNmz0i/UQKer99HOcrJMl14R8C3aIw6AfW74iGd70aoTntiwFheUu6IiIoh+ISbTFhE90KiwW233Spa0aIKRPW7z1S0E6tuBd6QSRtpwfu9ylxrn9jO6jR+6S+HPkR3QXWkjlPWpiI+xXxrTDC1ieyAhWkBil6dMWSe2SBfQcZZmb5x08dZxxQOdLS9AugAz/RNYF7xiYHLo5FMbdMcLKZkD1pEgyHy1GhV4dc4FnOIWnO3ujtHAsO+E/6yPTF1BL8ekJQG/NBWD48IXgSKhexV5EarfuAeyA7oEN4BJ0oCLAuZDmDBQsOdgKbPgydzS1K5COIFFt9vwTpnmMwqN4HNcC4xgwqLcdeePTbwhsRNcrzxCDgSPAt6+b9Et67ANay8sCZUrpIdCp13xxBadcE1zAskodwrpBO60CGsUlHdYBiRwON55TccJYIOLXa9kMWJ9mBZnvUGP2sLTbRoPJi4F4saMbm+NSwg8xUAC4OQIOrhedqb+ErSZBbB+xc8X2/GrhLYAYWf4uT85wJ3Mr1dhnPAdroP9NcvUsrQQoOgDHYpojexVHRLUSWgqUAC6MQLih5BVa3nb7ebim5zqAU5b2OK0hvbp7iMvylBc5FUs4a4sCcN2mX9LnHgL9lK1LFpIEKlfg5S90sgQALzRpUIfqkh6nnosu26CeMBNKBfVG2YHVfYWQDTVix/suK9sxHh+t7I5ubCqr457yf7zVtnyLE9UL/9HPVFX1MSkgVqTgZZisFP7pqqosu8nFmCfLNNvTf7ttkKh1OHzESYbzF1QmuH1hshbP3v1GrznXWLzP/+yP9763AYdSAAGqvhpXVbVqUI1iJ68/FCgCCk4GEiYeZXsu8Q5652YL3eYqnm9O1vytdWpWDWWt3246m6tuISttObVVK63GKtrRzvBl1Q4i1Zw3H77gBRbUtkIjsFLyNLABgfT5W9vUsl3AvliR5uB61kpq+FGsfT1/YdpZtwWcdGgmDGHuAx2aTbQSKp2gcBuPHMK04MuatAVRL2QUwvE7RFwgCppH/p2G4ahgQ4btoscERugBi4hDEPku4xIQCFLmJOKV0vNOpbmL62BlAcjGHbHNTJtzbGFfpghgHryOHsB0refhhD06DF9sc+6/zrEM+nvcmwqWrzv8eQy4BoAdzT6AzqyBZ7YHAehbI6RpNlH8tbgZnq2eAIVjTpZSbu1NTMCkzMf2yEWeqbV/nVsXO3YH/xHNRStGIcVanIkH8SXqhEYcDG02y3k9n0g17Aq7hz1lIVs5yoP82xZty/9cHvnWUPsrrwAUOlt2urToTQx8UuYje7CItYzBv0UzUYteiM7jc9/94eyiUD/qLwSENtuP+2Hfr78/7Rc+b/vhOqc1E0YfuIhllxW+zHChCvd3H+nXkypZPDVUIkGMkBKKoIPGD58/vv3io+f+hSA3gkB3CSdlaVnYHcSeEIdk4bj0TZJIZXKFUo1aHjzBavQa/PgLECjoXHP92yZUmHARECJFiYYUIxZKnHgJ0BJhYOEkSZYiVZp022XItMNOeFmy5SAgIiHLPTshmmBYiK3n47SogBUqVPx/PCVKlREQEhGTAJzTq9+gSbOW7LFqzV7rNuy36YCDDjnisKOOOeGUk0474x3nnHXehUTU5BQqk2iyol511XSqatZnrkaaWmpVDuh1DdXHSqeGPoZ9tnSQqU1bZk3VUWlLSsqk267c86io4soSxK/Eu+m9X3LKKpOnqCNTYs2VJkymy5BOwwaMGjNuxLSZjKYsWDTvp6ZF0RAxUmQtUcuNAKD/DECfAXAb2A9Al18AA78DAGA85L+6Y27pPiHdzRsBo+tBjqHeciENPGtQlCf5MWRiBEBiNcAwFTyYsqDQF4APrnJf6HlmJjK/SKm9YgVHIRcAp+pGaK6kJNyjsAQwEJgYgMA7DEAM6aLIO+6SPjO7TJMbp0qE3IEMUgSlGhgojyRIUhss1iKjR014hhi+eeJrwmLxYgJZjXuT7v38TXo6d6pDfDP+WAHkxH/GkFV3VeM01LR0s5Riqx4/xa5rS4yID3/vnTXtlSPcLjqAnPDcycrK8n74+3grX+FV+0OffZw8gV8VUNvvKrLE5AuMhvkGFaVyEalIT+tGIiSmcSIGJ4nkDGOUyg/T8A4GE4Jk4DLQc/Y9S40kkjOM023EiI4uTPTIlONb3ImSSA7LHaXyyHeBbzGCkIShV/jlnnQHKXCxRETAHBw3OVyA6M61Jr4uY+edFrSQs4cvxG6RBMghimpV5rwThhHM4I4GufNtEJMB9zvlok3rxETnVCWHOT5wOSwCymiVwOtsjlTJSSGFBViCUEwOB4sBM27qWhrE0UnabY2E1U/tnCBhHSy8SYuKaisFn/BePsn7/386+EgaxDRv07s7Oty6cUY71cU4Av7ylazNoyRZgQQiyTz/pO+VNZ1FDKWk2pciXOvAqvtNnt7CHGg2titIJ646o8ihLunph0tjv45WiRCvcPswiVtrQ9CzxHWvAvGb3d4zw7jsSGSwefYY394Q3oLlLYA8ZJg5PBSFLc2zjnLUi8GxFuJ46IlBhmZTUYvCBjjahLYglmDDVpBwNNPMe43r+Sig0H/nIIymriN86+CjwpTagOyHJD0fUy43FJjut+Lfl5xgedutnj/I0T168uTTG6vJVW8kx0ApktM0N0FNaiuZQaUZU0paZJBAIhrofvzgs6RBAaEslrkwshpg3PuXKAlawEtHdktnRjsQOcVw22VqOEn6e9OEHgolJctNhsy1At7yVzRHc5OjfsWJxYTmi5ZNQZjBGjsM1MZojMjScHBonnGjtgIy8vCIFsuMoYzUYzk8CcoiTEcXDoBBQd+bDAr4ZoQ7lD7B/Duu8+4ZWeubqD84RuERYLPI+NZ6zEAgjlOBltMWGTwsP8usadnehu1QqVoUUNG4+fLpqULNj48c6YMOkn4usHqpxFuhXq5oYiol/zAgVnGUYNCaGIOu2U1F2v464ThHIyBu87srTgrGcVZnJJW52CVZa06L6TxATCUCHu7xCLgbO/YeT4BSMrmA4zb5hG7kBngtsDWdyBmuhwz8o7y/jJMlzV+FzqEaQsFpdoTLKXIzjqalDL+yu9FlZ0mgbIzljk7KXwLFNOeUsYXHWulRXue+sLxBpkVVCVfkKm+IowjKBLyo+bU2SyU1Zc4V2qjd+NxwuS/ZrRTp2duxYHl3tX53U83oozpPAHmPQhomt8YRThNmgVLvIdHR6M0oIaI89E0FKmUlGaulqfhzcoW++Q1J1sxUN1ENeznGSYcyEhx6LYNZ6BCgRgugFINgi1cz2EpzYS3nSEuFAl5LA2wF4WXPo+nny0jC87ct/p5MaQZOZSjUNryli0iX2gHCXAZGJb+MUcgpQhPir2N96zYOufx4ZKNDyS2LrF0GGuptZYAccklAp7JeK0JqYe4XoeXBAs6uMjIU0px6pjizLkeO1mCaxeMBDcscaZCzYtVQeS5AM88QRSodl1dcIYZx8mXcoepXwerscFn/oHwYJrZUsP2xc6vBgJmc7Xczw0IK29UggtIicR+X5GKh6X5VeDty1H/LOfVjcSwySGTB7m1CF0EgjoZEx6iX0M+skTonVqN5lN3XugFzSmsKOMFnekomFvtX/WFEL8ARClsUWiBUM1oSNyRFdrg0+sGkf+DTCXn58vWKzTofZ03rPo2BJoFnBRj9ynQMznnZvLSFo9teUS/OAue+JF/eSOHtiT4C9LhB5lpgVRBGeatJW5edAra+wXPLDrWsuaeH8wmwTYlbyO42f9nBvc3LdhjJfa3Lt4oXY6z9PxEn+XVzfGVFyJpksEbzs9S3iqML1kWiTAtW273PoslnN9CQc0en9JehXmrg10tV/R9jRjiExy01JtgGw3j1Q3U5GgRXTjqtSE+eTASGgKOgjAKscYu0uGGwt9yrQazh3v4dK+x36NxBzdF3ID6TocYY6WJM4RUbpxFl33ceXMOySu60MmIUpWlJD68aLL7d8I0/DEhM7AIAAY5bbPjPXh2RH0YYhPDQaKzC6/+bIQIk6REUE2bAL0gzlm5FHkEB+rzGGbCj8d3IVhXstmLcwGAWfbIdvu5rhmXxS1DPuH9KVRiiYFgVhi9gf+DK2DwgREYakX+1zf3G0YpgebjUiDFVIEl6LWtDh99ll9iuGA4TS9wnr10M6L/1480X5tBa/yxr6r3Igt7J75bEbE7hRoVnwsGMUDHPQrUid/O38qcwJP+xfbZMdrDR0WudOeTTsF0y5cKFOvfeoSw2ENY4TbVMP2f0/LJHWNqAXR60/k12e7EoN9bFN3vbplE4zrbjBApzOTT09CzoTfqD5UPS8odpmsCB8ax1W+fejvaaFKAyZO1a4ARj/wb2gADO9cASicYxeIVg+qxkH0bAkS4MpXlCqtRpXWVvwYdHc18ahisMc1IAddQOYFodyC8ButfgKCg0l32Nc4aQw33lSoirblnAErcHVNsGCpOW2iOYf/Gy1WyJpud5nnSXAQl+lFkrLoAmHGXZj8AJO1aKeP2W/oCenmrYnKoPuJeKK77TXRmq4e03kurWbrtlY96/zi5uZ8dKURZf7y3qeXHO0cJHpYAei70s6E25R6TkYyD2chSNdrcDMhoG2nxpPfBLdrW432c8bVu04xwuS9mUkrkD56hEb2yTS88AawWli6mRvxGexhMbgPSypp+/csUil3Wf0spOudp9BJmOxRVO2ctChs4uDzKM/YwrupFO/9R/7lT8sY+c5kVh2/fwX6RerIuyo2XlZomdQ4onhpKRYt/7FMZCSIeADeK+305TlNZJg5xnpFQR6al+mvvKQmy6tPxc++KRvnxf/UcBaGh2smjUfovxB3YsMu5J5WpyJSd4N2iRJgqmc/+QrZlT5zBLpy5iC18Dql75K9ygxoAxEaPhr6nWwErsWmQQMhk5iPdwBWY4LaepO3oFtJlzllIAxbeWUEDhecenPG0bzwTmii9Q7FUSZmAONZjokudHDspSISiGyEjQAi4KPBAbit5HJWFKDVFQFKujZiEZtuDvgd2eL+A15k/5CsaClLy3xZOVplAGbSeDz4e7T+Iz7iYDEkRo/zu7Z7NzDyDXxfk6QMdutaVNVooRpKFwPqtqAoeSskJspyKcAHu5sPdSEV3wkuXwtwpT+mOfg8vUjmdUFSehiRZksGGyVJgjgpdv8mcoeQD91cONVgZkbKk/rtdbWBBGLpSL4YbNSyMe7b6gK0FPi5g9+BXsIrpCletmzshNdyWVgy7ZcY9VA0eKMXQr0Ymdj443AaqbPQkiyDx7asAwfa0Rxujy1DzfTFskm/hEuY6sp+yt03e8ir7WgPVLoYDdb5mAzkKtlW6SJRpQJ5WTu8H05tqO0cEXKGVfPshVep3ixuRbj2gXnigbVb0GL0JC8xof2Q0l0jvQa4W5eqyAvuk7CfICE4hW9/C5Bf4EIgJUKg5OnASixlmgOTjbo+rHes/tceMnd+kYoDvHKJ2iEHchqM6oXVw5dlOfwuU0GSFtOH1NcuSsvktiuLFWHQKR4fZ+6LXiCWXlcV6LDHJrQsBmG0MGk/NQoVJDkGgEchadrrad7OArGzcjkvNRSE2TCpM0teKVZVgG4tLFfIwhJqXRzGppbM51Lj7JR3B0j+QWjmEPROHGGfw647WKvruOfsopx/PJU5fpNxt9p6g1FtE/GQ/Q8+K93XaY3hbPFORvPRP43kavcd2QQmCBVHprUelHasOIZDiR38MkSwpP8xIe5Q5tllwxv7sFch2Q2Gnho8Y/LaHK6s+xLqEActjl+UaHrJTqaeqccHXMfmlLCHFaW6MaP1lrUXjnQhSCRYQYRIyMSpucIBhqGhbgxWp09pjgO1LK5rOQyXkCLIqxN/XDC5Tn3HkXkx9vQ0Wb+fJATo6SOuMrtsMR7yvTO9X9sNKbOF6kqp2KvHDOtJ/gthOkVM91KNT3dDIoBOVfls48/5xacN7F14rpN0fhnIAtypFQsq7WbLdXo2eEnf3XFuq7xUdPzU8XPupb6QO0/oCgBRdWhK/xDwINQWOFKlXYfqZKNk43inBMYLRSMwkDnYO4f8fW16gx8LhSshHuvX+O8hgdfTI4JIoGKwyihWMYqURBBQcq7JAR3UskDuwFlzx2eH5QYCTVsyiQGo6hJecrKwtchGAznMYVHuaKaHT2FPJS5eFLJhPNlLWjz6ATznj13QzwCs2bkJBWjC4tQyeUlQKoF4FGJgaa2jhZI9qdwsnhCwn8nc2NA/Vlba34FBKBrRWeqRTaMiKH6KEY3//aj1smB3U3A/fX8kzYrMftzc0FH56cev35Q773bN/bu/ceBuw9ae77/4P7QfP+/Hv4ORBPiUkYPpYvIZHoCi+ERhDrrGxxUpTFIDRyL8C0047PGGfGveMC0CvLhYxgFZ2FLicBzLVO785ezgoATzfmu2lgzu3X/mO7lxlr6XiT5ERZUtWVpGoM9nVNVspBJdA2ihtr41P3Bzn0uOm04GhkeoRgkZRIQkwxA6O3orjQgjkXcXdtZW2rpgiblJ+fyktk7YDgtSDi3cLehpba4QaodM6NL8JUIdkmVG14CyPsPrLwC8ks9f5eU2eo4xTRIkvjweM5Y2gvunVglKFhkNWHn4Dw+4quDl3NgAoqNEPzBegUTCIKm/VDvwtMelyLs6vwy9A1G0H8deVgU23H1IG9y2PHOiSmSm/JApxJT8rk2rKnODWddf/FbDw/n58dh8oCKcuIkBPfZGgfiy7ZgRm3/w/WlEoFiRQ0l2csv2dUFhZQ0UKMuOzBOfaDCMRD9kNERHevqIZrSEDXxiDBtlPyfl1d2+h+0sRxg7BL4SVYdCflVTvP51PqOrWxn/Cz4xMIfFxCHEjgriyv7B4EJobtn/p+58rHGtfECO+AmwBTp1ldtH6iXdUC5k4D3ATvMN6cF+D3n8iRhJKK6mhzWiRXqKgODN2F4DoLzVB5p7qipqmukLR3XMO/cG3yL97Ob6KL2ZSGdlRxYAcEWsKhO5PNzvxOpVKl04ovb1sPSExVKla/fMh7+vzAkUeWIy2FEYmiqO7L4O8+q38/+Rjy49aIdvrS3iBxGIZMTgqogvDigSuq3Rmbrfy2cfH3jfrzhEsnXh9lMDrI3Oel7lYWF1Kj66IaRZ3lzYjouuka1KvQiPsuDsMrEyhnREQsmL+6L1BRyeDq7nC0zEQi5vEBv5rVxrrZI+epR98zN+xpApn7bFe3Tu1e2jq5aioS1UhlIlWRfA1k7nttyB0N1YfuzjXoJ2BvqCHUBizUQGkZJR1jmxfW1pn7veqqb1WoZaUzs+yzTM0BTWrZ2cV5OcQCXGaO2z7ge3fFQUKNPp9ycfl0k6m/XtXenNgW/8fOM86MgOJP/sBgx3pkrKlJ3Z4cD5RZHIJXd60dfsbua6Vp9AzMusNP53P235Nhq+xvLPuHVG1/E7S6LZ2+sLZ++r2lRY6ur82HsGDilDbeKm3icEt1lRVEPvi2cmwfb6qqGWtqq3osj1ZckaT1CHpKHfo8u5SdQ+RK8ykRQlOAlpWNuRxqSWWZbp+LV1aUVXFt8dH1q4Q13MSjHhTM9Q3EsQV6XOXfDdHqY7WJIfmu4NPfg06SPLiuXDgpKpaVqpzVtugX1R51+8dzkpKTeiNCTpNgBe5cv5tzlJ5SPKRprp+vda3d9JJIYqzB14jbneTO2wjQamWYn+zpm5swrq+sEwiMFtGUsL4Mjm0snvdiwVh60+ofG+fheIMxVY8b2Z1c03Pyk43N6vMebA922/kh/Rgvg6sHxwA80h4+erHx8L5XZfcpW9KJV7/x6d24T3wlBt+9fX32hOp5ICOAUfN8883ZtwDVKVgRdvraJwTwT3Z7VDUdaaoCbfNPN+ZBxEn9DHoAesVsptqcqeddLLwIfE3qfjWoZHXLDavgU6WUe+qaD/xa4bdLlb7b81VsMYtWE65dLvwiWrBfgDAMS6KkeFdDuPHgqvmG+RsMmVveNNvV1zRdzkMT5M2KFSaOk4jB5rOYuHwAKzRDeXTlKjM5H5frTjO7i01ycfNg6ezB6SZxZxX4x43xsHubZ5S8ROLX5hvmNEwutlWpaAJRjPwT3P6SAfFHvUoGZLK2sV3dfcPTLc1DM11hDcK0HAzDh1Txn6BX3vSoBDbrmix7QYGIhXskdkZHxtgJNIK95r3gD1A0Thm7GicU/MRsjBlV0V1fU9kjhArMGAWyVMbHkLCtyjkqjoWRz1OxTIC7Yf4HU1iRJ5GKlOZcJScumZCUBLAso9k4y/I3+7/x9k5mxzxSO6B+jUkyY7QdO/jwyMdv76HOHP/zr8+DNwCucLuERK64IqooqaiKKaSVmxuVSMQlzWadEoWuFBDKkNsaXnL7eXikh/HziLmr18GveoWZwsFVMbAluGIx/2ZOxeRyy5s7vJnhq4iKJl4ZucmSKEv5JNDh7zw0dElpBOhYD+vu9wFnuuAuFEcejOKPzsKwuqQVlV1CV5GZoEPlJcP/ynXkeOYGJGRjc+vlSoVR5CSedWHkB6cD8uHfsjXZbeY2lUb1PMYuIUj9aMcB0PY8yexvzsUUKtgiiVhhJivZKFwOuHjeb71aCsVD8TXSxfN+wLeA5YB3xnNZ50f99pClzkQ3Yql0oUTqSnAmkKULo35An9fVOcnuWjnjfdD6GLF+qotQv7xpfcYb6N9Gx2tC4pINB65D9iiCYGxvtjho4VkOslpYAII1sERHzQXvVEdowDEoPZaMb4yxigmvqplbGMmUZ1ZnyjJHFuZqqsJTWjbiY0kgw3LIfAh8VQyR7s8zJqyqet4hk3Zsmq+uCgNIThMZMO3VGDRykICIz1PnxSMHciLR4I9fdCt9CyCrKXiRKebD5BO1avlousZLOsS5rkKlM9cMLaQr11jJnCSyO9PsmieU5EJFINZEwiN2Ou2sp2bb74wKZOhVleJOhZNiwTmPjOCEuL/43bVygdoa5JARaGUCq2o2W/cYEflYx85TBCEioLy8JN04xBuKPLYiMAwBRVJSqdtCqe/DDN0G2HWUdkw7RXaYscnb0g84TFs9wpBTDBgDX1/qV+pBhrDOXDebUW+uByhIcUdFuaJPBi0xE1NjonenqvEwhhsdjo+IIiWiYmmNAwSGpkIsNUpchLMubNo2gb9fO969/FxGRFGwPEbSgZabPkvYDIZH71JU4MsRue+ZATDLMuqMscZGI6Am0O/fWlm9f3M8PbttefDUqaH+0yY4yNH+ofkayescuJkYUZqipiZ8Owill9MZcnWjsryhScaozgfD/moFB48nMijprekfaasR0Oy45TgC0/8JDeIYFRHiZXZ1d/OxCYIWWoEsD9czva7vjO6ubmwpIwmAN8+q83Qw/sGTieEHE0PhEIYeFJUcrKsrLKivL+DV8fWnsDDWvRV3FBlzaYvoxRM4Z8fPQn1Lgj4NxgQFY8CYQIKUgGMksqCMRBEIyLkCAYUsKBXzcciQ0Bicf+g2wCRrxncZd40n2hgZfPwShtn5Rwfip7ZNXXGHETwjm1V6DjGLzKQkh71TmxXz5CgPMJtwBbm07CJye8US2nfdKyoDQQtOi3KXeCKbK/Vc4k5SHhmLOU0Dj1m5hj1yAzhysrXVtm2svaF+zNBOKNO/pYAHPxvNRmDV5vaYgOaTjt32CRI/haRUWAGcHY94lJjvGfWDl7U8lsQDtimzxaUsTnEJnVFUtnpPlMcRcUC9x+hS9VL1qOs7vaQzbxLUHDNltFsydbov+52a3E3x0fvKV8h85NU8cUsd1+zPxP1Jx2aP0yp5r0uuV7eSp126+wnrieQ5CgZlJs1JpqUe7LPYtBfs9KwMesUCLQytX2mpaLJgSc1Jy+mSGk64CjzLm7tYCkjmyGAO0jWwmDt2IYK5L9jtkj3iiHsWY6MRhSsIJvSTPGMpz8nCYHOyywnZWMwgiByMH4xs9fWBSrffHfdrs6+371r13Rg0ZIx5672XMgyTnu/4UECxFExF0jtdp9+dhXam7uNb81XONCptwgTlfaktPXLDquvtModx8JUld491TYLlepPCkppjRTdPig8V8pXJodji1nT2LUuPzLBqc7vMfeQkcnipjVquN35oSWGvgH4LAwaJL9J3KDMA14lzArZvRN9Q55CZ9y8AyrGHluL9sb1IIKfGxYzjLJTxNrTjLZL1JAuqO1dzIMIyNEF5fVdxkG6BtuG+TcLfsbO6AfI5q/X5+W36IZGXp/8Pr/AOi9HgT1qdTHAYL80nbWtt0B9GeGTt9IXFUuJxgLex3nlRgInjluqOUjiljRV5VzGwm1X1EcUOrOrJnvpfPaywTvCkAll5+OqIKphJVYh8LD1rAbfBTBiQVvgAD9cq/1DxmSR1+kJVXpZ0NbVk7a5m4bNx8Qn4VFKUyrVKEENAV7Q/N3+h7+5tbjfpykpJ8S0YoLvIhZeyAV7ZuVeNbAKWJllkOO7BXmNxiQORwZwY14BK0VlZRw8ayna8yC+7bx7BwuXgFTlZ5YRsDHbsJ+O10wonEHcM1yOl2bm4s1ypevOHonloyhRR49QtpsNJu2ElAzL5ZHZdZt1uljQvV9sewwkYgkD5RfQ1SL5H+RWP8js8HIWEC6iFFMYjA+qAu6GbwJC7aKaa9hJLQBV7jamufLWMZ4cxc/LSN+oSvJ+QF7vBT5fqGZe3ahqyshBVt6XahywdquVe333E0lj3YtAX0c6wVpv/JBy/9TmzEn4/pfuIC3REbxgeavGVSHyGY4iF/m8kZ3pU7Qhirvf4yifdDn7Vo6QUCq5qjJhMATcFTeL6+NddbfZRZDYuU/+lpyJzb3lpwnIj0yrNqVN4BSzzcj+ywtxKPSi2fHKtsb3R7SP1qtrtanAcAMot4e0kB8lRUdd7J2bakvV3x76WstE7Of1zIFHX6ejlmZ6Zr/tue0Yei9hkywyoX/J/jyf2mGUo68IrK4zjLi8rTwAz66ICTKrelYMXEvpTpj8E/mJVh/bo4VGJWbbnCTLv+NW34hix91s4QiHyyn73qyn4TnbmlNXC03BIuApu2IUXbPe65Ed7le66CmVlieGdnBwkz58T4vkra2dsRn4GllqUEtN8vat8/qs3iWkY5L3w5lAB2SFe95qMUgVf52MSW3pG1O2xatgm1tCPrtE79aaCNHL2tyhJbMWi5g5JdVqK1jzBqiqT7LsswGI0G1/S45/FPao6TCjuH17W5rtOYuhKJWAoQ1SvD+9N6Uoj/Im5s/pSfcFul+BRz8LBpE/6627+GIK2QW2OyHcMgizIvTSS+UxUKIXKcHM4Uohkxqfe+uxbMVLc9Rb0+lWhUc0hzT7KwbqsFo6U6jv7GmZ3rrK19iNiJvONHvicHH8ym8UZIJw/mLlqz200xrhxO8Icyj8nBPYrS4iU+7dCZKeAId63NttxO54cc20bm+0yrdZBSvta9uQsJ9gr39KL+ajnrUtq6JZg+b2yCBa/UYeHfbPudjBXQmeJZdsELMVZwdfseOAk58kyVTSS+2+Osu1BUr8Oa3XXZ3UFNUMZ91vARXk9Pjq7i6ib1hY5CmhtgvIXEbQN5kA40OyfSNRXow6x40A3tnkLTKl5Zjm7YMP8sjD1Tb+EX2dm/h0pjGQsM1xwMkoY9XeTr8yii9AF4JhIITLcHF4lrGq9LJu8Q/QA2L6W9wEkq4A4504oxZpNM2Di9jZOe/62xmgvgSRG8kRQoFnBrNQmfz9kdOVfpRKMZE+Nu17rm+7nn6dxB2uyojqSb2kGS9JWnvXx54LHbG/6OtgmWmma5+N0wTzAW0As7Hw5Dp9lBgdXcHfZQUKLPpRyceXIhTYPK+PR+/nv+OaKWNHQULT1ySZRh253YGOAi7V1bWFs08OcZNQif2nJl2wNC3D3PrUoDbs0RwC6leudthz8xFJ+sWVa/y8RcP9hEEcjKiSwUprJVTN+Z/DHEdR9tAgk0SBtQ+AONF0kPxviovki/PUQMv2lBdK05X/VyAI18jYeNMAF/FTwk8gc8qzgWWlYp47cEgZQnzpjdbEsZ7bQsZQldZCFw/QD0MU1sdHvdpkJewGeani3FrGJq//zQNf8pQVpaPJvT59alWX6qwDtEi7PtNWL4gRD0jPdYJbpP095zrcWgcHQbqD/V50+LBHfxRIiCdqpUmsYfqHXu80dvbC2fuS9XRIyDvHaQB9D6BFLdMPrCAJWZGQW6u4UNjFZhU13CnUgwq1l2D5EdxbZ7bW2DM10RTYI0vCJXuSXNCiT6bOLdxazLx51V92y3O1C/Uc0JNJCDgLVHkFBD4znSqrJxLL3fCQwxifLhKhIvuu6Pe6dCxnGgN31rXMp88BQ1J+jdAfUkWdnLtVPHNCVn758CGRVG5utFtcHay5g3QqwYXxuh7e5PcZFMyXObfWukhaLg4f6VuSTWi0kMVbAfyL1IUIyWc5ygXNey1afwb4M0yCRE7H55jiuB1hdMH/yTMiK82zvlUNqy6IoFj7GGwgd1tk2Xw50k2xl7M8c+LOzZDySukHTIV7c+TUWfB3AE/EOILIDQW4AIB9OSxRaBY0Je5FI1LJWUdL6ausgYdlrUYr6+6d8ZP6BVq0//IYGNaT1tzc3WcLpkhat+z9vfFPNWf+PvYRyiixYQhaGu7KxuCBmjpAiaHUZKTTnGXGr3/kJ9aIrRrmCtdiqfZZVXUFERGFvfRGcEwxM3lb6Jb3tyHgLhdnrVbWDEtgWWHZvFK/4bZG5qRy0vJzMe01KMvvT50A+6GuMbPmTB9v3LHDfWBnrLLHVeIhQxidmbOW6/cv2vhTZCJ89+1DmOQX1Bw1bQ7X8xEK9ZB1qYllnnPn/Hbjiwjr8PFQrTn20+cJ0wSr3S/CalhwzX/N2oP5xqYoTFIiZALiKndGImOEMVYY96OtJPh9+j/OOtROoBD9e6Q87qQueFz8G6HdI3fS2uH6pvRLnhhpCY0YP0VTV/F7PPBVlFQjn+a8fhHg6lxCIe/VLNNHEVbGB+31PnTQ9N/W7C5T4RhT8tTDYiwEKUk0VBRyf43vNc8fXhwYLOBWmlIZexjRXULlWVsmd6aP/ocYocjkbhSOsAjydLmyh3L0OFB9kqfpVta9j7dBBDcHpmxf/mjsIhIdkL5r9ZJlqaP+wzs40JrmuFOptp7zKpNUWq2dJdpUhihYeXh9VelMMx0Yuq459grE/f1tp2aoT4rj3C+l46fyqhUTNMKUREiTToV73G1suS/fn3mQj2JkgwXe1w3Y/7hNWFKDp3oJ0P87TTdw0cPyRYwULAmXWS8g9tiZJec1X7NJyIp6H/PNvwSFt3c7eY9pz33x/zbSWDRpM5LtZ9h23vWm+CeKqhmRSMkmKY5KRRqND2pUV2KINZEtBw+G1BrOhPmJsCmED42p9cZlnM7D5F41beZFbRaMz1p/OShof/QSd8ARE26nZ/6UYPPKgYP3g8R6UCFhdd7u8qK0SJpv0YeOpvnWnPCmbcA/7dQ/KAFxFS/elTfmI9eU8eZceVge872lypHErhqO1ZRW1PPHonCaBFJPqRurxLKmRsft29GiS3r8T5ta1oznsywAG6HBLapQqpLqkldnF7KswOoyec9U822zvFqLCLRclrwZV2Lnsb+d/8U+qzamGxn1z5fY3ra2GnXg5lOpaSj5Sr0vK0e6bvOLDyBXFLf/zBWzAxlpubTNspxz5iWiurBnWtQSukiunRWd+e/e52sGmuhyrxVVVYOS1/vhnnEyJSFk+9fwU8L30zbFvJuGG6FWvDUycoZ1JWCveY/7GNP+d6dOju1cVfpdOAP+Xp2urhQXJyQXCdOxP11ULCpKSCgRe39A3ERHzkYj5CERTI/3AvD1E5CAVQOMEHBH7qK7FWB3hO5IevS4iFjB17Y9I3gaNtYreIjuhOWDOaFviqvZpHgZkG51G0cy4tDng+6GVU2oYNMJrKbbi3FZWGiLIjGfBnHb6Kuh6fx2/nvW+y91TvHX3Q/4W1Xx4twVc/yvtw9T8Z0FfFqA69+Ac6rsrD67Efnfu4bnY4NNw//erD64Cm03V9jZ6U1WCg+aDyD3VziuXbz5K2BKo2EZ7eO1/hLlsNQkgRwbBYscIf9wVumX84uBs/frfj4TvkRP4339ZdVhYdj4GImYAhM/P7tk+u5GSV4NAu+qTc4F6Y0kbxOlfWvcUdxn0AowZvNC1k8v8l+hv6Gok+tu7dpvP4LECDE4PGzZtwDMBUgUJLlyYYElCIcGDUoHgukLHLhh8PQYxF3GYqzLnXVHzURgNRFSvxh35p1PAZ692CJW59JDCfutCmoD60loBo1P8hJT7Nu868563d5vj7GYPVEYl5d5FH3jpjLak0xg9M3jy4SZRUFjQ/f6DwrOdZZk8uEDYpUptxzu6NMARpJCe48jT7IwJ4Z+I3cK7dSartYfTDGU7492qheCm+QSTGcgdZvFONkMYxaJ8bnd+vEYnamjMiyoqOZd5Acv9SD1g14XUfPyIfurFPM2cSX85h4SFP7xGlE5Kw4s909dOSWvCeTryXYg86xWtAaLl053z39d0Qzf2hkwDjvybhiE8diB/A2Mg0FoJI29lg1fPWqNLCRrtGqj+JfYRUR/J/JsHkJXgLwinBFoDdekGz4Rc5oF8bcg9vwDPFVvEHWUic7PAADKulENwZ1ceHPPl4Z1ru18JVGfod6TQl2iEnkoxhsowmCc0oA3gheqD7bjz0DNlcw4LKYPQEbNbVp/TGKB2ULJp8OwiPes90BrI3Sxwd/2BBuYXHlgHXhk7dxcSkX8NqM8WCaBr0BYQJVnfoDHTjayS2txUywma8hU1oYfuQ6gVzU58MJs85g8ZJfZwymnYjCVM6C/sem2NgdXn2V3HHbxt18lcKOjdLBcrJTx8uuH//1XMJejBGmvO8lm7ueSO/4DPPS0luyRzqm2Ws9K3Y8sC5iUBdX4aV07WDZU+f/2UP4m2z1BNClsBQZ/h2QMwIAKTAQCgfTwQADCBHgSABBpAABjvHQgAp1XOCIAXNAgEQKBoCQiAUNAOEACRod0HAiDWbDAgABLlbAQBkOkwR0AA5LotbxAAhe97viAASu22HaxplwCHgLdXUi+9JtbodQb6wuuldfMG2pbEwsq9xhvZWL031nOcvIn2Q/Jmxo7am5s5V71FX1za+VEaea1swGH0BoyUKo5waN+BEzt/skOdXiGi5UhCE6RBTxFeGf54BzbY1R+0R7BWwUzYZ0wlpNh/uXduF8CrATuW7yCIybBbQAmLUrnu46Fnp+RR2A5keyxQSLTsBAglpYFHZhfPgQB3FjiwK72+70qmpVfzce5aQJyNJJadH4w6OH+4v3+15o+5V+tAbqN4h0UhLuLjd10WbauJwxCQ1SijgjOjaAKCbMMS1h1OO+SUbi5rCEbx7ourojwQgvRW0UG1vFYjyC11KGjhxcAfl8MPh4CRJiC1oO+jd8S6Zy9+6A9ZdaTEu2HtLVBxnJ51ac8e4hpyO6UKY1i2XtVBFfQFScAcqcUCqEUNAeF8sXaZ8T1X0yCi0h9QDrgqc+aB7qzfnwWkKmStI3TWsPWIChFCh5T/0x16zAwp2XUiJ9Twh5/nU6oCc0pkqSD0NxA53ZCWfCLMfQVtqii/KZflNGtBhPzk326g3xSlikIx4kYUPRZayOrCkHZQPEK4MKQzmqefgiqguFEw+SN1fmn3a/HvVxuN4GpwIeoNaV7QsMrtLnyCyP85GgxBBcYRDkJXzsuONFM1a+0CPhfAcAbGUqJQ5aI08wIo+iaYWUq5wfsKxbxkm4Tdpn3Sxt4EsF3jkXxF8B22Ih0o9fuJ9ZPLmn+W8HBeI/EVUf5auCpjVlVaNGFh4ntyg+wL5GOeh9UqjvOzBTnGo8XmIshLaXXRXrqH2B38/3shqJxV93Xo88/bYhlu1Tl/JsiaB7p0O2/Gaz1GDFq031o2XPK5TpN+9JNhfS557AdLDvjFz3616pBPfewwCakxMp+R+8Rl111x1TVvKNx2w01HKH1v3D133FXua9/oV6lClRrVVJbVqlengZqWRiOd/2vSolmrNnpnrDBoZ9ThrW9tZatQkWIlSvnn3zLlKlRSfUYHqs0jiOqD5ZV3PvkGzy//AgosyO/+qGMhbSu0sMKLCFFkUUWHLKbYUMX50/3iSwhdYpiw4UoquZRSSyu97b7yrIwyV4C2Z3Y5EVbM03XUsfOHEjVa9BgxY8Uuz1/+9tyL8uPErSBehSsHyvIrqXQVQWsJEyVOkjTZ8S8+pbOVV1FlVV56ZW/V1aSqtjoPPPUFi0eeeOjL6u2z2y7zNaROk7bGdDXV7LgTTnvHB0465UMm/9Nr00cueM+5WmpNX5uh2jOYzWiO2Xd1WDdhwYZRU6a9m6nOuup20fvzX8NZSZ02owyoydnGf+/qEvKhG3wLTq4kgYd0gCcxJAt8ww1ynLT4Z7X2qVF1gYEg2Gz2ONo85QdTU520SLZI4jmjvxP5DVlh2pVYvnBzK9eLU9nMy5+sU6RclsGlMPiZCXVjt28S+ZY+bzcr+91bHefkJ76l3b6z8KlGlu8p3WXl5yJy09p2oN0+GRnhJlekkt3ckYveax6NcqrtiL1PXePGCvk2UUxSNnGHdlHjJt/p3vrd4WxHlpP84LL1vZj91qW7zbpp18yp++TcLLdxzZ3mS/LzKu0D3WlbKbE3z3qxEuXibqtu7Fo5uRfrXzit3a4d5GOjSn41sZ3WlZS764X8qeoM5jJIDueKXd4du70rdnqtilH2tMpf1/rYqG6+T8bBDPlM8P20hkffb5+hFz/mOTc285OYPptua2SVJ92kr2PqSyCwZ5/jDpGra3w2/Xd9h3CjfvJ2htfVn/nUNYS1X4f7Xnx/SQxz7pH+Ag0X5h6WT3nGyzosHFzVEt9dMa82TQewWLfTl0INRjxo4ForPWNFu+3BOkCpF60cHlg/iiaLSL4BAA==) format('woff2')}

/* ═══════════════════════════════════════════════════════════════════════════
   SHARP · v0.6
   Built to Sharp_Full_Website_Wireframe_Schematic v2.0.
   ---------------------------------------------------------------------------
   THE CONTRACT

   BLACK-LED, TONALLY. Not one black plus borders — a spectrum of near-blacks
   (--s0..--s4) where every step is small enough to still read as black on its
   own. Surfaces, sections and interaction states are separated by tone. Rules
   are the exception now, not the structure.

   NO ACCENT HUE. The old amber (#e9a25a) is gone. Emphasis is a temperature
   shift on white — warm for Sharp Glazing because glass transmits warm light,
   cool for Sharp Steel because steel reflects it. At a glance both read as
   white. The chroma lives in the dark surfaces, never in a coloured block.

   RESTRAINT IN SCALE. The whole site sits between 10 and 26px; 32px appears
   once, on the homepage. Rank is carried by where a block starts on the
   twelve-column grid, how far it is indented, and how much silence is above
   it — not by making the letters bigger.

   DECISION ON THE SURFACE. A page shows what is needed to choose. Anything a
   reader consults rather than reads — spec tables, configurations, glass and
   finish lists — sits one interaction below, in a drawer or a hover detail.

   Zero border-radius. Zero elevation. Single theme.
   ═══════════════════════════════════════════════════════════════════════════ */
:root{
  /* ── SURFACES ─────────────────────────────────────────────────────────────
     A spectrum of near-blacks, not one black and a set of borders. Every step
     is small enough to read as black on its own; what they do is separate one
     surface from the next without drawing a line. Sections are distinguished
     by tone, cards by tone, hover by tone. Rules are the exception now, not
     the structure. */
  --s0:#070708;  /* page ground, the deepest                      */
  --s1:#0a0a0c;  /* alternate band — a section that steps forward */
  --s2:#0e0e11;  /* card, panel                                   */
  --s3:#1c1c22;  /* hover                                         */
  --s4:#26262e;  /* pressed / selected                            */
  /* These two were #131316 and #191920, which put the hover step at
     1.039:1 against a card and 1.086:1 against the page. A surface change
     needs roughly 1.10:1 before the eye reads it at all, so every module on
     the site was changing state invisibly — the tonal ladder was correct in
     structure and simply too tight at the top. Widening the two tokens that
     already mean "hover" and "pressed" lifts every module at once rather
     than patching forty rules: hover is now 1.137:1 off a card and 1.188:1
     off the page, still quiet on a near-black ground. --s4 was unused. */

  /* hairlines: three weights, all quiet. The Stone Veil role, inverted. */
  --l0:#17171a;  /* barely there — internal divisions              */
  --l1:#212126;  /* standard seam                                  */
  --l2:#2e2e35;  /* emphasis, focus                                */

  /* ── INK ──────────────────────────────────────────────────────────────────
     Four levels, warm-cast so the page never reads blue-grey. */
  --t0:#f0eeea;  /* primary   */
  --t1:#a9a7a1;  /* secondary */
  --t2:#7d7a75;  /* tertiary — 4.70:1 on --s0, clears AA for small text */
  --t3:#656158;  /* quiet — 3.21:1, decorative and large text only     */

  /* ── EMPHASIS ─────────────────────────────────────────────────────────────
     There is no accent hue. Emphasis is a temperature shift on white, and the
     temperature is the division: glass transmits warm light, steel reflects
     cool. At a glance both read as white. */
  --em:#f6efe4;          /* Sharp Glazing — warm white  */
  --em-dim:#2a2521;      /* its surface at emphasis      */
  --sig:var(--em);       /* legacy alias, kept so nothing breaks */

  --sans:"Switzer","Helvetica Neue",Arial,sans-serif;
  /* one typeface (beta1.3.5): the client dropped the monospace. The token
     keeps its name because 113 rules read it; it is the brand sans now */
  --mono:var(--sans);

  /* ── SCALE ────────────────────────────────────────────────────────────────
     Walden's restraint: the largest type on the site is 32px and it appears
     once. Everything else lives between 10 and 20. Hierarchy is carried by
     position on the grid, alignment and whitespace — not by size. */
  --f-cap:10px; --f-mic:11px; --f-sm:13px; --f-bd:15px;
  --f-md:17px;  --f-lg:20px;  --f-xl:26px; --f-2xl:32px;

  /* 4px base, Walden's spacing scale */
  --x1:4px; --x2:8px; --x3:12px; --x4:16px; --x5:20px; --x6:24px;
  --x7:28px; --x8:32px; --x10:40px; --x12:48px; --x15:60px; --x20:80px;

  /* Walden's frame: a small, constant gutter and full-bleed content. The
     page is not a centred column on a wide ground — it uses the viewport,
     and everything inside shares the same two vertical edges. */
  --gut:24px;
  --step:clamp(44px,6vh,76px);
  --colw:12;
  --col:minmax(0,1fr);
}
/* the division is a temperature, applied to surfaces and to emphasis alike */
/* --s3 and --s4 are widened here to match the neutral ladder above. Widening
   only the base was not enough: a division is set on almost every route, so
   these two blocks were still shipping the old 1.039:1 hover everywhere it
   was actually seen. The new values were solved for, not picked — each is its
   old colour scaled until its luminance matches the neutral --s3/--s4, so the
   warm cast on Glazing (31,28,24) and the cool cast on Steel (27,28,36) come
   through exactly as before, at a step the eye can read. */
[data-div="sharp-glazing"]{
  --s1:#0b0a09; --s2:#100e0c; --s3:#1f1c18; --s4:#2b2620;
  --em:#f6efe4; --em-dim:#241f1a;
}
[data-div="sharp-steel"]{
  --s1:#09090c; --s2:#0d0e12; --s3:#1b1c24; --s4:#24272f;
  --em:#e8eef5; --em-dim:#1b1f25;
}

/* ── legacy token bridge ──────────────────────────────────────────────────
   The v5 names are kept pointing at the new spectrum so the whole stylesheet
   did not have to be rewritten in one pass. New work should use --s0..--s4,
   --l0..--l2 and --t0..--t3 directly. */
:root{
  --void:var(--s0); --plate:var(--s1); --raise:var(--s3);
  --ink:var(--t0); --mid:var(--t1); --dim:var(--t2); --ghost:var(--t3);
  --rule:var(--l1); --edge:var(--l2);
  --glaze:var(--em); --steel:var(--em);
  --holdbg:#4a4a50; --holdln:#6d6d76; --holdhatch:#565660; --holdtx:#f2f1ee;
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  background:var(--void);color:var(--ink);font-family:var(--sans);
  font-size:16px;line-height:1.5;letter-spacing:-.011em;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
img,svg{display:block;max-width:100%}
button,input,select,textarea{font:inherit;color:inherit}
a{color:inherit;text-decoration:none}

:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{
  outline:2px solid var(--sig);outline-offset:3px;
}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:fixed;top:-100px;left:12px;z-index:200;background:var(--ink);color:var(--void);padding:10px 16px;font:600 13px/1 var(--sans)}
.skip:focus{top:12px}


/* ═══════════════════════════════════════════════════════════════════════════
   TYPE — the whole site lives between 10 and 26px, and 32 appears once.
   Rank is carried by four things that are not size:
     COLUMN     where a heading starts across the 12-column grid
     INDENT     how far from the page edge a block sits
     AIR        how much silence is above it
     WEIGHT     400 for everything; 500 only where a line must lead
   A page title at 20px sitting alone in column 1 with 80px of air above it
   outranks a 26px heading crammed into a card. That is the point.
   ═══════════════════════════════════════════════════════════════════════════ */
.d1{font-size:var(--f-xl);line-height:1.1;letter-spacing:-.021em;font-weight:400;text-wrap:balance}
.d2{font-size:var(--f-lg);line-height:1.2;letter-spacing:-.014em;font-weight:400;text-wrap:balance}
.d3{font-size:var(--f-md);line-height:1.3;letter-spacing:-.01em;font-weight:500}
.d4{font-size:var(--f-bd);line-height:1.35;letter-spacing:-.006em;font-weight:500}
/* Running text had no measure cap anywhere on the site. At 1440px a .body
   paragraph in a full-width wrap runs past 150 characters — roughly twice the
   line the type is drawn for. Tracking is reset here too: the global -.011em
   on body is the reset for unclassed text, and inheriting it into 15px copy
   set it tighter than the 17px lede above it, inverting the optical ramp. */
.lede{font-size:var(--f-md);line-height:1.5;color:var(--t1);letter-spacing:-.008em;max-width:68ch}
.body{font-size:var(--f-bd);line-height:1.62;color:var(--t1);max-width:68ch;letter-spacing:0}
/* the display set balanced its long headings and orphaned words on its
   short ones, because only .d1/.d2 carried balance */
.d3,.d4{text-wrap:balance}
.body+.body{margin-top:.9em}
.small{font-size:var(--f-sm);line-height:1.55;color:var(--t2)}
.lbl{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--t2)}
.lbl--sig{color:var(--t1)}
.num{font:400 var(--f-mic)/1.4 var(--mono);letter-spacing:.05em;color:var(--t2);
     font-variant-numeric:tabular-nums}


/* ═══════════════════════════════════════════════════════════════════════════
   ONE FRAME FOR THE WHOLE SITE
   Walden's rhythm: content anchors to the page edges behind a single small
   gutter, never floats in a centred column. Every section uses the same
   twelve columns, so a heading on one page starts on exactly the same pixel
   as a heading on any other. Before this the sheet had seven different left
   edges on a single product page.

   gutter    24px, constant, every breakpoint
   columns   12, one gap value (--x5)
   bands     full-bleed; only the grid inside them is inset
   ═══════════════════════════════════════════════════════════════════════════ */
.wrap{width:100%;margin:0;padding:0 var(--gut);min-width:0}
.wrap--bleed{padding:0}
.ftr .wrap{padding:0 var(--gut)}
.g12{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:0 var(--x5)}
.g12>*{min-width:0}   /* grid children must be allowed to shrink */
/* rank by where a block starts, not by how big its letters are */
.r1{grid-column:1/span 6}
.r2{grid-column:2/span 6}
.r3{grid-column:3/span 5}
.r4{grid-column:7/span 6}
.rfull{grid-column:1/-1}
.rhalf{grid-column:1/span 6}
.rside{grid-column:9/span 4}
.rtext{grid-column:1/span 7}
@media (max-width:900px){
  .r1,.r2,.r3,.r4,.rhalf,.rside,.rtext{grid-column:1/-1}
}

/* ── air as rank ──────────────────────────────────────────────────────── */
.air-xl{padding-top:var(--x20)}
.air-lg{padding-top:var(--x15)}
.air-md{padding-top:var(--x10)}
.air-sm{padding-top:var(--x6)}

/* a section establishes its own paint context, so nothing inside one can
   ever overlap the next — the failure mode that put a film placeholder on
   top of the following heading */
/* ── sections separate by tone, not by rule ───────────────────────────── */
.sec--band{background:var(--s1)}
.head .lbl{display:block;margin-bottom:var(--x3)}
.head h1,.head h2{margin-bottom:var(--x3)}

/* ── header ───────────────────────────────────────────────────────────── */.hdr-in{max-width:none;padding:0 var(--gut);margin:0;display:flex;align-items:center;gap:clamp(14px,2.4vw,40px);height:54px}
.hdr .lock{flex:0 0 auto;transition:opacity .25s cubic-bezier(.16,1,.3,1)}
.hdr .lock:hover{opacity:.72}   /* the wordmark is a link home and never said so */
.hdr .lock svg{height:19px;width:auto;fill:var(--ink)}
.nav{display:flex;align-items:center;gap:clamp(12px,1.7vw,26px);margin-left:auto;min-width:0}
/* the phone menu's category groups and its secondary row; on a desktop the
   divisions' panels carry the categories instead */
.nav-grp,.nav-sec{display:none}
.nav a:hover{color:var(--ink)}
.nav a[aria-current]{color:var(--sig);border-bottom-color:var(--sig)}
.hdr-cta:hover{background:var(--ink);color:var(--void)}
.burger{display:none;margin-left:auto;border:1px solid var(--rule);background:none;padding:9px 13px;font:500 12px/1 var(--mono);letter-spacing:.1em;cursor:pointer}

/* ── breadcrumb ───────────────────────────────────────────────────────── */
.crumb{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:18px 0 0;font:400 11.5px/1.5 var(--mono);color:var(--dim);letter-spacing:.04em}
.crumb a:hover{color:var(--ink)}
.crumb i{font-style:normal;color:var(--ghost)}
/* The line was --dim throughout with the CURRENT page lifted to --mid, so the
   one item you cannot click was the brightest thing in the breadcrumb and
   every ancestor you can click was quieter. Inverted: the links carry the
   brighter ink because they are the targets, and where-you-are recedes. */
.crumb b{font-weight:400;color:var(--t2)}

/* ── section frame ────────────────────────────────────────────────────── */.sec{position:relative;isolation:isolate;padding:var(--step) 0;border-top:1px solid var(--rule)}.sec--flush{padding-top:var(--x6);border-top:0}.sec--tight{padding:calc(var(--step)*.6) 0}.head{margin-bottom:clamp(28px,4.4vh,52px);max-width:78ch}
.head .lbl{display:block;margin-bottom:16px}
.head h2,.head h1{margin-bottom:18px}

/* ── image slots · every picture on this site is one of these ─────────── */
/* An empty slot is a GREY BLOCK, not a dark outline. On a pure black page a
   #0a0a0a placeholder is invisible — you cannot see where the photography
   goes, which is the one job it has at this stage. Mid grey, hatched on the
   brand's 22.5 axis, with the filename and the shot brief printed on it. */
.shot{position:relative;display:block;background:var(--plate);border:1px solid var(--rule);
       overflow:hidden;aspect-ratio:var(--arx,3/2);min-height:120px}
/* the percentage-padding spacer is the fallback for browsers without
   aspect-ratio. It resolves against the container's width, so if the
   container ever has no width the box collapses to nothing and its
   absolutely-positioned contents paint over whatever follows. min-height
   above is the floor that makes that impossible. */
@supports not (aspect-ratio:1/1){
  .shot{aspect-ratio:auto}
  .shot::before{content:"";display:block;padding-top:var(--ar,66.67%)}
}
.shot img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}

.shot--ph{background:var(--holdbg);border-color:var(--holdln)}
.shot:not(.shot--ph) .ph{display:none}

.ph{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;
    padding:clamp(12px,1.5vw,20px);gap:10px}
/* hatch + corner-to-corner cross: reads as "image" at any size */
.ph::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(112.5deg,transparent 0 15px,var(--holdhatch) 15px 16px)}
.ph::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.55;
  background:
    linear-gradient(to bottom right,transparent calc(50% - .5px),var(--holdln) calc(50% - .5px),
                    var(--holdln) calc(50% + .5px),transparent calc(50% + .5px)),
    linear-gradient(to bottom left,transparent calc(50% - .5px),var(--holdln) calc(50% - .5px),
                    var(--holdln) calc(50% + .5px),transparent calc(50% + .5px))}
.ph .ph-top,.film-ph .ph-top{position:relative;z-index:2;display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.ph .ph-tag,.film-ph .ph-tag{font:600 9.5px/1.3 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--void);
        background:var(--sig);padding:3px 6px}
.ph .ph-id,.film-ph .ph-id{font:400 9.5px/1.3 var(--mono);color:var(--holdtx);text-align:right;word-break:break-all}
.ph .ph-brief,.film-ph .ph-brief{position:relative;z-index:2;font:400 var(--f-mic)/1.5 var(--mono);color:var(--holdtx);max-width:min(46ch,100%);overflow-wrap:anywhere;hyphens:auto}
.ph .ph-ar,.film-ph .ph-ar{position:relative;z-index:2;font:400 9.5px/1 var(--mono);color:var(--holdtx);opacity:.7}
.ar-11{--ar:100%;--arx:1/1}      .ar-43{--ar:75%;--arx:4/3}
.ar-32{--ar:66.67%;--arx:3/2}    .ar-169{--ar:56.25%;--arx:16/9}
.ar-219{--ar:42.85%;--arx:21/9}  .ar-45{--ar:125%;--arx:4/5}
.ar-34{--ar:133.33%;--arx:3/4}   .ar-21{--ar:50%;--arx:2/1}

/* ── 22.5 axonometric drawings ────────────────────────────────────────── */
/* Restored from v4. Every receding edge is arctan(sqrt2 - 1) = 22.5 degrees,
   measured off the logo artwork. Diagrams carry the geometry; photography
   carries the detail. */
.dwg{border:1px solid var(--rule);background:var(--plate);padding:clamp(18px,2.2vw,30px);
     display:flex;flex-direction:column;gap:16px;min-width:0}
.dwg svg{width:100%;height:auto;display:block;overflow:visible}
.dwg-stroke{stroke:var(--ink);fill:none;stroke-width:1.35;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.dwg-hair{stroke:var(--dim);fill:none;stroke-width:.9;vector-effect:non-scaling-stroke}
.dwg-glass{fill:rgba(255,255,255,.055);stroke:none}
.dwg-dash{stroke:var(--sig);fill:none;stroke-width:.9;stroke-dasharray:3 4;vector-effect:non-scaling-stroke}
a.dwg:hover{background:var(--raise)}
a.dwg:hover .dwg-stroke{stroke:var(--sig)}
.dwg-cap{display:flex;flex-wrap:wrap;gap:4px 14px;font:400 11px/1.4 var(--mono);color:var(--dim);
         letter-spacing:.05em;margin-top:auto}
.dwg-cap b{color:var(--ink);font-weight:500}
.dwg-note{display:flex;flex-wrap:wrap;gap:6px 14px;padding-top:18px;margin-top:1px;
          font:400 11px/1.5 var(--mono);color:var(--t2);letter-spacing:.05em}
.dwg-note b{color:var(--mid);font-weight:500}


/* ═══════════════════════════════════════════════════════════════════════════
   PAGE TIERS — hierarchy expressed as spatial generosity.
   The rule: the more space a page is willing to waste, the higher it ranks.
   A primary page gets a viewport to itself and says one thing. A reference
   page starts on a list and says forty. Nothing about this is decoration —
   the reader should be able to tell where they are in the structure before
   reading a single word.

     t1  OVERTURE   division hubs. One title, one film, nothing else above
                    the fold. The only tier with display type at full size.
     t2  CHAPTER    category landings. Opens on the axonometric drawing, not
                    a photograph. Title steps down. Two columns from the top.
     t3  ENTRY      products, guides, project studies. Opens on the numbers.
                    Sticky side panel. Title is compact.
     t4  INDEX      listings and audience pages. No title block at all — the
                    list is the opening move. Dense rows.
     t5  UTILITY    quote and the two booking routes. Opens on the form.
                    Highest density; the label is the only chrome.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── t1 overture ──────────────────────────────────────────────────────── */
.t1-open{min-height:calc(100svh - 66px);display:flex;flex-direction:column;justify-content:flex-end;
         padding-bottom:clamp(28px,5vh,64px)}
.t1-open .t1-lock{width:min(430px,64vw);margin-bottom:auto;padding-top:clamp(30px,7vh,86px)}
.t1-open .t1-lock svg{width:100%;height:auto;fill:var(--ink)}
.t1-ttl{font-size:var(--f-2xl);line-height:1.06;letter-spacing:-.024em;font-weight:400;
        text-wrap:balance;margin:clamp(20px,4vh,44px) 0 clamp(16px,2.4vh,30px)}
.t1-lede{font-size:var(--f-md);line-height:1.36;color:var(--mid);max-width:44ch;letter-spacing:-.016em}
.t1-cue{display:flex;align-items:center;gap:12px;margin-top:clamp(24px,4vh,48px);
        font:500 11px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.t1-cue i{display:block;width:46px;height:1px;background:var(--sig);transform-origin:left;
          animation:cue 2.6s cubic-bezier(.5,0,.5,1) infinite}
@keyframes cue{0%,100%{transform:scaleX(.25)}50%{transform:scaleX(1)}}

/* ── t2 chapter ───────────────────────────────────────────────────────── */
.t2-open{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.92fr);gap:1px;
         background:var(--rule);border:1px solid var(--rule);margin-top:26px}
.t2-open>*{background:var(--void);padding:clamp(24px,3.4vw,54px);min-width:0;
           display:flex;flex-direction:column;justify-content:center;gap:18px}
.t2-ttl{font-size:var(--f-xl);line-height:1.12;letter-spacing:-.02em;font-weight:400;text-wrap:balance}
.t2-dwg{align-items:center}
.t2-dwg svg{width:100%;height:auto;max-height:44vh;overflow:visible}

/* ── t3 entry · the numbers open the page ─────────────────────────────── */
.t3-open{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);
         display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1px;background:var(--rule)}
.t3-fig{background:var(--void);padding:clamp(16px,1.8vw,26px) clamp(14px,1.6vw,22px);
        display:flex;flex-direction:column;gap:7px;min-width:0}
.t3-fig dt{font:500 9.5px/1.3 var(--mono);letter-spacing:.15em;text-transform:uppercase;color:var(--dim)}
.t3-fig dd{font-size:var(--f-bd);line-height:1.1;letter-spacing:-.02em;color:var(--ink);
           font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.t3-ttl{font-size:var(--f-lg);line-height:1.2;letter-spacing:-.014em;font-weight:400;
        text-wrap:balance;margin:22px 0 14px}

/* ── t4 index · the list is the opening move ──────────────────────────── */
.t4-bar{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px 22px;padding:22px 0 20px;
        border-bottom:1px solid var(--rule)}
.t4-bar h1{font-size:var(--f-md);font-weight:500;letter-spacing:-.018em}
.t4-bar .t4-n{font:400 11.5px/1 var(--mono);color:var(--sig);letter-spacing:.1em}
.t4-bar p{font-size:14px;line-height:1.5;color:var(--dim);max-width:62ch;flex:1 1 320px}
/* dense rows */
.rows{border-bottom:1px solid var(--rule)}
.row{display:grid;grid-template-columns:44px minmax(0,2.1fr) minmax(0,2.4fr) minmax(0,1fr) 26px;
     gap:clamp(10px,1.6vw,26px);align-items:baseline;padding:15px 0;border-top:1px solid var(--rule);
     transition:background .18s,padding-left .18s;min-width:0}
a.row:hover{background:var(--raise);padding-left:10px}
a.row:hover .row-t{color:var(--sig)}
a.row:hover .row-go{color:var(--sig);transform:translateX(3px)}
.row-n{font:400 11.5px/1.6 var(--mono);color:var(--t2)}
.row-t{font-size:var(--f-bd);font-weight:500;letter-spacing:-.014em;line-height:1.25;
       transition:color .18s;min-width:0}
.row-d{font-size:13.5px;line-height:1.5;color:var(--dim);min-width:0}
.row-m{font:400 11.5px/1.5 var(--mono);color:var(--mid);text-align:right;min-width:0;
       font-variant-numeric:tabular-nums}
.row-go{font:400 13px/1.5 var(--mono);color:var(--t2);transition:color .18s,transform .18s}

/* ── t5 utility ───────────────────────────────────────────────────────── */
.t5-bar{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 20px;padding:18px 0 16px}
.t5-bar h1{font-size:var(--f-bd);font-weight:500;letter-spacing:-.014em}

/* ── side panel · t3, t4 and t5 ───────────────────────────────────────── */
.split{display:grid;grid-template-columns:minmax(0,248px) minmax(0,1fr);gap:1px;
       background:var(--rule);border-top:1px solid var(--rule)}
.aside{background:var(--void);padding:clamp(18px,2vw,26px) clamp(16px,1.6vw,22px);min-width:0}
.aside-in{position:sticky;top:86px;display:flex;flex-direction:column;gap:20px}
.aside h4{font:500 10px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--dim);
          margin-bottom:11px}
.aside nav{display:flex;flex-direction:column;gap:1px}
.aside nav a{font-size:13.5px;line-height:1.4;color:var(--dim);padding:7px 0 7px 12px;
             border-left:1px solid var(--rule);transition:.18s}
.aside nav a:hover{color:var(--ink);border-left-color:var(--edge)}
.aside nav a[aria-current]{color:var(--sig);border-left-color:var(--sig)}
.aside dl{display:flex;flex-direction:column;gap:9px}
.aside dt{font:500 9.5px/1.3 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--t2)}
.aside dd{font-size:14px;line-height:1.35;color:var(--mid);font-variant-numeric:tabular-nums}
.main{background:var(--void);min-width:0;padding:0 0 0 clamp(18px,2.4vw,40px)}
.main>.sec:first-child{border-top:0}
.main>.sec{padding-left:0;padding-right:clamp(0px,1.6vw,24px)}
.main .wrap{padding:0;max-width:none}

@media (max-width:980px){
  .t2-open{grid-template-columns:1fr}
  .split{grid-template-columns:1fr}
  .aside-in{position:static}
  .main{padding-left:0}
  .row{grid-template-columns:38px minmax(0,1fr) 22px;row-gap:5px}
  .row-d{grid-column:2/4}.row-m{grid-column:2/4;text-align:left}
}

/* ── film / video slot ────────────────────────────────────────────────── */
/* width:100% is load-bearing, not decoration. With aspect-ratio:21/9 and
   min-height:180px both set, a narrow viewport resolves the height from the
   min-height and then derives the WIDTH back out of the ratio: 180 x 21/9 =
   420px inside a 327px column, which pushed 69px of horizontal overflow onto
   /sharp-glazing and /sharp-steel at 375px. Stating the width stops the ratio
   ever feeding backwards into it. Found with the comps parked, but not caused
   by them — putting a poster image back leaves the box at 420px. */
.film{position:relative;display:block;width:100%;background:var(--holdbg);border:1px solid var(--holdln);
       overflow:hidden;aspect-ratio:21/9;min-height:180px}
@supports not (aspect-ratio:1/1){
  .film{aspect-ratio:auto}
  .film::before{content:"";display:block;padding-top:42.85%}
}
.film-ph{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;
         padding:clamp(14px,1.8vw,24px)}
.film-ph::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(112.5deg,transparent 0 15px,var(--holdhatch) 15px 16px)}
.film-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:clamp(46px,5vw,72px);
           height:clamp(46px,5vw,72px);border:1px solid var(--holdln);display:grid;place-items:center;
           color:var(--holdtx);font:400 11px/1 var(--mono);letter-spacing:.1em}
/* Loading (beta1.3.2). A picture on its way is a quiet frame: the plate, no
   hatch, no id, no brief, no demo number. Those belong to a slot with no
   picture. The picture fades in when it lands instead of snapping over what
   was underneath. These follow .film so film--loading wins its background. */
.shot img,.film-poster,.film video{transition:opacity .45s cubic-bezier(.16,1,.3,1)}
.shot--loading img,.film--loading .film-poster,.film--loading video{opacity:0}
.film--loading{background:var(--plate);border-color:var(--rule)}
.film--loading .film-ph,.film--loading .film-play{visibility:hidden}
:root[data-motion="off"] .shot img,:root[data-motion="off"] .film-poster,
:root[data-motion="off"] .film video{transition:none}
/* Theta is shown to clients (beta1.3.4): a slot with no picture is a quiet
   frame there too, like one still loading. The labelled placeholder (file
   name, shot brief, demo number) stays in the working build, where it is the
   shot list. */
[data-variant="theta"] .shot--ph{background:var(--plate);border-color:var(--rule)}
[data-variant="theta"] .shot--ph .ph,[data-variant="theta"] .film-ph,
[data-variant="theta"] .film-play{visibility:hidden}
.film-play::after{content:"";width:0;height:0;border-left:11px solid currentColor;
                  border-top:7px solid transparent;border-bottom:7px solid transparent;margin-left:3px}

/* ── collapsed 1px mesh ───────────────────────────────────────────────── */
.mesh{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule)}
.mesh--2{grid-template-columns:repeat(2,1fr)}
.mesh--3{grid-template-columns:repeat(3,1fr)}
.mesh--4{grid-template-columns:repeat(4,1fr)}
.cell{background:var(--void);padding:clamp(20px,2.4vw,32px);display:flex;flex-direction:column;gap:12px;min-width:0}
a.cell{transition:background .18s}
a.cell:hover{background:var(--raise)}
a.cell:hover .cell-go{color:var(--sig)}
.cell-go{margin-top:auto;padding-top:12px;font:500 11px/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--dim);transition:color .18s}

/* ── chooser (category + subtype) ─────────────────────────────────────── */
.choose{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule)}
.choose--2{grid-template-columns:repeat(2,1fr)}
.choose--3{grid-template-columns:repeat(3,1fr)}
.choose--4{grid-template-columns:repeat(4,1fr)}
.opt:hover{background:var(--raise)}
.opt .num{color:var(--sig)}
.opt h3{font-size:var(--f-bd);font-weight:500;letter-spacing:-.008em;line-height:1.3}
.opt p{font-size:14px;line-height:1.55;color:var(--dim)}
.opt-n{margin-top:auto;padding-top:14px;font:400 11px/1 var(--mono);letter-spacing:.1em;color:var(--t2);text-transform:uppercase}

/* ── product card ─────────────────────────────────────────────────────── */
.pcard:hover{background:var(--raise)}
.pcard .shot{border:0;border-bottom:1px solid var(--rule)}
.pcard h3{font-size:var(--f-bd);font-weight:500;letter-spacing:-.006em;line-height:1.3}
.pcard p{font-size:13.5px;line-height:1.5;color:var(--dim)}
.pmeta{margin-top:auto;padding-top:14px;border-top:1px solid var(--rule);display:flex;flex-wrap:wrap;gap:4px 18px;font:400 11.5px/1.4 var(--mono);color:var(--dim)}
.pmeta b{font-weight:400;color:var(--mid)}
.pcard:hover .pmeta b{color:var(--sig)}

/* ── spec / data tables ───────────────────────────────────────────────── */
.specs{display:grid;grid-template-columns:minmax(150px,1fr) minmax(0,1.7fr);gap:0;border-top:1px solid var(--rule)}
.specs dt,.specs dd{padding:13px 0;border-bottom:1px solid var(--rule);min-width:0;font-size:14px}
.specs dt{font:400 12px/1.5 var(--mono);letter-spacing:.05em;color:var(--dim);text-transform:uppercase;padding-right:20px}
.specs dd{color:var(--ink);overflow-wrap:anywhere}

.tbl-x{overflow-x:auto;border:1px solid var(--l1);min-width:0;max-width:100%}
.tbl{width:100%;border-collapse:collapse;font-size:14px;min-width:560px}
.tbl th,.tbl td{padding:13px 16px;text-align:left;border-bottom:1px solid var(--rule);vertical-align:top}
.tbl thead th{font:500 11px/1.3 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--dim);background:var(--plate)}
.tbl tbody th{font-weight:500;color:var(--ink)}
.tbl td{color:var(--mid)}
.tbl tr:last-child th,.tbl tr:last-child td{border-bottom:0}

/* ── FAQ ──────────────────────────────────────────────────────────────── */
/* The top rule used to live on .faq, the container. fx-rise animates each
   `.faq details` individually (fx-rise.js:27), so the first row slid up
   through a border that stayed where it was — a line drawn straight across
   the question, for the length of the arrival. A rule that delimits a row
   has to travel with that row, so it belongs to the row. */
.faq details{border-bottom:1px solid var(--rule)}
.faq details:first-child{border-top:1px solid var(--rule)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";position:absolute;right:6px;top:50%;transform:translateY(-50%);font:300 22px/1 var(--sans);color:var(--dim)}
.faq details[open] summary::after{content:"–";color:var(--sig)}
.faq summary:hover{color:var(--sig)}
.faq-a{padding:0 clamp(0px,6vw,80px) 22px 0;font-size:15px;line-height:1.62;color:var(--mid);max-width:76ch}

/* ── CTA pair (schematic: "dual CTAs" on every template) ──────────────── */
.duo{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule);grid-template-columns:repeat(2,1fr)}
.act:hover{background:var(--raise)}
.act h3{font-size:var(--f-md);font-weight:500;letter-spacing:-.02em}
.act p{font-size:14px;line-height:1.55;color:var(--dim);max-width:44ch}
.act .go{margin-top:auto;padding-top:16px;font:500 11.5px/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--sig)}
.btn:hover{background:var(--ink);color:var(--void)}
.btn--sig:hover{background:var(--sig);color:var(--void)}
.btn--ghost:hover{background:var(--raise);color:var(--ink)}
.btn[disabled]{opacity:.4;cursor:not-allowed}
.btn[disabled]:hover{background:none;color:inherit}
.btns{display:flex;flex-wrap:wrap;gap:12px}

/* ── filters ──────────────────────────────────────────────────────────── */
.filters{display:flex;flex-wrap:wrap;gap:1px;background:var(--rule);border:1px solid var(--rule);margin-bottom:1px}
.fgrp{background:var(--void);padding:14px 18px;display:flex;flex-wrap:wrap;align-items:center;gap:9px;flex:1 1 240px;min-width:0}
.fgrp>.lbl{flex:0 0 100%;margin-bottom:2px}
.chip:hover{color:var(--ink);border-color:var(--edge)}
.chip[aria-pressed="true"]{border-color:var(--sig);color:var(--sig)}
.fcount{padding:14px 18px;background:var(--void);font:400 12px/1.3 var(--mono);color:var(--dim);display:flex;align-items:center}

/* ── multi-step flow (quote / bookings) ───────────────────────────────── */
.flow{display:grid;grid-template-columns:minmax(0,240px) minmax(0,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.flow-rail{background:var(--void);padding:clamp(20px,2.4vw,30px);display:flex;flex-direction:column;gap:2px}
.frow{display:flex;gap:13px;padding:11px 0;border-bottom:1px solid var(--rule);align-items:flex-start;min-width:0}
.frow:last-child{border-bottom:0}
.frow .n{font:400 11px/1.5 var(--mono);color:var(--t2);flex:0 0 auto}
.frow .t{font-size:13.5px;line-height:1.4;color:var(--dim);min-width:0}
.frow.on .n,.frow.on .t{color:var(--sig)}
.frow.done .t{color:var(--mid)}
.flow-body{background:var(--void);padding:clamp(24px,3vw,44px);min-width:0}
.fields{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule);margin-top:26px}
.f{background:var(--void);padding:15px 18px;display:flex;flex-direction:column;gap:7px;min-width:0}
.f--half{grid-column:span 1}
.f label{font:500 10.5px/1.3 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.f input,.f select,.f textarea{background:none;border:0;border-bottom:1px solid var(--rule);padding:7px 0;font-size:15px;color:var(--ink);width:100%;min-width:0}
.f input:focus,.f select:focus,.f textarea:focus{border-bottom-color:var(--sig)}
.f select{cursor:pointer}
.f select option{background:var(--plate);color:var(--ink)}
/* iOS zooms into any focused field under 16px and leaves the page zoomed:
   on touch screens only, field text is 16px (1px up). Desktop keeps 15px. */
@media (pointer:coarse){ .f input,.f select,.f textarea{font-size:16px} }
.f .hint{font:400 11.5px/1.4 var(--mono);color:var(--t2)}
.f-err{color:var(--sig);font:400 11.5px/1.4 var(--mono)}
.pick{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule)}
.pick button:hover{background:var(--raise)}
.pick button[aria-pressed="true"]{background:var(--raise)}
.pick button[aria-pressed="true"] .pk-t{color:var(--sig)}
.pk-t{font-size:15.5px;font-weight:500;letter-spacing:-.012em}
.pk-d{font-size:13px;line-height:1.5;color:var(--dim)}
.flow-nav{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px;padding-top:24px;border-top:1px solid var(--rule)}
/* sending (beta1.3.0): what stopped a send sits above the button that tried
   it; the honeypot is in the form but off every screen */
.flow-err{margin-top:26px;padding:14px 16px;border:1px solid var(--edge);border-left:2px solid var(--sig);display:flex;flex-direction:column;gap:12px}
.flow-err p{margin:0;font-size:14px;line-height:1.5;color:var(--ink)}
.flow-err a{color:var(--ink);text-decoration:underline;text-underline-offset:2px}
.flow-go{display:flex;flex-wrap:wrap;gap:10px}
.f-hp{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}
/* the subject of an enquiry, carried from the page it was started on: the
   sticky bar's name-and-category pair, in the form's hairline box, with the
   filter chip as its Remove (beta1.7.x) */
.enq-ctx{display:flex;align-items:center;gap:12px 18px;flex-wrap:wrap;margin-top:22px;padding:13px 18px;border:1px solid var(--rule)}
.enq-ctx .enq-ctx-id{flex:1 1 160px}
.enq-ctx .enq-ctx-id b{white-space:normal}
.enq-ctx .chip:disabled{opacity:.5;cursor:default}
.cal-cap{margin:22px 0 10px;font:400 11.5px/1.4 var(--mono);color:var(--t2)}
.cal-cap + .cal{margin-top:0}

/* calendar */
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule);margin-top:22px}
.cal-h{background:var(--plate);padding:9px 4px;text-align:center;font:500 10px/1 var(--mono);letter-spacing:.1em;color:var(--dim)}
.cal-d{background:var(--void);border:0;aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer;color:var(--mid);font:400 13px/1 var(--mono);transition:background .16s}
.cal-d:hover:not([disabled]){background:var(--raise);color:var(--ink)}
.cal-d[disabled]{color:var(--ghost);cursor:not-allowed}
.cal-d i{width:3px;height:3px;background:var(--sig);font-size:0}
.cal-d[disabled] i{background:transparent}
.cal-d[aria-pressed="true"]{background:var(--sig);color:var(--void)}
.cal-d[aria-pressed="true"] i{background:var(--void)}
.slots{display:flex;flex-wrap:wrap;gap:1px;background:var(--rule);border:1px solid var(--rule);margin-top:1px}
.slot{background:var(--void);border:0;padding:12px 17px;font:400 13px/1 var(--mono);color:var(--mid);cursor:pointer;flex:1 1 auto;transition:background .16s}
.slot:hover{background:var(--raise);color:var(--ink)}
.slot[aria-pressed="true"]{background:var(--sig);color:var(--void)}

/* ── explorer (schematic block 05) ────────────────────────────────────── */
.expl{position:relative;border:1px solid var(--rule);background:var(--plate)}
/* min-height:320px beat the ratio below ~569px, but the .shot inside still
   sized itself from the ratio alone — at 375px the stage was 325x320 while
   the picture was only 325x183, leaving a 137px dead band. .expl-spots is
   anchored to the STAGE, so seven of the eleven hotspots were positioned
   against a box 1.75x too tall and landed below the photograph entirely,
   on top of the readout. The stage must be the picture. */







.expl-list{border-top:1px solid var(--rule)}
.expl-list summary::-webkit-details-marker{display:none}
.expl-list summary:hover{color:var(--ink)}

/* ── marquee ──────────────────────────────────────────────────────────── */
.marq{overflow:hidden;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:17px 0;display:flex}
.marq-t{display:flex;flex:0 0 auto;gap:52px;padding-right:52px;animation:run 46s linear infinite;will-change:transform}
.marq span{font:400 12px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--dim);white-space:nowrap}
@keyframes run{to{transform:translateX(-100%)}}

/* ── reveal ───────────────────────────────────────────────────────────── */
/* .rv is inert — fx-rise drives arrival for every block on the site.
   Nothing here may hide content: a block the rig never reaches must simply
   be readable. */
.rv{opacity:1}

/* ── footer ───────────────────────────────────────────────────────────── */
.ftr h2{font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin:0 0 16px}
.ftr ul{list-style:none;display:flex;flex-direction:column;gap:9px}
.ftr li a{font-size:14px;color:var(--mid)}
.ftr li a:hover{color:var(--sig)}
.ftr-end .sp{margin-left:auto}
/* ── the motion toggle ────────────────────────────────────────────────────
   Motion is forced on across the site, which deliberately overrides
   prefers-reduced-motion. This control is the entire mitigation for that, so
   it has to read as a control and clear a 24px pointer target — it was
   shipping unstyled and empty. It speaks the footer's own language: mono,
   uppercase, a hairline box, no colour of its own. */
/* ── dev banner ───────────────────────────────────────────────────────── */
.devbar{position:fixed;left:0;right:0;bottom:0;z-index:150;background:var(--sig);color:#000;padding:8px var(--gut);font:500 11.5px/1.4 var(--mono);display:flex;flex-wrap:wrap;gap:6px 20px;align-items:center}
.devbar b{font-weight:700}
.devbar button{background:#000;color:var(--sig);border:0;padding:5px 11px;font:500 11px/1 var(--mono);cursor:pointer}
body.dev{padding-bottom:64px}



/* ═══════════════════════════════════════════════════════════════════════════
   ACTION HIERARCHY — five levels, five different objects.
   Everything used to be a bordered rectangle with a line under it, so a
   reader had no way to tell "Request a quote" from "Open". These are built
   differently from each other, not just coloured differently, and each level
   answers the pointer in its own way. The hover IS the hierarchy signal:
   the higher the level, the more the control moves.

     a1  commit      solid, accent, carries a glyph. One per page.
     a2  arrange     outlined; the border draws itself on approach.
     a3  traverse    no box at all — a word, a rule and an arrow.
     a4  refine      filter chips. Fill rises from the baseline.
     a5  read        inline link. The underline wipes through.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── a1 · commit ──────────────────────────────────────────────────────── */
.a1 .ico{width:17px;height:17px;flex:0 0 auto}
.a1 .ico *{stroke:var(--void)}
.a1::before{content:"";position:absolute;inset:0;background:var(--ink);z-index:-1;
  transform:translateY(101%) skewY(-4.5deg);transition:transform .40s cubic-bezier(.16,1,.3,1)}
.a1:hover::before{transform:translateY(0) skewY(0)}
.a1 .a1-ar{margin-left:auto;transition:transform .34s cubic-bezier(.16,1,.3,1)}
.a1:hover .a1-ar{transform:translate(6px,2.5px)}
/* The brightest, most important control on the site did not respond to the
   pointer: the only hover it carried was a wipe on ::before and a nudge on
   the arrow. It is filled with --sig (a warm white), so pure white is the
   one step available that still reads as the same button. .btn--sig already
   does exactly this, so this is the site agreeing with itself. */.a1{display:inline-flex;align-items:center;gap:12px;position:relative;isolation:isolate;background:var(--sig);color:var(--void);border:0;padding:15px 22px;cursor:pointer;font:600 14px/1 var(--sans);letter-spacing:-.008em;overflow:hidden;transition:background .25s cubic-bezier(.16,1,.3,1)}
.a1:hover{background:#fff}       /* 22.5°: dx, dx*tan */
.a1:active{transform:translate(1px,.4px) scale(.99)}

/* ── a2 · arrange ─────────────────────────────────────────────────────── */
.a2{
  display:inline-flex;align-items:center;gap:11px;position:relative;
  background:none;color:var(--t0);border:1px solid var(--l2);padding:14px 20px;cursor:pointer;
  font:500 13.5px/1 var(--sans);letter-spacing:-.006em;
  transition:background .3s cubic-bezier(.16,1,.3,1),color .3s,border-color .3s;
}
.a2 .ico{width:16px;height:16px;flex:0 0 auto}
.a2 .a2-l,.a2 .a2-r{display:none}          /* the drawn edges are retired */
.a2:hover{background:var(--t0);color:var(--s0);border-color:var(--t0)}
.a2:hover .ico *{stroke:var(--s0)}
.a2:active{transform:translate(1px,.4px) scale(.99)}

/* ── a3 · traverse ───────────────────────────────────────────────────── */
.a3{
  display:inline-flex;align-items:center;gap:10px;position:relative;padding:9px 0;
  background:none;border:0;cursor:pointer;color:var(--t1);
  font:500 11.5px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  transition:color .24s,letter-spacing .34s cubic-bezier(.16,1,.3,1);
}
.a3:hover{color:var(--t0);letter-spacing:.17em}
.a3 i{font-style:normal;transition:transform .34s cubic-bezier(.16,1,.3,1)}
.a3:hover i{transform:translate(8px,3.3px)}      /* travels on the 22.5 axis */
.a3:active{transform:translate(1px,.4px)}

/* ── a4 · refine ──────────────────────────────────────────────────────── */
.a4{
  position:relative;isolation:isolate;overflow:hidden;background:none;
  border:1px solid var(--rule);padding:7px 13px;cursor:pointer;
  font:400 12px/1.3 var(--mono);letter-spacing:.03em;color:var(--dim);
  transition:color .22s,border-color .22s;
}
.a4::before{content:"";position:absolute;inset:0;background:var(--raise);z-index:-1;
  transform:scaleY(0);transform-origin:bottom;transition:transform .28s cubic-bezier(.16,1,.3,1)}
.a4:hover::before{transform:scaleY(1)}
.a4:hover{color:var(--ink);border-color:var(--edge)}
.a4[aria-pressed="true"]{color:var(--sig);border-color:var(--sig)}
.a4:active{transform:translate(1px,.4px) scale(.97)}

/* ── a5 · read ───────────────────────────────────────────────────────────
   The quietest level gets the quietest mechanism: colour, nothing else. An
   underline that wipes through is more event than an inline link deserves. */
.a5{position:relative;color:var(--t1);text-decoration:none;
    transition:color .22s cubic-bezier(.16,1,.3,1)}
.a5:hover{color:var(--t0)}

/* ── the floating commit ──────────────────────────────────────────────────
   The primary action does not scroll away. It sits at the bottom-right from
   the moment the reader has passed the first screen, and steps aside for the
   footer so it never covers the contact details. */
/* ── the corner commit: one control, frosted ────────────────────────────
   Was three blocks at equal weight whose labels were hidden below 620px,
   which left a phone with three unreadable squares. One action, and the
   label never leaves. */
.a-float{position:fixed;right:var(--gut);bottom:var(--gut);z-index:70;display:flex;
  opacity:0;transform:translateY(14px);pointer-events:none;
  transition:opacity .42s cubic-bezier(.16,1,.3,1),transform .42s cubic-bezier(.16,1,.3,1)}
.a-float.on{opacity:1;transform:none;pointer-events:auto}
.a-float.tuck{transform:translateY(120%);opacity:0;pointer-events:none}
.a-float-btn{
  display:flex;align-items:center;gap:10px;padding:13px 19px;
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--t0);
  /* the glass: a real backdrop blur over a fill dark enough that the label
     keeps its contrast whatever happens to be behind it — film, photograph
     or plain ground. The fill is the floor, the blur is the finish. */
  background:rgba(18,18,20,.72);
  -webkit-backdrop-filter:blur(22px) saturate(1.5);
  backdrop-filter:blur(22px) saturate(1.5);
  border:1px solid rgba(255,255,255,.16);
  box-shadow:0 10px 34px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.09);
  transition:background .34s cubic-bezier(.16,1,.3,1),color .34s,
             border-color .34s,box-shadow .34s,transform .34s cubic-bezier(.16,1,.3,1)}
.a-float-btn .ico{width:15px;height:15px}
.a-float-btn .ico *{stroke:currentColor}
/* hover lifts it out of the glass and into the light */
.a-float-btn:hover{
  background:var(--em,#f4efe7);color:#111214;border-color:transparent;
  box-shadow:0 14px 40px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.5);
  transform:translateY(-2px)}
.a-float-btn:active{transform:translateY(0) scale(.985)}
body.dev .a-float{bottom:calc(var(--gut) + 40px)}
@media (prefers-reduced-motion:reduce){ .a-float,.a-float-btn{transition-duration:.01ms} }
/* the label stays at every width — that was the whole bug */
@media (max-width:620px){
  .a-float{left:var(--gut);right:var(--gut)}
  /* 44px is the comfortable touch target; at 15px padding it measured 43 */
  .a-float-btn{flex:1;justify-content:center;padding:16px 18px;min-height:48px}
}

/* ── the product bar ────────────────────────────────────────────────────── */
.pv-bar.on{transform:none}
/* the bar stays on to the end of a product page (fx-bar), so the page ends
   one bar height lower: the footer's last line is never under it */
html.pv-bar-pg .ftr{padding-bottom:calc(var(--x6) + var(--pv-bar-h,68px))}.pv-bar{position:fixed;left:0;right:0;bottom:0;z-index:69;display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:var(--x5);padding:10px var(--gut);background:rgba(14,14,16,.82);-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);border-top:1px solid rgba(255,255,255,.12);transform:translateY(101%);transition:transform .46s cubic-bezier(.16,1,.3,1)}
.pv-bar-fig{font:400 var(--f-sm)/1 var(--mono);color:var(--t1);white-space:nowrap}
.pv-bar-fig i{font-style:normal;color:var(--t2)}
.pv-bar-fig:empty{display:none}
.pv-bar-thumb{display:block;width:46px;flex:0 0 auto}
.pv-bar-thumb .shot{border:0;min-height:0}
.pv-bar-thumb .ph-top,.pv-bar-thumb .ph-brief,.pv-bar-thumb .ph-ar{display:none}
.pv-bar-id,.enq-ctx-id{display:flex;flex-direction:column;gap:3px;min-width:0}
.pv-bar-id b,.enq-ctx-id b{font-size:var(--f-sm);font-weight:400;color:var(--t0);letter-spacing:-.006em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pv-bar-id i,.enq-ctx-id i{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;
  color:var(--t2);font-style:normal}
.pv-bar-go i{transition:transform .3s cubic-bezier(.16,1,.3,1)}
.pv-bar-go:hover{background:#fff}
.pv-bar-go:hover i{transform:translate(5px,0)}
.pv-bar-go:active{transform:scale(.985)}
body.dev .pv-bar{bottom:40px}
@media (prefers-reduced-motion:reduce){ .pv-bar{transition-duration:.01ms} }
@media (max-width:700px){
  .pv-bar{grid-template-columns:auto minmax(0,1fr) auto;gap:var(--x4);padding:9px var(--gut)}
  .pv-bar-fig{display:none}
  .pv-bar-go{padding:12px 16px}
}

/* ── icon base ────────────────────────────────────────────────────────── */
.ico{width:100%;height:auto;display:block;overflow:visible}
.i-line{stroke:currentColor;fill:none;stroke-width:1.15;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.i-thin{stroke:currentColor;fill:none;stroke-width:.75;opacity:.62;vector-effect:non-scaling-stroke}
.i-face{fill:currentColor;opacity:.10;stroke:none}
.i-none{fill:none;stroke:none}
.i-dot{stroke:var(--sig);fill:none;stroke-width:1.6;stroke-linecap:round;vector-effect:non-scaling-stroke}

/* icon hover: the glyph turns very slightly on its own axis, and the glass
   in it catches. Restrained — it is a mark, not a toy. */
.ico-box{display:block;width:100%;color:var(--ink);transition:color .28s}
.ico-box .ico{transition:transform .5s cubic-bezier(.16,1,.3,1)}
a:hover>.ico-box .ico,a:hover .ico-box .ico,.opt:hover .ico-box .ico{transform:translateY(-2px) scale(1.045)}
a:hover>.ico-box,a:hover .ico-box,.opt:hover .ico-box{color:var(--sig)}
a:hover .ico-box .i-face,.opt:hover .ico-box .i-face{opacity:.2}

/* ═══════════════════════════════════════════════════════════════════════════
   THREE STATES ON EVERYTHING CLICKABLE
     hover   the target announces itself before you commit
     press   :active — it takes the weight. Everything compresses on the
             22.5 axis rather than scaling, so the press reads as the surface
             being pushed along the grain of the geometry.
     after   .fx-hit — a one-shot confirmation fired on pointerup that
             outlives the press by 420ms, so a click that navigates still
             leaves a visible acknowledgement behind it.
   No border-radius, no shadow. The acknowledgement is a line and a shift.
   ═══════════════════════════════════════════════════════════════════════════ */
:root{
  --press: cubic-bezier(.2,.9,.3,1);
  --hit:   cubic-bezier(.16,1,.3,1);
}

/* the universal press: a compression along the projection's own axis */
:where(a,button,summary,[role="button"],.chip,.slot,.cal-d,.opt,.cell,.pcard,.act,.row,.dwg,.pk-t,.pick button){
  -webkit-tap-highlight-color:transparent;
}
:where(a,button,summary,[role="button"]):active{
  transform:translate(0.8px,0.35px) scale(.994);
  transition:transform 60ms var(--press);
}

/* ── after-press · one-shot acknowledgement ───────────────────────────── */
@keyframes fxhit{
  0%{opacity:.85;transform:scaleX(0);transform-origin:left}
  38%{opacity:.85;transform:scaleX(1);transform-origin:left}
  39%{transform-origin:right}
  100%{opacity:0;transform:scaleX(0);transform-origin:right}
}
.fx-hit{position:relative}
/* Never claim ::after on a control that already owns it. .faq summary::after
   is the +/- marker; when this rule reached it the marker became the bar.
   The :not() is belt and braces — fx-core no longer marks summaries — so a
   future author who re-adds one does not reintroduce the same collision. */
.fx-hit:not(summary)::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--sig);
  pointer-events:none;animation:fxhit 420ms var(--hit) forwards;z-index:3;
}
/* on a bordered control the acknowledgement runs the whole frame instead */
@keyframes fxhitbox{0%{opacity:.9}100%{opacity:0}}
.btn.fx-hit::after,.hdr-cta.fx-hit::after,.chip.fx-hit::after{
  inset:-1px;height:auto;background:none;border:1px solid var(--sig);animation:fxhitbox 420ms var(--hit) forwards;
}

/* ── buttons ──────────────────────────────────────────────────────────── */
.btn::before{content:"";position:absolute;inset:0;background:var(--ink);z-index:-1;
  transform:translateY(101%) skewY(-4.5deg);transition:transform .34s var(--hit)}
.btn:hover::before{transform:translateY(0) skewY(0)}
.btn:hover{color:var(--void);background:none}
.btn--sig::before{background:var(--sig)}
.btn--ghost::before{background:var(--raise)}
.btn--ghost:hover{color:var(--ink)}
.btn:active{transform:translate(.8px,.35px) scale(.988)}.hdr-cta{border:1px solid var(--edge);padding:8px 15px;font-size:12.5px;font-weight:600;color:var(--ink);position:relative;overflow:hidden;isolation:isolate}
.hdr-cta::before{content:"";position:absolute;inset:0;background:var(--ink);z-index:-1;
  transform:translateY(101%);transition:transform .3s var(--hit)}
.hdr-cta:hover::before{transform:translateY(0)}
/* F11: inside the bar, .nav a:hover (0,2,1) out-ranked .hdr-cta:hover (0,2,0)
   and kept the label --ink on its own --ink fill: 1.00:1, the words vanished. */
.nav .hdr-cta:hover{color:var(--void)}
/* the same specificity clash took its side padding: .nav a{padding:5px 0}
   (0,1,1) out-ranked .hdr-cta (0,1,0), so the words touched the outline.
   Desktop bar only; the phone menu sets its own. */
@media (min-width:861px){ .nav .hdr-cta{padding:8px 15px} }

/* ── cards, cells, options ────────────────────────────────────────────── */
/* ═══════════════════════════════════════════════════════════════════════════
   HOVER — ONE MECHANISM PER COMPONENT, NOT ONE FOR ALL OF THEM
   Every block used to answer the pointer the same way: a line wipes in along
   the bottom edge. Six different components all saying the same thing tells
   the reader nothing about what any of them is. Each now moves in a way that
   suits what it is, and no two share a mechanism.

     .opt      a chooser tile     the glyph turns and rises; the tile warms
     .pcard    a product card     the photograph breathes; a wash lifts
     a.dwg     a drawing          the drawing redraws — strokes brighten
     a.cell    a mesh cell        a rule grows down the LEFT edge
     .ais      an aisle row       indents, and the arrow travels
     .row      a dense row        indents, the index swaps for a marker
     .hg       a home glyph       the glyph lifts out of its tile
     .act      a CTA panel        the panel's tone lifts, nothing moves
     .sib      margin nav         indents behind an em dash
     .fx-mega-p menu row          indents, meta fades up
   ══════════════════════════════════════════════════════════════════════════ */
a.cell,.opt,.pcard,.act,a.dwg{position:relative;isolation:isolate}
:where(a.cell,.opt,.pcard,.act,a.dwg):active{
  transform:translate(1.1px,.5px);transition:transform 70ms var(--press)}

/* ── .opt · the glyph is the thing, so the glyph moves ────────────────── */.opt{background:var(--void);padding:clamp(22px,2.6vw,34px);display:flex;flex-direction:column;gap:14px;min-width:0;transition:background .3s cubic-bezier(.16,1,.3,1)}
.opt:hover{background:var(--s3)}
.opt .ico-box{transition:transform .5s cubic-bezier(.16,1,.3,1)}
.opt:hover .ico-box{transform:translateY(-3px)}
.opt:hover .ico-box .ico{transform:rotate(-2.5deg)}      /* a fraction of 22.5 */
.opt .opt-n{transition:color .26s}
.opt:hover .opt-n{color:var(--t0)}

/* ── .pcard · the photograph breathes; a wash rises behind the caption ── */.pcard{background:var(--void);display:flex;flex-direction:column;min-width:0;transition:background .3s}
.pcard .shot img,.pcard .shot .ph{transition:transform .8s cubic-bezier(.16,1,.3,1)}
/* the .pcard photo hover lived here AND in fx.css (--fx-scale). Two writers
   on one transform: this one replaced the parallax while the pointer was on
   the card. fx.css keeps it, as the module that also drives the parallax. */
.pcard-b{padding:clamp(18px,2vw,26px);display:flex;flex-direction:column;gap:10px;flex:1;position:relative;isolation:isolate}
.pcard-b::before{content:"";position:absolute;inset:0;background:var(--s3);z-index:-1;
  transform:scaleY(0);transform-origin:bottom;transition:transform .42s cubic-bezier(.16,1,.3,1)}
.pcard:hover .pcard-b::before{transform:scaleY(1)}

/* ── a.dwg · the drawing redraws itself ───────────────────────────────── */
a.dwg{transition:background .3s}
a.dwg .dwg-stroke,a.dwg .dwg-hair,a.dwg .dwg-glass{
  transition:stroke .38s,fill .38s,opacity .38s}
a.dwg:hover{background:var(--s2)}
a.dwg:hover .dwg-hair{stroke:var(--t1)}
a.dwg:hover .dwg-glass{fill:rgba(255,255,255,.09)}
a.dwg svg{transition:transform .6s cubic-bezier(.16,1,.3,1)}
a.dwg:hover svg{transform:translateY(-3px)}

/* ── a.cell · a rule grows down the left edge, not across the bottom ──── */
/* a rule growing down the left edge was the oddest thing on the site — a
   vertical line has no relationship to a horizontal card. The surface lifts
   and the index number turns into the arrow instead. */
a.cell{transition:background .3s cubic-bezier(.16,1,.3,1)}
a.cell:hover{background:var(--s3)}
a.cell .num{transition:color .22s,opacity .22s}
a.cell:hover .num{opacity:0}
a.cell{position:relative}
a.cell::after{content:"\2192";position:absolute;left:clamp(20px,2.4vw,32px);
  top:clamp(20px,2.4vw,32px);font:400 13px/1.4 var(--mono);color:var(--t0);
  opacity:0;transform:translate(-6px,-2.5px);
  transition:opacity .26s,transform .3s cubic-bezier(.16,1,.3,1);pointer-events:none}
a.cell:hover::after{opacity:1;transform:none}
a.cell:hover .cell-go{color:var(--t0)}

/* ── .act · a CTA panel does not move; only its tone lifts ────────────── */.act{background:var(--void);padding:clamp(24px,3vw,40px);display:flex;flex-direction:column;gap:12px;transition:background .34s;min-width:0}
.act:hover{background:var(--s3)}
.act .go{transition:letter-spacing .34s}
.act:hover .go{letter-spacing:.18em}

/* ── .hg · the home glyph lifts out of its tile ───────────────────────── */
.hg .ico-box{transition:transform .5s cubic-bezier(.16,1,.3,1)}
.hg:hover .ico-box{transform:translateY(-4px)}

/* ── .row · the index swaps for a marker ──────────────────────────────── */
a.row .row-n{transition:color .22s,opacity .22s}
a.row:hover .row-n{opacity:0}
a.row{position:relative}
a.row::before{content:"—";position:absolute;left:0;top:15px;color:var(--t0);
  opacity:0;transform:translateX(-5px);transition:opacity .24s,transform .28s cubic-bezier(.16,1,.3,1)}
a.row:hover::before{opacity:1;transform:none}

/* ── .fx-mega-p · the meta rises into view ────────────────────────────── */
.fx-mega-meta{transition:color .24s,transform .3s cubic-bezier(.16,1,.3,1)}
.fx-mega-p:hover .fx-mega-meta{color:var(--t1);transform:translateX(2px)}

/* the after-press mark is the ONE thing every level shares — it is the
   acknowledgement, not the identity */
:where(a.cell,.opt,.pcard,.act,a.dwg).fx-hit::after{
  content:"";position:absolute;left:0;bottom:0;height:1px;width:100%;background:var(--t0);
  animation:fxhit 420ms var(--hit) forwards;pointer-events:none;z-index:3}

/* ── nav ──────────────────────────────────────────────────────────────── */.nav a{font-size:13px;font-weight:500;color:var(--mid);letter-spacing:-.006em;padding:5px 0;border-bottom:1px solid transparent;transition:color .18s;position:relative}.crumb a{color:var(--t1);position:relative;transition:color .18s}
.crumb a:hover{color:var(--sig)}

/* ── chips, slots, calendar ───────────────────────────────────────────── */.chip{border:1px solid var(--rule);background:none;padding:6px 12px;font:400 12px/1.3 var(--mono);color:var(--dim);cursor:pointer;transition:color .2s,border-color .2s;letter-spacing:.03em;position:relative;overflow:hidden;isolation:isolate}
.chip::before{content:"";position:absolute;inset:0;background:var(--raise);z-index:-1;
  transform:scaleY(0);transform-origin:bottom;transition:transform .26s var(--hit)}
.chip:hover::before{transform:scaleY(1)}
.chip:active{transform:translate(.8px,.35px) scale(.97)}
.slot,.cal-d{position:relative;transition:background .18s,color .18s}
.slot:active,.cal-d:active:not([disabled]){transform:translate(.8px,.35px) scale(.97)}
.pick button:hover{padding-left:24px}
/* was a 2px bar growing down the left edge — the same vertical-line move that
   read as odd everywhere else. The option fills instead. */.pick button{background:var(--void);border:0;padding:17px 19px;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:5px;transition:background .26s cubic-bezier(.16,1,.3,1),padding-left .26s;min-width:0;position:relative}
.pick button[aria-pressed="true"]{background:var(--s3)}
.pick button[aria-pressed="true"] .pk-t{color:var(--t0)}

/* ── faq, details ─────────────────────────────────────────────────────── */.faq summary{list-style:none;cursor:pointer;padding:19px 44px 19px 0;position:relative;font-size:var(--f-bd);font-weight:500;letter-spacing:-.012em;transition:color .2s,padding-left .2s}
.faq summary:hover{padding-left:8px}
.faq summary::after{transition:transform .3s var(--hit),color .2s}
.faq summary:hover::after{transform:translateY(-50%) rotate(90deg)}

/* ── explorer hotspots ────────────────────────────────────────────────── */


/* ── rows ─────────────────────────────────────────────────────────────── */
a.row:active{transform:none;padding-left:14px;transition:padding-left 70ms var(--press)}

/* ── responsive ───────────────────────────────────────────────────────── */
@media (max-width:1100px){
  .mesh--4{grid-template-columns:repeat(2,1fr)}
  .choose--4{grid-template-columns:repeat(2,1fr)}
  .flow{grid-template-columns:1fr}
}
@media (max-width:860px){
  .burger{display:block}
  /* inset:…auto leaves the height to the content and a fixed box does not
     scroll with the page, so anything past the viewport edge was unreachable
     by any gesture. Six links plus the CTA measure ~416px; a phone in
     landscape is 844px wide (still burger mode) with roughly 340-390px of
     height, which cut off Guides and Request a quote entirely. */
  .nav{position:fixed;inset:66px 0 auto;flex-direction:column;align-items:stretch;gap:0;background:var(--void);border-bottom:1px solid var(--rule);padding:8px var(--gut) 22px;margin:0;display:none;
       max-height:calc(100dvh - 66px);overflow-y:auto;overscroll-behavior:contain}
  .nav.open{display:flex}
  .nav a{padding:14px 0;border-bottom:1px solid var(--rule);font-size:16px}
  .nav a[aria-current]{border-bottom-color:var(--rule)}
  .hdr-cta{margin-top:14px;text-align:center;justify-content:center;display:flex}
  /* Sharp Glazing and Sharp Steel: each its own group, the division's link
     as the group's name and its categories under it, two to a row and set
     like the footer's columns (quieter links) */
  .nav a.nav-dl{border-bottom:0;padding-bottom:6px}
  .nav-grp{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--x5);padding:0 0 10px;border-bottom:1px solid var(--rule)}
  /* a 44px row to the finger (the links measured 37px); the type is unchanged */
  .nav .nav-grp a{border-bottom:0;padding:0;min-height:44px;display:flex;align-items:center;font-size:14px;font-weight:400;min-width:0}
  /* Guides, Services, Professionals, Contact: one quiet row under the button */
  .nav-sec{display:flex;flex-wrap:wrap;gap:0 var(--x4);padding-top:10px}
  .nav .nav-sec a{padding:0;min-height:44px;display:flex;align-items:center;border-bottom:0;font-size:13px;font-weight:400}
  .nav .nav-grp a,.nav .nav-sec a{color:var(--t2)}
  .nav .nav-grp a:hover,.nav .nav-sec a:hover{color:var(--ink)}
  .nav .nav-grp a[aria-current],.nav .nav-sec a[aria-current]{color:var(--sig)}
  .mesh--3,.mesh--4{grid-template-columns:repeat(2,1fr)}
  .choose--3,.choose--4{grid-template-columns:repeat(2,1fr)}
  .duo{grid-template-columns:1fr}
  
}
@media (max-width:620px){
  .mesh--2,.mesh--3,.mesh--4{grid-template-columns:1fr}
  .choose--2,.choose--3,.choose--4{grid-template-columns:1fr}
  .specs{grid-template-columns:1fr}
  .specs dt{padding-bottom:0;border-bottom:0}
  .specs dd{padding-top:5px}
  .cal-d{font-size:11px}
}
/* Motion is ON by default and does NOT consult the OS setting — the client
   asked for it forced on. The only opt-out is the in-page Motion control,
   which sets data-motion="off" on <html>. */
[data-motion="off"] .marq-t{animation:none}
[data-motion="off"] *{transition-duration:.01ms!important;animation-duration:.01ms!important}

/* ── the CTA pair, deliberately unequal ───────────────────────────────── */
.cta2{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:1px;
      background:var(--rule);border:1px solid var(--rule)}
.cta2>*{background:var(--void);padding:clamp(24px,3vw,44px);display:flex;flex-direction:column;
        gap:14px;align-items:flex-start;min-width:0}
.cta2-a{background:var(--plate)!important}
.cta2-a .a1{margin-top:auto}
.cta2-b .a2{margin-top:auto}
@media (max-width:860px){ .cta2{grid-template-columns:1fr} }

/* ── icon placements ──────────────────────────────────────────────────── */
.ico-box--opt{width:clamp(34px,3.4vw,46px);margin-bottom:4px}
.crumb-ico{width:15px;display:inline-block;color:var(--sig);margin-right:4px}
.row-ico{width:19px;color:var(--dim);transition:color .2s,transform .2s}
a.row:hover .row-ico{color:var(--sig);transform:translateY(-1px)}
.fx-mega-cat .ico{width:17px}
.aside .ico-box{width:38px;margin-bottom:4px}

/* the mega menu's category rows carry the same glyph as everywhere else */
.fx-mega-cat{grid-template-columns:20px 26px minmax(0,1fr) 28px}
.fx-mega-ico{width:34px;color:var(--t2);flex:0 0 auto;transition:color .22s,transform .3s cubic-bezier(.16,1,.3,1)}
.fx-mega-cat.on .fx-mega-ico,.fx-mega-cat:hover .fx-mega-ico{width:34px;color:var(--t2);flex:0 0 auto;transition:color .22s,transform .3s cubic-bezier(.16,1,.3,1)}

/* ── retire the old generic button ────────────────────────────────────────
   .btn stays only so nothing breaks mid-refactor; it is no longer used by
   any template. Anything still reaching for it renders as a3. */.btn{display:inline-flex;align-items:center;gap:11px;border:0;padding:9px 0;font-size:14px;font-weight:600;letter-spacing:.14em;background:none;cursor:pointer;transition:background .16s,color .16s;position:relative;overflow:hidden;isolation:isolate;color:var(--mid);font:500 11.5px/1 var(--mono);text-transform:uppercase}
.btn::before{display:none}
.btn:hover{background:none;color:var(--sig)}

.ftr-ico{width:15px;display:inline-block;vertical-align:-2px;margin-right:8px;color:var(--ghost);
         transition:color .2s}
.ftr li a{display:flex;align-items:center}
.ftr li a:hover .ftr-ico{color:var(--sig)}
.a-float .ico-w{display:block;width:15px;flex:0 0 auto}

/* ═══ THE HOMEPAGE ═════════════════════════════════════════════════════════
   Nothing else on the site looks like this, and nothing else is allowed to.
   Film runs full-bleed behind the title; the type sits at a scale no other
   route uses; the eight glyphs act as the contents page. ══════════════════ */
.home-film{position:absolute;inset:0;z-index:0}
.home-film .film{position:absolute;inset:0;border:0;background:#101010;
                 aspect-ratio:auto;min-height:0}
.home-film .film::before{display:none;padding-top:0}
.home-film .film video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.home-film .film-ph{opacity:.5}
.home-film .film-play{display:none}
/* the type has to stay legible over whatever film lands here. The top band
   is darker since beta1.3.1: the hero became a still with an overcast sky
   along its top edge, and the glass header's 13px links measured 2.35:1
   over it at .5. tools/film-contrast.js models these stops — keep it in step. */
.home-scrim{position:absolute;inset:0;
  background:linear-gradient(to top,var(--void) 4%,rgba(0,0,0,.72) 42%,rgba(0,0,0,.34) 78%,rgba(0,0,0,.66) 90%,rgba(0,0,0,.78) 100%)}
/* pinned to the bottom-left corner of the frame, where it plays itself */
.home-hero-in{position:absolute;left:0;bottom:0;z-index:1;
  padding:0 var(--gut) clamp(26px,5vh,54px);max-width:min(760px,92vw);
  display:flex;flex-direction:column;align-items:flex-start;gap:var(--x4)}
.home-lede{font-size:var(--f-md);line-height:1.42;color:var(--mid);max-width:52ch;
           letter-spacing:-.014em}
.home-note{position:relative;z-index:1;color:var(--ghost);max-width:82ch;line-height:1.6;
           margin-top:20px;font-size:11px}
/* the contents row — the site's whole product structure at once.
   It is NOT on the first screen. The hero gets one screen to say one thing;
   the contents arrive just after the peak, as the reader starts to move.
   Frosted rather than filled, so the film keeps running underneath and the
   row reads as a pane laid over the picture, not a bar cut out of it. */
/* The frost was for sitting over the film. The row now sits below the fold
   on solid ground, where rgba(10,10,12,.28) composites to #080809 against a
   #070708 page — a difference of 1.6, invisible as a surface, with an 18px
   blur blurring nothing. On solid ground it takes the site's card tone. */
.hg{background:var(--s2);padding:clamp(12px,1.3vw,18px);display:flex;flex-direction:column;
    gap:8px;min-width:0;transition:background .34s cubic-bezier(.16,1,.3,1)}
.hg:hover{background:var(--s3)}
.hg .ico-box{width:clamp(26px,2.4vw,34px)}
.hg-n{font:400 10px/1 var(--mono);color:var(--t2)}.hg-t{transition:color .24s;font-size:12.5px;font-weight:500;letter-spacing:-.008em;line-height:1.2}
.hg:hover .hg-t{color:var(--sig)}
.hg-c{font:400 10px/1 var(--mono);color:var(--t2);margin-top:auto}
/* Both of these restated repeat(8,1fr) verbatim — copied from the base rule
   and never reduced, so the contents row stayed eight across at every width.
   At 375px that is 318px / 8 = 39.75px a tile, and .hg's 12px padding leaves
   a 15.75px content box holding a 26px icon and an unbreakable ~45px word:
   every glyph and every category name painted across the tile beside it.
   min-width:0 on .hg removed the min-content floor that would have stopped it. */
/* The column count is a custom property because .home-glyphs declares its
   grid in five separate rules (.fx-rise, [data-motion=off], html:not(.fx-on),
   and the base twice), four of them AFTER these queries — so setting
   grid-template-columns here lost the cascade every time. A property is read
   by whichever rule wins, so the count no longer depends on source order. */
@media (max-width:1100px){ .home-glyphs{--glyph-cols:4} }
/* two to a row, and no product count, on a phone (1.4.2) */
@media (max-width:560px){ .home-glyphs{--glyph-cols:2} .hg-c{display:none} }

/* ═══ SCROLL CHARACTER BY TIER ═════════════════════════════════════════════
   The reveal itself carries rank. A tier 1 block arrives slowly from depth;
   a tier 4 row snaps in. Same mechanism, four different characters. */
:root[data-tier="1"] .rv{--fx-d:.58s}
:root[data-tier="2"] .rv{--fx-d:.5s}
:root[data-tier="3"] .rv{--fx-d:.44s}
:root[data-tier="4"] .rv{--fx-d:.36s}
:root[data-tier="5"] .rv{--fx-d:.3s}


/* tier 1 and 2 arrive with a little depth behind them; tier 4 and 5 do not,
   because a dense list that swims is only harder to read */



/* the layers only exist where there is depth to have */
.home-film,.home-ttl,.home-glyphs,.t1-ttl{will-change:transform}
:root[data-tier="4"] .home-film{will-change:auto}
[data-motion="off"] .home-film,[data-motion="off"] .home-ttl,
[data-motion="off"] .home-glyphs,[data-motion="off"] .t1-ttl{transform:none!important}

/* the footer link is the quietest level: no box, no arrow, only the wipe */
.ftr li a.a5{background-position:0 100%;padding-bottom:1px}
.ftr li a.a5:hover .ftr-ico{color:var(--sig)}

/* ═══════════════════════════════════════════════════════════════════════════
   PROGRESSIVE DISCLOSURE
   The surface of a page carries only what is needed to decide. Everything a
   reader would consult rather than read — twelve spec rows, seven
   configurations, four glass options — lives one interaction below, in a
   drawer. Built on <details> so it works with JS off and reads correctly to
   a screen reader and a crawler.
   ═══════════════════════════════════════════════════════════════════════════ */
.dw{border-top:1px solid var(--l1)}
.dw:last-of-type{border-bottom:1px solid var(--l1)}
.dw>summary{
  list-style:none;cursor:pointer;display:grid;
  grid-template-columns:minmax(0,1fr) auto 18px;align-items:baseline;gap:var(--x4);
  padding:var(--x4) 0;transition:padding-left .28s cubic-bezier(.16,1,.3,1),color .2s;
}
.dw>summary::-webkit-details-marker{display:none}
.dw>summary:hover{padding-left:var(--x2);color:var(--t0)}
.dw-t{font-size:var(--f-bd);font-weight:400;letter-spacing:-.004em;color:var(--t0)}
.dw-n{font:400 var(--f-mic)/1 var(--mono);color:var(--t2);font-variant-numeric:tabular-nums}
.dw-x{position:relative;width:11px;height:11px;justify-self:end;align-self:center}
.dw-x::before,.dw-x::after{content:"";position:absolute;background:var(--t2);
  transition:transform .34s cubic-bezier(.16,1,.3,1),background .2s}
.dw-x::before{left:0;top:5px;width:11px;height:1px}
.dw-x::after{left:5px;top:0;width:1px;height:11px}
.dw[open] .dw-x::after{transform:scaleY(0)}
.dw>summary:hover .dw-x::before,.dw>summary:hover .dw-x::after{background:var(--t0)}
.dw-body{padding:0 0 var(--x6);animation:dwin .42s cubic-bezier(.16,1,.3,1)}
@keyframes dwin{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:none}}
[data-motion="off"] .dw-body{animation:none}

/* the specification, once opened, is a quiet two-column table with no rules */
.dl{display:grid;grid-template-columns:minmax(140px,1fr) minmax(0,2fr);gap:var(--x2) var(--x6)}
.dl dt{font:400 var(--f-mic)/1.5 var(--mono);letter-spacing:.06em;color:var(--t2);text-transform:uppercase}
.dl dd{font-size:var(--f-sm);line-height:1.5;color:var(--t0);overflow-wrap:anywhere}
@media (max-width:620px){ .dl{grid-template-columns:1fr;gap:0} .dl dd{margin-bottom:var(--x3)} }
/* a plain list of options, set as running text rather than a stack of cards */
.opts{font-size:var(--f-sm);line-height:1.9;color:var(--t1)}
.opts b{font-weight:400;color:var(--t2);font-family:var(--mono);font-size:var(--f-mic);
        letter-spacing:.1em;text-transform:uppercase;display:block;margin-top:var(--x3)}

/* ── the figure strip: the only numbers allowed on the surface ────────── */
.fig{display:flex;flex-direction:column;gap:3px;min-width:0;padding:var(--x1) 0}
.fig dt{font:400 var(--f-cap)/1.3 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--t2)}
.fig dd{font-size:var(--f-bd);line-height:1.2;color:var(--t0);font-variant-numeric:tabular-nums}

/* ── hover detail · a product row tells you the rest without a click ──── */
.pop{position:relative}
.pop-c{
  position:absolute;left:0;top:calc(100% + 6px);z-index:60;width:min(360px,74vw);
  background:var(--s2);border:1px solid var(--l1);padding:var(--x4);
  opacity:0;visibility:hidden;transform:translateY(-4px);
  transition:opacity .22s,transform .28s cubic-bezier(.16,1,.3,1),visibility .22s;
  pointer-events:none;
}
.pop:hover .pop-c,.pop:focus-within .pop-c{opacity:1;visibility:visible;transform:none}
/* Escape dismisses it (app.js adds .pop-x) until the reader moves on */
.pop.pop-x .pop-c{opacity:0;visibility:hidden}
/* An overlay can only rise as far as its own stacking context, and .sec sets
   isolation:isolate so that the z-index:-1 backing layers stay inside their
   own section. That caps .pop-c's z-index:60 at the section's level, so the
   NEXT section — painting later at z-index:auto — drew over the bottom of the
   panel: measured 66px of a 192px panel covered by the following full-bleed
   band. The panel does not need a bigger number, it needs its section lifted
   while it is open. */
.sec:has(.pop:hover),.sec:has(.pop:focus-within){z-index:70}
.pop-c p{font-size:var(--f-sm);line-height:1.55;color:var(--t1);margin-bottom:var(--x3)}
.pop-c dl{display:grid;grid-template-columns:auto 1fr;gap:4px var(--x4)}
.pop-c dt{font:400 var(--f-cap)/1.5 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--t2)}
.pop-c dd{font-size:var(--f-sm);color:var(--t0);text-align:right;font-variant-numeric:tabular-nums}
@media (hover:none){ .pop-c{display:none} }

/* sibling navigation in the margin column */
.sib{display:flex;flex-direction:column}
.sib a{font-size:var(--f-sm);line-height:1.45;color:var(--t2);padding:var(--x2) 0;
       border-bottom:1px solid var(--l0);transition:color .2s,padding-left .24s}
.sib a:hover{color:var(--t0);padding-left:var(--x2)}
.sib a[aria-current]{color:var(--t0)}
.sib a[aria-current]::before{content:"— ";color:var(--t2)}

/* ── the aisle: a category as a list, not a grid of cards ─────────────── */
.cat-dwg{border:1px solid var(--l1);padding:var(--x5);background:var(--s1)}
.cat-dwg svg{width:100%;height:auto;max-height:150px;overflow:visible}
.aisle-h{display:flex;justify-content:space-between;gap:var(--x4);
         padding-bottom:var(--x3);border-bottom:1px solid var(--l1)}
.aisle{display:flex;flex-direction:column}
.ais{
  display:grid;grid-template-columns:34px minmax(0,1.1fr) minmax(0,1.9fr) minmax(0,.8fr) 16px;
  gap:var(--x5);align-items:baseline;padding:var(--x4) 0;border-bottom:1px solid var(--l0);
  transition:background .22s,padding-left .28s cubic-bezier(.16,1,.3,1);
}
.ais:hover{background:var(--s3);padding-left:var(--x3)}
.ais-n{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2)}
.ais-t{font-size:var(--f-bd);color:var(--t0);letter-spacing:-.006em;line-height:1.35}
.ais-d{font-size:var(--f-sm);color:var(--t2);line-height:1.5;min-width:0}
.ais-m{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2);text-align:right;
       font-variant-numeric:tabular-nums}
.ais-go{font:400 var(--f-sm)/1.6 var(--mono);color:var(--t2);
        transition:color .22s,transform .28s cubic-bezier(.16,1,.3,1)}
.ais:hover .ais-go{color:var(--t0);transform:translate(4px,1.7px)}
@media (max-width:820px){
  .ais{grid-template-columns:30px minmax(0,1fr) 16px;row-gap:var(--x1)}
  .ais-d,.ais-m{grid-column:2/4}
  .ais-m{text-align:left}
  .aisle-h span:last-child{display:none}
}

/* ═══════════════════════════════════════════════════════════════════════════
   THE PRODUCT SPLIT — photography left to the page edge, one column of words
   on the right. Every line in the panel shares one left axis and one right
   axis; nothing in it gets its own width. ═══════════════════════════════════ */
.pv{display:grid;grid-template-columns:minmax(0,1fr) clamp(360px,32vw,520px);
    grid-template-rows:auto 1fr;
    align-items:start;border-bottom:1px solid var(--l1)}
/* The media column is a STACK, and the panel is what sticks.

   It was the other way round: one photograph forced to `height: calc(100svh
   - 52px)` with `aspect-ratio: auto`, in a sticky column. That single
   declaration caused everything wrong with this page. A picture told to be
   viewport-tall regardless of its own proportions is a picture being
   stretched — visibly so on the placeholder, whose diagonals stopped being
   diagonal — and the img inside overflowed its box by 85px. Meanwhile the
   sticky column was only ever 848px tall inside a row that reached 2075px
   once the drawers opened, so it had no travel: the photograph simply ended
   and left a dead column beside the reader.

   A stack of images at their own aspect ratios has intrinsic height. Nothing
   needs telling how tall to be, nothing stretches, and the column is now the
   tall one — which is what gives the panel something to stick against. */
.pv-media{padding:0;display:flex;flex-direction:column;background:var(--l1);gap:1px}
.pv-media .shot{border:0;border-right:1px solid var(--l1);min-height:0}
/* the opening frame gets the viewport, but by ratio — never by force */
.pv-media:where(:first-child) .shot:first-child{max-height:calc(100svh - 52px)}
.pv-media:where(:first-child) .shot:first-child img{height:100%;object-position:center}
.pv-panel{padding:var(--x10) var(--gut) var(--x12) var(--x8);
  position:sticky;top:52px;align-self:start;grid-column:2;grid-row:1 / span 2}
/* The opening photograph and the rest of the gallery are two blocks in the
   source, so that on a phone the panel can sit between them in reading order.
   Here they are one column again: the 1px line is the gap the stack had, and
   the second row is the flexible one so a tall panel never pushes the two
   photograph blocks apart. */
.pv-media--more{grid-column:1;grid-row:2;padding-top:1px}
/* the rest of the photographs: on a desktop the same 1px-seamed stack */
.pv-gal{position:relative;display:flex;flex-direction:column;gap:1px;background:var(--l1)}
/* .pv-media in front: .cnav (fx-carousel.css) loads later and would draw it */
.pv-media .pv-gal-nav{display:none}
.pv-panel-in{display:flex;flex-direction:column;align-items:stretch;max-width:none}
.pv-panel-in .body,.pv-panel-in .lede{max-width:none}
.pv-crumb{display:flex;gap:6px;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.06em;
          color:var(--t2);margin-bottom:var(--x5)}
.pv-crumb a:hover{color:var(--t0)}
.pv-crumb i{font-style:normal;color:var(--t3)}
.pv-ttl{font-size:var(--f-xl);line-height:1.14;letter-spacing:-.018em;font-weight:400;
        margin-bottom:var(--x2)}
.pv-answer{font-size:var(--f-sm);line-height:1.6;color:var(--t1);margin-bottom:var(--x5)}
.pv .figs{margin-bottom:var(--x6);gap:0 var(--x6)}
/* the product's own selling points, in the 1.4.2 assurance rows. The text is
   left-aligned like every other line of the panel (1.4.2 centred it; the
   reviewer asked for one alignment inside a block, with only the buttons
   centred): the row is still the same tonal bar, the words start on its
   padding edge */
.pv-points{list-style:none;display:flex;flex-direction:column;gap:1px;margin:0 0 var(--x6)}
.pv-points li{background:var(--s1);padding:var(--x3) var(--x4);
              font-size:var(--f-sm);line-height:1.4;color:var(--t1);text-align:left}
.pv-act{display:flex;flex-direction:column;gap:var(--x2);margin-bottom:var(--x5)}
.pv-act .a1,.pv-act .a2{justify-content:center;width:100%}
/* the one constraint a buyer must know before choosing, under the sentence */
.pv-note{font-size:var(--f-sm);line-height:1.6;color:var(--t2);margin:calc(var(--x3) * -1) 0 var(--x5)}
/* a short desktop window (1024x768, a 1366x768 laptop's 657px): the sticky
   panel must still show the specifications trigger, so the figures and the
   points close up a little, and the gaps between the panel's parts take one
   step less (final merge 2026-10-11: at 1366x657 the trigger sat 17px below
   the fold on Bi-folds and 9px on Feature Glazing) */
@media (min-width:961px) and (max-height:820px){
  .pv-panel{padding-top:var(--x8)}
  .pv-crumb,.pv-answer,.pv-act{margin-bottom:var(--x4)}
  .pv-note{margin-bottom:var(--x4)}
  .pv .figs{padding:var(--x3) 0;margin-bottom:var(--x4)}
  .pv-points{margin-bottom:var(--x4)}
  .pv-points li{padding:var(--x2) var(--x4)}
}

/* ── the trigger into the detail ───────────────────────────────────────────
   One row in the drawer's own shape and type — rule above and below, the
   label in the drawer title style — but it opens a view rather than a fold,
   so it ends in the arrow that travels on the 22.5° axis, not a plus. */
.pv-spec-go{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--x4);
  width:100%;min-height:52px;padding:var(--x4) 0;background:none;border:0;
  border-top:1px solid var(--l1);border-bottom:1px solid var(--l1);
  color:var(--t0);text-align:left;cursor:pointer;
  transition:padding-left .28s cubic-bezier(.16,1,.3,1),color .2s}
.pv-spec-go:hover{padding-left:var(--x2)}
.pv-spec-go i{font:400 var(--f-sm)/1 var(--mono);font-style:normal;color:var(--t2);
  transition:color .22s,transform .28s cubic-bezier(.16,1,.3,1)}
.pv-spec-go:hover i{color:var(--t0);transform:translate(4px,1.7px)}
.pv-spec-go--panel{margin-top:var(--x3)}
.pv-guides{list-style:none;margin:0 0 var(--x6)}
.pv-guides li+li .pv-spec-go{border-top:0}
.pv-flow{display:none}
@media (max-width:960px){
  .pv{grid-template-columns:1fr;grid-template-rows:none}
  .pv-panel{position:static;grid-column:auto;grid-row:auto}
  .pv-spec-go--panel{display:none}
  .pv-flow{display:block;padding:var(--x8) var(--gut) 0}
  /* the row ends on the section's own full-width rule: its inset bottom
     rule sat on that one and on the next section's, a thick stepped line
     (integrate 2026-10-11) */
  .pv-flow .pv-spec-go{border-bottom:0}
  .pv-media--more{grid-column:auto;grid-row:auto;padding-top:0;background:none}
  .pv-media .shot{border-right:0}
  .pv-media .shot:first-child{max-height:none}
  /* THE STRIP. One photograph high (the frame a 4:3 picture fills at full
     width, never more than 60% of the screen), each picture at its own
     proportion up to the full width, so a portrait is not cropped to fit a
     landscape frame. Sideways only: snap points, no scrollbar, and a
     vertical swipe is left to the page. */
  .pv-gal{--gh:min(75vw,60svh);flex-direction:row;overflow-x:auto;overflow-y:hidden;
    scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;
    -webkit-overflow-scrolling:touch}
  .pv-gal::-webkit-scrollbar{display:none}
  .pv-gal .shot{flex:0 0 auto;height:var(--gh);min-height:0;aspect-ratio:auto;
    width:min(100%,calc(var(--gh) * var(--gr,1.3333)));scroll-snap-align:start}
  .pv-gal .ar-34{--gr:.75}  .pv-gal .ar-45{--gr:.8}   .pv-gal .ar-23{--gr:.6667}
  .pv-gal .ar-11{--gr:1}    .pv-gal .ar-43{--gr:1.3333} .pv-gal .ar-32{--gr:1.5}
  .pv-gal .ar-169{--gr:1.7778} .pv-gal .ar-21{--gr:2}  .pv-gal .ar-219{--gr:2.3333}
  .pv-media .pv-gal-nav{display:flex;justify-content:flex-end;padding:var(--x3) var(--gut) 0}
  .pv-gal-nav .cbtn{position:relative}
  /* 44px to the finger, the drawn 38x32 box unchanged */
  .pv-gal-nav .cbtn::after{content:"";position:absolute;inset:-6px -3px}
  .pv-gal-nav .cbtn[aria-disabled="true"]{opacity:.35;cursor:default}
  .pv-gal-nav .cbtn[aria-disabled="true"]:hover{background:none;color:var(--t1);border-color:var(--l2)}
  .pv-panel{padding:var(--x8) var(--gut) var(--x10)}
  .pv-panel-in{max-width:none}
}

/* ═══════════════════════════════════════════════════════════════════════════
   THE SPECIFICATIONS VIEW — a side panel on a desktop, a full-screen sheet on
   a phone. The panel is the product panel's own surface, width and axis; the
   tables and lists inside are the drawer's .dl and its type. It slides on the
   bar's curve (.46s, cubic-bezier(.16,1,.3,1)) and does not move under
   reduced motion. Above the header and the product bar, below the curtain,
   the lightbox and the cursor.
   ═══════════════════════════════════════════════════════════════════════════ */
html.pv-spec-on{overflow:hidden}
html.pv-spec-on body{padding-right:var(--pv-spec-pad,0px)}
.pv-spec{position:fixed;inset:0;z-index:300;display:flex;justify-content:flex-end}
.pv-spec[hidden]{display:none}
.pv-spec-scrim{position:absolute;inset:0;background:rgba(7,7,8,.62);opacity:0;
  transition:opacity .46s cubic-bezier(.16,1,.3,1)}
.pv-spec-in{position:relative;display:flex;flex-direction:column;width:clamp(380px,36vw,560px);
  height:100%;max-height:100dvh;background:var(--s1);border-left:1px solid var(--l1);
  opacity:0;transform:translate3d(32px,0,0);
  transition:transform .46s cubic-bezier(.16,1,.3,1),opacity .3s cubic-bezier(.16,1,.3,1)}
.pv-spec.is-on .pv-spec-scrim{opacity:1}
.pv-spec.is-on .pv-spec-in{opacity:1;transform:none}
.pv-spec-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--x4);
  padding:var(--x6) var(--gut) var(--x5);border-bottom:1px solid var(--l1);flex:0 0 auto}
.pv-spec-id{min-width:0}
.pv-spec-ttl{font-size:var(--f-lg);line-height:1.2;letter-spacing:-.012em;font-weight:400;
  margin-top:var(--x2);color:var(--t0)}
.pv-spec-x{position:relative;display:inline-flex;align-items:center;gap:10px;flex:0 0 auto;
  min-height:44px;padding:0 14px;background:none;border:1px solid var(--l2);color:var(--t1);
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;cursor:pointer;
  transition:background .26s cubic-bezier(.16,1,.3,1),color .26s,border-color .26s}
.pv-spec-x i{position:relative;width:11px;height:11px}
.pv-spec-x i::before,.pv-spec-x i::after{content:"";position:absolute;left:0;top:5px;width:11px;height:1px;
  background:currentColor;transform:rotate(45deg)}
.pv-spec-x i::after{transform:rotate(-45deg)}
.pv-spec-x:hover{background:var(--t0);color:var(--s0);border-color:var(--t0)}
.pv-spec-x:active{transform:translate(1px,.4px) scale(.98)}
.pv-spec-bd{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;padding:0 var(--gut) calc(var(--x12) + env(safe-area-inset-bottom,0px))}
.pv-spec-s{padding:var(--x6) 0;border-bottom:1px solid var(--l1)}
.pv-spec-s>.lbl{display:block;margin-bottom:var(--x4)}
.pv-spec-s .body{font-size:var(--f-sm);line-height:1.65;max-width:none}
.pv-spec-sub{display:block;margin:var(--x5) 0 var(--x2)}
.pv-spec-s .dl{grid-template-columns:minmax(120px,1fr) minmax(0,1.6fr)}
.pv-spec-ul{list-style:none}
.pv-spec-ul li{font-size:var(--f-sm);line-height:1.5;color:var(--t0);padding:var(--x2) 0;border-top:1px solid var(--l0)}
.pv-spec-ul li:first-child{border-top:0;padding-top:0}
.pv-spec-act{padding-top:var(--x8)}
.pv-spec-act .a1{width:100%;justify-content:center}
@media (max-width:767px){
  .pv-spec-in{width:100%;border-left:0;transform:translate3d(0,24px,0)}
  .pv-spec-hd{padding:var(--x4) var(--gut);align-items:center}
  .pv-spec-ttl{font-size:var(--f-md)}
}
@media (max-width:620px){ .pv-spec-s .dl{grid-template-columns:1fr} }
@media (prefers-reduced-motion:reduce){ .pv-spec-scrim,.pv-spec-in{transition-duration:.01ms} }
[data-motion="off"] .pv-spec-scrim,[data-motion="off"] .pv-spec-in{transition:none}
html.pv-spec-on .pv-bar{transform:translateY(101%)}
/* the page's scroll line sits above every layer; it measures the page, not the sheet */
html.pv-spec-on .fx-prog{opacity:0}

/* ── project hero: the photographs are 4:3 (1200 x 896). A tablet and up keep
   the 21:9 band; a phone held upright shows the whole picture (ASK-12 B). */
@media (max-width:767px){ .pj-hero .shot{--arx:4/3;--ar:75%} }

/* ── PROJECT DETAIL (spec §2/§4): story → the work → installed systems and
   one Project details fold → other projects. Built from the site's own
   parts: .lede, .shot, .specs, the .dw drawer and its .dl table, .pcard. */
.pj-h{display:block;margin-bottom:var(--x6)}
.pj-story{padding-top:var(--x8);max-width:68ch}
.pj-story .lede+.lede{margin-top:.9em}
.pj-more-go{display:none}
/* the work: photographs only. One to a row, full width, on a phone (1.4.2's
   gallery; the two-up thumbnails of 145px were the 1.7 change), and two to a
   row from 768px — never three across ("太过于小气": project pictures are
   the point of the page), at 3:2 from 1024px like the project grids. An odd
   set opens on one wide picture, as /projects does (review 2026-10-11). */
.pj-gal{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--x2)}
.pj-gal .shot{min-height:0}
@media (min-width:768px){
  .pj-gal{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pj-gal>.shot:first-child:nth-last-child(odd){grid-column:1/-1;--ar:42.85%;--arx:21/9}
}
@media (min-width:1024px){
  .pj-gal{gap:var(--x4)}
  .pj-gal .shot{--ar:66.67%;--arx:3/2}
}
/* the "Illustrative image" label (app.js aiShot): the label style, small, at
   the lower-left edge of the picture on a scrim dark enough to read on any
   photograph; it ignores the pointer so the picture still opens. Hidden
   until the picture has landed and its wipe has begun, so it never sits on
   an empty frame. */
.ai-tag{position:absolute;left:var(--x3);bottom:var(--x3);z-index:2;pointer-events:none;
  padding:5px 8px 4px;background:rgba(7,7,8,.72);color:var(--t0);
  font:400 var(--f-cap)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;
  transition:opacity .5s .35s}
.shot--ph .ai-tag,.shot--loading .ai-tag,.fx-shot.fx-arm .ai-tag{opacity:0}
.shot--ph .ai-tag{display:none}
@media (min-width:1024px){ .ai-tag{left:var(--x4);bottom:var(--x4)} }
/* installed systems: the spec table, the product name as the link */
.pj-sys{margin-bottom:var(--x8)}
.pj-sys-a{display:inline-flex;align-items:baseline;gap:var(--x2);color:var(--t0);transition:color .2s}
.pj-sys-a i{font:400 var(--f-sm)/1 var(--mono);font-style:normal;color:var(--t2);
  transition:color .22s,transform .28s cubic-bezier(.16,1,.3,1)}
.pj-sys-a:hover{color:var(--sig)}
.pj-sys-a:hover i{color:var(--sig);transform:translate(4px,1.7px)}
/* the one fold: its parts are the spec view's sections, quieter */
.pj-dt-s{padding:var(--x5) 0 var(--x2)}
.pj-dt-s+.pj-dt-s{border-top:1px solid var(--l0)}
.pj-dt-s>.lbl{display:block;margin-bottom:var(--x4)}
@media (max-width:767px){
  .pj-story:not(.is-open) .pj-story-more{display:none}
  .pj-more-go{display:inline-flex;align-items:center;gap:var(--x3);min-height:44px;margin-top:var(--x1);
    padding:0;background:none;border:0;color:var(--t1);cursor:pointer;
    font:400 var(--f-mic)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase}
  .pj-more-go:hover{color:var(--t0)}
  .pj-more-go[aria-expanded="true"] .dw-x::after{transform:scaleY(0)}
}

/* ── related rows under the product: projects that used it, the rest of the
   category. Product cards cut to photo and name; each card draws its own
   1px seam (a shadow into the 1px gap), so a short row leaves clean empty
   space instead of the grid's grey ground. */
.pv-rel-h{display:block;margin-bottom:var(--x6)}
.pv-rel{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;width:100%}
.pv-rel>.pcard{box-shadow:0 0 0 1px var(--rule)}
.pv-rel .pcard-b{padding:var(--x4) clamp(14px,2vw,22px) var(--x5)}
@media (min-width:1024px){ .pv-rel{grid-template-columns:repeat(4,minmax(0,1fr))} }

/* ASK-08 B: in the one-column layout wider than a phone held upright —
   tablets, a small laptop window, a phone on its side — the opening
   photograph took the whole first screen (about 1,000px on a lantern at
   768px) and pushed the name and the action below it. It is capped at 60% of
   the screen there, cropped from its focal point; on a phone held upright
   it keeps its full proportion, as approved (F10). */
@media (min-width:641px) and (max-width:960px){
  .pv-media:where(:first-child) .shot:first-child{max-height:60svh}
}

/* ── alignment discipline ─────────────────────────────────────────────────
   Everything that is not the product split sits on the twelve-column grid
   inside the single .wrap frame. These are the only spans in use, so no
   block can invent its own edge. */
.sec>.wrap>.g12{width:100%}.figs{display:flex;flex-wrap:wrap;gap:0 var(--x8);padding:var(--x4) 0;border-top:1px solid var(--l1);border-bottom:1px solid var(--l1);width:100%}
.aisle,.aisle-h,.rows{width:100%}

/* a still standing in for the film, or acting as its poster frame */
.film-poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}.film video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.film-ph,.film-play{z-index:2}

/* ── the contents row ────────────────────────────────────────────────────
   Handled entirely by the rise rig now (.fx-rise). It used to be governed by
   a second, separate mechanism as well — two systems setting opacity and
   transform on the same element, which is why it would not move. */
.home-glyphs.is-live{pointer-events:auto}
.fx-rise.home-glyphs{position:relative;display:grid;grid-template-columns:repeat(var(--glyph-cols,8),1fr);
  gap:1px;background:var(--l1);border:1px solid var(--l1)}
[data-motion="off"] .home-glyphs{position:relative;display:grid;grid-template-columns:repeat(var(--glyph-cols,8),1fr);
  gap:1px;background:var(--l1);border:1px solid var(--l1)}

/* a cue that there is more below, which leaves as the contents arrive */
.home-peek{position:absolute;left:var(--gut);bottom:clamp(18px,3vh,34px);z-index:2;
  display:flex;align-items:center;gap:10px;
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--t2);
  opacity:1;pointer-events:none;transition:opacity .4s linear}
.home-peek i{display:block;width:34px;height:1px;background:var(--t2);transform-origin:left;
  animation:peekline 2.8s cubic-bezier(.5,0,.5,1) infinite}
.home-peek.is-out{opacity:0}
@keyframes peekline{0%,100%{transform:scaleX(.2);opacity:.5}50%{transform:scaleX(1);opacity:1}}
[data-motion="off"] .home-peek i{animation:none}

/* ═══════════════════════════════════════════════════════════════════════════
   THE HEADER OVER FILM
   On a page that opens with film the bar starts as glass: no fill, no rule,
   just blur, so the picture runs edge to edge and under it without a seam.
   Once the reader has left the hero it fills to black and grows its hairline
   — the moment the bar stops floating over a picture and starts sitting on a
   document. The two states are one transition, not a jump.
   ═══════════════════════════════════════════════════════════════════════════ */.hdr{position:fixed;top:0;left:0;right:0;z-index:100;background:var(--s0);border-bottom:1px solid var(--l1);transition:background .55s cubic-bezier(.16,1,.3,1),
             border-color .55s cubic-bezier(.16,1,.3,1),
             backdrop-filter .55s cubic-bezier(.16,1,.3,1)}
/* glass: only while the film is still behind it */
.hdr.is-glass{
  background:rgba(6,6,8,.20);
  border-bottom-color:transparent;
  -webkit-backdrop-filter:blur(20px) saturate(1.12);
  backdrop-filter:blur(20px) saturate(1.12);
}
/* the bar condenses as it solidifies — the same move, felt rather than read */
.hdr .hdr-in{transition:height .55s cubic-bezier(.16,1,.3,1)}
.hdr.is-glass .hdr-in{height:54px}
.hdr.is-solid .hdr-in{height:50px}
/* over film the links carry a shadow so they hold on a bright frame */
.hdr.is-glass .nav a,.hdr.is-glass .lock{text-shadow:0 1px 14px rgba(0,0,0,.55)}
.hdr.is-glass .lock svg{filter:drop-shadow(0 1px 10px rgba(0,0,0,.6))}
.hdr.is-glass .hdr-cta{border-color:rgba(255,255,255,.34);backdrop-filter:blur(8px)}
/* the mega panel is never glass — it is a surface, not an overlay */
.fx-mega{top:var(--hdr-h,66px)}
[data-motion="off"] .hdr,[data-motion="off"] .hdr .hdr-in{transition:none}

/* ═══════════════════════════════════════════════════════════════════════════
   THE FOOTER
   Two jobs. The veil dissolves whatever was scrolling above it into the
   ground, so the page ends rather than stops. The wordline is the last thing
   on every route and the only place the proposition is set large — it arrives
   as the reader reaches it, not before.
   ═══════════════════════════════════════════════════════════════════════════ */
:root{--veil:clamp(120px,17vh,240px)}
/* The footer rides up over the section before it and its own ground is a
   gradient, so what is above does not stop at an edge — it thins out and is
   gone. An opaque background with the same negative margin would simply have
   covered 170px of the preceding section, which is a crop, not a dissolve. */.ftr{border-top:0;padding:var(--veil) 0 var(--x6);position:relative;z-index:3;overflow:hidden;margin-top:calc(var(--veil) * -1);background:linear-gradient(to bottom,
       rgba(7,7,8,0) 0%, rgba(7,7,8,.42) 30%, rgba(7,7,8,.88) 64%, var(--s0) 92%)}
.ftr-veil{display:none}   /* the footer's own ground does this now */
/* give back the space the pull took, so nothing that matters sits under the
   fade — it should dissolve the tail of a section, not its content */
#app > .sec:last-of-type{padding-bottom:calc(var(--step) + var(--veil))}

/* the wordline — sized to fill the measure, not to a step on the type scale */
.ftr-mark{position:relative;z-index:1;padding:clamp(20px,5vh,72px) 0 clamp(24px,5vh,64px);
  overflow:hidden;line-height:.9}
.ftr-mark svg{display:block;width:100%;height:auto;overflow:visible}
.ftr-mark text{
  font-family:var(--sans);font-weight:400;font-size:100px;letter-spacing:-.028em;
  fill:var(--t0);
}
/* off-peak entry: it rises out of its own mask as the footer is reached */
.fx-ftr .ftr-mark svg{
  opacity:0;transform:translateY(26%);
  transition:opacity .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1);
}
.fx-ftr .ftr-mark.is-in svg{opacity:1;transform:none}
/* .fx-ftr is a class the fx layer puts on <html> — the SAME element that
   carries [data-motion="off"]. Written with a descendant combinator this
   asked for .fx-ftr to be a descendant of itself, so it could never match and
   the footer wordmark stayed at opacity 0 for anyone who turned motion off.
   Dropping .fx-ftr from the selector matches wherever that class ends up. */
[data-motion="off"] .ftr-mark svg{opacity:1;transform:none;transition:none}

/* a hairline under the wordline, then the columns */.ftr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:36px 28px;margin-bottom:var(--x10);position:relative;z-index:1;border-top:1px solid var(--l1);padding-top:var(--x8)}.ftr-end{display:flex;flex-wrap:wrap;gap:14px 28px;padding-top:26px;border-top:1px solid var(--rule);font:400 11.5px/1.5 var(--mono);color:var(--t2);position:relative;z-index:1}
/* the SVG scales itself, so there is nothing to override on a small screen */

/* ═══════════════════════════════════════════════════════════════════════════
   THE HEADER IS OUT OF FLOW
   It was sticky, which meant it occupied 66px of layout and the hero film
   began *below* it. The bar was correctly in its glass state the whole time —
   there was simply nothing behind it to see through. Fixed, and the film
   starts at the top of the document, so the picture runs under the bar.
   Routes that do not open on film get the height back as padding.
   ═══════════════════════════════════════════════════════════════════════════ */
#app{padding-top:var(--hdr-h,54px)}
:root[data-hero="film"] #app{padding-top:0}.home-hero{position:relative;height:100svh;min-height:520px;overflow:hidden}
:root[data-hero="film"] .t1-open{min-height:100svh}

/* ── the hero content rises out of the bottom edge ────────────────────────
   Pinned copy covers the picture from the first frame. Starting it below the
   fold and letting it climb as the reader moves keeps the film clear for as
   long as the reader is willing to just look at it. */
.fx-rise{will-change:transform,opacity}
:root:not([data-motion="off"]) .fx-rise{opacity:0}
[data-motion="off"] .fx-rise{opacity:1!important;transform:none!important}

/* the contents row is flush to the bottom edge of the frame */
.home-glyphs .hg:first-child{border-left:0}
.home-hero > .wrap:last-of-type{margin-bottom:0}

/* ═══════════════════════════════════════════════════════════════════════════
   THE HERO PLAYS ITSELF
   The copy is not waiting for a scroll. The film runs clean for a beat, then
   the block enters on its own, one line after another. Tying it to scroll
   meant it arrived at the same moment as the contents row and the reader had
   to work for something that should simply have happened.
   ═══════════════════════════════════════════════════════════════════════════ */


/* the contents row follows a beat behind the copy, not alongside it */.home-glyphs{position:relative;display:grid;grid-template-columns:repeat(var(--glyph-cols,8),1fr);
  gap:1px;background:var(--l1);border:1px solid var(--l1)}

.home-glyphs .hg{transition:background .34s cubic-bezier(.16,1,.3,1),backdrop-filter .34s}
/* with no script the hero is simply there — and it is COPY, not a grid.
   css_hygiene had merged this selector into the glyph-grid rule below because
   both began `html:not(.fx-on)`, so the title and lede inherited
   display:grid, eight columns and a --l1 fill: one word per line in a dark
   box. Invisible for as long as fx-on was always set; the first build where
   it was not made it the whole first screen. */
html:not(.fx-on) .home-hero-in > *{position:relative;opacity:1;transform:none}
html:not(.fx-on) .home-glyphs{position:relative;display:grid;grid-template-columns:repeat(var(--glyph-cols,8),1fr);
  gap:1px;background:var(--l1);border:1px solid var(--l1)}

.home-hero-in .btns{margin-top:var(--x2)}.home-ttl{font-size:var(--f-2xl);line-height:1.04;letter-spacing:-.026em;font-weight:400;margin:0;text-wrap:balance}

/* The hero copy is never hidden by CSS. It is animated in imperatively with
   the Web Animations API, so a failed or cancelled animation leaves the text
   at its natural, visible state. Hiding in the stylesheet and revealing with
   a transition is fail-CLOSED: one missed transition and the headline is
   simply gone. */

/* ── the property explorer ────────────────────────────────────────────────
   Hotspots are positioned HTML, not SVG. Drawn into a square viewBox with
   preserveAspectRatio="none" and stretched to 16:9 they scaled ~19x across
   and ~9x down: every ring became a giant ellipse and 10px type rendered at
   about 150px. Percent offsets on absolute elements cannot distort. */
/* Anchored to the picture, not the stage. Below 860px .expl-rd drops into
   normal flow INSIDE the stage, so the stage grows taller than the 16:9
   photograph it contains — 285px against 183px at 375px wide. inset:0 made
   every hotspot's percentage `top` measure against that taller box, putting
   four of the eleven below the photograph and on top of the readout. Matching
   the ratio pins the layer to the image whatever else the stage holds. */
.expl-spots{position:absolute;left:0;right:0;top:0;aspect-ratio:16/9;pointer-events:none}

/* ═══ ONE ROOM AT A TIME ═══════════════════════════════════════════════════
   Two night frames of the same elevation, pixel-registered: the base has the
   garden lighting on and every interior dark; the upper one has every room
   lit. The upper layer is masked to a single soft circle centred on whichever
   hotspot the reader is on, so hovering a product turns that room's light on
   and nothing else. Leaving closes it. Moving to another product collapses
   the first before opening the second, so two rooms are never lit at once.

   For a company that sells glazing, the product IS the light coming through
   it — this says more about a rooflight than a ring drawn around one.

   Armed by JS adding .is-night. Until then the stage is the plain photograph:
   no dimming, no mask, nothing hidden. Fail-open. */
/* --mx/--my are declared on the STAGE, not here. Declared on .expl-lit they
   shadow the inherited value the script writes on the stage, and the aperture
   is pinned to the centre of the frame no matter which hotspot is hovered —
   which is exactly what it did. A custom property set on the element always
   beats one inherited from its parent. */
.expl-lit{position:absolute;left:0;right:0;top:0;aspect-ratio:16/9;
  pointer-events:none;opacity:0;z-index:1;
  --r:0px;
  -webkit-mask-image:radial-gradient(circle var(--r) at var(--mx) var(--my),
      #000 0%,#000 42%,rgba(0,0,0,.5) 68%,transparent 82%);
          mask-image:radial-gradient(circle var(--r) at var(--mx) var(--my),
      #000 0%,#000 42%,rgba(0,0,0,.5) 68%,transparent 82%);
  /* switching ON is decisive: the aperture opens on the site's own curve.
     Switching OFF is a different event and gets its own timing below. */
  transition:--r .42s cubic-bezier(.16,1,.3,1),
             opacity .3s cubic-bezier(.16,1,.3,1)}
.expl-lit img{width:100%;height:100%;object-fit:cover;display:block}.expl-stage{position:relative;width:100%;aspect-ratio:16/9;--mx:50%;--my:50%}
/* ── the explorer opts out of the parallax rig ────────────────────────────
   .fx-shot gives every photograph a 10% overscan, a -5% top offset, a
   scroll-driven translate and a 1.06 scale. Right for a photograph, wrong for
   an instrument: the eleven hotspots are percentages of a static 16:9 box and
   the lit layer is a second copy that must register pixel for pixel. Overscan
   defeats both, and because the translate is scroll-driven the misalignment
   moves as the page moves. Neutralise the rig's INPUTS rather than override
   its output, so it still owns the transform and there is no second writer. */
/* .shot carries a 1px border with box-sizing:border-box, so its CONTENT box
   is 2px smaller than the stage. The base photograph fills that content box
   while the lit overlay and the hotspot layer are anchored to the stage — so
   the two photographs were scaled and offset differently, by 1px at every
   edge, and the eleven hotspots were positioned as percentages of a box 2px
   wider than the picture they annotate. On a full-bleed elevation the border
   draws nothing anyway. Removing it makes stage, picture, overlay and hotspot
   layer one and the same box. */
.expl-stage .shot{border:0}
.expl-stage .fx-shot{--fx-oh:0%;--fx-py:0%;--fx-scale:1}
.expl-stage .fx-shot > img{top:0;bottom:0;height:100%;transform:none;scale:1;transition:none}
/* both layers: same box, same fit, same origin, or they cannot align */
.expl-stage .shot img,.expl-lit img{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 50%}

/* ═══ A SET THAT GOES NOWHERE ══════════════════════════════════════════════
   NAMED .slate, not .frun/.fr — those were already taken by featureRun(),
   which renders `<a class="fr">`, a LINK, and carries
   `.fr:hover{background:var(--s2);padding-left:var(--x3)}`. Defining a static
   module under the same names meant every block that goes nowhere inherited a
   link's hover and a link's grid, and did it from a rule 200 lines further
   down that won on source order. The differentiation was real in the source
   and absent in the browser. A new module gets a new name. ═══════════════════════════════════════════════════════════
   The counterpart to .cell. An interactive tile is a box in a hairline mesh
   with a small mono index and an Open arrow; a static run has no box at all —
   a large index in the display face, a rule under each row, nothing shaped
   like a target. The two can no longer be confused because they share no
   shape, rather than because one carries an extra word at the bottom. */
/* These two base rules went missing between v0.0.2 and v0.0.4 and the module
   shipped without them. css_hygiene.merge() had folded the original
   `.frun{}` / `.fr{}` bases into featureRun's identically-named rules 200
   lines further down; when the module was renamed to .slate only the block
   that was still HERE got renamed, and the bases were no longer in it. So
   .slate had no list-style and .slate-i had no grid: the ordered list drew
   its own numerals beside the display index, and the index and body stacked
   instead of sitting side by side. Restated explicitly, under names nothing
   else uses. */
.slate{list-style:none;display:grid;gap:0}
.slate-i{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--x5);
         align-items:start;padding:var(--x6) 0;border-top:1px solid var(--l1)}
.slate--2{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--x10)}
.slate--3{grid-template-columns:repeat(3,minmax(0,1fr));column-gap:var(--x6)}
.slate--1 .slate-i:first-child{border-top:0}
.slate--2 .slate-i:nth-child(-n+2){border-top:0}
.slate--3 .slate-i:nth-child(-n+3){border-top:0}
.slate-n{font:300 clamp(26px,2.6vw,38px)/1 var(--sans);letter-spacing:-.02em;
      color:var(--l2);font-variant-numeric:tabular-nums;min-width:1.5em}
.slate-t{display:block;font-size:var(--f-bd);font-weight:500;letter-spacing:-.006em;
      color:var(--t0);margin-bottom:var(--x2)}
.slate-d{font-size:var(--f-sm);line-height:1.6;color:var(--t1);max-width:60ch}
.slate-m{display:block;margin-top:var(--x3);font:400 var(--f-mic)/1 var(--mono);
      letter-spacing:.13em;text-transform:uppercase;color:var(--t2)}
/* a gallery stacks: picture, then index and caption beneath it */
.slate--shot .slate-i{grid-template-columns:minmax(0,1fr);gap:var(--x4);border-top:0;
  padding:0 0 var(--x8)}
.slate--shot .slate-n{font-size:var(--f-mic);font-family:var(--mono);color:var(--t2);
  letter-spacing:.14em;min-width:0}
@media (max-width:900px){ .slate--3{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:760px){ .slate--2,.slate--3{grid-template-columns:1fr}
  .slate--2 .slate-i:nth-child(2),.slate--3 .slate-i:nth-child(-n+3){border-top:1px solid var(--l1)}
  .slate--3 .slate-i:first-child{border-top:0} }

/* a static cell inside a MIXED grid: no tile, no arrow, no hover */
/* the checklist inside a step */
.slate-l{list-style:none;margin-top:var(--x3);display:flex;flex-direction:column;gap:5px}
.slate-l li{font:400 var(--f-mic)/1.5 var(--mono);color:var(--t2);padding-left:14px;position:relative}
.slate-l li::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:1px;background:var(--l2)}

/* ── a SEQUENCE ───────────────────────────────────────────────────────────
   The other static family. A roster (.slate) is a set with no order: two
   across, a rule per row, a large index. A sequence has direction: one
   column, a connector running down the left, the number sitting on that line.
   Neither carries a box, a terminator or a hover — they cannot be mistaken
   for targets, and they are not mistaken for each other. */
.seq{list-style:none;display:grid;gap:0}
.seq-i{display:grid;grid-template-columns:var(--x12) minmax(0,1fr);gap:0 var(--x5);
       align-items:start;padding:0 0 var(--x8)}
.seq-k{position:relative;display:block;min-height:100%}
.seq-n{display:block;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;
       color:var(--t2);font-variant-numeric:tabular-nums;position:relative;z-index:1;
       background:var(--s0);padding-bottom:6px}
.seq-ax{position:absolute;left:5px;top:14px;bottom:calc(var(--x8) * -1);width:1px;
        background:var(--l1)}
.seq-i:last-child .seq-ax{display:none}
.seq-t{display:block;font-size:var(--f-bd);font-weight:500;letter-spacing:-.006em;
       color:var(--t0);margin-bottom:var(--x2)}
.seq-d{font-size:var(--f-sm);line-height:1.6;color:var(--t1);max-width:62ch}
.seq-l{list-style:none;margin-top:var(--x3);display:flex;flex-direction:column;gap:5px}
.seq-l li{font:400 var(--f-mic)/1.5 var(--mono);color:var(--t2);padding-left:14px;position:relative}
.seq-l li::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:1px;background:var(--l2)}
@media (max-width:760px){ .seq-i{grid-template-columns:var(--x10) minmax(0,1fr)} }

/* .cell--static{background:none} at 0,1,0 loses to div.cell{background:--s0}
   at 0,1,1, and a.cell's own --void resolves to the same --s0 — so a static
   cell in a mixed grid kept the interactive tile's fill and differed from a
   target by one missing word. Matching the specificity is the whole fix. */
div.cell--static{background:none}
.cell--static .cell-go{display:none}
.expl-stage.is-night .expl-lit{opacity:1}
.expl-stage.is-night.is-on .expl-lit{--r:var(--hot-r,190px)}

/* ── the light cools, it does not close ───────────────────────────────────
   Both directions used one 420ms curve, so leaving a product read as the
   aperture snapping shut — a shutter, not a lamp. Moving BETWEEN products
   still has to be quick, because the aperture must be gone before it moves or
   the light sweeps across the front of the house. So the two exits are
   separated: .is-cooling is only set when the pointer leaves the stage
   entirely, and it lets the patch dim and widen slightly as it goes, the way
   a filament does. The radius outlasts the opacity, so what fades is light
   rather than a circle shrinking to a point. */
.expl-stage.is-night.is-cooling .expl-lit{
  opacity:0;
  --r:calc(var(--hot-r, 190px) * 1.18);
  transition:opacity .82s cubic-bezier(.32,0,.18,1),
             --r 1.1s cubic-bezier(.32,0,.18,1)}
@property --r{syntax:'<length>';inherits:false;initial-value:0px}

/* the markers can be quiet again: the light is doing the work */
.expl-stage.is-night .hs-ring{background:rgba(7,7,8,.28);border-color:rgba(246,239,228,.62)}
.expl-stage.is-night .hs[data-on] .hs-ring{background:rgba(7,7,8,.1);border-color:#fff}

/* motion off: no travelling light. Every room stays lit, which is the
   informative state, and the markers carry the interaction on their own. */
[data-motion="off"] .expl-stage.is-night .expl-lit{
  --r:0px;opacity:1;-webkit-mask-image:none;mask-image:none}
/* ── hotspots over a PHOTOGRAPH ───────────────────────────────────────────
   These were drawn for the grey placeholder: a 1px --edge hairline and a 4px
   --edge dot, both dark. Against the real elevation — red brick, slate, bright
   overcast sky, glass — a dark hairline has nothing to work against and the
   markers disappear. A marker on unknown imagery cannot borrow contrast from
   the background; it has to carve its own. So each one darkens the photograph
   inside its own disc and rings that disc in the emphasis white. It reads the
   same over sky, brick and glazing, and it stays the site's language: a
   circle, a hairline, no colour of its own. */
.hs{position:absolute;transform:translate(-50%,-50%);width:30px;height:30px;
    display:grid;place-items:center;pointer-events:auto;cursor:pointer;
    transition:opacity .25s}
.hs-ring{position:absolute;inset:0;border:1.5px solid var(--em);border-radius:50%;
  background:rgba(7,7,8,.34);
  -webkit-backdrop-filter:blur(2px) brightness(.55);backdrop-filter:blur(2px) brightness(.55);
  box-shadow:0 2px 10px rgba(0,0,0,.55);
  transition:transform .3s cubic-bezier(.16,1,.3,1),
             border-color .2s cubic-bezier(.16,1,.3,1),
             background .2s cubic-bezier(.16,1,.3,1)}
.hs-ring::after{content:"";position:absolute;inset:-1.5px;border:1.5px solid var(--em);
  border-radius:50%;opacity:0;animation:hspulse 3.2s cubic-bezier(.2,.7,.3,1) infinite;
  animation-delay:var(--pd,0ms)}
@keyframes hspulse{0%{transform:scale(1);opacity:.7}70%{transform:scale(2.1);opacity:0}100%{opacity:0}}
.hs-dot{width:5px;height:5px;border-radius:50%;background:var(--em);
  box-shadow:0 0 0 1px rgba(7,7,8,.5);transition:transform .2s cubic-bezier(.16,1,.3,1)}
.hs-n{position:absolute;top:-18px;font:500 var(--f-cap)/1 var(--mono);color:var(--em);
      letter-spacing:.06em;
      text-shadow:0 1px 3px rgba(0,0,0,.95),0 0 10px rgba(0,0,0,.8)}
.hs:hover .hs-ring,.hs:focus-visible .hs-ring,.hs[data-on] .hs-ring{
  transform:scale(1.4);border-color:#fff;background:rgba(7,7,8,.62)}
.hs:hover .hs-dot,.hs:focus-visible .hs-dot,.hs[data-on] .hs-dot{transform:scale(1.5);background:#fff}
.hs:hover .hs-n,.hs[data-on] .hs-n{color:#fff}
.hs:hover .hs-ring::after,.hs:focus-visible .hs-ring::after{animation-play-state:paused}
.hs.fx-off{opacity:.18;pointer-events:none}
[data-motion="off"] .hs-ring::after{animation:none}

/* the readout sits bottom-LEFT: the floating actions occupy bottom-right and
   were covering it */
/* It is a readout sitting on top of the hotspot layer, so the panel itself
   must not take a hotspot's click — but it carries an "Open" link, so the
   link has to take its own. Panel transparent, children live. */
.expl-rd{position:absolute;left:0;bottom:0;z-index:2;width:min(340px,86%);pointer-events:none;
  background:var(--s0);border-top:1px solid var(--l1);border-right:1px solid var(--l1);
  padding:var(--x5);display:flex;flex-direction:column;gap:var(--x2)}
.expl-rd a,.expl-rd button{pointer-events:auto}
/* empty until a point is chosen, so the box does not stand there blank (beta1.3.4) */
.expl-rd:empty{display:none}
@media (max-width:860px){ .expl-rd{position:static;width:auto;border-right:0} }

/* ═══════════════════════════════════════════════════════════════════════════
   THE CURSOR CARRIES THE MESSAGE
   Studied from 70materia: fifteen hover rules on the whole site, not one of
   them a line. The element barely moves; the cursor becomes a labelled tag
   that says what will happen. That is why their pages stay calm while still
   answering the pointer. Ours had 105 hover rules and eighteen of them were
   pseudo-element lines.
   ═══════════════════════════════════════════════════════════════════════════ */
.fx-cur-lbl{
  display:block;box-sizing:border-box;height:19px;padding:0 6px 0 7.5px;
  background:var(--s0);color:var(--em,var(--t0));border:1px solid rgba(240,238,234,.34);
  border-color:color-mix(in srgb,var(--em,#f0eeea) 34%,transparent);
  font:500 9.5px/17px var(--mono);letter-spacing:.16em;text-transform:uppercase;
  white-space:nowrap;
}

/* ═══════════════════════════════════════════════════════════════════════════
   FOUR SHAPES, FOUR MEANINGS
   Each of these was a numbered card with a paragraph. They are different
   things and now they look it: a split, a fork, a set of actions, an index.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── the two divisions ────────────────────────────────────────────────── */
.dsplit{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--l1);
        border:1px solid var(--l1)}
.dsp{background:var(--s0);padding:clamp(28px,3.6vw,56px);display:flex;flex-direction:column;
     gap:var(--x5);min-width:0;transition:background .32s cubic-bezier(.16,1,.3,1)}
.dsp:hover{background:var(--s3)}
.dsp-shot{display:block;margin:calc(-1 * clamp(28px,3.6vw,56px)) calc(-1 * clamp(28px,3.6vw,56px)) 6px}
.dsp-mark{display:block;width:min(300px,74%)}
.dsp-mark svg{width:100%;height:auto;fill:var(--t0)}
.dsp-line{font-size:var(--f-md);line-height:1.42;color:var(--t1);max-width:44ch}
.dsp-cats{display:flex;flex-wrap:wrap;gap:6px 18px}
.dsp-cats i{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;
            color:var(--t2);font-style:normal;transition:color .24s}
.dsp:hover .dsp-cats i{color:var(--t1)}
.dsp-go{margin-top:auto;display:inline-flex;align-items:center;gap:10px;
        font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t0)}
.dsp-go i{font-style:normal;transition:transform .3s cubic-bezier(.16,1,.3,1)}
.dsp:hover .dsp-go i{transform:translate(7px,2.9px)}
@media (max-width:860px){ .dsplit{grid-template-columns:1fr} }

/* ── the three intents: a fork, set as questions ──────────────────────── */
.fork{border-top:1px solid var(--l1)}
.fk{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,9fr) minmax(0,3fr);
    gap:var(--x6);align-items:baseline;padding:var(--x6) 0;border-bottom:1px solid var(--l1);
    transition:background .26s,padding-left .3s cubic-bezier(.16,1,.3,1)}
.fk:hover{background:var(--s3);padding-left:var(--x4)}
.fk-t{font-size:var(--f-lg);line-height:1.18;letter-spacing:-.016em;color:var(--t0)}
.fk-d{font-size:var(--f-sm);line-height:1.55;color:var(--t1)}
.fk-m{font:400 var(--f-mic)/1.5 var(--mono);letter-spacing:.13em;text-transform:uppercase;
      color:var(--t2);text-align:right}
@media (max-width:860px){
  .fk{grid-template-columns:1fr;gap:var(--x2)}
  .fk-m{text-align:left}
}

/* ── the booking routes: actions, weighted ────────────────────────────── */
.racts{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1px;
       background:var(--l1);border:1px solid var(--l1)}
.ra{background:var(--s0);padding:var(--x6) var(--x5);display:flex;flex-direction:column;
    gap:var(--x2);min-width:0;transition:background .3s cubic-bezier(.16,1,.3,1)}
.ra .ico{width:19px;margin-bottom:var(--x2)}
.ra:hover{background:var(--s2)}
.ra--lead{background:var(--s2)}
.ra--lead:hover{background:var(--s3)}
.ra--lead .ra-t{color:var(--t0)}
.ra-t{font-size:var(--f-bd);line-height:1.3;color:var(--t0);letter-spacing:-.006em}
.ra-d{font-size:var(--f-sm);line-height:1.5;color:var(--t2)}
.ra-go{margin-top:auto;padding-top:var(--x4);font:400 13px/1 var(--mono);color:var(--t2);
       transition:transform .3s cubic-bezier(.16,1,.3,1),color .24s}
.ra:hover .ra-go{color:var(--t0);transform:translate(6px,2.5px)}

/* ── the explorer fallback: an index, not eleven cards again ──────────── */
.spidx{list-style:none;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
       gap:0 var(--x6);padding:var(--x4) 0 0}
.spidx a{display:flex;gap:var(--x3);padding:7px 0;font-size:var(--f-sm);color:var(--t1);
         transition:color .2s,padding-left .24s}
.spidx a:hover{color:var(--t0);padding-left:6px}
.spidx i{font:400 var(--f-mic)/1.5 var(--mono);color:var(--t2);font-style:normal}.expl-list summary{cursor:pointer;list-style:none;padding:var(--x4) 0;font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}

/* the preview column carries a photograph, not the drawing a second time */
.fx-mega-shot{min-height:0;display:flex;align-items:flex-start}
.fx-mega-shot .shot{width:100%;max-height:250px;min-height:0}
.fx-mega-shot .ph-brief{display:none}      /* the brief belongs in the shot list */
.fx-mega-dwg{display:none}

/* ── a strip of standards ─────────────────────────────────────────────── */
.fstrip{display:flex;flex-wrap:wrap;gap:var(--x4) var(--x10);padding:var(--x5) 0;
        border-top:1px solid var(--l1);border-bottom:1px solid var(--l1)}
.fs{display:flex;flex-direction:column;gap:4px;min-width:0}
.fs b{font-size:var(--f-bd);font-weight:400;color:var(--t0);letter-spacing:-.004em}
.fs i{font:400 var(--f-mic)/1.4 var(--mono);letter-spacing:.12em;text-transform:uppercase;
      color:var(--t2);font-style:normal}

/* ── a knowledge index: titles, scanned not read ──────────────────────── */
.idxl{list-style:none;border-top:1px solid var(--l1)}
.idxl a{display:grid;grid-template-columns:38px minmax(0,1fr) auto 16px;gap:var(--x4);
        align-items:baseline;padding:var(--x4) 0;border-bottom:1px solid var(--l0);
        transition:background .24s,padding-left .28s cubic-bezier(.16,1,.3,1)}
.idxl a:hover{background:var(--s2);padding-left:var(--x3)}
.idxl i{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2);font-style:normal}
.idxl b{font-size:var(--f-bd);font-weight:400;color:var(--t0);letter-spacing:-.004em;min-width:0}
.idxl em{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2);font-style:normal;text-align:right}
.idxl-go{font:400 13px/1.6 var(--mono);color:var(--t2);text-align:right;
  transition:transform .28s cubic-bezier(.16,1,.3,1),color .22s cubic-bezier(.16,1,.3,1)}
.idxl a:hover .idxl-go{color:var(--t0);transform:translate(4px,1.7px)}

/* ── one place, one photograph ────────────────────────────────────────── */
.spanel{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:1px;
        background:var(--l1);border:1px solid var(--l1)}
.spanel-m,.spanel-b{background:var(--s0);min-width:0}
.spanel-m .shot{border:0}
.spanel-b{padding:clamp(20px,2.4vw,34px);display:flex;flex-direction:column;justify-content:center;
          gap:var(--x5)}
.sp-row b{display:block;font-size:var(--f-bd);font-weight:400;color:var(--t0);margin-bottom:5px}
.sp-row--go{display:block;text-decoration:none;color:inherit;padding:14px 16px;margin:0 -16px;border-top:1px solid var(--l1);
  transition:background .32s cubic-bezier(.16,1,.3,1)}
.sp-row--go:hover{background:var(--s3)}
.spanel-b:has(.sp-row--go){gap:0;justify-content:center}
.sp-row--go:first-child{border-top:0}
.sp-go{display:block;margin-top:8px;font:500 11px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--t2)}
.sp-row--go:hover .sp-go{color:var(--t0)}
.sp-row p{font-size:var(--f-sm);line-height:1.55;color:var(--t1)}
@media (max-width:820px){ .spanel{grid-template-columns:1fr} }

/* ── a compact product run ────────────────────────────────────────────── */.frun{list-style:none;display:grid;gap:0;border-top:1px solid var(--l1)}.fr{display:grid;grid-template-columns:38px minmax(0,1.1fr) minmax(0,2fr) 18px;gap:var(--x4);align-items:baseline;padding:var(--x4) 0;border-top:1px solid var(--l1);border-bottom:1px solid var(--l0);transition:background .24s,padding-left .28s cubic-bezier(.16,1,.3,1)}
.fr:hover{background:var(--s2);padding-left:var(--x3)}
.fr i{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2);font-style:normal}
.fr b{font-size:var(--f-bd);font-weight:400;color:var(--t0);letter-spacing:-.004em;min-width:0}
.fr span{font-size:var(--f-sm);line-height:1.5;color:var(--t2);min-width:0}
.fr em{font:400 13px/1.6 var(--mono);color:var(--t2);font-style:normal;
       transition:transform .28s cubic-bezier(.16,1,.3,1),color .22s}
.fr:hover em{color:var(--t0);transform:translate(4px,1.7px)}
@media (max-width:820px){
  .fr{grid-template-columns:34px minmax(0,1fr) 18px;row-gap:4px}
  .fr span{grid-column:2/4}
}

/* ── the process, plotted on an axis ──────────────────────────────────────
   This was five bordered cells, each with an icon, a number, a title and a
   paragraph — the same object as the card grids above and below it, which
   is why the page read as one texture from top to bottom. It is a sequence
   with a direction, so it is drawn as a plot: one axis, a node per stage,
   the title large, and the accountable fact under it. The paragraph is on
   the cursor instead (fx-peek), and comes back into the layout wherever
   there is no hover to put it on. */
.pchart{list-style:none;display:grid;
  grid-template-columns:repeat(var(--pc-n,5),minmax(0,1fr));
  gap:0;border-top:1px solid var(--l1);border-bottom:1px solid var(--l1)}
.pc{padding:var(--x6) var(--x5) var(--x6) 0;display:flex;flex-direction:column;
  gap:var(--x2);min-width:0;position:relative;
  transition:background .34s cubic-bezier(.16,1,.3,1)}
.pc:hover{background:var(--s1)}
/* The glyph box is a FIXED height. The five drawings have five different
   aspect ratios, so an auto-height box made each column start its axis at a
   different y — a 20px staircase where the whole point is one straight
   line. The glyph sits on the bottom of the box and the axis below it is
   level across all five. */
.pc-ico{display:flex;align-items:flex-end;justify-content:flex-start;
  width:clamp(28px,2.6vw,36px);height:clamp(34px,3.2vw,46px);color:var(--t2);
  /* the drawings carry about 13% of their width as air on the left: pulled
     back so the line work, the node and the words start on one edge */
  margin-left:calc(clamp(28px,2.6vw,36px) * -.135);
  transition:color .3s,transform .46s cubic-bezier(.16,1,.3,1)}
.pc-ico .ico{width:100%;height:auto;max-height:100%}
.pc:hover .pc-ico{color:var(--t0);transform:translateY(-3px)}
/* the axis: the node sits on the column's left edge, under the drawing and over
   the number and the title, so the four share one line (the node used to sit
   in the middle of the column, away from all of them). The rule runs from node
   to node and stops on the last. */
.pc-ax{position:relative;display:block;height:11px;margin:var(--x4) 0 var(--x3)}
.pc-ax::before{content:"";position:absolute;left:6px;right:0;top:50%;height:1px;
  background:var(--l2)}
.pc:last-child .pc-ax::before{display:none}
.pc-ax i{position:absolute;left:6.4px;top:50%;width:9px;height:9px;margin:-5px 0 0 -5px;border:1px solid var(--t2);background:var(--s0);transform:rotate(22.5deg);transition:background .3s,border-color .3s,transform .46s cubic-bezier(.16,1,.3,1)}
.pc:hover .pc-ax i{background:var(--t0);border-color:var(--t0);
  transform:rotate(22.5deg) scale(1.55)}
/* --t3 is declared "3.21:1, decorative and large text only". This is 10px
   type carrying the stage number, which is content, not decoration — measured
   3.26:1 against --s0 and failing 1.4.3 AA. It rests at --t2 (4.70:1) and
   lifts to --t1 on hover, so the state change survives the correction. */
.pc-n{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.16em;color:var(--t2);
  transition:color .3s cubic-bezier(.16,1,.3,1)}
.pc:hover .pc-n{color:var(--t1)}
/* the title is the object here, so it is set at heading size */
.pc-t{font-size:clamp(18px,1.65vw,25px);font-weight:400;line-height:1.2;
  letter-spacing:-.012em;color:var(--t0);padding-right:var(--x4)}
.pc-m{margin-top:var(--x2);font:400 var(--f-mic)/1.45 var(--mono);letter-spacing:.08em;
  color:var(--t2);padding-right:var(--x4)}
/* The column owns its paragraph, on every pointer type. It used to be hidden
   here and shown on a cursor card instead, which is one fact with two owners
   and supporting copy reachable only by hover. */
.pc-d{margin-top:var(--x3);font-size:var(--f-sm);line-height:1.5;color:var(--t1);
  padding-right:var(--x4)}
@media (max-width:1100px){
  .pchart{grid-template-columns:repeat(2,minmax(0,1fr))}
  /* two to a row, one on a phone: each cell is its own axis, node to the cell's edge */
  .pc:last-child .pc-ax::before{display:block}
}
@media (max-width:620px){ .pchart{grid-template-columns:1fr} }
[data-motion="off"] .pc,[data-motion="off"] .pc-ico,[data-motion="off"] .pc-ax i{transition:none}

/* ── the figures, at the size a figure deserves ───────────────────────── */
.bignums{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;
  background:var(--l1);border-top:1px solid var(--l1);border-bottom:1px solid var(--l1)}
.bn{background:var(--s0);padding:var(--x8) var(--x5) var(--x8) 0;display:flex;
  flex-direction:column;gap:var(--x2);min-width:0}
.bn-n{font-size:clamp(46px,6.4vw,92px);line-height:.86;letter-spacing:-.04em;
  color:var(--t0);font-variant-numeric:tabular-nums}
.bn-u{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--t2)}
.bn-c{margin-top:var(--x3);font-size:var(--f-sm);line-height:1.45;color:var(--t1)}
.bncodes{display:flex;flex-wrap:wrap;gap:var(--x4) var(--x10);padding:var(--x5) 0;
  border-bottom:1px solid var(--l1)}
.bncodes span{display:flex;flex-direction:column;gap:5px;font-size:var(--f-sm);color:var(--t0)}
.bncodes i{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--t2);font-style:normal}
.bnmore{display:inline-flex;align-items:center;gap:10px;
  /* 11px of type in an 11px box: a 24x24 pointer target under WCAG 2.5.8,
     and nothing near it to earn the spacing exception. The padding grows the
     hit area to 25px; the negative margin keeps the optical position it had. */
  min-height:25px;padding-block:7px;margin-top:calc(var(--x6) - 7px);
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t1)}
.bnmore i{font-style:normal;transition:transform .34s cubic-bezier(.16,1,.3,1)}
.bnmore:hover{color:var(--t0)}
.bnmore:hover i{transform:translate(6px,2.5px)}
@media (max-width:900px){ .bignums{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:480px){ .bignums{grid-template-columns:1fr} }

/* ── two projects and a door to the rest ──────────────────────────────── */
.ptease{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--l1);
        border:1px solid var(--l1)}
/* one project and the door to the rest: two across, so no empty third cell */
.ptease--2{grid-template-columns:repeat(2,1fr)}
.pt{background:var(--s0);padding:0 0 var(--x6);display:flex;flex-direction:column;gap:var(--x2);
    min-width:0;position:relative;transition:background .3s cubic-bezier(.16,1,.3,1)}
.pt:hover{background:var(--s3)}
.pt .shot{border:0;border-bottom:1px solid var(--l1);margin-bottom:var(--x4)}
.pt-n{padding:0 var(--x5);font:400 var(--f-mic)/1 var(--mono);color:var(--t2)}
.pt-t{padding:0 var(--x5);font-size:var(--f-md);font-weight:400;color:var(--t0);letter-spacing:-.01em}
.pt-d{padding:0 var(--x5);font-size:var(--f-sm);line-height:1.55;color:var(--t1)}
/* the third cell is the way through, not a third project */
.pt--more{overflow:hidden;display:grid;place-items:center;padding:0;min-height:260px}
.pt-veil{position:absolute;inset:0;
  background:linear-gradient(140.5deg,var(--s2),var(--s0) 60%);
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}
.pt-veil::after{content:"";position:absolute;inset:0;opacity:.5;
  background:repeating-linear-gradient(112.5deg,transparent 0 15px,var(--l1) 15px 16px)}
.pt-more-in{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;
            gap:var(--x2);text-align:center;padding:var(--x6)}
.pt-more-n{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t2)}
.pt-more-in b{font-size:var(--f-md);font-weight:400;color:var(--t0);letter-spacing:-.01em}
.pt-more-go i{font-style:normal;transition:transform .3s cubic-bezier(.16,1,.3,1)}

/* This panel had NO hover at all — .pt:hover changes a background that
   .pt-veil covers completely at inset:0, so the only thing that ever moved
   was the arrow. The veil is the surface here, so the veil is what responds:
   its own 112.5° hatch comes up from .5 to .78 and the gradient lifts a step,
   which reads as the panel brightening rather than as a new element arriving.
   The Open control then takes the emphasis white and draws its rule. Nothing
   is stroked around the card — the retired edge-drawing stays retired; this
   is a state change, not a line being drawn. */
.pt--more .pt-veil{transition:background .3s cubic-bezier(.16,1,.3,1)}
.pt--more .pt-veil::after{transition:opacity .3s cubic-bezier(.16,1,.3,1)}
.pt--more:hover .pt-veil{background:linear-gradient(140.5deg,var(--s4),var(--s2) 60%)}
.pt--more:hover .pt-veil::after{opacity:.82}
.pt--more:hover .pt-more-n{color:var(--t1)}
.pt--more:hover .pt-more-go i{transform:translate(7px,2.9px)}
/* the Open control reads as the control, not as a third line of copy */.pt-more-go{display:inline-flex;align-items:center;gap:9px;margin-top:var(--x3);font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t0);border-bottom:1px solid transparent;padding-bottom:3px;transition:border-color .3s cubic-bezier(.16,1,.3,1),color .3s cubic-bezier(.16,1,.3,1)}
.pt--more:hover .pt-more-go{color:var(--em);border-bottom-color:var(--em)}
@media (max-width:900px){ .ptease{grid-template-columns:1fr} .pt--more{min-height:200px} }

/* ── the spec block, in three shapes ──────────────────────────────────────
   One full-width run of label and value was rendering thirty-four authored
   blocks across nineteen pages, so a schedule of twelve products looked
   exactly like six facts about a showroom. specsMode() in app.js picks the
   shape from the data; these draw it.

   These rules sit at the end of the file on purpose. The base .specs
   responsive rule earlier collapses the grid to one column, and a media
   query adds no specificity — source order is what decides, so the modes
   and their own breakpoints have to come after it. */

/* g2 / g3 — a sheet of short figures, scanned across as well as down */
.specs--g2,.specs--g3{display:grid;gap:1px;background:var(--l0);
  border:1px solid var(--l0);border-top:1px solid var(--l0)}
.specs--g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.specs--g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.specs--g2 .sp-c,.specs--g3 .sp-c{background:var(--s0);padding:var(--x4) var(--x5);
  display:flex;flex-direction:column;gap:7px;min-width:0}
.specs--g2 dt,.specs--g3 dt{font:400 var(--f-cap)/1.4 var(--mono);letter-spacing:.13em;
  text-transform:uppercase;color:var(--t2);padding:0;border:0;font-size:var(--f-cap)}
.specs--g2 dd,.specs--g3 dd{font-size:var(--f-bd);line-height:1.45;color:var(--t0);
  padding:0;border:0;overflow-wrap:anywhere}

/* sp — a long schedule, split so the eye is not dragged down one column */
.specs--sp{display:block;columns:2;column-gap:var(--x12);border-top:0}
.specs--sp .sp-c{break-inside:avoid;display:grid;
  grid-template-columns:minmax(112px,1fr) minmax(0,1.5fr);
  border-top:1px solid var(--rule)}
.specs--sp dt,.specs--sp dd{padding:11px 0;border-bottom:0;font-size:14px}
.specs--sp dt{font:400 12px/1.5 var(--mono);letter-spacing:.05em;color:var(--dim);
  text-transform:uppercase;padding-right:var(--x5)}
.specs--sp dd{color:var(--ink);overflow-wrap:anywhere}

@media (max-width:1000px){ .specs--g3{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:820px){ .specs--sp{columns:1} }
@media (max-width:620px){
  .specs--g2,.specs--g3{grid-template-columns:1fr}
  .specs--sp .sp-c{grid-template-columns:1fr}
  .specs--sp dt{padding-bottom:0}
  .specs--sp dd{padding-top:5px}
}

/* ── filters: the empty state keeps the criteria and offers a way out ──── */
.fclear{margin-left:var(--x4)}
.pempty{display:flex;flex-direction:column;align-items:flex-start;gap:var(--x4);
  padding:var(--x8) var(--x6);border:1px solid var(--l1);background:var(--s1)}
/* display:flex above outranked the hidden attribute, so "No projects match
   those filters" + Clear showed under a full grid with no filter set */
.pempty[hidden]{display:none}






/* ── a grouped list: items that go nowhere, on one axis ────────────────── */
.grp{display:grid;grid-template-columns:1fr;gap:var(--x7) var(--x8)}
.grp--split{grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr))}
.grp-h{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;
  color:var(--t2);padding-bottom:var(--x3);border-bottom:1px solid var(--l1);
  margin-bottom:var(--x2);font-weight:400}
.grp-l{list-style:none}
.grp-l li{padding:var(--x4) 0;border-bottom:1px solid var(--l0)}
.grp-l b{display:block;font-size:var(--f-bd);font-weight:400;line-height:1.3;
  color:var(--t0);letter-spacing:-.008em}
.grp-l p{margin-top:5px;font-size:var(--f-sm);line-height:1.5;color:var(--t2);max-width:56ch}

/* ── L0 does not wear an interactive affordance ────────────────────────────
   A cell nobody can click used to look exactly like a cell that opens
   something: same fill, same padding, same box. Only the link keeps the card
   surface; a plain one drops to a divided entry with no fill and no box, so
   the difference is legible before you point at it. */
/* It still has to cover the grid plane — .mesh paints the divider colour and
   the cells are what hide it, so background:none turned the whole block into
   one raised slab and dropped .num to 3.75 against it. The cell keeps a fill;
   it is the PAGE GROUND rather than the raised card fill, so it reads as part
   of the page instead of a card, and the contrast stays deterministic. */
div.cell{background:var(--s0);gap:9px}
div.cell h3{font-size:var(--f-bd);letter-spacing:-.008em}

/* ── the L1 grammar, restored ───────────────────────────────────────────
   `.btn--sig` set border-color and colour at line 462. `.btn` was rewritten
   later in the file with `border:0; background:none` — same specificity,
   later wins — so the modifier painted a border colour onto a border that no
   longer existed. Every conversion flow's submit was rendering as bare grey
   text: "SEND ENQUIRY" measured 102x30, borderWidth 0px, background
   transparent, in the dim ink. The most important control on the site looked
   like a caption.

   Redefined here, after `.btn`, so the modifier wins — and given the SAME
   filled rectangle as `.a1` and `.pv-bar-go`, because one L1 goal may only
   wear one visual grammar. */.btn--sig{border-color:var(--sig);color:#111214;display:inline-flex;align-items:center;justify-content:center;gap:10px;background:var(--em,#f4efe7);border:0;padding:15px 24px;min-height:48px;box-sizing:border-box;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;transition:background .3s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1)}
.btn--sig:hover{background:#fff;color:#111214}
.btn--sig:active{transform:scale(.985)}
.btn--sig[disabled]{background:var(--s3);color:var(--t2)}
/* the secondary keeps its outline — it is the one that needs a boundary */.btn--ghost{border-color:var(--rule);color:var(--t1);display:inline-flex;align-items:center;justify-content:center;gap:10px;border:1px solid var(--l2);background:none;padding:14px 22px;min-height:48px;box-sizing:border-box;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;transition:background .3s,color .3s,border-color .3s}
.btn--ghost:hover{background:var(--s2);color:var(--t0);border-color:var(--l2)}

/* the bar's action is the same L1 and must clear the same target size */.pv-bar-go{display:inline-flex;align-items:center;gap:10px;padding:13px 22px;background:var(--em,#f4efe7);color:#111214;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;transition:background .3s,transform .3s cubic-bezier(.16,1,.3,1);min-height:44px;box-sizing:border-box}

/* Nothing reserved the bottom band, so a fixed control could sit on top of
   whatever focus or a fragment link had just scrolled into view. */
html{scroll-padding-top:70px;scroll-padding-bottom:84px}
.pv-bar,.a-float{padding-bottom:env(safe-area-inset-bottom,0px)}

/* ── the phone contact bar (2026-10-11) ────────────────────────────────────
   Call, WhatsApp and Request a quote along the bottom edge of every page on
   a phone, 700px and under (app.js contactBar; fx-bar decides when it shows).
   It is the product bar's own glass and hairline, so the two read as one
   family. The hierarchy is the site's: one filled action, the division's
   cream or ice, exactly the product bar's button; the two ways to talk are
   outlined, quiet, and stacked glyph-over-word so all three fit at 320px.
   44px is the floor for a target; these are 48. Above 700px it is not drawn:
   the header, the corner button and the product bar do the work there. */
.cbar{display:none}
@media (max-width:700px){
  .cbar{position:fixed;left:0;right:0;bottom:0;z-index:69;display:flex;align-items:stretch;gap:var(--x2);
    padding:var(--x2) max(var(--gut),env(safe-area-inset-right,0px)) calc(var(--x2) + env(safe-area-inset-bottom,0px)) max(var(--gut),env(safe-area-inset-left,0px));
    background:rgba(14,14,16,.82);-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);
    border-top:1px solid rgba(255,255,255,.12);
    transform:translateY(101%);transition:transform .46s cubic-bezier(.16,1,.3,1)}
  .cbar.on{transform:none}
  .cb-s,.cb-q{box-sizing:border-box;min-height:48px;display:flex;align-items:center;justify-content:center;
    font:400 var(--f-cap)/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;
    -webkit-tap-highlight-color:transparent;transition:background .3s,color .3s,border-color .3s,transform .3s cubic-bezier(.16,1,.3,1)}
  .cb-s{flex:0 0 auto;flex-direction:column;gap:5px;padding:0 var(--x3);min-width:48px;
    border:1px solid var(--l2);color:var(--t1);background:none}
  .cb-s .ico{width:17px;height:17px;flex:0 0 auto}
  .cb-s:active{background:var(--s3);color:var(--t0)}
  .cb-q{flex:1 1 auto;min-width:0;padding:0 var(--x4);background:var(--em,#f4efe7);color:#111214;font-size:var(--f-mic);letter-spacing:.14em}
  .cb-s:active,.cb-q:active{transform:scale(.985)}
  /* a hover is for a pointer: on touch it would stay on after the tap */
  @media (hover:hover){ .cb-s:hover{background:var(--s3);color:var(--t0)} .cb-q:hover{background:#fff} }
  /* the product bar belongs to wider screens: here its action is the primary
     above, and the page ends one contact-bar height lower (--cbar-h, fx-bar) */
  .pv-bar{display:none}
  html.cbar-pg .ftr{padding-bottom:calc(var(--x6) + var(--cbar-h,65px))}
  /* the corner button is the contact bar's primary on a phone: not twice */
  .a-float{display:none}
  /* the home hero pins its copy to the foot of the first screen, and the bar
     is a fixed layer over that screen, so the copy lifts by the bar's height
     and the second button is not half under it */
  .home-hero-in{padding-bottom:calc(clamp(26px,5vh,54px) + var(--cbar-h,65px))}
  /* a short phone (568px and under): the copy has to fit between the header
     and the bar, so its gaps and the proof line close up a little */
  @media (max-height:600px){ .home-hero-in{gap:var(--x3)} .home-lede{font-size:var(--f-bd);line-height:1.38} }
  body.dev .cbar{bottom:40px}
}
/* a phone held on its side: less of the screen to give away, same 44px target */
@media (max-width:700px) and (max-height:500px){
  .cbar{padding-top:6px;padding-bottom:calc(6px + env(safe-area-inset-bottom,0px))}
  .cb-s,.cb-q{min-height:44px}
}
@media (max-width:359px){
  .cbar{gap:6px}
  .cb-s{padding:0 var(--x2)}
  .cb-q{padding:0 var(--x2);letter-spacing:.1em}
}
@media (prefers-reduced-motion:reduce){ .cbar{transition-duration:.01ms} }
@media print{ .cbar{display:none} }

/* ═══ THE CATEGORY DECISION GUIDE ══════════════════════════════════════════
   About a thousand words per category, authored as an ordered argument and
   until now collapsed inside a drawer. The claim keeps a reading measure of
   its own; the steps of it sit side by side so the order is visible as
   shape, not only as prose. */
.gd-lede{max-width:32em}
.gd{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));
    gap:var(--x6) var(--x8);margin-top:var(--x8)}
.gd p{border-top:1px solid var(--l1);padding-top:var(--x4)}

/* ═══ A COALESCED RUN ══════════════════════════════════════════════════════
   One module, N units, one axis down the left. The four process stages, the
   four audience blocks and the three contact tables were each rendered as
   that many separate sections; this is the frame they share, drawn once. */
.run{list-style:none;display:grid;gap:var(--x15)}
.run-u{display:grid;grid-template-columns:var(--x15) minmax(0,1fr);gap:0 var(--x5)}
.run-k{position:relative}
.run-n{display:block;font:400 var(--f-mic)/1 var(--mono);
       letter-spacing:.16em;text-transform:uppercase;color:var(--t2)}
.run-ax{position:absolute;left:0;top:var(--x6);
        bottom:calc(var(--x15) * -1);width:1px;background:var(--l1)}
.run-u:last-child .run-ax{display:none}
.run-b>.d3{margin-bottom:var(--x4)}
.run-b>.lede{margin-bottom:var(--x6)}
@media (max-width:760px){
  .run{gap:var(--x12)}
  .run-u{grid-template-columns:1fr;gap:var(--x3)}
  .run-ax{display:none}
}

/* ═══ beta1.1.0 · client demonstration ═══════════════════════════════════
   The demo tag is the same chip as "Photography required", set in the
   emphasis tone instead of the signal red: a slot the presenter is going
   to fill is a different fact from a slot nobody has briefed. */
.ph--demo .ph-tag{background:var(--em);color:var(--void)}

/* bar patterns: five leaf elevations in one row, the same stroke as the
   22.5° set, the name under each. Drawn, so the choice is made by eye. */
.bp{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:var(--x5) var(--x4)}
.bp-i{display:grid;gap:8px;min-width:0}
.bp-svg{display:block;width:40px;height:88px;color:var(--t0)}
.bp-t{font:500 var(--f-sm)/1.3 var(--sans);color:var(--t0)}
.bp-d{font-size:var(--f-mic);line-height:1.5;color:var(--t2)}

/* the map: an embed on the left, the address on the right. Offline the
   frame is a plain grey field with the word Map in it — the iframe paints
   over the fallback the moment it loads. */
.mapgrid{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--x6);align-items:start}
.map{position:relative;aspect-ratio:4/3;background:var(--holdbg);border:1px solid var(--holdln);overflow:hidden}
.map iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;filter:grayscale(1) contrast(.92) brightness(.86);z-index:1;
  opacity:0;transition:opacity .6s ease}
.map iframe.is-on{opacity:1}
.map:has(iframe.is-on) .map-ph{visibility:hidden}
.map-ph{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:flex-end;gap:4px;padding:clamp(12px,1.5vw,20px);z-index:0}
.map-side{min-width:0}
@media (max-width:820px){.mapgrid{grid-template-columns:1fr}}

/* a zone's display items are product tiles that lead to product pages:
   the interactive anatomy, with the photograph on top */
.cell--disp .shot{margin:calc(-1 * clamp(20px,2.4vw,32px)) calc(-1 * clamp(20px,2.4vw,32px)) 4px}

/* ── contact strip (beta1.4.0) — call, WhatsApp, email, side by side ───── */
.cstrip{display:flex;flex-wrap:wrap;gap:10px;margin-top:var(--x4)}
.ico--wa path{fill:currentColor;stroke:none}
.a2:hover .ico--wa *{stroke:none}
.ftr-addr{font-size:14px;color:var(--t2);line-height:1.5}

/* ── showroom plan (beta1.4.0) — stands in for the withdrawn photographs ── */
.plan{margin:0;max-width:880px}
.plan-d{position:relative}
.plan svg{display:block;width:100%;height:auto}
.plan .pl-wall{fill:none;stroke:var(--t1);stroke-width:1.4;vector-effect:non-scaling-stroke}
.plan .pl-part{fill:none;stroke:var(--t3);stroke-width:1;vector-effect:non-scaling-stroke}
.plan .pl-street{fill:none;stroke:var(--t3);stroke-width:1;stroke-dasharray:6 6;vector-effect:non-scaling-stroke}
.pl-z,.pl-l{position:absolute;transform:translate(-50%,-50%);font:500 11px/1.2 var(--mono);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap}
.pl-z{color:var(--t0);padding:8px 10px;text-decoration:none;transition:color .2s}
.pl-z i{font-style:normal;color:var(--t2);margin-right:6px}
.pl-z:hover,.pl-z:focus-visible{color:var(--sig)}
.pl-l{color:var(--t2);pointer-events:none}
.pl-cap{font:400 11.5px/1.5 var(--mono);color:var(--t2);margin-top:10px}
.spanel-m .plan{padding:clamp(16px,2vw,28px)}
/* the showroom's own drawing (2026-10-14): the picture runs the width of its
   frame; the four zones are a quiet row of links under it */
.plan--pic{max-width:none}
.plan--pic .plan-d{border:1px solid var(--l1)}
/* on a phone the drawing runs edge to edge (the page's own gutter is taken back
   on both sides); its zone links and caption keep the gutter. Inside the home
   block's panel it keeps the panel's padding. */
@media (max-width:640px){
  .plan--pic{margin-left:calc(var(--gut) * -1);margin-right:calc(var(--gut) * -1)}
  .plan--pic .plan-d{border-left:0;border-right:0}
  .plan--pic .plan-zones,.plan--pic .pl-cap{margin-left:var(--gut);margin-right:var(--gut)}
  .spanel-m .plan--pic{margin-left:0;margin-right:0}
  .spanel-m .plan--pic .plan-d{border-left:1px solid var(--l1);border-right:1px solid var(--l1)}
  .spanel-m .plan--pic .plan-zones,.spanel-m .plan--pic .pl-cap{margin-left:0;margin-right:0}
}
.plan--pic .plan-img{display:block;width:100%;height:auto;aspect-ratio:16/9;background:#080a0b}
.plan-zones{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:0 24px}
.plan-zones a{display:inline-flex;align-items:center;gap:6px;min-height:44px;font:500 11px/1.2 var(--mono);letter-spacing:.14em;
  text-transform:uppercase;color:var(--t0);text-decoration:none;transition:color .2s}
.plan-zones i{font-style:normal;color:var(--t2)}
.plan-zones a:hover,.plan-zones a:focus-visible{color:var(--sig)}
/* the table is narrower than its label on a phone; the drawing says it alone */
@media (max-width:640px){ .pl-l--table{display:none} }

/* ── F11 · tertiary ink on a hover surface ────────────────────────────────
   --t2 is 4.71:1 on the page and 4.51:1 on a card, but every surface that
   lifts to --s3 on hover dropped it to 3.97:1 (glazing, steel and neutral
   alike). While the surface is lifted, the tertiary ink lifts with it: the
   same hue scaled x1.09, 4.61:1 on all three --s3. --dim is restated because
   it was resolved from --t2 on :root and would not follow. At rest nothing
   changes. */
:is(a.dwg,a.row,a.cell,.opt,.pcard,.act,.pick button,.hg,.ais,.dsp,.fk,.ra--lead,.sp-row--go,.pt):hover{
  --t2:#888580;--dim:#888580}

/* ── browse grids (spec §5; lane B 03, 2026-10-11) ────────────────────────
   Category, product and project browse cards: two to a row from 320px, two
   at 768-1023px, three or four from 1024px. Its own class, so .mesh (also
   used by non-browse content) and its 620px single-column rule are left
   alone. The card is .pcard without its paragraph and meta line; each card
   draws its own hairline so a short last row leaves clean space. */
/* lane B 04d: one column only when the TEXT is enlarged (text-only zoom,
   accessibility text scaling: the grid's own em grows). A track never gets
   narrower than 7.5em, so at normal size (16px: 120px) 320px still holds two
   cards, while at 150-200% text a phone reflows to one. Same column counts as
   above at every width at normal size. The plain rule is the fallback for a
   browser without max(); the @supports block is the rule (integrate
   2026-10-11 put the fallback back as a second top-level rule, but the
   build's css_hygiene merges repeated top-level selectors and folded it
   away again; an at-rule is left alone — final merge 2026-10-11). */
.browse-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;width:100%}
@supports (width:max(1px,2px)){
  .browse-grid{grid-template-columns:repeat(auto-fill,minmax(max(7.5em,calc(50% - 1px)),1fr))}
}
/* the focused card's ring sits above its neighbours: each card is
   positioned (.pcard), so the next card in the row painted over the right
   and lower edge of the ring. The home category tiles are grid items too. */
.browse-card:focus-visible,.home-glyphs .hg:focus-visible{z-index:1}
.browse-grid>.browse-card{box-shadow:0 0 0 1px var(--rule)}
.browse-card .pcard-b{padding:var(--x4) clamp(14px,2vw,22px) var(--x5);gap:var(--x2)}
.browse-card h3{display:flex;align-items:flex-start;gap:var(--x2);overflow-wrap:break-word;min-width:0}
.browse-card h3>span:last-child{min-width:0}
.browse-card-ico{display:block;width:16px;flex:0 0 16px;margin-top:2px}
.browse-card-tag{font:400 var(--f-mic)/1.3 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--t2)}
.browse-more{margin-top:var(--x5)}
@media (min-width:1024px){
  .browse-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}
  .browse-grid--4{grid-template-columns:repeat(4,minmax(0,1fr))}
  .browse-grid--3{grid-template-columns:repeat(auto-fill,minmax(max(7.5em,calc(33.333% - 2px)),1fr))}
  .browse-grid--4{grid-template-columns:repeat(auto-fill,minmax(max(7.5em,calc(25% - 2px)),1fr))}
}
/* phones: the division opening is no longer a full screen of one sentence
   (spec §5, vertical density). The lockup, title, line, cue and both actions
   keep their order and sizes; only the empty height between them goes. */
@media (max-width:767px){
  .t1-open,:root[data-hero="film"] .t1-open{min-height:0}
  .t1-open .t1-lock{margin-bottom:var(--x6)}
}

/* Touch: the Menu button (64x32) and the carousel arrows (38x32) were short of
   a 44px tap. An invisible ::before widens what a finger can hit without
   changing how either looks; the burger's stays inside the 51px header. */
@media (pointer:coarse){
  .burger,.cbtn{position:relative}
  .burger::before{content:'';position:absolute;inset:-6px -2px}
  .cbtn::before{content:'';position:absolute;inset:-6px -3px}
  /* a project's installed-system links are 21px lines of text: 45px to a
     finger, the rows (about 70px apart) unchanged (integrate 2026-10-11) */
  .pj-sys-a{position:relative}
  .pj-sys-a::before{content:'';position:absolute;inset:-12px -4px}
}

/* ── project grids, larger (review of 2026-10-11) ────────────────────────
   "图稍微大一点 … 太过于小气": projects are photographs first. From 1024px a
   project grid (home, the division hubs, /projects, a product's "in place",
   a project's "Other projects", a guide's proof) is two to a row at 3:2, was
   three or four to a row at 4:3; the name takes the 1.4.2 project-teaser
   size. Below 1024px it stays two to a row at 4:3 like every browse grid.
   /projects opens on one full-width card when the set is odd (is-lead, set
   by projectGrid() and applyFilters()), in the project page's own wide crop. */
@media (min-width:1024px){
  .pv-rel--proj{grid-template-columns:repeat(2,minmax(0,1fr))}
  .browse-grid--proj .shot,.pv-rel--proj .shot{--ar:66.67%;--arx:3/2}
  .browse-grid--proj .browse-card h3,.pv-rel--proj .pcard h3{font-size:var(--f-md);font-weight:400;letter-spacing:-.01em}
}
.browse-grid--proj>.is-lead{grid-column:1/-1}
.browse-grid--proj>.is-lead .shot{--ar:56.25%;--arx:16/9}
@media (min-width:768px){ .browse-grid--proj>.is-lead .shot{--ar:42.85%;--arx:21/9} }

/* ═══ approved additions, 2026-10-11 (the user's four "yes"es, each to sit
   below what it stands beside: headline > button > proof line; division name
   > category tiles > figure strip; division items > Projects/Showroom/Guides)
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── home: the eight categories as two labelled groups of four ────────────
   Side by side from 1101px (four to a group, as eight across was), one under
   the other below it. The label is the site's small uppercase label, in the
   tertiary grey; the tiles keep the names. Each group keeps the tile grid
   and its hairlines. Phone: label, then its 2 x 2, twice. */
.hg-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--x6)}
.hg-grp{min-width:0}
.hg-lbl{display:block;margin-bottom:var(--x2)}
.hg-grp .home-glyphs{--glyph-cols:4}
@media (max-width:1100px){ .hg-groups{grid-template-columns:minmax(0,1fr)} }
@media (max-width:560px){ .hg-grp .home-glyphs{--glyph-cols:2} }

/* ── division pages: the six-figure strip under the photograph ────────────
   The figure strip (.t3-open) as the product pages' numbers use it: a mono
   label over one line of 15px, hairlines above and below, on the page's own
   ground. Six across from 1024px, 3 x 2 below, 2 x 3 on a phone. */
.t3-open--div{margin-top:var(--x6);grid-template-columns:repeat(6,minmax(0,1fr))}
/* where a label wraps (a phone), the values still share a line */
.t3-open--div .t3-fig dd{margin-top:auto}
@media (max-width:1023px){ .t3-open--div{grid-template-columns:repeat(3,minmax(0,1fr))} }
@media (max-width:480px){ .t3-open--div{grid-template-columns:repeat(2,minmax(0,1fr))} }
/* the longest label (Weathertightness) must sit inside its cell at the narrowest
   widths (320 and 481, where the cells are 108-116px): a little less tracking */
@media (max-width:520px){ .t3-open--div .t3-fig dt{letter-spacing:.1em} }
@media (max-width:340px){ .t3-open--div .t3-fig dt{letter-spacing:.05em} }

/* ── header: Guides on the desktop bar ────────────────────────────────────
   It is a plain text link like Showroom. Where the bar becomes the phone menu
   (860px and below) it is hidden here, because the menu's quiet row has it. */
@media (max-width:860px){ .nav a.nav-dsk{display:none} }

/* ═══════════════════════════════════════════════════════════════════════════
   HOME: 1.4.2's PAGE, WITH TWO FORMAT FIXES (2026-10-11)
   The sections, their order, type, colours and motion are 1.4.2's (tplHome,
   renderHomeSection). What differs: survey / make / fit is on one axis (the
   .pc-* rules above: icon, node, number and title share one left edge), and
   Guides and answers is one contained block, below.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Guides and answers: the two lists are a reading block, not the width of the
   screen. They keep the heading's left edge and 1.4.2's order (the guides, then
   the answers, no gap); the rows are lighter (vertical padding only, so the
   hover shift and the + / arrow behave as they did) and an answer opens to a
   reading measure. */
.gl-box .idxl,.gl-box .faq{max-width:46rem}
.gl-box .idxl a{padding-top:var(--x3);padding-bottom:var(--x3)}
.gl-box .faq summary{padding-top:var(--x3);padding-bottom:var(--x3);padding-right:40px}
.gl-box .faq-a{padding-bottom:var(--x4);padding-right:40px;max-width:62ch}

/* ── contained blocks: not everything runs the full screen (2026-10-11 review) ────
   Photographs, heroes, galleries and grids of cards keep the whole width. A
   block that is read line by line (a list of questions, an index of guides,
   a table of facts) sits in 8 of the 12 columns, centred, so its hairlines
   are as long as its content and not 1,392px, and the full-width pieces
   around it stay full width. Below 981px the page is one column and nothing
   is held back. `.sec--c8` contains everything its wrap holds (heading and
   list together, on one left edge); `.c8` contains one block. Inside the
   guide pages' side-panel layout, and inside a numbered run, the container is
   already a column, so a block there is capped at 44rem and keeps its left
   edge instead of being centred. */
@media (min-width:981px){
  .sec--c8>.wrap>*,.c8{max-width:calc((100% - 11 * var(--x5)) * .66667 + 7 * var(--x5));margin-left:auto;margin-right:auto}
  .main .c8,.run-b .specs:not([class*="specs--"]){max-width:min(100%,44rem);margin-left:0;margin-right:0}
  .c8>.rows:first-child{margin-top:var(--x6)}
  /* the index rows lose the empty "meta" column when the block is narrower */
  .c8 .row{grid-template-columns:44px minmax(0,1fr) minmax(0,1.5fr) 26px}
  .c8 .row-m:empty{display:none}
  /* a row with no description (the guides index) gives its width to the title */
  .c8 .row:has(.row-d:empty){grid-template-columns:44px minmax(0,1fr) 26px}
  .c8 .row-d:empty{display:none}
}

/* ═══ HOME HERO, EXPLORER VARIANT (2026-10-18) ════════════════════════════
   Stand-in for the home film until it exists: the night house and its
   products fill the first screen. The 16:9 stage is scaled to cover the
   screen but never cropped by more than 6% a side, so the hotspots at either
   end of the house stay on screen; any height left over is the page's own
   black. Layering: picture, then the scrim, then the hotspots above it, the
   copy above them, and the readout top right over the sky, clear of the copy
   bottom left and of the floating actions bottom right. Turned off by
   removing "variant": "explorer" from the home page's hero section. */
.home-hero--xp .xp-win{position:absolute;inset:0;overflow:hidden;isolation:isolate}
/* Centred by arithmetic, not by a transform: a transform would make the stage
   its own stacking context and the hotspots could no longer sit above the
   scrim. (inset:0 with auto margins does not centre a box wider than its
   container: the overflow all goes to the right, and pushed the garden-room
   hotspot off a 1440px screen.) Percentages in left and in margin-top both
   resolve against the hero's width, so the stage's own height can be
   expressed in them. */.home-hero--xp{background:var(--void);--xp-w:max(100%,min(calc(100svh * 16 / 9),112%))}
.home-hero--xp .expl-stage.xp-stage{position:absolute;max-width:none;height:auto;aspect-ratio:16/9;
  width:var(--xp-w);left:calc((100% - var(--xp-w)) / 2);top:50%;margin-top:calc(var(--xp-w) * -.28125)}
.home-hero--xp .expl-spots{z-index:3}
.home-hero--xp .xp-scrim{position:absolute;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(to top,rgba(7,7,8,.94) 0%,rgba(7,7,8,.66) 22%,rgba(7,7,8,0) 48%),
             linear-gradient(to bottom,rgba(7,7,8,.62) 0%,rgba(7,7,8,0) 15%)}
.home-hero--xp .home-hero-in{z-index:4;pointer-events:none}
.home-hero--xp .home-hero-in a,.home-hero--xp .home-hero-in button{pointer-events:auto}
.home-hero--xp > .expl-rd{position:absolute;z-index:5;left:auto;bottom:auto;
  top:calc(var(--hdr-h,54px) + var(--x5));right:var(--gut);
  width:min(340px,calc(100% - 2 * var(--gut)));border:1px solid var(--l1)}
.home-hero--xp + .sec .expl-list{border-top:0}
.home-hero--xp .xp-scroll{position:absolute;inset:0}
.xp-dots:empty{display:none}
@media (max-width:860px){
  /* the house fills the screen above the title, a few frames at a time */
  .home-hero--xp{height:100svh;min-height:560px;overflow:hidden;padding-top:0}
  .home-hero--xp .xp-win{inset:0 0 calc(var(--xp-copy,190px) + var(--cbar-h,65px)) 0}
  .home-hero--xp .xp-scroll{overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;
    overscroll-behavior-x:contain;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .home-hero--xp .xp-scroll::-webkit-scrollbar{display:none}
  .home-hero--xp .expl-stage.xp-stage{position:relative;left:auto;top:auto;margin:0;height:100%;width:auto;aspect-ratio:16/9}
  .xp-snap{position:absolute;top:0;width:1px;height:1px;scroll-snap-align:center;pointer-events:none}
  .home-hero--xp .xp-scrim{display:block;
    background:linear-gradient(to bottom,rgba(7,7,8,.62) 0,rgba(7,7,8,0) 18%),
               linear-gradient(to top,var(--void) 0,rgba(7,7,8,0) 20%)}
  /* the facts in the paragraph are all further down the page (survey, make,
     fit; standards and numbers), and the contact bar right below already says
     Request a quote: on a phone the first screen is the house, the title and
     the showroom */
  .home-hero--xp .home-lede{display:none}
  .home-hero--xp .home-hero-in .btns > :first-child{display:none}
  .home-hero--xp .home-hero-in{position:absolute;left:0;right:0;top:auto;bottom:var(--cbar-h,65px);max-width:none;
    padding:var(--x4) var(--gut) var(--x5);gap:var(--x3)}
  .home-hero--xp .home-ttl{font-size:clamp(30px,8.4vw,40px)}
  .home-hero--xp > .expl-rd{position:absolute;left:var(--gut);right:var(--gut);top:calc(var(--hdr-h,54px) + 12px);
    width:auto;border:1px solid var(--l1)}
  .xp-dots{position:absolute;z-index:4;left:0;right:0;bottom:calc(var(--xp-copy,190px) + var(--cbar-h,65px) + 12px);
    display:flex;justify-content:center;gap:6px;pointer-events:none}
  .xp-dots i{width:18px;height:2px;background:rgba(246,239,228,.32);transition:background .3s,width .3s}
  .xp-dots i.on{width:28px;background:var(--ink,#f6efe4)}
}


/* ═══ THE PRODUCT READOUT FLOATS BESIDE THE POINTER (2026-10-18) ══════════
   With a mouse, the card for the product under the pointer opens beside that
   hotspot instead of in a fixed corner: to its right, or to its left when
   the right has no room, and never past the edge of the picture. It takes the
   pointer (so the reader can move into it and press Open) and closes a moment
   after the pointer has left both the hotspot and the card. On a touch screen
   nothing changes: the card stays below the picture. The script places it
   and adds .is-float; without the script the old corner placement holds. */
.expl-rd.is-float{position:absolute;z-index:6;right:auto;bottom:auto;
  width:min(320px,calc(100% - 24px));border:1px solid var(--l1);pointer-events:auto;
  box-shadow:0 18px 48px rgba(0,0,0,.5);animation:rdin .18s cubic-bezier(.16,1,.3,1)}
@keyframes rdin{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
[data-motion="off"] .expl-rd.is-float{animation:none}

/* ═══ THE HOME INTRO (2026-10-18) ══════════════════════════════════════════
   See homeIntro() in app.js. The house sits in exactly the box the hero's
   stage uses, so when the intro fades the picture does not move: the rooms
   simply go dark. On a phone it fills the screen's height and pans across the
   house while the rooms light. */
html.intro-pending,html.intro-on{overflow:hidden}
html.intro-pending body::after{content:"";position:fixed;inset:0;z-index:9998;background:#070708;
  animation:intro-gate 0s 3s forwards}
@keyframes intro-gate{to{visibility:hidden}}
.intro{position:fixed;inset:0;z-index:9999;background:#070708;overflow:hidden;
  --xp-w:max(100%,min(calc(100svh * 16 / 9),112%))}
.intro-house{position:absolute;width:var(--xp-w);aspect-ratio:16/9;left:calc((100% - var(--xp-w)) / 2);
  top:50%;margin-top:calc(var(--xp-w) * -.28125);opacity:0;transform:scale(1.035);
  transition:opacity 1.1s cubic-bezier(.16,1,.3,1),transform 3.6s cubic-bezier(.16,1,.3,1)}
.intro-house > img,.intro-room,.intro-room img{position:absolute;inset:0;width:100%;height:100%}
.intro-house img{object-fit:cover;display:block}
.intro-room{opacity:0;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  transition:opacity .55s cubic-bezier(.16,1,.3,1)}
.intro-room.on{opacity:1}
.intro-ext{opacity:0;transition:opacity .9s ease}
.intro-ext.on{opacity:1}
.intro.house-in .intro-house{opacity:1;transform:none}
.intro-logo{position:absolute;inset:0;z-index:3;display:grid;place-items:center;pointer-events:none;
  opacity:0;transform:translateY(10px) scale(.97);
  transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1)}
.intro-logo svg{width:min(260px,52vw);height:auto;display:block;color:#f6efe4;fill:currentColor}
.intro-logo b{font:600 34px/1 var(--sans,inherit);letter-spacing:.18em;color:#f6efe4}
.intro.logo-in .intro-logo{opacity:1;transform:none}
.intro.house-in .intro-logo{opacity:0;transform:translateY(-6px) scale(1.02);transition-duration:.6s}
.intro-skip{position:absolute;z-index:4;right:var(--gut,24px);bottom:calc(var(--gut,24px) + env(safe-area-inset-bottom,0px));
  font:500 11px/1 var(--mono,monospace);letter-spacing:.14em;text-transform:uppercase;color:rgba(246,239,228,.55)}
.intro.out{opacity:0;transition:opacity 1s cubic-bezier(.4,0,.2,1)}
.intro.out-fast{opacity:0;transition:opacity .35s ease}
@media (max-width:860px){
  .intro{--xp-w:calc(100svh * 16 / 9)}
  .intro-house{left:0;top:0;margin-top:0;height:100%;width:auto}
  .intro.panning .intro-house{transform:translateX(calc(100vw - 100svh * 16 / 9));
    transition:opacity 1.1s cubic-bezier(.16,1,.3,1),transform 3.4s cubic-bezier(.45,0,.25,1)}
}
@media (prefers-reduced-motion:reduce){ .intro:not(.intro--forced){display:none} }

/* lenis.css */
html.lenis,html.lenis body{height:auto}.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}.lenis [data-lenis-prevent],.lenis [data-lenis-prevent-wheel],.lenis [data-lenis-prevent-touch]{overscroll-behavior:contain}.lenis.lenis-smooth iframe{pointer-events:none}.lenis.lenis-autoToggle{transition-property:overflow;transition-duration:1ms;transition-behavior:allow-discrete}

/* ── the loading panel ────────────────────────────────────────────────── */
.fx-load{
  position:fixed;inset:0;z-index:300;background:var(--void);
  display:flex;align-items:center;justify-content:center;
  pointer-events:none;visibility:hidden;
  clip-path:polygon(0 100%,100% 100%,100% 100%,0 100%);
}
.fx-load.in{
  visibility:visible;pointer-events:all;
  clip-path:polygon(0 0,100% 0,100% 100%,0 100%);
  transition:clip-path .30s cubic-bezier(.7,0,.3,1);
}
/* leaves upward on the 22.5 axis, so entry and exit are not mirror images */
.fx-load.out{
  visibility:visible;
  clip-path:polygon(0 0,100% 0,100% 0,0 0);
  transition:clip-path .42s cubic-bezier(.16,1,.3,1);
}
.fx-load-in{display:flex;flex-direction:column;align-items:center;gap:26px;padding:0 var(--gut)}
.fx-load-mark{width:min(190px,44vw)}
.fx-load-mark svg{width:100%;height:auto;fill:var(--ink)}
.fx-load.in .fx-load-mark{animation:fxmark .5s cubic-bezier(.16,1,.3,1) both}
@keyframes fxmark{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
.fx-load-meta{display:flex;flex-direction:column;align-items:center;gap:12px;width:min(320px,74vw)}
.fx-load-to{font:400 11px/1.5 var(--mono);letter-spacing:.16em;text-transform:uppercase;
            color:var(--dim);text-align:center}
.fx-load-bar{display:block;width:100%;height:1px;background:var(--rule);overflow:hidden}
.fx-load-bar i{display:block;width:100%;height:100%;background:var(--sig);
               transform:scaleX(0);transform-origin:left}
[data-motion="off"] .fx-load{display:none}

/* the guarantee's last resort — beats every module's reveal mechanism */
.fx-forcevis .rv,.fx-forcevis .rv:not(.in),
.fx-forcevis :root[data-fx="on"] .rv:not(.in){
  opacity:1!important;transform:none!important;clip-path:none!important;
  -webkit-mask-image:none!important;mask-image:none!important;filter:none!important;
}

/* the guarantee also releases any split line, in case a module reintroduces one */
.fx-forcevis .fx-line-i,.fx-forcevis .fx-ch{transform:none!important;opacity:1!important}
.fx-forcevis .fx-line{overflow:visible!important}

/* Blocks are visible by default. The hidden start only exists while the rig
   is live (html.fx-on) AND the rig has actually taken hold of the block
   (.fx-rising) — so a block the driver never reaches stays readable. */
.fx-on .fx-rising{will-change:transform,opacity}
/* no CSS transition: the position IS the scroll position, every frame */
.fx-rising{transition:none!important}
[data-motion="off"] .fx-rising{transform:none!important;opacity:1!important}

/* ── nav links: a menu link says so, and answers differently ──────────── */
.nav a{display:inline-flex;align-items:center;gap:7px}
.nav-caret{display:block;width:6px;height:6px;border-right:1px solid currentColor;
  border-bottom:1px solid currentColor;transform:rotate(45deg) translate(-1px,-1px);
  opacity:.45;transition:opacity .24s,transform .32s cubic-bezier(.16,1,.3,1)}
.nav a[data-menu]:hover .nav-caret,
.nav a[aria-expanded="true"] .nav-caret{opacity:1;transform:rotate(45deg) translate(1px,1px)}
/* a link WITHOUT a menu keeps the underline; a menu link does not use one —
   the caret is its signal, so the two are told apart before clicking */
.nav a[data-menu]::after{display:none}
.nav a[aria-expanded="true"]{color:var(--t0)}
/* No caret where nothing opens. The panel needs a mouse and more than 1000px
   (canShow() in fx-nav.js); on a phone, a touch tablet or a narrow window the
   link goes straight to its page, so a down-arrow there promised a sub-menu
   that never came. */
@media (max-width:1000px), not all and (pointer:fine){ .nav-caret{display:none} }

/* ── the panel ────────────────────────────────────────────────────────── */
.fx-mega{
  position:fixed;left:0;right:0;top:var(--hdr-h,54px);z-index:120;background:var(--s0);
  border-bottom:1px solid var(--l1);
  clip-path:polygon(0 0,100% 0,100% 0,0 0);
  transition:clip-path .36s cubic-bezier(.16,1,.3,1);
}
.fx-mega.on{clip-path:polygon(0 0,100% 0,100% 100%,0 100%)}
.fx-mega-in{
  display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1fr) minmax(0,1.5fr);
  gap:1px;background:var(--l0);
  /* border-top removed. The panel opens with a clip-path wipe from zero
     height downward, so a full-width rule across the top of its content is
     dragged down the screen as a horizontal bar for the whole 360ms of the
     reveal — the line that kept being reported. The 1px gap on --l0 already
     separates the three columns; the top edge does not need its own rule,
     and .fx-mega's own border-bottom still closes the panel against the page. */
}
.fx-mega-col{background:var(--s0);padding:var(--x6) var(--gut);min-width:0;
  display:flex;flex-direction:column;gap:0;max-height:66vh;overflow-y:auto}
/* Products lists eight category rows in its first column, twice what one
   division had; on a laptop screen (a 1366x768 display leaves ~650px of
   window) 66vh cut off "All of Sharp Steel". The panel may grow to the
   window less a strip of page; a tall window still sizes to its content. */
.fx-mega-col{max-height:max(66vh,calc(100vh - 104px))}
.fx-mega-col h4{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;
  color:var(--t2);margin-bottom:var(--x4)}

/* first column — the rows that were breaking: four columns, name never clipped */
.fx-mega-cat{
  display:grid;grid-template-columns:20px 26px minmax(0,1fr) auto;
  gap:var(--x3);align-items:center;
  background:none;border:0;border-top:1px solid var(--l0);padding:11px 0;cursor:pointer;
  text-align:left;color:var(--t1);width:100%;
  transition:color .2s,padding-left .26s cubic-bezier(.16,1,.3,1);
}
.fx-mega-cat:hover{color:var(--t0);padding-left:6px}
.fx-mega-cat.on{color:var(--t0)}
.fx-mega-ico{width:20px;color:var(--t2);flex:0 0 auto}
.fx-mega-ico svg{width:100%;height:auto}
.fx-mega-cat.on .fx-mega-ico,.fx-mega-cat:hover .fx-mega-ico{color:var(--t0)}
/* --t3 put these at 3.26:1 against the panel, under the 4.5 an 11px glyph
   needs. They are small text carrying an index, not decoration. */
.fx-mega-ix{font:400 var(--f-mic)/1.4 var(--mono);color:var(--t2)}
.fx-mega-nm{font-size:var(--f-bd);letter-spacing:-.006em;line-height:1.3;
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fx-mega-ct{font:400 var(--f-mic)/1.4 var(--mono);color:var(--t2);justify-self:end}
/* Products holds both divisions: the second group's label clears the first's link */
.fx-mega-all + h4{margin-top:var(--x8)}
.fx-mega-all,.fx-mega-go{
  display:inline-flex;align-items:center;gap:9px;margin-top:var(--x5);
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t1)}
.fx-mega-all i,.fx-mega-go i{font-style:normal;transition:transform .3s cubic-bezier(.16,1,.3,1)}
.fx-mega-all:hover,.fx-mega-go:hover{color:var(--t0)}
.fx-mega-all:hover i,.fx-mega-go:hover i{transform:translate(5px,2.1px)}

/* second column — products, or a project's schedule */
.fx-mega-p{display:flex;flex-direction:column;gap:3px;padding:10px 0;
  border-top:1px solid var(--l0);transition:padding-left .24s cubic-bezier(.16,1,.3,1),color .2s}
.fx-mega-p:hover{padding-left:7px}
.fx-mega-p:hover .fx-mega-nm{color:var(--t0)}
.fx-mega-meta{font:400 var(--f-mic)/1.4 var(--mono);color:var(--t2);font-variant-numeric:tabular-nums}
.fx-mega-sched{display:block;padding:9px 0;border-top:1px solid var(--l0);
  font-size:var(--f-sm);color:var(--t1);line-height:1.4}

/* third column — the drawing is the subject, at size */
.fx-mega-prev{display:grid;grid-template-rows:minmax(0,1fr) auto;gap:var(--x5);padding-bottom:var(--x8)}
.fx-mega-dwg{display:flex;align-items:center;justify-content:center;min-height:0;
  padding:var(--x4) 0}
.fx-mega-dwg svg{width:100%;height:auto;max-height:230px;overflow:visible}
.fx-mega-dwg .dwg-stroke{stroke:var(--t0)}
.fx-mega-dwg .dwg-hair{stroke:var(--t2)}
.fx-mega-dwg .dwg-glass{fill:rgba(255,255,255,.06)}
/* the photograph starts level with the column headings; centred, it sat
   25px lower in the taller Products panel (integrate 2026-10-11) */
.fx-mega-shot{min-height:0;display:flex;align-items:flex-start}
.fx-mega-shot .shot{width:100%;max-height:230px}
.fx-mega-read{display:flex;flex-direction:column;gap:var(--x3);align-items:flex-start}
.fx-mega-eyebrow{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;
  text-transform:uppercase;color:var(--t2)}
.fx-mega-read p{font-size:var(--f-sm);line-height:1.55;color:var(--t1);max-width:52ch}
.fx-mega-read dl{display:grid;grid-template-columns:1fr auto;gap:5px var(--x4);width:100%;max-width:340px}
.fx-mega-read dt{font:400 var(--f-cap)/1.6 var(--mono);letter-spacing:.13em;
  /* --t3 is 3.26:1, declared for decoration and large text only; this is a
     10px label. --t2 is 4.71:1, which the sibling label classes already use. */
  text-transform:uppercase;color:var(--t2)}
.fx-mega-read dd{font-size:var(--f-bd);color:var(--t0);text-align:right;font-variant-numeric:tabular-nums}

@media (max-width:1000px){ .fx-mega{display:none} }
[data-motion="off"] .fx-mega{transition:none}

/* ── pagination ───────────────────────────────────────────────────────── */
.fx-page{display:flex;align-items:center;gap:var(--x5);padding:var(--x5) 0 0;
         border-top:1px solid var(--l1);margin-top:-1px}
.fx-page-n{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;color:var(--t2);
           font-variant-numeric:tabular-nums;white-space:pre}
.fx-page-b{background:none;border:1px solid var(--l2);color:var(--t1);
  width:38px;height:32px;display:grid;place-items:center;cursor:pointer;
  font:400 13px/1 var(--mono);
  transition:background .26s cubic-bezier(.16,1,.3,1),color .26s,border-color .26s}
.fx-page-b:hover:not([disabled]){background:var(--t0);color:var(--s0);border-color:var(--t0)}
.fx-page-b[disabled]{opacity:.3;cursor:not-allowed}
.fx-page-b:active:not([disabled]){transform:translate(1px,.4px) scale(.97)}

/* ── the systems carousel ─────────────────────────────────────────────── */
.chead{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--x6);
       margin-bottom:calc(var(--x6) + 18px)}
.chead .head{margin-bottom:0}
.cnav{display:flex;align-items:center;gap:var(--x4);flex:0 0 auto}
.cpos{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;color:var(--t2);
      font-variant-numeric:tabular-nums}
.cbtn{background:none;border:1px solid var(--l2);color:var(--t1);width:38px;height:32px;
  display:grid;place-items:center;cursor:pointer;font:400 13px/1 var(--mono);
  transition:background .26s cubic-bezier(.16,1,.3,1),color .26s,border-color .26s}
.cbtn:hover{background:var(--t0);color:var(--s0);border-color:var(--t0)}
.cbtn:active{transform:translate(1px,.4px) scale(.97)}

/* The clipping box carries 18px of vertical padding, cancelled by an equal
   negative margin, so a slide can lift clear of the strip without being cut
   off by the overflow and without moving the block in the layout. The frame
   moved onto the slides themselves for the same reason — an outer border
   18px away from the cards would just be a stray rectangle. */
.carousel{overflow:hidden;cursor:grab;touch-action:pan-y;padding:18px 0;margin:-18px 0}
.carousel.is-drag{cursor:grabbing}
.ctrack{display:flex;will-change:transform}
.cslide{flex:0 0 clamp(240px,24vw,340px);
  border:1px solid var(--l1);border-left:0;
  /* a swipe across a link must not select its text or start a native drag */
  user-select:none;-webkit-user-select:none;-webkit-user-drag:none;
  padding:clamp(20px,2.2vw,30px);display:flex;flex-direction:column;gap:var(--x4);
  background:var(--s0);min-width:0;position:relative;
  transition:background .34s cubic-bezier(.16,1,.3,1),
             transform .42s cubic-bezier(.16,1,.3,1),
             box-shadow .42s cubic-bezier(.16,1,.3,1),
             opacity .3s,border-color .3s}
/* The selected card is drawn out of the strip and LIT. Dimming the other
   seven to 40% was the wrong half of the idea: it punished the whole run for
   the pointer being somewhere, and the reader lost the row they were
   scanning. Only the chosen card changes — it lifts, its surface comes up,
   its drawing and its text brighten. Everything else is left alone. */
.carousel:not(.is-drag) .cslide:hover{
  background:var(--s2);border-color:var(--l2);
  transform:translateY(-13px);
  /* the -1px shadow draws the left edge the strip collapses away, so the
     lifted card is framed on all four sides */
  box-shadow:-1px 0 0 var(--l2), 0 18px 38px rgba(0,0,0,.5)}
.carousel:not(.is-drag) .cslide:hover .cs-meta i,
.carousel:not(.is-drag) .cslide:hover .cs-meta em,
.carousel:not(.is-drag) .cslide:hover .cs-cap{color:var(--t1)}
.carousel:not(.is-drag) .cslide:hover .cs-cap b{color:var(--t0)}
/* No line drawing itself along the top edge. A card that lifts and lights is
   already saying it is selected; the stroke was a second answer to the same
   question, and the same stroke-on-hover move was repeated on card after
   card until it read as the site's only idea. Strokes are kept for controls
   that need a fill to travel — chips and the small actions — not for cards. */
.cs-dwg{display:block}
.cs-dwg svg{width:100%;height:auto;max-height:150px;overflow:visible;
  transition:transform .5s cubic-bezier(.16,1,.3,1)}
.carousel:not(.is-drag) .cslide:hover .cs-dwg svg{transform:scale(1.055)}
.cslide:hover .dwg-hair{stroke:var(--t1)}
.cslide:hover .dwg-glass{fill:rgba(255,255,255,.09)}
.cs-meta{display:flex;align-items:baseline;gap:var(--x3);flex-wrap:wrap;margin-top:auto}
.cs-meta i{font:400 var(--f-mic)/1 var(--mono);color:var(--t2);font-style:normal}
.cs-meta b{font-size:var(--f-bd);font-weight:400;color:var(--t0);letter-spacing:-.004em}
.cs-meta em{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;
            color:var(--t2);font-style:normal;width:100%}
.cs-cap{display:flex;flex-wrap:wrap;gap:3px 10px;font:400 var(--f-cap)/1.5 var(--mono);color:var(--t2)}
.cs-cap b{font-weight:400;color:var(--t1)}
@media (max-width:700px){ .chead{flex-direction:column;align-items:flex-start} }
[data-motion="off"] .cslide,[data-motion="off"] .cs-dwg svg{transition:none}

/* ── fx-peek: the card that rides the cursor ──────────────────────────── */
.fx-peek{
  position:fixed;left:0;top:0;z-index:200;width:268px;pointer-events:none;
  background:var(--s1);border:1px solid var(--l2);
  box-shadow:0 20px 48px rgba(0,0,0,.55);
  opacity:0;visibility:hidden;transform:translate3d(-600px,-600px,0);
  transition:transform .16s cubic-bezier(.16,1,.3,1),opacity .19s,visibility 0s .19s;
}
.fx-peek[data-on="1"]{
  opacity:1;visibility:visible;
  transition:transform .16s cubic-bezier(.16,1,.3,1),opacity .19s,visibility 0s;
}
.fx-peek-m{display:block;border-bottom:1px solid var(--l1)}
.fx-peek-m .shot{width:100%}
.fx-peek-m .ph-brief{font-size:10px;line-height:1.45}
.fx-peek-b{padding:13px 15px 15px;display:flex;flex-direction:column;gap:6px}
.fx-peek-n{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--t2)}
.fx-peek-t{font-size:var(--f-bd);font-weight:400;line-height:1.28;letter-spacing:-.006em;color:var(--t0)}
.fx-peek-d{font-size:12.5px;line-height:1.5;color:var(--t1)}
@media (pointer:coarse){ .fx-peek{display:none} }
[data-motion="off"] .fx-peek{transition:opacity .19s}

/* ── sticky overlap: the Explain → Prove handoff ──────────────────────── */
.stk{--stk-lap:0px;--stk-min:84px;position:relative}
.stk-a{position:relative}
.stk-a-in{will-change:transform,opacity}
.stk-b{position:relative;z-index:2;background:var(--s0)}

/* The overlap is armed only once fx-stick has mounted. Without it these are
   two ordinary sections in normal flow — readable, in order, no overlap and
   nothing covered. */
[data-stk="on"] .stk{--stk-lap:clamp(56px,9vh,120px)}
[data-stk="on"] .stk-a{position:sticky;top:var(--stk-min)}
/* A's own content stops short of the band B will cover, so B covering it can
   never hide a word — with or without the driver running */
[data-stk="on"] .stk-a{padding-bottom:var(--stk-lap)}
[data-stk="on"] .stk-b{margin-top:calc(-1 * var(--stk-lap));border-top:1px solid var(--l1)}

/* the global visibility backstop reaches this module too */
html.fx-forcevis .stk-a-in{opacity:1 !important;transform:none !important}

@media (prefers-reduced-motion:reduce){
  .stk-a{position:relative !important;top:auto !important;padding-bottom:0 !important}
  .stk-a-in{transform:none !important;opacity:1 !important}
  .stk-b{margin-top:0 !important}
}
@media (max-width:860px){
  /* a short viewport has no room for two modules at once; stack them */
  [data-stk="on"] .stk-a{position:relative;top:auto;padding-bottom:0}
  [data-stk="on"] .stk-b{margin-top:0}
  .stk-a-in{transform:none !important;opacity:1 !important}
}

/* ── the figures ──────────────────────────────────────────────────────── */
/* tabular figures and a reserved width: the counter must not reflow its
   neighbours while it runs */
.bn-n,.bncodes b{font-variant-numeric:tabular-nums;display:inline-block}
[data-rolling]{font-variant-numeric:tabular-nums}

/* ── explorer ─────────────────────────────────────────────────────────── */
.fx-expl-f{display:flex;flex-wrap:wrap;gap:1px;background:var(--rule);
           border:1px solid var(--rule);border-bottom:0}
.fx-expl-f .chip{background:var(--void);border:0;flex:1 1 auto}
.fx-expl-f .chip.on{color:var(--sig)}
.hs.fx-off{opacity:.15;pointer-events:none}
.hs .fx-pulse,.hs circle:first-of-type{transform-origin:center}
@keyframes fxpulse{
  0%{r:11;opacity:.9}
  70%{r:21;opacity:0}
  100%{r:21;opacity:0}
}
.hs::after{content:none}
.hs circle:first-of-type{animation:fxpulse 3.2s cubic-bezier(.2,.7,.3,1) infinite;animation-delay:var(--pd,0ms)}
.hs:hover circle:first-of-type,.hs:focus circle:first-of-type{animation-play-state:paused}
[data-motion="off"] .hs circle:first-of-type{animation:none}

/* ── flow ─────────────────────────────────────────────────────────────── */
.frow{transition:color .24s,padding-left .24s}
.frow.on{padding-left:6px}
.frow.done .n::after{content:" ✓";color:var(--sig)}

/* ══════ motion-core ══════ */
/* ═══════════════════════════════════════════════════════════════════════════
   SHARP · FX / motion-core
   ---------------------------------------------------------------------------
   The reveal is an aperture, not a fade. Two parallel edges at exactly 22.5°
   part from the element's own centre line. --fx-r is the horizontal run of
   that diagonal expressed as a percentage of the element's height, written by
   JS from the IntersectionObserver rect, so the edge is a true 22.5° in device
   pixels whatever the element's aspect ratio.

   Motion is on unconditionally. prefers-reduced-motion is never consulted;
   the only opt-out is [data-motion="off"], set by the footer toggle.
   ═══════════════════════════════════════════════════════════════════════════ */

:root{
  --scroll-y:0px;
  --scroll-p:0;
  --fx-ease:cubic-bezier(.16,1,.3,1);
  --fx-dur:780ms;
  --fx-fade:420ms;
}

/* ── scroll progress ──────────────────────────────────────────────────────
   Sits above .hdr (z 100), .devbar (z 150) and .skip (z 200). 2px tall, no
   track, leading edge chamfered at 22.5°. */
.fx-prog{
  position:fixed;top:0;left:0;right:0;height:2px;
  z-index:400;pointer-events:none;background:transparent;
  contain:layout style;
  opacity:clamp(0,calc(var(--scroll-p,0) * 26),1);
}
.fx-prog i{
  display:block;height:100%;
  width:calc(var(--scroll-p,0) * 100%);
  background:var(--sig);
  /* 2px / tan(22.5deg) = 4.83px of run */
  clip-path:polygon(0 0,100% 0,calc(100% - 4.83px) 100%,0 100%);
}

/* ── reveal ─────────────────────────────────────────────────────────────── */



/* the clip is transient — dropped on completion so it can never clip a focus
   ring, an absolutely positioned child or a later hover state */


/* ── motion toggle (footer) ─────────────────────────────────────────────── */






/* ── motion off ─────────────────────────────────────────────────────────── */
:root[data-motion="off"] .rv,
:root[data-motion="off"] .rv.in,
:root[data-motion="off"] .rv.fx-done{
  opacity:1!important;
  transform:none!important;
  clip-path:none!important;
  transition:none!important;
  will-change:auto!important;
}
:root[data-motion="off"] *,
:root[data-motion="off"] *::before,
:root[data-motion="off"] *::after{
  transition-duration:1ms!important;
  transition-delay:0s!important;
  animation-duration:1ms!important;
  animation-delay:0s!important;
  animation-iteration-count:1!important;
}
:root[data-motion="off"]{scroll-behavior:auto!important}

/* ── forced motion ────────────────────────────────────────────────────────
   The base stylesheet ships a prefers-reduced-motion block that switches the
   reveal off. motion-core retires that block at runtime; this is the belt to
   that pair of braces, in case a sheet is unreachable (CORS) and cannot be
   rewritten. Never used to DISABLE motion — only to keep it running. */


@media (max-width:620px){
  
}

/* ══════ type-motion ══════ */
/* ── fx · type-motion ─────────────────────────────────────────────────────
   Split-line heading reveal, number counters, nav character shift.
   Every diagonal here is 22.5deg: the horizontal travel is tan(22.5) x the
   vertical travel, written as px onto --fx-x / --fx-y by the module.
   No radius, no shadow, no gradient, single theme, motion is unconditional. */

/* the heading becomes a column of masked lines. flex, not block, so the
   negative line margins cannot collapse into each other and shift the type. */
.fx-split{display:flex;flex-direction:column;align-items:stretch}

/* padding opens the mask past ascenders and descenders; the equal negative
   margin gives the space straight back, so total heading height is unchanged */
.fx-line{display:block;overflow:hidden;padding:.16em 0;margin:-.16em 0}

.fx-line-i{
  display:block;
  will-change:transform;
  transform:translate3d(var(--fx-x,-.14em),min(var(--fx-y,120%),0.5em),0);
  transition:transform .42s cubic-bezier(.19,1,.22,1) var(--fx-d,0ms);
}
.fx-split.fx-in .fx-line-i{transform:translate3d(0,0,0)}

/* measuring state — words are inline and unstyled so line breaking is honest */
.fx-word{display:inline}

/* ── figures ──────────────────────────────────────────────────────────── */
.fx-count{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}
.fx-n{
  display:inline-block;
  font-variant-numeric:tabular-nums;
  font-feature-settings:"tnum" 1;
  text-align:left;
  /* min-width is written inline in ch by the module: the figure grows into a
     box already the width of its final value, so nothing after it moves */
}

/* ── nav characters ───────────────────────────────────────────────────── */
.fx-chars{display:inline-block;white-space:nowrap}
.fx-ch{
  display:inline-block;
  transition:transform .34s cubic-bezier(.22,1,.36,1) var(--fx-d,0ms);
}
.nav a:hover .fx-ch,
.nav a:focus-visible .fx-ch{
  transform:translate3d(calc(-.41421356 * var(--fx-lift,2.4px)),calc(-1 * var(--fx-lift,2.4px)),0);
}

/* ── the only opt-out: an explicit user toggle ────────────────────────── */
[data-motion="off"] .fx-line-i,
[data-motion="off"] .fx-ch{transform:none !important;transition:none !important}

/* ══════ fx-cursor ══════ */
/* ═══════════════════════════════════════════════════════════════════════════
   fx-cursor — a drafting reticle, fine pointers with real hover only
   The sight is a hairline cross at the pointer: vertical arms, and arms at
   the brand's 22.5deg. Brackets clamp the control under it; a 22.5deg leader
   carries the verb out to a tag. 1px lines, square ends, no radius, no
   shadow, no gradient. The ink is the division's own white (--em). Every
   line is drawn twice — a fine dark keyline under a 1px ink line — so it
   holds on the black UI (where the keyline vanishes) and on a white
   photograph (where it carries the line). No blend mode: the tag is a solid
   plate and must stay the colour it is.
   ═══════════════════════════════════════════════════════════════════════════ */

.fx-cur{
  position:fixed; left:0; top:0; width:0; height:0;
  z-index:900; pointer-events:none;
  opacity:0; transition:opacity .16s linear;
  --fx-cur-ink:var(--em,#f0eeea); --fx-cur-key:rgba(7,7,8,.5);
}
.fx-cur[data-on="1"]{opacity:1}
.fx-cur *{pointer-events:none}

.fx-cur-x,.fx-cur-k,.fx-cur-ld,.fx-cur-tg{
  position:absolute; left:0; top:0; width:0; height:0;
  will-change:transform;
  transform:translate3d(-100px,-100px,0);
}
.fx-cur-f{position:absolute; left:0; top:0; width:0; height:0; opacity:0}
.fx-cur-tg{width:auto; height:auto}

.fx-cur svg{position:absolute; left:0; top:0; display:block; max-width:none; overflow:visible}
.fx-cur-kl{fill:none; stroke:var(--fx-cur-key); stroke-width:2; stroke-linejoin:miter; stroke-linecap:butt}
.fx-cur-in{fill:none; stroke:var(--fx-cur-ink); stroke-width:1; stroke-linejoin:miter; stroke-linecap:butt}

/* the sight ----------------------------------------------------------------
   The hotspot pixel is (0,0)–(1,1); the arms are hung from its centre. */
.fx-cur-a{position:absolute; left:.5px; top:.5px; width:0; height:0}
.fx-cur-a1{transform:rotate(-90deg)}       /* up                          */
.fx-cur-a2{transform:rotate(90deg)}        /* down                        */
.fx-cur-a3{transform:rotate(-22.5deg)}     /* up the 22.5 line            */
.fx-cur-a4{transform:rotate(157.5deg)}     /* and down it                 */
.fx-cur-a b{
  position:absolute; left:3.5px; top:-.5px; width:7px; height:1px;
  background:var(--fx-cur-ink); outline:.5px solid var(--fx-cur-key);
  transform-origin:0 50%; transform:scaleX(1);
  transition:transform .2s cubic-bezier(.22,1,.36,1);
}
.fx-cur-o{
  position:absolute; left:0; top:0; width:1px; height:1px;
  background:var(--fx-cur-ink); outline:.5px solid var(--fx-cur-key);
}
/* on a light control (a filled button) the sight is drawn in the void
   colour, keyed in the light, so the pointer never disappears into it */
.fx-cur[data-lt="1"] .fx-cur-x{--fx-cur-ink:var(--s0,#070708); --fx-cur-key:rgba(246,239,228,.55)}

/* the leader and the tag ---------------------------------------------------- */
.fx-cur-ld svg{
  top:auto; bottom:0;
  transform-origin:0 100%; transform:scale(0);
  transition:transform .1s cubic-bezier(.22,1,.36,1);
}
.fx-cur-tg .fx-cur-lbl{opacity:0; transition:opacity .08s linear}
/* the datum: where the leader lands on the frame of a control */
.fx-cur-dt{
  position:absolute; left:-1.5px; top:-1.5px; width:3px; height:3px;
  background:var(--fx-cur-ink); outline:.5px solid var(--fx-cur-key);
  opacity:0; transition:opacity .08s linear;
}

/* states -------------------------------------------------------------------
   link    the brackets clamp the control; the sight draws in to a point and
           four short stubs, clear of the words
   label   the same, plus the leader and the tag
   press   the brackets close on the control; the sight tightens */
.fx-cur[data-s="link"] .fx-cur-a b,
.fx-cur[data-s="label"] .fx-cur-a b{transform:scaleX(.3)}

.fx-cur[data-s="label"] .fx-cur-ld svg{transform:scale(1); transition-duration:.14s; transition-delay:.02s}
.fx-cur[data-s="label"] .fx-cur-tg .fx-cur-lbl{opacity:1; transition-duration:.11s; transition-delay:.07s}
.fx-cur[data-s="label"][data-w="1"] .fx-cur-dt{opacity:1; transition-duration:.08s; transition-delay:.02s}

/* over running text the tag stands down (the frame folds away in JS) */
.fx-cur[data-q="1"] .fx-cur-ld svg{transform:scale(0); transition-delay:0s}
.fx-cur[data-q="1"] .fx-cur-tg .fx-cur-lbl,
.fx-cur[data-q="1"][data-s][data-w] .fx-cur-dt{opacity:0; transition-delay:0s}

/* a tag re-hung on a new target: one frame unseen, then it fades in there */
.fx-cur[data-tr="1"] .fx-cur-ld svg{transform:scale(0); transition:none}
.fx-cur[data-tr="1"] .fx-cur-tg .fx-cur-lbl,
.fx-cur[data-tr="1"][data-s][data-w] .fx-cur-dt{opacity:0; transition:none}

.fx-cur[data-press="1"] .fx-cur-a b{transform:scaleX(.5); transition-duration:.08s}
.fx-cur[data-press="1"][data-s="link"] .fx-cur-a b,
.fx-cur[data-press="1"][data-s="label"] .fx-cur-a b{transform:scaleX(.3)}

/* native cursor: off where ours is live, back over text entry and native
   controls (which the reticle hands over to the system) --------------------- */
@media (pointer:fine) and (hover:hover){
  html.fx-cur-on,html.fx-cur-on *{cursor:none !important}
  html.fx-cur-on textarea,
  html.fx-cur-on input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not([type="image"]),
  html.fx-cur-on [contenteditable="true"],
  html.fx-cur-on [contenteditable="true"] *{cursor:text !important}
  html.fx-cur-on select{cursor:pointer !important}
  html.fx-cur-on input[type="checkbox"],
  html.fx-cur-on input[type="radio"],
  html.fx-cur-on input[type="range"],
  html.fx-cur-on input[type="color"],
  html.fx-cur-on input[type="file"]{cursor:default !important}
}

/* the two opt-outs: the site's toggle, and the reader's reduced-motion
   setting (read in JS — a media query here would be retired at boot) */
html[data-motion="off"] .fx-cur,
html[data-motion="off"] .fx-cur *,
.fx-cur[data-rm="1"],
.fx-cur[data-rm="1"] *{transition-duration:0s !important; transition-delay:0s !important}

/* belt and braces: never drawn on a coarse pointer or without hover */
@media (pointer:coarse),(hover:none){ .fx-cur{display:none} }

/* ══════ image-motion ══════ */
/* ═══ SHARP FX · image-motion ══════════════════════════════════════════════
   Photographs and their placeholders: scroll-linked parallax, a 22.5° wipe
   on first sight, a slow hover push on card frames, and a full-screen viewer.
   Zero radius, zero elevation, one theme. No prefers-reduced-motion query —
   the only opt-out is html[data-motion="off"].
   ═════════════════════════════════════════════════════════════════════════ */

/* ── the travelling frame ──────────────────────────────────────────────────
   --fx-oh is written by JS from one constant so the overhang and the maximum
   translate can never drift apart. The img is (100 + oh)% tall and hangs
   oh/2 above the frame, so ±oh/2 of travel is exactly flush. */
.fx-shot{ --fx-oh:10%; }

.fx-shot > img{
  top:calc(var(--fx-oh) / -2);
  bottom:auto;
  height:calc(100% + var(--fx-oh));
  transform:translate3d(0, var(--fx-py, 0%), 0);
  scale:var(--fx-scale, 1);
  transition:scale 1100ms cubic-bezier(.22,.61,.36,1);
}
.fx-shot.fx-live > img{ will-change:transform; }

/* ── first reveal · the 22.5° axis ─────────────────────────────────────────
   --fx-sl is K × the clipped box's own height in px (K = tan 22.5°), so the
   leading edge of the wipe sits at 22.5° off vertical whatever the aspect
   ratio is. JS writes a taller value onto the img, which overhangs the frame.

   The clip is on the CONTENTS, never on .shot itself: a clip-path on an
   observed element makes IntersectionObserver report it as never
   intersecting, which would strand every frame in its armed state. It also
   reads better — the 1px rule stays put and the picture arrives inside it. */
.fx-shot.fx-arm{ --fx-scale:1.06; }
.fx-shot.fx-arm > img,
.fx-shot.fx-arm > .ph{
  clip-path:polygon(-2% -2%, -2% -2%, calc(-2% - var(--fx-sl, 0px)) 102%, -2% 102%);
}
.fx-shot.fx-in > img,
.fx-shot.fx-in > .ph{
  animation:fx-wipe 900ms cubic-bezier(.22,1,.36,1) both;
}
@keyframes fx-wipe{
  from{ clip-path:polygon(-2% -2%, -2% -2%, calc(-2% - var(--fx-sl, 0px)) 102%, -2% 102%); }
  to  { clip-path:polygon(-2% -2%, calc(102% + var(--fx-sl, 0px)) -2%, 102% 102%, -2% 102%); }
}
@media (hover:hover) and (pointer:fine){
  .pcard:hover .fx-shot, a.cell:hover .fx-shot{ --fx-scale:1.04; }
}
.pcard:focus-visible .fx-shot, a.cell:focus-visible .fx-shot{ --fx-scale:1.04; }

/* ── a frame that opens ────────────────────────────────────────────────────
   Only frames holding a real, loaded photograph get this. Placeholders and
   any frame nested inside a link keep their own behaviour. */
.fx-lb-able{ cursor:zoom-in; }

/* ── the viewer ───────────────────────────────────────────────────────────── */
.fx-lb{
  position:fixed;
  inset:0;
  z-index:400;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:clamp(16px,4vw,56px);
  background:var(--void);
  opacity:0;
  transition:opacity 300ms linear;
  cursor:zoom-out;
  touch-action:none;
  overscroll-behavior:contain;
}
.fx-lb[hidden]{ display:none; }
.fx-lb.fx-lb-on{ opacity:1; }

.fx-lb-f{
  position:relative;
  display:flex;
  flex-direction:column;
  gap:14px;
  width:fit-content;
  max-width:min(1400px, 100%);
  max-height:100%;
  transform:translate3d(0, var(--fx-lb-dy, 0px), 0);
  transition:transform 380ms cubic-bezier(.22,1,.36,1);
}
.fx-lb.fx-lb-drag .fx-lb-f{ transition:none; }
.fx-lb.fx-lb-on .fx-lb-img{ scale:1; }

.fx-lb-img{
  display:block;
  width:auto;
  height:auto;
  max-width:100%;
  max-height:calc(100vh - 200px);
  max-height:calc(100dvh - 200px);
  margin:0 auto;
  border:1px solid var(--rule);
  background:var(--plate);
  scale:.985;
  transition:scale 520ms cubic-bezier(.22,1,.36,1);
}

.fx-lb-cap{
  display:flex;
  flex-wrap:wrap;
  align-items:baseline;
  justify-content:space-between;
  gap:8px 24px;
  width:100%;
  max-width:74ch;
  padding-top:2px;
  border-top:1px solid var(--rule);
}
.fx-lb-nocap .fx-lb-cap{ display:none; }
.fx-lb-t{ font:400 12px/1.5 var(--mono); color:var(--mid); max-width:70ch; padding-top:10px; }
.fx-lb-id{ font:400 9.5px/1.5 var(--mono); letter-spacing:.1em; text-transform:uppercase; color:var(--ghost); padding-top:10px; }

.fx-lb-x{
  position:absolute;
  top:clamp(14px,2.4vw,28px);
  right:clamp(14px,2.4vw,28px);
  z-index:2;
  display:inline-flex;
  align-items:center;
  gap:10px;
  padding:11px 15px;
  border:1px solid var(--rule);
  background:var(--void);
  color:var(--mid);
  font:500 10.5px/1 var(--mono);
  letter-spacing:.15em;
  text-transform:uppercase;
  cursor:pointer;
  transition:color .18s, border-color .18s, background .18s;
}
.fx-lb-x i{ font-style:normal; color:var(--dim); }  /* F11: was --ghost, 3.26:1 */
.fx-lb-x:hover{ color:var(--ink); border-color:var(--edge); background:var(--raise); }
.fx-lb-x:hover i{ color:var(--sig); }

html.fx-lb-lock{ overflow:hidden; }
html.fx-lb-lock body{ padding-right:var(--fx-lb-pad, 0px); }

/* ── the one opt-out ──────────────────────────────────────────────────────── */
html[data-motion="off"] .fx-shot > img{
  transform:none;
  scale:1;
  transition:none;
  will-change:auto;
}
html[data-motion="off"] .fx-shot > img,
html[data-motion="off"] .fx-shot > .ph{ clip-path:none; animation:none; }
html[data-motion="off"] .fx-lb,
html[data-motion="off"] .fx-lb-f,
html[data-motion="off"] .fx-lb-img{ transition:none; }
html[data-motion="off"] .fx-lb-img{ scale:1; }