This commit is contained in:
Nick Beckley 2026-06-01 20:07:37 +01:00
parent ca82bd973b
commit 264f63b105
22 changed files with 633 additions and 52 deletions

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUSW/bOBT+KwLPpkKK2ihgDobTYow0jZG4M4O5cXmMicikQVFOgyL/fUBZrp2ih7kJT2/7lscfyIk9oA4tD4dPR3BxQAsU7RQqSFFjUmNCt7TtaNUxmrOKcdKyf9EC2Tt4Qx1qSqWo4oAZ1IBLTSosmVFYa+CUUE2Kqkw9xfOAuh9I2FzD0SrI/fAXhMF6hzr0t3Xav6bZwuaq96POg+9h7YYonErLfF2v7vCX5Wb7sDllDTCk4txq1KFWM0IZE7hljOJSGIMF0xKDZrySREKj61OZdRGCE30+6JfLfO2jg6i6Ii9YTnDB0fsCaRFFWlmKAbZvh7TFRNFtii+m8PTZ/UBHCKgrFmcyT+1uVG9v9oMcba9vogjPEE0Qe3j14QWOokcLdAj+ACFamLh5eMouK1GSk7yoC0LQAt0LtbMOsvVt9tAnwEK1pATNMAejccmpwLxkDGtWiaaoTdMUBi3QHQQH/VXXe6uCH7yJ2Ux59mHOyrto3ejHIVu7CM9BxFPdZ9EPgBZoM8reDrtHEPpt6x/H9M+NfcKyGkMAF7ONiLvsTzHsUIe4aBUVXHAhaqUMVAQM0UTUpNFQ6xp0WehGl7zUdcmJqkshaalFRaVJEbRAD2M8jPHM//erJbbB7vegLxtsJ443vYjGh/1ag4vW2CTNOWMyVN9PqLK556q34OIHklGHCIVCsxawKWiNy1YLLCrGcV2z2gBVvCnoiTBjn8efPBFjdMlM1ba15JISKEzTlqQxkmhlmOK6ktAUDWlaaLkiRFYlbSVXRAOtSp3QBa9HFX+1ApsEehxdus5snWC/Woe/1+WFkU3w0SvfJ8FsD09vQ4T971Rb+f3BDzYm/GaW9tsA996lv/P9z5zNxUsfLzFId5BNp1cbIaXkgCkrpvvnWDZMYVKBIAUFxZt0erdevUDIksGEdZMmZ089PGXLoHY2gopjSJP/mUCd5Px8PpkLH/nXT9uVD7A8HBZz9I9jIunU7GyAD+/KtyGl7/wQryDP0J6gN+fFruyk4Xh6quyEU+sWdE1xUdIKl5xT3PKqwbJpJZd1C5W62DV7BG0DqDj124YxTZuZ/Z0vlyFaI1Qc0vF88Wqy0+zPOeXXJa9k+1l9Gn4l3WyluRMlybJPp4dzctD/ejff39/f/wMAAP//AwDurNISKAYAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTy27cOBD8FYFnUeZLlKibMd5FBk7Wg8RIFntrsVsZIjI1kCgngTH/vqBmgsS55UYUWd3VVc0XFuGJWMduT6e/nimmhZUshQ1SQlkuLBfyUbadrDvtqkYIZVT9HytZuKfvrGON8V56R1yTJW5Q1LzXg+eI5KSQKFRtck34vLDuhUGokJ6Dp2paPtK8hCmyjn0KEaevuTeEyo/TitU8jbSPS4Los5h/9rt7/vb28PhwuLxaaMnkKiDrWItaSK2Bt1pLbmAYOGjsOaF2dS96atBeaCEmmiOM1YJffvbHKUVKvlOV0pXgyrFzyRASZMk9LPT4/ZRVbBbdZbzc4O3YvbBnmlmnyh9mXsrd+DHc+OnpCSLeDCGG5chKdpqnE80p0GbHNuE4QgpTLK5NdmOgmFjJHj4UhxHSMM1Przz6cBl9/weTvwN/DJGK/R3rmJCkULfEByUtNy0Ch1o7bq22A0nvGiVZyXZTTCGu07oU+5jo87ypZB37G8aFLvpuZ38MiXxa5yz9X5uzpm8h7SbMgGAlO8wTrj4VP+2WohKVFvnyYU2nNRXvCcNMPlGe6XFer+V/oyirNtJunWeKqThAOhZvYDmyjjlovQQHDsB6P1AtaBAowIoGyaIlNAobNM6gNU54a6CXBqGW/ZCRrDunW2wL5TyAbUFyMfiaG3TEe9kL3tTSKgQBIPwrW4uHMfPAt8IQau5oQG6cBO6M1hx1DY2yQ9Oo4RdLrolLkf1Ger58jU2BRWwJreTKyJob5yRvXd3wvml719uWap8139McafzFqHfBz9MyDam4Lkzxyrr3a8zfu9iW52uI/NsW2d3kv9Bc5MghxLzN15TP5/P5fwAAAP//AwAe+Q9dJQQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRU0W7cKBT9FYtn44DB2PgtmrTaUbabUTvqVn27wHWD4uAR4LRRlH9f4ZlVmqfVviB0zbmce87BLyTAI5KRXJ9OH54w5ERqkv1WalmrKFOU8SMfRt6NQjdKcy364Tupib/FZzKSXlrLrUYqUCGVjnXUiMlS51Bzxh1rO1l6wo9ExhcCvnH45C02S/qKMfklkJH87YNbfpa7wTd2XlbXxGXGfUgZgi1k/trvbumf14fj3eF8KmEq4MY7MpLBCcaFADoIwamEaaIgnKHohO4MM9g7dYb5kDEGmJvkHt7ud0sOmO3YNq1oGG01ea2JgwyFsoGEx+dTYbFJdFPq9VbetuMLecJIxrb+V8xzuys7+6vHZFY/u6vzmiE9pG2dwOYlPpOanOJywpg9bvpcp4SPZn4+Qnr4eD5TtunDL7RrRrdb1pDJSLgYSE02geYZsl9CdeG4mz2GvH3M0Yfk7X/1EqQmd1+qwwx5WuLjOz++nGXe/w+VP4G99wGr/Q0ZCePYOjEgnVquqBwcUOiEpkoJNSG3um85qcluCdmHdVlTtQ8Zf8RtJDKSjzAnPPO7jvbeZ7R5jWXOb6rk6hAXt9pcvXnJWcMawVgBrfm05uozOh/RZixDHON66ff1PaRV7QbarTFiyNUB8n31B6R7MhINg+WgQQMoayfsGE7MMVCsd6icQidb1zuppVNSM6skGC4ddNxMpUJqgiU61ZZW0Rk5GQCqjDJUuqmlRhtJjQOHqjMKoFjypmN1Nxcc2IFJdIJqnByVmgPVUgjqRAd9q6a+b6ffJLnkgbMisMOn87vbGCjnBnSK01byjkqtOR1011PTD0YbNWBnC+dbjAHn34T65G1c0jLl6pKQ6p10n9dQ/h3VlpafPtBfm0c3i33AWBWPwYfyVC62vr6+vv4DAAD//wMAfSYZIoIEAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUy27kNhD8FYHXiDJfokjdHNuLDBw/sDNIgtxaZMtmLFMDirJ3YfjfA2ns9WMRIBdBaJJd1dXV/UQi3CNpyfF+f/aAMU+kJDmsIcGEpkxTxnfctLxupa201Uor9TcpSTjH76QljXKOO4tUokaqPKtpJ3tHvUfLGfdM1GrJCTcTaZ8IhMrjQ3BYjdMfmKYwRtKSP0P04+OCDaFywzj7Ko0DbuKUIbqFzOXm5Jz+fny9u7o+3JpwWh5XwZOWGC8ZlxKokZJTBX1PQfqOope27liHjdeHZyFmTBGGavJ3b/h+zBGza0UlZMWosOS5JB4yLJQ7mHD3fb+wWCU6XeLlGl5/2yfygIm0onwV85DuyA3h6H7q5jD4o/VLSrJP4x5TDriqcbUt3khwVrFKaMEYKckFuNsQsdicFlfDUiI4wxR6SS32nirLgVolJfWyhkbovmlET0pyjini8C7rRXBpnMY+Fy8iFx9wtscnZxG6AReMLzBMSEqymbYZoodhjHj2Dd2cD7l2aV6OT8aYQ5zHeSo2MeNNgpfz1/cnc0oYc3EN+bb4DaZb0hILxnGwYAG0cz3WDHvmGWjWeNReo1fCN15Z5bWyzGkFHVceat71S4SU5NdFw+3sHE7TG5vVJMOwcihe+nQyBIz5g4ykJYyj8NIg7QXXVBkPFGppqdZS98idbQR/hdlBusFMWtKbruuYc51QljsQFqTvmfS6t0I0Dahe1o0SWtesAeebRnDlZYMOZC+ZEaQk12n0s8ufWy3XBlyn8R90eZGKtESzujYOuk5oxQ1Yg4prZbTFxqoemJKuA14b6DrOoGbOGuGAawuq83X/Q6WzeBMinoZpP8D3d7im0pX8xQEY3oP6dP1Lgnt8HNPd5cHG1eXZjpTk6xyXjVBsFos8hki/6WWiL+Yhh91tQvDoL0aPP/sIl3Ep1gmtRaeFN5KCaTRVUloKneC0VwZ6DbqXuAzV6ejuMBWLwyDEZap+JLvaFsfJ3YaMLs9p4ffXyuNqW1wPkPsx3X/YJO8K+yxAJSRnS2c8Phy20cpRe2/Qa06F4jVV1nJqbN3QrjGd7bTB2i2KXc15P+fiK/qQ0OW14hcvrpgnt+jufhbj1QUvFuVs8dr2sMVWaf/XEnsuyT3CNCe8X7d1+0Q2MWJakU/nwyhu4kUYhjChG6OfSGsabapaSvXC8D/vGckqoWzz/Pz8/C8AAAD//wMAMmO+UhsGAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTTW/UMBD9K5HP69SOHSfOrdqCWBXoClaAuE08E2o1dVaOU0DV/nfk7CIoNy6WNfKbeR/jZxbgkVjHro/HV08U0sw2LPm1VInKcGG4kAfZdrLulC2N1VLZ9ivbMH9LP1nHGu2cdJa4IkNco6h5rwbHEclKIVFUtc494dvMumcGvkR68o7Kaf5EcfZTYB377ANO3/Ns8KUbpwXLOI20C3OC4DKZ97vtLX97vT/c7c+vZpozuPTIOtaiElIp4K1SkmsYBg4Ke06obN2Lnho0Z5gPiWKAsZzx4c98nFKg5LqqrFQpeGXZacMQEmTKPcx0+HnMLFaLbnJ9s5bXa/fMniiyrtr8NvPc7sqN/upx7hc/4tX5TDA/ZJXHOB0pJk+rJ6vMcYTkp1BcJm1HTyGxDbv7WOxHSMMUH18Y9fGsf/cf8g95+qsf5JZEuJ2WkFjHpJZsw96Bu/eBit0N65iQVKFqiQ+VNFy3CBxqZbkxygwknW2qjNlOIfmwTMtc7EKib3EVwDr2GsaZztSvo7v3iVxaYlb1xeRd2McJF5eKP/5LUYpSCZFBSzouqfhA6CO5RFnfIS6Xfv9AKlOtoO0SI4VU7CHdF29gvmcds9A6CRYsgHFuoFrQIFCAEQ2SQUOoK2xQW41GW+GMhl5qhFr2Q66wDaMcd7FumJHD0CsUXIqh5lrTwFvZ9lzpRkqlCIRTL3ws7saMA9cKTai4pQG5thK41UpxVDU0lRmaphr+suSSvhTZYKSn8185M0BsCY3klZY119ZK3tq64X3T9rY3LdUuc76lGGj8y6h33sVpnoZUXJaneGHdhyXk/16si/TdB/5jzehmcg8Ui5wx+JDX+xLr6XQ6/QIAAP//AwCXfW+uNgQAAA==

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTS2/cNhD+K8KcRZkvUaJuxjpFF27iRbJIi94ozigmLFMLiXISGPvfA2o3SNxbLwQx4DfzPYavEN0zQQe3p9O7F4ppgRJS2EqSS8O4YVwcRdvptuNNVSvBTV3/CyWEe/oOHTTae+EtMUWGmEZes14NniGSFVwgl7XOPd2XBbpXcKFCegmeqmn5TPMSpggd/B0iTl/zbBcqP04rVvM00j4uyUWfyXzY7+7ZX7eH48Ph8mqhJYOrgNBBzxVy6QdmOCqmB+9Zq5qaIdaNEo3vNZoLLMREc3RjteDTr/k4pUjJd7KSquJMWjiXgC65TLl3Cx2/nzKLzaK7XC+38nbtXuGFZuhk+dPMS7sbP4ab56Vfw4g3lzO55SmrPM3TieYUaPNkkzmOLoUpFtdJuzFQTFDCw6fiMLo0TPPzG6M+XfTv/4f8Y57+7hv5NRHupjUm6EBoCSW8d/4xRCr2d9ABFyRRtcQGKQzTLTrmamWZMcoMJLxtpIASdlNMIa7TuhT7mOjLvAmADv5w40IX6rezfwyJfFrnrOofk3fhME+4+lT88l/wileK8wxa02lNxUfCMJNPlPUd5/Xa7z8QaeQG2q3zTDEVB5ceiz/d8ggdWNd64ayzzhnvB6o5DRy5M7xBMmgItcQGtdVotOXeaNcLja4W/ZArUALluIttw5TwaBvnGSlEpt3gWK/QMGGUxMYZMTTqjY/Fw5hxzrdcEypmaUCmrXDMaqUYqto10gxNI4ffLLmmL3g2GOnl8lc2BgaxJTSCSS1qpq0VrLV1w/qm7W1vWqp95nxPc6TxN6PeBz9PyzSk4ro8xRvrPq4x//diW6SvIbJvW0Z3k3+iucgZuxDzel9jPZ/P5x8AAAD//wMAk4+m1jYEAAA=

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxU227jNhD9FYGvFRXeRIl6S50saqRJjLXRFn0bkaOYjUwZFJXsIsi/F5KTzWVRoC+CMCTnnDlzZp5IgAOShpwfj5cPGNJIcpL8EhJMaMo0ZXzH60bVDauKUiqmZf03yYm/wu+kIZWylluDVKJGqhwraSs7S51Dwxl3TJRqzgl3I2meCPjC4YO3WAzjHxhHPwTSkD99cMPjjA2+sP0wuSIOPa7DmCDYmczNenVFfz/f7G43p1sjjvPjwjvSkJZJx4TtqGZOUtVZS2tZldS5spK8sq1y+vTMh4QxQF+M7v4N3w0pYLKNKIQsGBWGPOfEQYKZcgsj7r4fZxaLRBdzPF/Cy2/zRB4wkkbkr2Ke0p3Z3p8dxnbyvTtbviQnxzgcMSaPixq32+yNBGcFK4QWjJGcXIPd+4DZ+iK77ecSwdZMoZPUYOeoMhyoUVJSJ0uohO6qSnQkJ1cYA/bvsl57G4dx6FL2InL2AWd7vroM0PY4Y3yBfkSSk/W4TRAc9EPAy29op3TKtYvTfLwaQvJhGqYxW4eEdxFezl/fr6YYMaRsA2mf/QbjnjTEQG05GDAA2toOS4Ydcww0qxxqp9Ep4SqnjHJaGWa1gpYrByVvuzlCcvLrrOF2shbH8Y3NYpK+XzhkL31a9R5D+iAjaQjjKJyskXaCa6pqBxRKaajWUnfIrakEf4XZQbzDRBrS1W3bMmtboQy3IAxI1zHpdGeEqCpQnSwrJbQuWQXWVZXgyskKLchOslqQnGzi4CabPrdaLg3YxOEftGmWijREs7KsLbSt0IrXYGpUXKtaG6yM6oApaVvgZQ1tyxmUzJpaWODagGpd2f1Q6TLc+YAXfjz28P0dbl3oQv5iAWregfp0/UuEAz4O8f7mZOPi5nJHcvJ1CvNGyNazRR59oN/0PNHXU5/8bh8RHLrrweHPPsJ5XLJlQq00bctKS23lHFXMKgraIu06KcqulBwX+14M9h5jNjsMfJin6key2212Hu3eJ7RpijO/vxYet9ts00Pqhnj4sEneFfZZgEJIzubOOHw4baOFo3auRqc5FYqXVBnDaW3KirZV3ZpW11jaWbHbKR2nlH1F5yPatFT84sUFc7VHe/+zGK8ueLEoZ7PXtqcttkj7v5bYc04OCOMU8bBs6+aJrEPAuCBfTKdRXIdr3/d+RDsEN5KmVlwVRtfqheF/36tUwStdPj8/P/8LAAD//wMAb1GgshsGAAA=

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUS2/bOBD+KwLPokJKFCUK2IPhtKiRpjESd3fRG0UOYyKyaFCU0yDwf19Qlmun6GFvwmhe32P4jnq5A9SgxX7/6QB9GFCKgp1COck5JhwTuqF1U5KG0IzzvMgp+YFSZO/gDTWoYkpRJQAXwAEzTUrcFkZhrUFQQjXJSxZ7yucBNe9I2kzDwSrI3PA3+MG6HjXoH9tr9xpnS5upzo06866DVT8E2au4zLfV8g5/Xaw3D+tT1gBDLM6sRg3SRcu1AIIZlCVmbcWx4DnBFFrFqlJKWdWnMtsH8L3sskG/XOZrF3oIqsmzvMgIzgU6pkjLIOPKrRxg87aPW0wU3cZ4OoWnz+YdHcCjJk/PZJ7a3ajO3uyGdrSdvgnSP0MwXu7g1fkXOMgOpWjv3R58sDBx8/CUXFaiJCNZznNCUIrupdraHpLVbfLQRcBS1YSBLrAAozETVGLBigLropRVzk1V5Qal6A58D91V13urvBucCclMefJhztL1wfajG4dk1Qd49jKc6j7LbgCUovXYdnbYPoLUbxv3OMZ//dhFLMvRe+hDspZhm3yRwxY1SMhaUSmkkJIrZaAkYIgmkpNKA9ccNMt1pZlgmjNBFGeypUzLkrYmRlCKHsawH8OZ/59XS2y83e1AXzbYTByvOxmM87uVhj5YY6M054zJUF03oUrmnsvOQh8+kIwaRCjkuqgBm5xyzGotsSwLgTkvuAGqRJXTE2HGPo+/eCLGaFaYsq55K1pKIDdVzUhlWqKVKZTQZQtVXpGqhlooQtqS0boVimigJdMRnXd6VOF3KxSTQI9jH68zWUXYr7bHPzm7MLL2LjjluiiY7eDpbQiw+5NqS7fbu8GGiN/M0n4f4N718e98/zNnc/HChUsM4h0k0+mJmkrWmhqXVOSY6aLENSE1NoSxkiopeFGhFN069QI+iQaTtp80OXvq4SlZeLW1AVQYfZz87wTqJOfn88lc+Mi+fdosnYfFfp/O0b8OkaRTs7MBPrwr34eYvnVDuII8Q3uCzpwXu7KThsPpqbIxyLWuQXOKc0ZLzISguBZlhduqbkXLayjVxa7JI2jrQYWp38aPcdrM7J98ufDBGqnCEI/nq1OTnWZ/zim/L3kl26/q0/Ar6WYrzZ0oiZZ9Oj2ck4P+17t5PB6P/wEAAP//AwD7D0aXKAYAAA==

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/jNhCG/4rAs6mQFEWJuqVOFzWy2RibdFv0NiJHDhGZNCgq2yDIf19QdhBnFz30Joz4zsczL/lCPOyRdOTycPj9CX2ayIokt4QEE4oyRRm/521Xs47xUqi6Ebz+h6yIu8Zn0pFGGsONRlqhQiotq2lfDYZai5ozbpmoZc4Ju4l0LwRcafHJGSzD9A3j5IInHfnLeRu+59rgSjOG2ZYxjLjxUwJvcjNfNutr+vlye3+7PZ6acMri0lnSEVv1ympkVGJdU9k3imolGOXYG9nUANC0R5nzCaOHsZzs43t9G5LHZDpRiqpkVGjyuiIWEuSWe5jw/vmQu1gQXeX4agkvn90LecJIOrF6g3lMd2FGd7Gf+tmN9mIMu53zu3Xwg9vNEVIuvCKHGA4Yk8MFzm/OQ3z+HHa7nI98gnFCsiL3GPfOw3j8cYUDzGO6C3NcyEz28b/OkI7AnAJZkYXkOC5li9Mw69GhT79ozwrf3hXbEdIQ4v7Dku6O7Df/A/0NmAfnsdhckY4wjsJWLdJBcEVla4FCXWmqVKUG5EY3gpMVWQefnJ/DPBUbn3B3ovahv8toHlxCk+aYZ/pbZbNtY7CzScX7gjkrWVkxlkVzOsyp+IrWRTQJ8xD3cT7l+0kilFhEn9yIv+BZzzGiT8UW0kPxB0wPpCMaWsNBgwZQxgxYMxyYZaBYY1FZhVYK21ippVVSM6Mk9FxaqHk/5AhZEcwmKxZfa2xQClFTJQWnUgPQvmUVBcaYwmFQCu0HuMXtmHVgWibRVlTjYKnUHKiWVUVtVUMj1NA0YjjjdDIEZ5n6uQn/nNCevPTlaO232S0+He/x0qeytkWrOBWS11RqzWmr64b2TdvrXrVYmzzZOvgpvIH8hrEPk0v5Eblx3u1h/PnI+2auMXocz7Zz40wMUxhScbJl8WFfX2efX7Fiseh35+m/izGugnnEWGRjgfNny3x9fX39AQAA//8DAMAt750MBQAA

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzS6Som2G3qOumXsSLtOiN5IxsIVpqQVGbBsb+94DaDRL31psw0DszfOadeSPRHZD05PZ4/OWEMS+kJnncQoIJTZmmjO9517esZ7zh1mgm5T+kJuMjfiU9MSoEHixSiRqpAtZSL4dAAdByxoGJVpWc7mUh/RtxYwN4GgM28/IJ0zLOkfTkrzHC/KXUdmMTpnmFJs0TPsQluxhKM38+3D3SP253+6fd5a8FlyJuRiA9Aek1WGRUYdtS5Y2mVgtGOfqgTOucM91FNsaMKbqpWeDzj/ow54g59KIRsmFUWHKuCbjsSsveLbj/eixdbIjuS7zewttn/0ZOmEgv6u8wL+luwjTe5Pk44Qmno0sLppswHw4uAqnJMc1HTHnEDcv20mlyeZxjdS12N40YM6nJ03O1m1we5nR4x+r5guDhfxA4YfKkJ5K1UhuDSkrprPaCIRgdtBY+OGYGL5AHZK1VxnLDuLSCWdlq0xlwzAZSk5dp9m76fdn4WcF8B8wILVChFUprGxjKDofWIAOntdddsCA7I1QHnXTWOW49mmB1KAb54MLrGLF6uCc9YRwFyA7pILimqgNHXSst1VrqAXmwRnBSk7s55jGu87pUDzHjS9r4kZ786qYFL+RuU3gdM4a8pgL1b12K7dIMa8jVDwdw1rBGMlZEaz6uufqIMCYMGQvefVqv+f4jEVpsors1JYy52rn8Wv3mltdCxXWBO1ueqkMYsGU4MGBOMwOoQSMoAQaUVaCVZUEr57kC13I/lAipCRbDVZvHmWfDgIhU29ZSZb2gvms1tQDAEGHwSr/jWD1NRedCxxSCpBYHoMpyR62SkoJsnRF6MEYMPyG5mo+zAhjwdNnWrQMN0CFoToXiLVXWctrZ1lBvOm+97rANpedHTBGnn0B9GEOal3nI1dW71Tt0H9dYLk61+fjLGOm/24zu5/AZU1Vm7MZYFuw61nNNDuiWNeFhO1j9G9mV7ar2290SupFc6Jo8Z5fyeryGpW2U7OT5fD5/AwAA//8DAD65h/X1BAAA

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUT2/cNhDFv4rAsyjzP0XdDLtFDTfNIjbaorcRZxQL0UoLito0MPzdC2o3SN1bb8JAb/j4mzd8ZTMciXXs9nT66UxzXlnN8riXlFCOC8eFfJZtZ0UnZKO0dVqrv1jNxkf6xjrmTYwyBuKaHHGDwvJeD5EjUpBColDWlJ7weWXdK4OxQTqPkZpl/Z3SOi4z69gf44zL13I2jE2clg2btEz0MK8Z5ljM/PZw98h/vT08fzxc/lppLeJmRNYx1L3DQIIbspab3jsenBJcUh+NtwDg24tsnDOlGaZmxS8/zsclz5RjpxqlG8FVYG81Q8hQLPew0vO3U3GxI7ov9Xov75/dKztTYp2qv8O8tLuJ03izbv1EZ5pOkFZKN3E5HmFGVrNTWk6U8kg7ljOlflnHXIjG6KFtpcQWvLEeW22V9qgFYSu8xYABnHGDitYO2LfBm8GgkgYdGdN7VrMd3DRBHpe5unq/m0aaM6vZx6fqMEEelnR8h/7pQvThfwAttlnHtLDaeU9Gaw3B9UoQehedU30E4YdekYwkbDA+SC+kDkoEbZ1vPYIIkdXsA8SXcabq4Z51TEhSqFvig5KOmxaBg9WBO6fdQDIGrySr2d0y53Helm2tHuZMn9N+X9axn2Fa6XLT2xRfxkwxb6lA+NOVMB7SglvM1Y8ASNGIRgtRRFs+bbn6RDgmipkKjue0Xfv9R6Kc2kV3W0o05+oA+aX6BdYX1rEAbZQQIAC4GAeyggaBApzwSA4doVHo0QSDzgQRnYFeGgQr+6FUWM2o5K3aIz5I25P1hg8oem6U7zkEDBwwDLYkJPbDO47Vx6noILbCEGoeaEBuggQejNYctQWv3OC9KrrvSK5hkaIARjpflnV34BBbQie5MtJyE4LkbbCe977tQ+9asrF4fqQ00/QvUB/GmJZ1GXJ1zVr1Dt2nbS4PTrXn7us487/3Gd0v8QulqswYxrns13WsbzU7EqxbouP+XnWv7FCWq3reny3lGi2Vq9lThpS307WsQ2N0q9/e3t7+AQAA//8DAI0J9d70BAAA

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTTW/cNhD9K8KcRZmkKErUzVin6MJNvEgWadEbxRnFhGVqQVFOAmP/e0DtBk5664UgBnwz72P4CsE+E/Rwezq9e6GQFigh+a0kudSMa8bFUXR9w3veVXXHjebiXyjB39N36KFVzglniNWkiSnkDRvq0TFEMoIL5LJRuaf9skD/CtZXSC/eUTUvnykufg7Qw98+4Pw1z7a+ctO8YhXnifZhSTa4TObDfnfP/ro9HB8Ol1cLLRlceYQesB40GuJMUdMwNbSaGS05EzQ41TbW2ra7wHxIFIOdqgWf3ubjnAIl18tK1hVn0sC5BLTJZsqDXej4/ZRZbBbd5Xq5lbdr/wovFKGX5U8zL+1u3ORvnpdh9RPeXM5kl6es8hTnE8XkafNkkzlNNvk5FNdJu8lTSFDCw6fiMNk0zvH5N6M+XfTv/4f8Y57+7hu5NRHu5jUk6EHUBkp4b92jD1Ts76AHLkhi3REbpdBMdWiZbWrDtK71SMKZVgooYTeH5MM6r0uxD4m+xE0A9PCHnRa6UL+N7tEncmmNWdU/Ou/CIc64ulS8+S94xaua8wxa02lNxUdCH8klyvqOcb32+w9EarmBdmuMFFJxsOmx+NMuj9CDsZ0T1lhjrXZupIbTyJFbzVskjZpQSWxRGYVaGe60soNQaBsxjLkCJVCOu9g2bFCmUUYaJlupmHLcMYOETKtWtUrJpu2ytDcfi4cp46zruCKsmaERmTLCMqPqmmHd2FbqsW3l+Isl1/QFzwYjvVz+ysZAI3aEWjCpRMOUMYJ1pmnZ0HaDGXRHjcuc7ykGmn4x6r13cV7mMRXX5Sl+s+7jGvJ/L7ZF+uoD+7ZldDe7J4pFztj6kNf7Guv5fD7/AAAA//8DADYi/1M2BAAA

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRUwW7cNhD9FWHOokxKFCXqZqwTdOGmXiSLtOhtRI5iwjK1ICknhrH/XlC7ReJT0QtBjPiGb9571Bt4fCYY4PZ0+vBCPkUoIbmtVPNaMa4YF0fRDy0feF81Xd8o0fwNJbh7eoUBOmmMMJpYQ4qYtLxlYzMZZi1pwYXldStzT/wWYXgDdJWlF2eoWuJXCtEtHgb403m7fM93o6vMvKy2CstMex8TepPJ/LHf3bPfbw/Hh8PlVKSYwZWzMIBtRmU1cSapbZkcO8W0qjkTNBrZtYjY9ReY84mCx7mK9unn/XZJnpIZ6qpuKs5qDecSLCbMlEeMdHw9ZRabRHe5Xm7lbTu8wQsFGOryXzEv7W7M7G6e47i62d5c1oTxKW7rhCYt4RVKOIXlRCE52vS5jZGex/n1iPHp4+VM3sYPP8isiexuWX2CAUSjoIRNoHnG5BZfXDnuZkc+bR9TcD4681+9Gijh4UtxmDFNS3h+58eXi8z7/6HyJzSPzlOxv4MBuKDaNj2xqRaKyd4iw7bRTKlGTSSM7moBJewWn5xflzUWe5/oW9hGggE+4hzpwu82mEeXyKQ15Dn/UjlXh7DY1aTip5eCV7xqOM+gNZ3WVHwm6wKZRHmIY1iv/b6+h9Sq3kC7NQTyqThgeix+w/gIA2jsjUCNGlEZM1HLaeKWo+KdJWUVWVnbzkotrZKaGyVxFNJiK8YpV6AEytEptrRKO8mubg3rOimYxNYw5NgzoaVRvBsnqd7rWDzMGYem55JswzRNlkktkGnZNMw2LXa1mrqunn6R5JoHwbPAll4u725joKztySrBailaJrUWrNdtx8auH/WoempN5nxPwdP8i1CfnAlLXKZUXBNSvJPu8+rzv6PY0vLdefZj8+huMU8UiuwxOp+fytXW8/l8/gcAAP//AwCpOTG6ggQAAA==

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTwW7bOBD9FYFnUSEpihJ1C5xd1Ei7MdqgLXobcUY1UYUyKCptEfjfF5RdpN3b3ohHvpk37w1fWIAnYj27PZ3+eqaQFlay5DdICWW4MFzIR9n1jehFV9VdrVujvrCS+Xv6yXrWaueks8RrMsQ1ioYP9eg4IlkpJArV6FwTvi6sf2HgK6Rn76ial48UFz8H1rNPPuD8PfcGX7lpXrGK80T7sCQILov5Z7+7529vD48Ph8urhZZMrjyynmE9GLQkuKam4XpoDbdGCS5pcLptAKDtLjQfEsUAU7Xgt9f+OKdAyfWqUnUluLLsXDKEBFnyAAs9/jxlFZtFdxkvN3g79i/smSLrVfnLzEu5Gzf5Gzc/PUHAm9EHvxxZyU5xPlFMnjY7tgmnCZKfQ3Ftsps8hcRK9vChOEyQxjk+/eHRh8vo+/8x+TtwRx+o2N+xnglJCuuO+Kik4bpD4NDUlhtTm5Gks62SrGS7OSQf1nldin1I9DVuKlnP/oZpoYu+2+iOPpFLa8zSP5ucNf3waTdjBgQr2SHOuLpUvNotRSWqWuTLhzWd1lS8J/SRXKI802Ncr+X/Q1FGbaTdGiOFVBwgHYs3sBxZzyx0ToIFC2CcG6kRNAoUYESLZNAQaoUtaqvRaCuc0TBIjdDIYcxI1p3TLbaFasmJsQXiaCxyTfXAO20sh1aia5oRNGSJr7YWD1PmgeuEJqy5pRG5thK41XXNsW6gVWZsWzX+Zsk1cSmy30jPl6+xKTCIHaGRXGnZcG2t5J1tWj603WAH01HjsuZ7ioGm34x6512cl3lMxXVhij+se7+G/L2LbXm++8B/bJHdze4bxSJHDj7kbb6mfD6fz/8CAAD//wMA1TddHSUEAAA=

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -293,7 +293,7 @@
<h3>Scene Notes</h3>
@if (!Model.Notes.Any())
{
<p class="muted">No working notes yet.</p>
<p class="muted">No working notes yet. Capture drafting thoughts, research reminders, or revision questions as they come up.</p>
}
else
{
@ -389,7 +389,7 @@
<h3>Attachments / Research</h3>
@if (!Model.Attachments.Any())
{
<p class="muted">No scene references yet.</p>
<p class="muted">No scene references yet. Add images, links, floorplans, research notes, or files that help you write this scene.</p>
}
else
{
@ -404,6 +404,9 @@
: hasFile && !System.IO.Path.IsPathRooted(attachment.FilePath!)
? "/" + attachment.FilePath!.TrimStart('/', '\\')
: null;
var fileExtension = hasFile ? System.IO.Path.GetExtension(attachment.FilePath!) : string.Empty;
var isImageAttachment = !string.IsNullOrWhiteSpace(fileHref)
&& new[] { ".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp" }.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
<details class="writer-mini-card attachment-card">
<summary class="attachment-summary">
<span class="attachment-kind">@(hasFile ? "File" : "Link")</span>
@ -411,24 +414,40 @@
<strong>@attachment.Title</strong>
</summary>
<div class="attachment-card-body">
@if (!string.IsNullOrWhiteSpace(attachment.Notes))
{
<p>@attachment.Notes</p>
}
@if (hasFile)
{
<p class="muted">@System.IO.Path.GetFileName(attachment.FilePath)</p>
}
<div class="button-row compact-buttons">
@if (!string.IsNullOrWhiteSpace(fileHref))
<div class="attachment-preview-row">
@if (isImageAttachment)
{
<a class="btn btn-outline-secondary btn-sm" href="@fileHref" target="_blank" rel="noopener">Open</a>
<a class="btn btn-outline-secondary btn-sm" href="@fileHref" download>Download</a>
<a class="attachment-thumb" href="@fileHref" target="_blank" rel="noopener" aria-label="Open @attachment.Title image">
<img src="@fileHref" alt="@attachment.Title preview" loading="lazy" />
</a>
}
@if (!string.IsNullOrWhiteSpace(attachment.ExternalUrl))
else
{
<a class="btn btn-outline-secondary btn-sm" href="@attachment.ExternalUrl" target="_blank" rel="noopener">Open link</a>
<div class="attachment-thumb attachment-thumb-fallback" aria-hidden="true">
<span>@(hasFile ? "File" : "Link")</span>
</div>
}
<div class="attachment-preview-copy">
@if (!string.IsNullOrWhiteSpace(attachment.Notes))
{
<p>@attachment.Notes</p>
}
@if (hasFile)
{
<p class="muted">@System.IO.Path.GetFileName(attachment.FilePath)</p>
}
<div class="button-row compact-buttons">
@if (!string.IsNullOrWhiteSpace(fileHref))
{
<a class="btn btn-outline-secondary btn-sm" href="@fileHref" target="_blank" rel="noopener">Open</a>
<a class="btn btn-outline-secondary btn-sm" href="@fileHref" download>Download</a>
}
@if (!string.IsNullOrWhiteSpace(attachment.ExternalUrl))
{
<a class="btn btn-outline-secondary btn-sm" href="@attachment.ExternalUrl" target="_blank" rel="noopener">Open link</a>
}
</div>
</div>
</div>
</div>
<form asp-controller="Scenes" asp-action="SaveAttachment" method="post" enctype="multipart/form-data" class="writer-edit-form">
@ -498,7 +517,7 @@
</div>
@if (!Model.Warnings.Any())
{
<p class="muted">No active warnings for this scene.</p>
<p class="muted">No active warnings for this scene. Run validation again after major story changes.</p>
}
else
{
@ -540,7 +559,7 @@
<p class="eyebrow">This scene depends on</p>
@if (!Model.DependenciesThisSceneNeeds.Any())
{
<p class="muted">No dependencies yet.</p>
<p class="muted">No dependencies yet. Add one when this scene needs another moment to happen first.</p>
}
else
{
@ -565,7 +584,7 @@
<p class="eyebrow">Scenes depending on this</p>
@if (!Model.DependenciesNeedingThisScene.Any())
{
<p class="muted">No dependent scenes yet.</p>
<p class="muted">No dependent scenes yet. Later scenes that rely on this one will appear here.</p>
}
else
{
@ -663,7 +682,7 @@
<h3>Plot Thread Events</h3>
@if (!Model.ThreadEvents.Any())
{
<p class="muted">No plot thread events attached to this scene yet.</p>
<p class="muted">No plot thread events attached to this scene yet. Add clues, reveals, promises, payoffs, or reversals when the scene touches a thread.</p>
}
else
{
@ -739,7 +758,7 @@
<h3>Story Assets</h3>
@if (!Model.AssetEvents.Any())
{
<p class="muted">No asset events attached to this scene yet.</p>
<p class="muted">No asset events attached to this scene yet. Add one when an object, clue, secret, or important item changes here.</p>
}
else
{
@ -944,7 +963,7 @@
<h3>Characters</h3>
@if (!Model.SceneCharacters.Any())
{
<p class="muted">No characters attached to this scene yet.</p>
<p class="muted">No characters attached to this scene yet. Add the people who appear, are mentioned, or meaningfully affect the scene.</p>
}
else
{

View File

@ -74,7 +74,7 @@
</div>
@if (!Model.SearchResults.Any())
{
<p class="muted">No matching story bible entries.</p>
<p class="muted">No matching story bible entries. Try a character name, location, asset, plot thread, or scene title.</p>
}
else
{

View File

@ -509,7 +509,7 @@
{
<section class="empty-panel">
<h2>No timeline yet</h2>
<p>Add books, chapters and scenes to see them arranged here in narrative order.</p>
<p>Add a book, then chapters and scenes, and PlotLine will arrange them here as your narrative spine.</p>
</section>
}
else

View File

@ -2,7 +2,7 @@
@if (!Model.Any())
{
<p class="muted">Nothing in this queue.</p>
<p class="muted">Nothing needs your attention here. When scenes are ready for this stage, they will appear in this queue.</p>
}
else
{

View File

@ -346,3 +346,545 @@ a:focus-visible {
--bs-table-color: var(--plotline-text);
--bs-table-border-color: rgba(84, 68, 48, 0.12);
}
/* Phase 1V polish: cohesive, writer-focused surfaces without changing layout contracts. */
.page-heading,
.workspace-heading {
row-gap: 0.8rem;
}
.page-heading h1,
.workspace-heading h1 {
color: #211915;
}
.lead-text {
line-height: 1.55;
}
.btn-sm {
padding: 0.28rem 0.72rem;
font-size: 0.8rem;
}
.button-row {
gap: 0.55rem;
}
.button-row .btn,
.story-bible-actions a,
.timeline-preset-panel .btn,
.timeline-filter-actions .btn {
white-space: nowrap;
}
.badge,
.soft-count,
.attachment-kind,
.preset-chip,
.story-bible-meta span {
border-radius: 999px;
font-weight: 780;
letter-spacing: 0.015em;
}
.badge.text-bg-light,
.story-bible-meta span,
.soft-count {
border: 1px solid rgba(84, 68, 48, 0.13);
background: rgba(255, 250, 241, 0.78) !important;
color: var(--plotline-text-muted) !important;
}
.badge.text-bg-warning,
.warning-placeholder.active {
border: 1px solid rgba(184, 118, 43, 0.28);
background: #fbecd3 !important;
color: #7b4b13 !important;
}
.badge.text-bg-success {
background: rgba(77, 118, 84, 0.13) !important;
color: #315936 !important;
}
.empty-panel,
.future-lane-placeholder,
.inspector-empty {
position: relative;
overflow: hidden;
}
.empty-panel::before,
.future-lane-placeholder::before,
.inspector-empty::before {
content: "";
position: absolute;
inset: 0 auto 0 0;
width: 4px;
background: linear-gradient(180deg, var(--plotline-accent), var(--plotline-secondary));
opacity: 0.42;
}
.timeline-workspace {
padding: 0.35rem;
}
.timeline-shell {
border-color: rgba(84, 68, 48, 0.14);
background:
linear-gradient(90deg, rgba(84, 68, 48, 0.05) 1px, transparent 1px) 0 0 / calc(var(--timeline-scene-width) + var(--timeline-grid-gap)) 100%,
linear-gradient(180deg, rgba(255, 252, 246, 0.94), rgba(244, 235, 221, 0.86));
}
.timeline-project-title,
.timeline-book-title {
border: 1px solid rgba(45, 33, 23, 0.12);
background:
linear-gradient(135deg, rgba(49, 95, 103, 0.96), rgba(89, 55, 31, 0.94));
box-shadow: 8px 0 24px rgba(62, 45, 28, 0.1);
}
.timeline-book {
padding: 0.15rem;
}
.timeline-book-title {
min-height: 58px;
align-content: center;
}
.timeline-chapter {
border: 1px solid rgba(84, 68, 48, 0.13);
background:
linear-gradient(180deg, rgba(255, 252, 246, 0.78), rgba(242, 226, 207, 0.42));
outline: 0;
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.6);
}
.timeline-chapter-title {
min-height: 52px;
border-bottom: 1px solid rgba(84, 68, 48, 0.13);
border-radius: var(--plotline-radius-sm) var(--plotline-radius-sm) 0 0;
backdrop-filter: blur(10px);
}
.timeline-chapter-title strong,
.timeline-book-title strong {
font-size: 0.96rem;
}
.timeline-scenes {
padding: 0.65rem;
}
.timeline-scene-card,
.timeline-empty-scene {
border-radius: 11px;
}
.timeline-scene-card {
position: relative;
min-height: 176px;
border-color: rgba(84, 68, 48, 0.15);
background:
linear-gradient(180deg, rgba(255, 253, 248, 0.98), rgba(251, 243, 232, 0.95));
box-shadow: 0 10px 22px rgba(62, 45, 28, 0.08);
}
.timeline-scene-card::after {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
pointer-events: none;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85);
}
.timeline-scene-card strong {
color: #221a15;
font-size: 0.98rem;
line-height: 1.2;
}
.scene-summary {
color: var(--plotline-text-muted);
line-height: 1.38;
}
.location-pill,
.scene-pov-label,
.metric-mini-summary,
.dependency-placeholder,
.warning-placeholder {
border: 1px solid rgba(84, 68, 48, 0.13);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.68);
}
.timeline-placeholder-scene,
.timeline-placeholder-cell {
border-color: rgba(84, 68, 48, 0.18);
color: rgba(84, 68, 48, 0.58);
background:
repeating-linear-gradient(-45deg, rgba(122, 77, 44, 0.06) 0 8px, rgba(255, 255, 255, 0.18) 8px 16px),
rgba(255, 252, 246, 0.52);
}
.timeline-scene-card:hover,
.timeline-scene-card.selected,
.timeline-scene-card.focus-match,
.timeline-scene-card.keyboard-focus,
.timeline-scene-card.search-hit {
z-index: 3;
}
.timeline-scene-card.selected::before,
.timeline-scene-card.focus-match::before,
.timeline-scene-card.keyboard-focus::before,
.timeline-scene-card.search-hit::before {
content: "";
position: absolute;
left: 0.65rem;
right: 0.65rem;
top: 0;
height: 3px;
border-radius: 999px;
background: linear-gradient(90deg, var(--plotline-accent), var(--plotline-secondary));
}
.timeline-section-header,
.lane-board-heading,
.pacing-heading {
border: 1px solid rgba(84, 68, 48, 0.13);
backdrop-filter: blur(10px);
}
.plot-lane-board,
.asset-lane-board,
.character-lane-board {
border-top-color: rgba(84, 68, 48, 0.12);
}
.plot-lane-label,
.asset-lane-label,
.character-lane-label {
border-radius: 10px;
background: rgba(255, 252, 246, 0.94);
box-shadow: 6px 0 18px rgba(62, 45, 28, 0.06);
}
.plot-lane-slot,
.asset-lane-slot,
.character-lane-slot {
min-height: 50px;
border-radius: 10px;
}
.thread-marker,
.asset-marker,
.character-marker,
.character-appearance-pill {
min-height: 24px;
font-size: 0.7rem;
}
.thread-marker {
border-color: color-mix(in srgb, var(--plot-colour), #241f1b 18%);
}
.asset-marker {
border-radius: 8px;
background: #eeeaf8;
}
.character-marker {
background: #fff4d9;
}
.drag-chip,
[draggable="true"] {
transition: transform 0.12s ease, box-shadow 0.12s ease, opacity 0.12s ease;
}
.drag-chip:hover,
[draggable="true"]:hover {
transform: translateY(-1px);
}
.is-dragging {
opacity: 0.55;
box-shadow: 0 0 0 3px rgba(49, 95, 103, 0.14);
}
.drop-target-active {
outline-color: rgba(49, 95, 103, 0.34);
background-color: rgba(223, 236, 239, 0.55);
}
.timeline-control-panel,
.timeline-drag-palette,
.drag-drop-panel {
background: rgba(255, 251, 243, 0.82);
backdrop-filter: blur(10px);
}
.timeline-filter-drawer,
.timeline-control-group {
border-color: rgba(84, 68, 48, 0.13);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.75);
}
.scene-inspector-panel {
border-color: rgba(84, 68, 48, 0.14);
box-shadow: -14px 0 36px rgba(62, 45, 28, 0.07);
}
.inspector-header {
border-bottom: 1px solid rgba(84, 68, 48, 0.12);
margin-bottom: 0.75rem;
padding-bottom: 0.7rem;
}
.inspector-header h2,
.inspector-empty h2 {
color: #211915;
}
.scene-inspector-root {
display: grid;
gap: 0.85rem;
}
.inspector-section {
padding: 0.95rem;
}
.inspector-section h3 {
color: #211915;
font-size: 1.02rem;
}
.scene-overview-card {
border: 1px solid rgba(122, 77, 44, 0.18);
background:
linear-gradient(135deg, rgba(255, 250, 241, 0.98), rgba(242, 226, 207, 0.82));
}
.inspector-quick-nav {
top: 0.35rem;
box-shadow: 0 10px 26px rgba(62, 45, 28, 0.08);
}
.inspector-nav-links {
max-height: 6.2rem;
overflow: auto;
}
.inspector-nav-links a {
background: rgba(255, 253, 248, 0.84);
}
.inspector-accordion-toggle {
min-height: 2.25rem;
padding-inline: 0.2rem;
}
.writer-mini-card {
border-color: rgba(84, 68, 48, 0.13);
background: rgba(255, 253, 248, 0.78);
}
.writer-mini-card[open] {
box-shadow: 0 10px 24px rgba(62, 45, 28, 0.07);
}
.writer-add-form,
.writer-edit-form {
gap: 0.5rem;
}
.attachment-card-list {
gap: 0.65rem;
}
.attachment-summary {
align-items: center;
}
.attachment-kind {
display: inline-flex;
align-items: center;
border: 1px solid rgba(49, 95, 103, 0.18);
padding: 2px 8px;
background: var(--plotline-secondary-soft);
color: #284f56;
font-size: 0.72rem;
text-transform: uppercase;
}
.attachment-preview-row {
display: grid;
grid-template-columns: 96px minmax(0, 1fr);
gap: 0.75rem;
align-items: start;
}
.attachment-thumb {
display: flex;
align-items: center;
justify-content: center;
width: 96px;
aspect-ratio: 4 / 3;
overflow: hidden;
border: 1px solid rgba(84, 68, 48, 0.14);
border-radius: 10px;
background: rgba(255, 250, 241, 0.88);
text-decoration: none;
}
.attachment-thumb img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.18s ease;
}
.attachment-thumb:hover img {
transform: scale(1.04);
}
.attachment-thumb-fallback span {
color: var(--plotline-text-muted);
font-size: 0.76rem;
font-weight: 850;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.attachment-preview-copy {
display: grid;
gap: 0.45rem;
min-width: 0;
}
.attachment-preview-copy p {
margin: 0;
}
.attachment-add-card summary {
color: var(--plotline-accent-dark);
}
.story-bible-section,
.writer-dashboard-panel {
border-color: rgba(84, 68, 48, 0.14);
background: rgba(255, 251, 243, 0.8);
}
.writer-dashboard-panel:first-child {
border-color: rgba(49, 95, 103, 0.22);
background:
linear-gradient(135deg, rgba(223, 236, 239, 0.56), rgba(255, 251, 243, 0.9));
box-shadow: 0 18px 38px rgba(49, 95, 103, 0.09);
}
.writer-queue-list {
display: grid;
gap: 0.75rem;
}
.writer-queue-card {
border-color: rgba(84, 68, 48, 0.13);
background: rgba(255, 253, 248, 0.86);
}
.writer-dashboard-panel:first-child .writer-queue-card:first-child {
border-left: 4px solid var(--plotline-secondary);
}
.writer-queue-card h3 {
line-height: 1.25;
}
.story-bible-nav {
background: rgba(255, 251, 243, 0.78);
border: 1px solid rgba(84, 68, 48, 0.12);
border-radius: var(--plotline-radius);
padding: 0.45rem;
}
.story-bible-card {
background: rgba(255, 253, 248, 0.9);
}
.story-bible-card h3 {
color: #211915;
}
.story-bible-card-title {
gap: 0.8rem;
}
.story-bible-facts {
border-top: 1px solid rgba(84, 68, 48, 0.1);
padding-top: 0.65rem;
}
.story-bible-actions a {
border-color: rgba(122, 77, 44, 0.2);
background: rgba(255, 250, 241, 0.75);
}
.story-bible-actions a:hover {
background: rgba(122, 77, 44, 0.1);
}
.plotline-confirm-modal .modal-title {
font-family: Georgia, "Times New Roman", serif;
}
.plotline-confirm-modal .modal-body {
color: var(--plotline-text-muted);
line-height: 1.55;
}
@media (max-width: 1200px) {
.timeline-filter-grid {
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}
.timeline-control-panel {
align-items: stretch;
}
}
@media (max-width: 760px) {
.workspace-heading,
.page-heading,
.context-header {
align-items: stretch;
flex-direction: column;
}
.button-row {
align-items: stretch;
}
.button-row .btn,
.button-row form {
width: 100%;
}
.attachment-preview-row {
grid-template-columns: 1fr;
}
.attachment-thumb {
width: 100%;
max-width: 260px;
}
.inspector-nav-links {
max-height: 8.5rem;
}
}