除了设置页,还有哪几页要一起换成新的商品卡?
@@ -4807,7 +4995,7 @@ body { margin: 0; }
-
Amount Slider · 滚动数值、光点矩阵与磁吸刻度
+
Amount Slider · 可编辑数值与滑动同步,无刻度点
@@ -4815,20 +5003,11 @@ body { margin: 0; }
版面密度调到哪一档?
-
@@ -5630,7 +5817,6 @@ body { margin: 0; }
-
-
-
+
\ No newline at end of file
diff --git a/docs/design/chat-panel-scene.html b/docs/design/chat-panel-scene.html
index 35f560ebb5..d1ed9fab20 100644
--- a/docs/design/chat-panel-scene.html
+++ b/docs/design/chat-panel-scene.html
@@ -28,7 +28,7 @@
@font-face {
font-family: "JiduMono Pro";
src: url("data:font/otf;base64,T1RUTwALAIAAAwAwQ0ZGIEYb4OwAAA7QAACcykdERUYHFwcPAACrnAAAAEZHU1VCaRJebgAAq+QAAAwaT1MvMoWBAKwAAAXcAAAAYGNtYXDMQeEmAAAJgAAABTBoZWFkHjbaKwAAAMQAAAA2aGhlYQZLAUAAAAW4AAAAJGhtdHhmO2JEAAAA/AAABLxtYXhwAlxQAAAAALwAAAAGbmFtZQ8ar2EAAAY8AAADRHBvc3T/OwA8AAAOsAAAACAAAFAAAlwAAAABAAAAAQAAEVE/118PPPUAAwPoAAAAAN48yz4AAAAA3jzLPv/d/zICyQOZAAAABwACAAAAAAAAAmwAPAJsAAAAAAAAABUAWAAyAE4AXQBnADIATgBWADoATABTAHYAOgBOADIAXQAyADIAWAA5ACgASQATABMAEwATAEIAQwA0AFcAQgBMADQARABcAFwANABZAGoAagBqAGAASABcADkAQgA0AFYAXwBCAFoAOwAbAEEAOwBaAFQAFQAVABUAFQAVABUAFQAVABUACwALADIAMgAyADIAMgARAE4AEQBdAF0AXQBdAF0AXQBdAF0AXQAyADIAMgAyABAATgBJAFYAVgBWAFYAVgBWAFYAVgBWADoATABTAHYAdgB2AHYANABOAE4ATgBOAE4AMgAyADIAMgAyADIAMgAYADIAKABYAFgAWABYADkAOQA5ADkAOQAoACgAKAAoAEkASQBJAEkASQBJAEkASQBJAEkAEwATABMAEwATABMAEwATAEIAQgBCAEMANABXAEMANABXAEMANABXAEMANABXAEMANABXAEMANABXAEMANABXAEMANABXAEMANABXACwALABMAEwATABMAEwANQA0ACoARABEAEQARABEAEQARABEAEQANAA0ADQANAAT/90AagBqAGoAagBqAGoAagBjAGoAagBqAGoAagBqAGAAYABgAGAAYABcAFwAXABcAFwAOQA5ADkAOQA5ADkAOQA5ADkAHABCAFYAVgBWAF8AXwBfAF8AXwBOAEIAQgBCAEIAWgBaAFoAWgBaAFoAWgBaAFoAWgAbABsAGwAbADsAWgA7AFoAOwBaADsAWgBUAFQAVACWAJcAPgBlAEkARgAnAEcAPgA8AEYAPgA+ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACoAKgAqACoAKgAqACoAKgAqACoAKgAmACYAJgAmACYAJgAmACYAJgAmACYAIwAjACMAIwAjACMAIwAjACMAIwAjACYAJgAmACYAJgAmACYAJgAmACYAJgD3APYA9wD0ADcA9wD3AFgAWgA3APcAqQBdAF0AOgENAQ0AgACAAMUAdgBiAHYAowCAAFMAQwBDAQsBCwCYAJgAyABdAGIAdgDAAIAAUwBDAEMARQD2AHwAfwB8AOYA5gBKAFoAswDHAEoAWgCzAMcAmAEAADIAMAA+ACQATwAzAGYAHwCOAFUAUQBOAE4ASQAtADkAHQA8AAgAIwBOADQAFgA0ABAApAC6ALEAngCMALgAqgCpAKkAqQCqALwA1QDEALgApwDLAMIAwwDBAMEAwgC8ANUAxAC4AKcAywDCAMMAwQDBAMIApAC6ALEAngCMALgAqgCpAKkAqQCqAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAjADcARwAhAPcATwBPAFcATwBaAFoAXwBfAF8AXgBPAFIAUgBcADcA9wBPAE8AVwBPAFoAWgBfAF8AXwBeAE8AUgBSAFwAJgAsADUAKgAxACsAMwAbACQAIgBQAEcAUAAiAHQAPAB0ACMAIgAYABQAFAAUABgAQQAPAEEAIwAaAE4AIgCKAIoAIgBcADIAXABEADkAkABOAE4ANwA3ACIAawBDADcAZABDADUANQA1AEEALABOAFMApwD0AKIBGAC2AJEAkQCsAMIApQCtAPEAiQAAAAEAAAOi/y4AAAJs/93/owLJAAEAAAAAAAAAAAAAAAAAAAACAAQCbAGQAAUABAKKAlgAAABLAooCWAAAAV4APAEeAAAAAAUAAAAAAAAAgAAARwAAIHMAAAAAAAAAAENPVEYAwAANKwsDov8uAAADogDSAAAAEwAAAAAB/gK8AAAAIAADAAAAEwDqAAEAAAAAAAEAEQAAAAEAAAAAAAIABwARAAEAAAAAAAQAFQAYAAEAAAAAAAUAGAAtAAEAAAAAAAYAEwBFAAMAAQQJAAAAbgBYAAMAAQQJAAEAIgDGAAMAAQQJAAIADgDoAAMAAQQJAAMAPAD2AAMAAQQJAAQAKgEyAAMAAQQJAAUAMAFcAAMAAQQJAAYAJgGMAAMAAQQJAAgAHAGyAAMAAQQJAAkAFAHOAAMAAQQJAAsAKgHiAAMAAQQJAAwAKgHiAAMAAQQJAA4ANAIMAAMAAQQJABAAGgJAAAMAAQQJABEADgDoSmlkdSBNb25vIFBybyAxLjBSZWd1bGFySmlkdSBNb25vIFBybyBSZWd1bGFyVmVyc2lvbiAxLjAwMDtGRUFLaXQgMS4wSmlkdU1vbm9Qcm8tUmVndWxhcgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADIAMAAgAEMAbwBUAHkAcABlACAARgBvAHUAbgBkAHIAeQAuACAAQQBsAGwAIABSAGkAZwBoAHQAcwAgAFIAZQBzAGUAcgB2AGUAZAAuAEoAaQBkAHUAIABNAG8AbgBvACAAUAByAG8AIAAxAC4AMABSAGUAZwB1AGwAYQByADEALgAwADAAMAA7AEMATwBUAEYAOwBKAGkAZAB1AE0AbwBuAG8AUAByAG8ALQBSAGUAZwB1AGwAYQByAEoAaQBkAHUAIABNAG8AbgBvACAAUAByAG8AIABSAGUAZwB1AGwAYQByAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADAAOwBGAEUAQQBLAGkAdAAgADEALgAwAEoAaQBkAHUATQBvAG4AbwBQAHIAbwAtAFIAZQBnAHUAbABhAHIAQwBvAFQAeQBwAGUAIABGAG8AdQBuAGQAcgB5AE0AYQByAGsAIABCAGwAbwBvAG0AdwB3AHcALgBjAG8AdAB5AHAAZQBmAG8AdQBuAGQAcgB5AC4AYwBvAG0AdwB3AHcALgBjAG8AdAB5AHAAZQBmAG8AdQBuAGQAcgB5AC4AYwBvAG0ALwBlAHUAbABhAEoAaQBkAHUAIABNAG8AbgBvACAAUAByAG8AAAACAAAAAwAAABQAAwABAAAAFAAEBRwAAACiAIAABgAiAA0ALwA3AEAASgBRAFoAYQBmAHkAfgC0AUgBfgGSAf0CGwLHAt0DlAOpA7wDwA4/HoUe8yAUIBogHiAiICYgMCA6IEQgUSBwIHkghyCJIKMgpiCsILogvSC/IRYhIiFTIVkhXiGZIbciAiIFIg8iEiIaIh4iKyJIImAiZSLFJaElryWzJbclwSXKJf4mLiarJxMnFSeGJ4gnkCeSJ6ErC///AAAADQAgADAAOABBAEsAUgBbAGIAZwB6AKAAtgFKAZIB/AIYAsYC2AOUA6kDvAPADj8egB7yIBMgGCAcICAgJiAwIDkgRCBRIHAgdCCAIIggoyCmIKwguSC9IL8hFiEiIVMhVSFbIZAhtiICIgUiDyIRIhoiHiIrIkgiYCJkIsUloCWvJbIltiXAJcol/SYuJqonEycVJ4AnhyeKJ5EnoSsF////9QAAAPIAAP/D/8T/xQAA/8H/wgAAAAAAAAAAAB4AAAAA/40AAP5e/kr+OP4182wAAAAA4WwAAAAAAADhQ+Ht4V7hoOEh4WkAAOE44TnhDuER4QMAAOD14OvhNuCE4JPglOCTAADge+AZ4BHgCQAA4ADf99/s37rfnAAA3zHcndyNAAAAAAAA3HHcQtwZ257bN9s22a/ZsNm72bzamQAAAAEAAACgAAAAvAAAAAAAAADGAAAAAADOANYA/gIiAAACiAKKAAACjgAAAAAAAAAAAAACjgKYAAACmAKcAqAAAAAAAAAAAAAAAAACmAAAAAAAAAAAAAACmAAAAAAAAAAAAAAAAAAAAowAAAAAAAAAAAKWAAAAAAAAAAAAAAKOAAAAAAAAAooCjAKOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ6AAAAAwFqAZ0BcwGuAhwBoAGeAXgBeQFxAfcBZgF+AWUBdgErASwBZwFoAf4B+wH9AWwBnwF8AXcBfQIFAY4CUAAgAD0BegF0AXsCAwJbAWsBrAG0Aa0BtQF1AaMCTgGkASABlQIEAk0BpQJYAacCAQHbAdwCUQGiAW4CWQHaASEBlgHnAeUB6AFtAEIAPgBAAEYAQQBFAEcASwBXAFEAVABVAGYAYQBjAGQATgB2AHsAdwB5AH8AegH5AH4AkgCOAJAAkQCcAIEBAgCvAKMAqQC7AKwAuAC+AMIAzgDIAMsAzADdANgA2gDbAMUA7gDzAO8A8QD3APIB+gD2AQsBBwEJAQoBFQD5ARkAQwCyAD8ApgBEALUASQDAAEwAwwBNAMQASgDBAE8AxgBQAMcAWADPAFIAyQBWAM0AWQDQAFMAygBbANIAWgDRAF0A1ABcANMAXwDWAF4A1QBpAOEAZwDfAGIA2QBoAOAAZQDXAGAA3gBqAOIAbADjAOQAbQDlAG8A5wBuAOYAcADoAHEA6QByAOoAdADsAHMA6wB1AO0AfQD1AHgA8AB8APQAgAD4AIIA+gCEAPwAgwD7AIUA/QCIAQAAhwD/AIYA/gCMAQUAiwEEAIoBAwCXARAAlAENAI8BCACWAQ8AkwEMAJUBDgCZARIAnQEXAJ4AoAEdAKIBHwChAR4ASAC/AIkBAQCNAQYCVQJPAlYCWgJXAlIAmwEUAJgBEQCaARMAnwEbAZMBlAGPAZEBkgGQAagBqQFwAd0B3gHfAeAB4gHjAbMBtgIkAh4CIAIiAiYCJwIlAh8CIQIjAhkB+AIAAf8CQQJEAkICRQJDAkYCOAIzAjYCNAI5AjUCNwADAAAAAAAA/zgAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAgABAQEUSmlkdU1vbm9Qcm8tUmVndWxhcgABAQEr+A8A+ZQB+ZUC+BgE+3oMA8cMBGj7Yvld+i0FHCG8DxwkThGuHQAAj20SAXsCAAEABgAIAA4AFAAaACAAJgAsADIAOQBAAEcATQBTAF4AaABuAHQAegCAAIoAkQCYAJ4AqQCwALoAvgDJAMsA0QDbAOIA6QDvAPoBCgERARcBHQEkASgBLgE0ATsBPgFEAVEBWAFeAWQBawFxAXkBhAGLAY8BlQGcAaMBqQG2Ab0BxAHJAc8B1QHgAekB7wH6AgACBgIQAhsCJgIsAjcCQgJSAmICcAJ+AokClAKbAqcCswK6AsYC0gLcAuYC8QL8AwMDCQMPAxoDJAMqAzADNgM8A0YDTQNUA1oDZQNsA3YDegOFA4sDlAOWA50DpAOqA7UDvAPIA84D1APbA98D5QPrA/ID9QP7BAgEDwQVBBsEIgQoBDAEOwRCBEYETARTBFoEYARtBHQEewSABIYEjASXBKAEpgSxBLwEzATaBOAE6wTxBPsFBQULBRYFHQUkBSsFMgU5BUAFRwVTBVoFYQVqBXIFegWEBY0FlgWeBagFtwXBBcoF0AXXBd4F5QXsBfMF+gYBBg0GFAYbBiYGMgY+BkoGVgZiBm4GegaLBpcGowavBrwGyQbWBuMG8Ab9BwoHHAcpBzYHSQdQB1gHZgdwB34HjAebB6kHuAfIB9kH5AfvB/oIDAgfCDEIRAhSCFkIYAhkCGkIcAh3CH4IhQiMCJMImgihCKgIrwi2CL0IyQjQCNcI4AjoCPAI+gkDCQwJFAkeCS0JNwlACUkJUQlZCWMJbAl1CX0JhwmWCaAJqQmwCbcJvgnFCcwJ0wnaCeEJ7Qn0CfsKAgoJChAKFwoeCiUKLAozCjoKPApDCksKVwpgCmsKdwqACooKlwqiCqwKuQrFCs4K3wrtCvsLCwsaCykLMQs5C0ELSAtRC1gLYwtqC3ELewuCC4sLkgubC6ILqwu0C8ALzAvbC+cL9QwBDA8MGwwpDDAMNww+DEUMTAxTDFoMYQxoDG8Mdgx9DIYMjQyUDJsMogypDLAMtwy+DMUMzAzTDNoM4QzoDO8M9gz9DTYNSy5udWxsQ1JKLnNzMDVRLnNzMDZhLnNzMDFhLnNzMDJmLnNzMDN5LnNzMDRBYnJldmVBbWFjcm9uQW9nb25la0FFYWN1dGVDYWN1dGVDY2Fyb25DY2lyY3VtZmxleENkb3RhY2NlbnREY2Fyb25EY3JvYXRFYnJldmVFY2Fyb25FZG90YWNjZW50RW1hY3JvbkVvZ29uZWtHYnJldmVHY2lyY3VtZmxleHVuaTAxMjJHZG90YWNjZW50SGJhckhjaXJjdW1mbGV4SUpJYnJldmVJZG90YWNjZW50SW1hY3JvbklvZ29uZWtJdGlsZGVKY2lyY3VtZmxleEpjaXJjdW1mbGV4LnNzMDV1bmkwMTM2TGFjdXRlTGNhcm9udW5pMDEzQkxkb3ROYWN1dGVOY2Fyb251bmkwMTQ1RW5nT2JyZXZlT2h1bmdhcnVtbGF1dE9tYWNyb25SYWN1dGVSY2Fyb251bmkwMTU2U2FjdXRlU2NlZGlsbGFTY2lyY3VtZmxleHVuaTAyMThUYmFyVGNhcm9udW5pMDE2MnVuaTAyMUFVYnJldmVVaHVuZ2FydW1sYXV0VW1hY3JvblVvZ29uZWtVcmluZ1V0aWxkZVdhY3V0ZVdjaXJjdW1mbGV4V2RpZXJlc2lzV2dyYXZlWWNpcmN1bWZsZXhZZ3JhdmVaYWN1dGVaZG90YWNjZW50YWFjdXRlLnNzMDFhYWN1dGUuc3MwMmFicmV2ZWFicmV2ZS5zczAxYWJyZXZlLnNzMDJhY2lyY3VtZmxleC5zczAxYWNpcmN1bWZsZXguc3MwMmFkaWVyZXNpcy5zczAxYWRpZXJlc2lzLnNzMDJhZ3JhdmUuc3MwMWFncmF2ZS5zczAyYW1hY3JvbmFtYWNyb24uc3MwMWFtYWNyb24uc3MwMmFvZ29uZWthb2dvbmVrLnNzMDFhb2dvbmVrLnNzMDJhcmluZy5zczAxYXJpbmcuc3MwMmF0aWxkZS5zczAxYXRpbGRlLnNzMDJhZWFjdXRlY2FjdXRlY2Nhcm9uY2NpcmN1bWZsZXhjZG90YWNjZW50ZGNhcm9uZGNyb2F0ZWJyZXZlZWNhcm9uZWRvdGFjY2VudGVtYWNyb25lb2dvbmVrZ2JyZXZlZ2NpcmN1bWZsZXh1bmkwMTIzZ2RvdGFjY2VudGhiYXJoY2lyY3VtZmxleGlicmV2ZWkubG9jbFRSS2lqaW1hY3JvbmlvZ29uZWtpdGlsZGVqY2lyY3VtZmxleHVuaTAxMzdrZ3JlZW5sYW5kaWNsYWN1dGVsY2Fyb251bmkwMTNDbGRvdG5hY3V0ZW5jYXJvbnVuaTAxNDZlbmdvYnJldmVvaHVuZ2FydW1sYXV0b21hY3JvbnJhY3V0ZXJjYXJvbnVuaTAxNTdzYWN1dGVzY2VkaWxsYXNjaXJjdW1mbGV4dW5pMDIxOXRiYXJ0Y2Fyb251bmkwMTYzdW5pMDIxQnVicmV2ZXVodW5nYXJ1bWxhdXR1bWFjcm9udW9nb25la3VyaW5ndXRpbGRld2FjdXRld2NpcmN1bWZsZXh3ZGllcmVzaXN3Z3JhdmV5YWN1dGUuc3MwNHljaXJjdW1mbGV4eWNpcmN1bWZsZXguc3MwNHlkaWVyZXNpcy5zczA0eWdyYXZleWdyYXZlLnNzMDR6YWN1dGV6ZG90YWNjZW50c2V2ZW4uc3MwN3UxRjEwQnUxRjEwQi56ZXJvdW5pMjc4MHVuaTI3ODF1bmkyNzgydW5pMjc4M3VuaTI3ODR1bmkyNzg1dW5pMjc4NnVuaTI3ODYuc3MwN3VuaTI3ODd1bmkyNzg4emVyby5zczA5b25lLnNzMDl0d28uc3MwOXRocmVlLnNzMDlmb3VyLnNzMDlmaXZlLnNzMDlzaXguc3MwOXNldmVuLnNzMDlzZXZlbi5zczA3LnNzMDllaWdodC5zczA5bmluZS5zczA5dTFGMTBDdW5pMjc4QXVuaTI3OEJ1bmkyNzhDdW5pMjc4RHVuaTI3OEV1bmkyNzhGdW5pMjc5MHVuaTI3OTAuc3MwN3VuaTI3OTF1bmkyNzkydTFGMTBDLmxlZnR1bmkyNzhBLmxlZnR1bmkyNzhCLmxlZnR1bmkyNzhDLmxlZnR1bmkyNzhELmxlZnR1bmkyNzhFLmxlZnR1bmkyNzhGLmxlZnR1bmkyNzkwLmxlZnR1bmkyNzkwLnNzMDcubGVmdHVuaTI3OTEubGVmdHVuaTI3OTIubGVmdHUxRjEwQy5yaWdodHVuaTI3OEEucmlnaHR1bmkyNzhCLnJpZ2h0dW5pMjc4Qy5yaWdodHVuaTI3OEQucmlnaHR1bmkyNzhFLnJpZ2h0dW5pMjc4Ri5yaWdodHVuaTI3OTAucmlnaHR1bmkyNzkwLnNzMDcucmlnaHR1bmkyNzkxLnJpZ2h0dW5pMjc5Mi5yaWdodHBlcmlvZGNlbnRlcmVkLmNhc2V1bmkyMDUxYmFyLmNhc2Vicm9rZW5iYXIuY2FzZXNsYXNoLmNhc2ViYWNrc2xhc2guY2FzZXBhcmVubGVmdC5jYXNlcGFyZW5yaWdodC5jYXNlYnJhY2VsZWZ0LmNhc2VicmFjZXJpZ2h0LmNhc2VicmFja2V0bGVmdC5jYXNlYnJhY2tldHJpZ2h0LmNhc2VoeXBoZW4uY2FzZWVuZGFzaC5jYXNlZW1kYXNoLmNhc2VndWlsbGVtb3RsZWZ0LmNhc2VndWlsbGVtb3RyaWdodC5jYXNlZ3VpbHNpbmdsbGVmdC5jYXNlZ3VpbHNpbmdscmlnaHQuY2FzZWFtcGVyc2FuZC5zczEzdW5pMjBCRnVuaTBFM0ZFdXJvZnJhbmN1bmkyMEJEdW5pMjBCOXVuaTIwQkF1bmkyMEE2dW5pMjA4MHVuaTIwODF1bmkyMDgydW5pMjA4M3VuaTIwODR1bmkyMDg1dW5pMjA4NnVuaTIwODd1bmkyMDg3LnNzMDd1bmkyMDg4dW5pMjA4OXplcm8uZG5vbW9uZS5kbm9tdHdvLmRub210aHJlZS5kbm9tZm91ci5kbm9tZml2ZS5kbm9tc2l4LmRub21zZXZlbi5kbm9tc2V2ZW4uZG5vbS5zczA3ZWlnaHQuZG5vbW5pbmUuZG5vbXplcm8ubnVtcm9uZS5udW1ydHdvLm51bXJ0aHJlZS5udW1yZm91ci5udW1yZml2ZS5udW1yc2l4Lm51bXJzZXZlbi5udW1yc2V2ZW4ubnVtci5zczA3ZWlnaHQubnVtcm5pbmUubnVtcnVuaTIwNzB1bmkwMEI5dW5pMDBCMnVuaTAwQjN1bmkyMDc0dW5pMjA3NXVuaTIwNzZ1bmkyMDc3dW5pMjA3Ny5zczA3dW5pMjA3OHVuaTIwNzl1bmkyMTUzdW5pMjE1NXVuaTIxNTZ1bmkyMTU3dW5pMjE1OHVuaTIxNTl1bmkwMzk0dW5pMDNBOXVuaTAzQkNwaWRvdG1hdGhub3RlcXVhbGdyZWF0ZXJlcXVhbGxlc3NlcXVhbGFwcHJveGVxdWFsZG90bWF0aC5jYXNlcGx1cy5jYXNlbWludXMuY2FzZW11bHRpcGx5LmNhc2VkaXZpZGUuY2FzZWVxdWFsLmNhc2Vub3RlcXVhbC5jYXNlZ3JlYXRlci5jYXNlbGVzcy5jYXNlZ3JlYXRlcmVxdWFsLmNhc2VsZXNzZXF1YWwuY2FzZXBsdXNtaW51cy5jYXNlYXBwcm94ZXF1YWwuY2FzZWFzY2lpdGlsZGUuY2FzZWxvZ2ljYWxub3QuY2FzZWluZmluaXR5ZW1wdHlzZXRpbnRlZ3JhbHByb2R1Y3RzdW1tYXRpb25yYWRpY2FscGFydGlhbGRpZmZhcnJvd3VwdW5pMjE5N2Fycm93cmlnaHR1bmkyMTk4YXJyb3dkb3dudW5pMjE5OWFycm93bGVmdHVuaTIxOTZhcnJvd2JvdGhhcnJvd3VwZG5hcnJvd3VwLmNhc2V1bmkyMTk3LmNhc2VhcnJvd3JpZ2h0LmNhc2V1bmkyMTk4LmNhc2VhcnJvd2Rvd24uY2FzZXVuaTIxOTkuY2FzZWFycm93bGVmdC5jYXNldW5pMjE5Ni5jYXNlYXJyb3dib3RoLmNhc2V1bmkyMUI2dW5pMjFCN3VuaTJCMDZ1bmkyQjA4dW5pMkIwQXVuaTJCMDd1bmkyQjBCdW5pMkIwNXVuaTJCMDl1bmkyN0ExbG96ZW5nZXVuaTI1QUZmaWxsZWRib3h1bmkyNUExdW5pMjVGRHVuaTI1RkV0cmlhZ3VwdW5pMjVCNnVuaTI1QzB1bmkyNUIzdW5pMjVCN3VuaTI1QzF1bmkyNjJFdW5pMjZBQXVuaTI2QUJ1bmkyNzEzdW5pMjcxNXVuaTIxMTZ1bmkwMEFEdW5pMDBBMENvcHlyaWdodCBcKGNcKSAyMDIwIENvVHlwZSBGb3VuZHJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLkppZHUgTW9ubyBQcm8gUmVndWxhcgD3AgABAAcADwAVABgAIgAoAC4AMwA6AD8AUgBWAF4AZgB7AIYAkgCdAKYArwC0ALkAvgDOANUA2ADkAO4A9QEEAREB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bHQFkHNhbHQFkHNpbmYFlnNpbmYFlnNpbmYFlnNpbmYFlnNpbmYFlnNpbmYFlnNpbmYFlnNpbmYFlnNpbmYFlnNpbmYFlnNzMDEFnHNzMDEFnHNzMDEFnHNzMDEFnHNzMDEFnHNzMDEFnHNzMDEFnHNzMDEFnHNzMDEFnHNzMDEFnHNzMDIFonNzMDIFonNzMDIFonNzMDIFonNzMDIFonNzMDIFonNzMDIFonNzMDIFonNzMDIFonNzMDIFonNzMDMFqHNzMDMFqHNzMDMFqHNzMDMFqHNzMDMFqHNzMDMFqHNzMDMFqHNzMDMFqHNzMDMFqHNzMDMFqHNzMDQFrnNzMDQFrnNzMDQFrnNzMDQFrnNzMDQFrnNzMDQFrnNzMDQFrnNzMDQFrnNzMDQFrnNzMDQFrnNzMDUFtHNzMDUFtHNzMDUFtHNzMDUFtHNzMDUFtHNzMDUFtHNzMDUFtHNzMDUFtHNzMDUFtHNzMDUFtHNzMDYFunNzMDYFunNzMDYFunNzMDYFunNzMDYFunNzMDYFunNzMDYFunNzMDYFunNzMDYFunNzMDYFunNzMDcFwHNzMDcFwHNzMDcFwHNzMDcFwHNzMDcFwHNzMDcFwHNzMDcFwHNzMDcFwHNzMDcFwHNzMDcFwHNzMDgFxnNzMDgFxnNzMDgFxnNzMDgFxnNzMDgFxnNzMDgFxnNzMDgFxnNzMDgFxnNzMDgFxnNzMDgFxnNzMDkFzHNzMDkFzHNzMDkFzHNzMDkFzHNzMDkFzHNzMDkFzHNzMDkFzHNzMDkFzHNzMDkFzHNzMDkFzHNzMTAF0nNzMTAF0nNzMTAF0nNzMTAF0nNzMTAF0nNzMTAF0nNzMTAF0nNzMTAF0nNzMTAF0nNzMTAF0nNzMTEF2HNzMTEF2HNzMTEF2HNzMTEF2HNzMTEF2HNzMTEF2HNzMTEF2HNzMTEF2HNzMTEF2HNzMTEF2HNzMTIF3nNzMTIF3nNzMTIF3nNzMTIF3nNzMTIF3nNzMTIF3nNzMTIF3nNzMTIF3nNzMTIF3nNzMTIF3nNzMTMF5HNzMTMF5HNzMTMF5HNzMTMF5HNzMTMF5HNzMTMF5HNzMTMF5HNzMTMF5HNzMTMF5HNzMTMF5HN1YnMF6nN1YnMF6nN1YnMF6nN1YnMF6nN1YnMF6nN1YnMF6nN1YnMF6nN1YnMF6nN1YnMF6nN1YnMF6nN1cHMF8HN1cHMF8HN1cHMF8HN1cHMF8HN1cHMF8HN1cHMF8HN1cHMF8HN1cHMF8HN1cHMF8HN1cHMF8AAAAAEAEAAAAAEACgAAAAMACwAMAA0AAAABAAUAAAABAAQAAAABAAMAAAABAAkAAAACAA4ADwAAAAEAEQAAAAEABwAAAAEAEgAAAAEAEwAAAAEAFAAAAAEAFQAAAAEAFgAAAAEAFwAAAAEAGAAAAAEAGQAAAAEAGgAAAAEAGwAAAAEAHAAAAAEAHQAAAAEAHgAAAAEABgAAAAEACAAfAEAAZgB0AJYAqgDMAQ4BDgEcAUwBKgE4AUwBWgGuAfwCHgKiAqICsALWAuoDBgMcAzADVgN6A4gDlgOkA7wABAAAAAEACAABAJYAAgAKABQAAQAEAHAAAgFuAAEABADoAAIBbgABAAAAAQAIAAEBMP/1AAEAAAABAAgAAgAOAAQBIAEhASABIQABAAQABAATACAAMQABAAAAAQAIAAEABgCxAAEAAQArAAEAAAABAAgAAgAOAAQAiQCNAQEBBgABAAQAhwCMAP8BBQAGAAAAAQAIAAEACgACABIAJgABAAIAEAAuAAEABAAAAAIBbgABABAAAQAAAAAAAQAEAAAAAgFuAAEALgABAAAAAAABAAAAAQAIAAEAzgCWAAEAAAABAAgAAQDAALcAAQAAAAEACAABALIAoQABAAAAAQAIAAEABgBuAAEAAQF2AAEAAAABAAgAAQCQAKwABgAAAAIACgAiAAMAAQASAAEAOgAAAAEAAAABAAEAAQHkAAMAAQASAAEAIgAAAAEAAAABAAIAAgHDAcoAAAHMAc0ACAACAAIBzgHVAAAB1wHYAAgABgAAAAIACgAkAAMAAQAsAAEAEgAAAAEAAAACAAEAAgAEACAAAwABABIAAQAiAAAAAQAAAAIAAgACASIBKQAAASsBLAAIAAEAAgATADEABAAAAAEACAABABQAAQAIAAEABAJMAAMAMQFlAAEAAQASAAEAAAABAAgAAgBaACoBbwGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAZkBmgGbAZwCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCKAIpAioCKwIsAi0CLgIvAjAAAgAFAW4BbgAAAXQBgAABAZUBmAAOAfYCBAASAh4CJgAhAAEAAAABAAgAAQAUAAEAAQAAAAEACAABAAYAAgABAAoAIACjAKYAqQCsAK8AsgC1ALgAuwABAAAAAQAIAAEABgABAAEAAQAnAAEAAAABAAgAAQAGAAEAAQAFADsBFQEXARkBGwABAAAAAQAIAAEABgABAAEAAgANAGoAAQAAAAEACAABAAYAAQABAAEAFQABAAAAAQAIAAEABgABAAEACgEpATUBQAFLAVYBYQG/AcoB1QHgAAEAAAABAAgAAgBUAAsBLQEvATABMQEyATMBNAE1ATYBNwE4AAEAAAABAAgAAQAwABcAAQAAAAEACAABACIAIgABAAAAAQAIAAEAFAAtAAEAAAABAAgAAQAGADgAAgABASIBLAAAAAEAAAABAAgAAQAGAAEAAQABAaAAAA==") format("opentype");
- font-weight: 400; font-style: normal; font-display: swap;
+ font-weight: 500; font-style: normal; font-display: swap;
}
/* ---- apps/web/src/styles/tokens.css(原样) ---- */
@@ -115,6 +115,7 @@
--radius-medium: 4px;
--radius-large: 8px;
--radius-xlarge: 12px;
+ --radius-2xlarge: 16px;
--radius-circular: 50%;
--stroke-thin: 1px;
--stroke-thick: 2px;
@@ -125,6 +126,7 @@
--radius: var(--radius-large);
--radius-md: var(--radius-large);
--radius-lg: var(--radius-xlarge);
+ --radius-2xl: var(--radius-2xlarge);
--radius-pill: 999px;
--duration-ultra-fast: 50ms;
@@ -331,7 +333,7 @@
产品指定 #353535(原来是 --brand-text 的深绿 #0d5400)。
选中态现在的三处变化里,颜色这一处退回中性:控件填 --pick 的荧光绿已经
把"选的是这条"说完了,字再跟着变绿,一行里就有两处在喊同一件事,而绿字
- 压在白底上比黑字难读。字重 600 保留 —— 那是这一行跟其余几行的分档。
+ 压在白底上比黑字难读。选中文字用 500,与确认卡标题保持同一档强调。
值跟 --anim-ink 一样是巧合(同为产品给的那档深灰),不合并:一个是动效的墨,
一个是选中行的字,下次谁变都不该带着另一个一起变。 */
:root { --select-ink: #353535; }
@@ -344,13 +346,12 @@
真要读的是收起后那条 .think(结论),它仍走正文墨色,不受这条影响。 */
:root { --stream-ink: #a3a3a3; }
-/* ── Upgrade 按钮的字和图标 ──────────────────────────────────
- 产品指定 #00FF08。它只用在 18 · 升级那颗黑按钮上:底仍是黑的,
- 绿只落在【字和那枚闪光】上 —— 一屏里唯一一处"往前一步"的动作,
- 黑底给它分量,绿给它一眼能认出来的记号,两者不抢。
+/* ── Upgrade 按钮的底色 ──────────────────────────────────────
+ 升级卡改为深灰底后,原来的 #00FF08 绿色改用于按钮底色,
+ 文字和闪光图标固定使用 #353535,独立于卡面背景。
注意它跟 --brand-weak(#00FF04,那枚绿勾)差 4 —— 是两个被分别指定的
色号,不是同一个,所以不合并:一个说"这件事过了",一个说"这里可以升级"。 */
-:root { --upgrade-ink: #00FF08; }
+:root { --upgrade-surface: #00FF08; }
/* ── 「过了」那枚勾 ─────────────────────────────────────────
产品给的整图标(源文件 src/tick.svg,内联成 data URI —— 稿子是单文件)。
@@ -468,6 +469,7 @@
html, body { height: 100%; }
body {
font-family: var(--sans);
+ font-weight: 500;
font-size: var(--font-size-13);
line-height: 1.5;
color: var(--text);
@@ -566,7 +568,7 @@ button { font-family: inherit; border: none; background: none; cursor: pointer;
.cmp-h .nm { flex: 1; min-width: 0; font-size: var(--t-lead); font-weight: 700; color: var(--text-strong); }
.cmp-meta { display: flex; flex-wrap: wrap; gap: 0 14px; padding: 8px 13px 0; }
.cmp-meta div { font-size: var(--t-cap); color: var(--text-soft); line-height: var(--lh-row); }
-.cmp-meta b { color: var(--text-muted); font-weight: 400; }
+.cmp-meta b { color: var(--text-muted); font-weight: 500; }
.cmp-b { padding: 10px 13px; }
.cmp-ops {
display: flex; gap: 7px; padding: 8px 13px 10px;
@@ -647,11 +649,11 @@ button { font-family: inherit; border: none; background: none; cursor: pointer;
要拿同一个色去盖住被截断的半个字(见 .bub.mod-clamp .more),
而气泡 hover 时底色会变深 —— 两处必须永远同色,所以只留一个出处。 */
.bub {
- --bub-bg: var(--text-strong);
+ --bub-bg: #121212;
max-width: min(84%, 380px); padding: 9px 13px;
border-radius: var(--radius-lg) var(--radius-lg) var(--radius-sm) var(--radius-lg);
background: var(--bub-bg); color: var(--bg);
- font-size: var(--t-body); line-height: var(--lh-body);
+ font-size: var(--t-body); font-weight: 500; line-height: var(--lh-body);
}
/* 超长消息折到 6 行,末尾留一枚「…」,hover 时「…」后面浮出下拉箭头。
@@ -721,21 +723,22 @@ button { font-family: inherit; border: none; background: none; cursor: pointer;
都靠外缘,扫一列就对得上"这句几点发的 / 那句几点答的"。
时间不是动作,所以不给它按钮那套 30px 命中框和 hover 底色 —— 它只是一段
可读的文字,做成能点的样子等于给一个按了没反应的东西。
- 字号取 caption、颜色取 --text-soft:这一行的主角是复制,时间是背景信息,
- 跟图标同一个视觉重量的话,人会先去读那串数字。 */
+ 字号取 caption,时间和未选中的操作图标统一用 #A3A3A3。 */
+/* 消息辅助信息专用色,不联动全局次级文字或已选中的反馈状态。 */
+.msg-act, .fb, .fork-note { --message-muted-ink: #a3a3a3; }
.msg-act {
flex: none; display: flex; align-items: center;
}
-.msg-act .tm { margin-inline-start: 2px; font-size: var(--t-cap); color: var(--text-soft); }
+.msg-act .tm { margin-inline-start: 2px; font-size: var(--t-cap); color: var(--message-muted-ink); }
/* 消息旁的操作按钮跟着气泡的行高走,
不自己定尺寸。原来用的是 .btn.mod-sm,图标只有 11px。 */
.msg-act button {
display: grid; place-items: center; width: 30px; height: 30px;
- border-radius: var(--radius-sm); color: var(--text-soft);
+ border-radius: var(--radius-sm); color: var(--message-muted-ink);
transition: background-color var(--duration-faster) var(--ease-out),
color var(--duration-faster) var(--ease-out);
}
-.msg-act button:hover { background: var(--bg-fill-secondary); color: var(--text-strong); }
+.msg-act button:hover { background: var(--bg-fill-secondary); color: var(--message-muted-ink); }
.msg-act button svg { width: 16px; height: 16px; }
/* 【重试】带可见文字,跟失败行的那枚同一套外观。
@@ -1236,6 +1239,9 @@ button.att-d:hover { border-color: var(--border-strong); }
只染图标不染文字:文字要跟其它折叠行保持一致,绿的是那个标记,
不是那句话。 */
.fold > summary .memo-ic { color: #00ff04; }
+/* 记忆卡的外壳和标题悬停底共用 16px 圆角,展开、收起保持一致。 */
+.fold:has(> summary > .memo-ic),
+.fold > summary:has(> .memo-ic) { border-radius: 16px; }
/* 箭头一律靠右。原来右对齐是靠耗时 .ms 的 auto 外边距撑出来的,
于是没有耗时的那几条(执行计划、记忆组件)箭头就贴在文字后面。
现在两个都能自己靠右,谁先出现谁吃掉空白:
@@ -1362,30 +1368,23 @@ button.att-d:hover { border-color: var(--border-strong); }
.fold.mod-flat[open] > summary + .body.mod-stack { border-top: var(--stroke-thin) solid var(--border); padding-top: 6px; }
/* 纯文字直接落在左边缘 —— 它是正文,不该比动作行更靠里。 */
.fold.mod-flat > .body.mod-stack > .think { padding: 6px 0; }
+/* 留下供阅读的推理正文用 13px;滚动中的过程文字保留原有字号。 */
+.fold.mod-flat > .body.mod-stack:not(.mod-stream) > .think { font-size: var(--t-body); }
/* 动作行:同一套负外边距,状态点和标题行的状态点连成一列。 */
.fold.mod-flat > .body.mod-stack > .fold { margin-inline: -7px; }
.fold.mod-flat > .body.mod-stack > .fold > summary { padding: 5px 7px; border-radius: var(--radius-sm); }
-/* 步骤名加粗到 600。
- ------------------------------------------------------------
- 这一层原来是常规字重 —— 当时的理由是"同一个 rank 的折叠块标题不该比卡头
- 更重"。串上链之后前提变了:这几行不再是并列的几个折叠块,而是一条链上的
- 【节点】,链上其它东西(小结、子行、耗时)都是围着它们说的。节点比说明重
- 一档,眼睛顺着链往下扫时才有落点。
- 只加在步骤名上:耗时 .ms 收回 400 —— 它是等宽数字,600 的等宽在 12px 上
- 会糊成一团黑,而且它本来就是次要信息,跟着标题一起变重就分不出主次了。 */
-.fold.mod-flat > .body.mod-stack > .fold > summary { font-weight: 600; }
-.fold.mod-flat > .body.mod-stack > .fold > summary .ms { font-weight: 400; }
-/* 步骤名之外的那几句话退成重灰。
- ------------------------------------------------------------
- 步骤名刚加到 600,如果说明还跟它一样是 --text-strong,一块里就有两样东西
- 同时在喊 —— 加粗这件事只有在旁边有更轻的一档时才成立。
- 退到 --text-muted(#5c5c5c)这一档,不是最浅的 --text-soft:这几句是
- Agent 说给你听的话,不是标注,得读得下来。白底上 7:1,一整段读着不费劲。
- ------------------------------------------------------------
- :has(> .fold) 圈的是【有步骤的那种块】—— 进行中 / 已完成。Thinking 那块
- 用的是同一副壳、里面也是 .think,但它整块就是一段推理,没有"标题 + 说明"
- 这层关系,轻重由它自己那套渐隐管,这里不去动它。 */
-.fold.mod-flat > .body.mod-stack:has(> .fold) > .think { color: var(--text-muted); }
+.fold.mod-flat > .body.mod-stack .fold > summary:hover { border-radius: var(--radius); }
+/* 执行计划和步骤标题统一为 13px / 500,进行中、已完成及展开/收起共用。
+ 标题文字也直接设置同一档,不只依赖继承。耗时保持独立规则,
+ 不影响顶层状态标题和工具调用行。 */
+.fold.mod-flat > .body.mod-stack > .fold > summary,
+.fold.mod-flat > .body.mod-stack > .fold > summary > .mk + span { font-size: var(--t-body); font-weight: 500; }
+.fold.mod-flat > .body.mod-stack > .fold > summary .ms { color: #A3A3A3; font-weight: 500; }
+/* 步骤小结与正常命令行使用独立的浅灰色,不联动 Thinking 滚动流。 */
+.fold.mod-flat { --progress-detail-ink: #a3a3a3; }
+/* 开头说明沿用正文深色:浅色主题 --text-strong 为 #202020。
+ 进行中和已完成保持一致;步骤间的小结在下方单独使用浅灰色。 */
+.fold.mod-flat > .body.mod-stack:has(> .fold) > .think { color: var(--text-strong); }
/* 步骤之间穿一条竖线 —— chain-of-thought 的那根"链"。
------------------------------------------------------------
参照 21st.dev @elements- 的 chain-of-thought:线是每一步自己画的一段
@@ -1432,7 +1431,11 @@ button.att-d:hover { border-color: var(--border-strong); }
.fold.mod-flat > .body.mod-stack > .fold ~ .think:has(~ .fold) {
position: relative;
padding-inline-start: 22px;
+ /* 步骤间的小结用 12px;开头说明保留 13px。 */
+ font-size: var(--t-mini);
+ color: var(--progress-detail-ink);
}
+.fold.mod-flat > .body.mod-stack > .fold ~ .think:has(~ .fold) code { color: inherit; }
.fold.mod-flat > .body.mod-stack > .fold ~ .think:has(~ .fold)::before {
/* 7.5 而不是 14.5:步骤那一层挂着 margin-inline:-7px,盒子比小结往左多探 7px,
两边各自的 0 点差了这 7px。要的是【同一条竖线】,所以数字得各算各的。 */
@@ -1464,6 +1467,10 @@ button.att-d:hover { border-color: var(--border-strong); }
/* 折叠行的缩进由它的 summary 承担,盒子本身不再吃一份 —— 否则 29 + 29,
一条可折叠的命令行会比它旁边那几条工具行深一格,读起来像多了一层。 */
.fold.mod-flat .body.mod-stack .body.mod-stack > .fold { padding-inline: 0; }
+/* 正常命令行的文字、耗时和标记同色;失败行保留原有状态色。 */
+.fold.mod-flat .fold:not(.is-fail) > summary:has(> .ti) { color: var(--progress-detail-ink); }
+.fold.mod-flat .fold:not(.is-fail) > summary:has(> .ti) > :is(.ti, .ms),
+.fold.mod-flat .fold:not(.is-fail) > summary:has(> .ti) > .ti > svg { color: inherit; }
/* 终端块同样把 7px 的负外边距补回来:左边跟着它上面那行命令,右边收回卡内。
只改左右两边 —— 上下那份间距是 .code 自己的,写成 margin 简写会把它顶掉。 */
.fold.mod-flat .body.mod-stack .code { margin-inline: 29px 18px; }
@@ -1666,13 +1673,15 @@ button.att-d:hover { border-color: var(--border-strong); }
.card > .h {
display: flex; align-items: center; gap: 7px; padding: 9px 11px;
border-bottom: 1px solid var(--border-soft); background: var(--bg-panel);
- font-size: var(--t-mini); font-weight: 600; color: var(--text-strong);
+ font-size: var(--t-lead); font-weight: 600; color: var(--text-strong);
}
/* 卡头整行走 600(2026-08-19 按要求加粗):这一行是卡的名字,压在灰底上,
字重是它跟下面正文拉开的唯一一档 —— 颜色两边都已经是最深的一档了。
仍显式收回成 inherit:浏览器默认给它 700,留着就成了行内再上一档,
同一行里两种字重。 在标记里区分的是"标题"和旁边的计数 / 按钮,不是字重。 */
-.card > .h b { font-weight: inherit; }
+.card > .h b { font-weight: 600; }
+/* 带选项的确认卡标题用 Medium;计划卡和其它状态卡仍沿用 600。 */
+.card:has(> .cbody > .opts) > .h > b { font-weight: 500; }
/* 数字位用 tabular-nums,不用等宽字体。
------------------------------------------------------------
这一格里的内容多半是中文夹数字(「已选 2」「4 步」「旧计划 4 步」),
@@ -1680,7 +1689,10 @@ button.att-d:hover { border-color: var(--border-strong); }
宽度,看着就散。真正需要的只是"数字不跳",tabular-nums 正好只做这件事。
分数也一律写成 2/4 不写 2/4:等宽下每个空格都占满一个字宽,
「2/5」会被撑成三段,散得像三个独立的数。 */
-.card > .h .n { margin-left: auto; font-variant-numeric: tabular-nums; font-size: var(--t-cap); }
+.card > .h .n { margin-left: auto; font-variant-numeric: tabular-nums; font-size: var(--t-cap); font-weight: 600; }
+/* 多选计数保留数字的原色,「已选」退后两档到 --text-soft。 */
+.card > .h .selection-count { color: var(--text-strong); }
+.card > .h .selection-count .count-label { color: var(--text-soft); }
/* 卡头右上角直接放动作按钮,不再为它单开一行底栏。
这张卡的正文已经是一份清单了,底下再挂一条只有一个按钮的横条,
等于给两行东西撑出三行的高度 —— 而右上角本来就空着(原来放的是
@@ -1712,7 +1724,9 @@ button.att-d:hover { border-color: var(--border-strong); }
380 = 用户消息气泡的 max-width。对话里有形状的就这两样 —— 你说的话和
它问你的话,同宽、一左一右,来回一目了然。 */
.card:has(.q), .card:has(> .steps), .card:has(.foot), .errb { width: 380px; max-width: 100%; }
-.cbody > .q { padding: 10px 11px 8px; font-size: var(--t-body); line-height: var(--lh-body); color: var(--text-strong); }
+.cbody > .q { padding: 10px 11px 8px; font-size: var(--t-mini); font-weight: 500; line-height: var(--lh-body); color: var(--text-strong); }
+/* 澄清问句使用 13px 正文档,与下面 12px 的选项区分。 */
+.card:has(> .cbody > .opts) > .cbody > .q { font-size: var(--t-body); }
.cbody > .opts { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 11px 10px; }
/* ---- 答题选项:纵向一行一个(mod-stack) ----
@@ -1756,11 +1770,11 @@ button.att-d:hover { border-color: var(--border-strong); }
"哪条选中"这一件事说两遍,而底色是三者里最吵的一遍:它改变的是行的
面积,不是行里的那个点。「自己填」展开输入框时更明显 —— 整块底色
会连着输入框糊成一片绿。
- 选中态因此只剩两处变化:前面的控件填实(--pick),文字加粗到 600
- 并换成 --brand-text。底色那一档还给 hover:现在只有指针底下那条有底,
+ 选中态因此只剩两处变化:前面的控件填实(--pick),文字使用 500
+ 并换成 --select-ink。底色那一档还给 hover:现在只有指针底下那条有底,
"能点的是这条"和"选中的是这条"各说各的,不再抢同一种表达。 */
.opt.is-on {
- color: var(--select-ink); font-weight: 600;
+ color: var(--select-ink); font-weight: 500;
}
.opt .ic { flex: none; display: grid; place-items: center; height: calc(var(--t-mini) * var(--lh-row)); color: var(--text-soft); }
.opt .ic svg { width: 13px; height: 13px; }
@@ -1838,7 +1852,7 @@ button.att-d:hover { border-color: var(--border-strong); }
继续置灰:选了「自己填」却一个字没写,和一项都没选是同一种"还没答"。 */
.opt.is-open { cursor: default; }
.opt .own { flex: 1; min-width: 0; display: block; }
-.opt .own-l { display: block; font-weight: 600; }
+.opt .own-l { display: block; font-weight: 500; }
/* 只留一条底线,不围一圈框 —— 和反馈弹窗那个补充框(.rsn .ta)同一种写法。
------------------------------------------------------------
一圈框是"这是一个独立的输入区";可这个框长在【某一个选项里面】,
@@ -1850,7 +1864,7 @@ button.att-d:hover { border-color: var(--border-strong); }
display: block; width: 100%; margin-top: 6px; padding: 2px 0 5px;
border: 0; border-bottom: 1px solid var(--border); border-radius: 0;
background: none; color: var(--text-strong);
- font-family: inherit; font-size: var(--t-mini); line-height: var(--lh-row);
+ font-family: inherit; font-size: var(--t-mini); font-weight: 500; line-height: var(--lh-row);
field-sizing: content; resize: none; outline: none;
}
.opt .own-ta::placeholder { color: var(--text-soft); }
@@ -1866,6 +1880,260 @@ button.att-d:hover { border-color: var(--border-strong); }
"光标在这条线上",压深已经够了 —— 和 .rsn .ta 保持一致。 */
.opt .own-ta:focus { border-bottom-color: var(--border-strong); }
+/* ---- 意图澄清:语言下拉选择 ----
+ 常用语言先放在首屏,低频语言收到「更多语言」下面。展开后的额外列表固定
+ 露出 6.5 行(32px × 6.5 = 208px),半行提示下面还能继续滚。 */
+.opts.mod-language { display: block; padding: 0 11px 10px; }
+.language-select { position: relative; }
+.language-menu,
+.language-more {
+ overflow: hidden;
+ border: 1px solid var(--border); border-radius: var(--radius);
+ background: var(--bg); box-shadow: var(--shadow-sm);
+}
+.language-more { margin-top: 8px; }
+.language-more-list[hidden] { display: none; }
+.language-group-label {
+ display: block; padding: 7px 10px 3px;
+ color: var(--text-muted); font-size: var(--t-cap); font-weight: 500;
+}
+.language-option,
+.language-more-toggle {
+ display: flex; align-items: center; gap: 8px;
+ width: 100%; min-height: 32px; padding: 6px 10px;
+ color: var(--text-strong); font-size: var(--t-mini); text-align: left;
+}
+.language-option:hover,
+.language-more-toggle:hover { background: var(--bg-fill-secondary); }
+.language-option[aria-selected="true"] { background: var(--brand-soft); color: var(--select-ink); font-weight: 500; }
+.language-option .language-code {
+ margin-inline-start: auto;
+ color: var(--text-muted); font-size: var(--t-cap);
+ font-variant-numeric: tabular-nums;
+}
+.language-option .language-check { width: 14px; height: 14px; margin-inline-start: auto; opacity: 0; color: var(--brand-text); }
+.language-option .language-code + .language-check { margin-inline-start: 0; }
+.language-option[aria-selected="true"] .language-check { opacity: 1; }
+.language-more-toggle { color: var(--text-muted); font-weight: 500; }
+.language-more-toggle .sp { flex: 1; }
+.language-more-toggle svg { width: 14px; height: 14px; transition: transform var(--duration-faster) var(--ease-out); }
+.language-more-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }
+.language-more-list {
+ max-height: 208px; overflow-y: auto; overscroll-behavior: contain;
+ border-top: 1px solid var(--border); scrollbar-width: thin;
+}
+
+
+/* ---- 颜色选择:预设色 + 自定义色值 + 实时预览 ---- */
+.opts.mod-color {
+ display: grid; gap: 10px; padding: 0 11px 10px;
+}
+.color-field { min-width: 0; margin: 0; padding: 0; border: 0; }
+.color-field legend,
+.color-label {
+ display: block; margin: 0 0 6px;
+ font-size: var(--t-mini); font-weight: 600; color: var(--text-strong);
+}
+.color-presets {
+ display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 6px;
+}
+.color-swatch {
+ width: 30px; height: 30px; justify-self: center;
+ border: 2px solid var(--bg); border-radius: var(--radius-circular);
+ background: var(--swatch); box-shadow: 0 0 0 1px var(--border);
+ transition: transform var(--duration-faster) var(--ease-out),
+ box-shadow var(--duration-faster) var(--ease-out);
+}
+.color-swatch:hover { transform: scale(1.06); }
+.color-swatch[aria-pressed="true"] {
+ transform: scale(1.06); box-shadow: 0 0 0 2px var(--text-strong);
+}
+.color-custom { display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 8px; }
+.color-native {
+ width: 34px; height: 34px; padding: 2px;
+ border: 1px solid var(--border); border-radius: var(--radius-sm);
+ background: var(--bg); overflow: hidden;
+}
+.color-native::-webkit-color-swatch-wrapper { padding: 0; }
+.color-native::-webkit-color-swatch { border: 0; border-radius: 2px; }
+.color-native::-moz-color-swatch { border: 0; border-radius: 2px; }
+.color-hex {
+ min-width: 0; height: 34px; padding: 0 10px;
+ border: 1px solid var(--border); border-radius: var(--radius);
+ background: var(--bg); color: var(--text-strong);
+ font-family: var(--mono); font-size: var(--t-mini);
+}
+.color-hex:hover { border-color: var(--border-strong); }
+.color-hex:focus { border-color: var(--text-soft); outline: none; }
+.color-hex[aria-invalid="true"] { border-color: var(--red); }
+.color-preview {
+ min-height: 48px; display: flex; align-items: center;
+ padding: 9px 11px; border: 1px solid var(--border); border-radius: var(--radius);
+ background: color-mix(in srgb, var(--choice-color) 12%, var(--bg));
+ color: var(--choice-color); font-size: var(--t-mini); line-height: var(--lh-row);
+}
+.answered .color-answer { display: inline-flex; align-items: center; gap: 6px; }
+.answered .color-answer i {
+ width: 13px; height: 13px; border-radius: var(--radius-circular);
+ background: var(--answer-color); box-shadow: 0 0 0 1px var(--border);
+}
+
+/* ---- Amount Slider:滚动数值 + 光点矩阵 + 磁吸刻度 ---- */
+.opts.mod-slider { display: block; padding: 0 11px 10px; }
+.amount-slider { --range-pct: 25%; display: grid; gap: 7px; }
+.amount-readout {
+ min-height: 36px; display: flex; align-items: flex-start; justify-content: center; gap: 4px;
+ color: var(--text-strong); font-variant-numeric: tabular-nums;
+}
+.amount-value-viewport { display: block; height: 34px; overflow: hidden; }
+.amount-value-stack { display: flex; flex-direction: column; will-change: transform; }
+.amount-value-stack > span {
+ min-width: 22px; height: 34px; line-height: 34px; text-align: center;
+ font-family: var(--sans); font-size: 32px; font-weight: 600;
+}
+.amount-unit { margin-top: 3px; font-size: var(--t-cap); color: var(--text-muted); }
+.amount-announcer {
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
+ overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
+}
+.amount-rail {
+ position: relative; height: 34px; overflow: hidden;
+ border-radius: var(--radius); background: var(--bg-panel);
+}
+.amount-grid {
+ position: absolute; inset-block: 0; inset-inline-start: 0; width: var(--range-pct);
+ min-width: 14px; overflow: hidden; pointer-events: none;
+ background:
+ repeating-linear-gradient(90deg,
+ color-mix(in srgb, var(--accent) 24%, transparent) 0 2px,
+ transparent 2px 4px),
+ repeating-linear-gradient(0deg,
+ color-mix(in srgb, var(--accent) 18%, transparent) 0 2px,
+ transparent 2px 4px);
+}
+.amount-grid::after {
+ content: ""; position: absolute; inset: 0;
+ background: linear-gradient(100deg,
+ transparent 15%,
+ color-mix(in srgb, var(--bg) 72%, transparent) 48%,
+ transparent 78%);
+ animation: amount-grid-shimmer 1.8s var(--curve-linear) infinite;
+}
+@keyframes amount-grid-shimmer {
+ from { transform: translateX(-110%); }
+ to { transform: translateX(110%); }
+}
+.amount-stops {
+ position: absolute; inset: 0 9px; z-index: 1;
+ display: flex; align-items: center; justify-content: space-between;
+ pointer-events: none;
+}
+.amount-stop {
+ width: 4px; height: 4px; border-radius: var(--radius-circular); background: var(--border-strong);
+ transition: background-color var(--duration-faster) var(--ease-out);
+}
+.amount-stop.is-past { background: var(--text-strong); }
+.amount-range {
+ position: absolute; inset: 0; z-index: 2;
+ appearance: none; width: 100%; height: 34px; margin: 0;
+ background: transparent; cursor: grab;
+}
+.amount-range:active { cursor: grabbing; }
+.amount-range::-webkit-slider-runnable-track { height: 34px; background: transparent; }
+.amount-range::-webkit-slider-thumb {
+ appearance: none; width: 18px; height: 32px; margin-top: 1px;
+ border: 0; border-radius: var(--radius); background: var(--accent);
+ box-shadow: var(--shadow-sm);
+}
+.amount-range::-moz-range-track { height: 34px; border: 0; background: transparent; }
+.amount-range::-moz-range-thumb {
+ width: 18px; height: 32px; border: 0; border-radius: var(--radius);
+ background: var(--accent); box-shadow: var(--shadow-sm);
+}
+.amount-range:focus-visible { outline: none; }
+.amount-range:focus-visible::-webkit-slider-thumb { box-shadow: 0 0 0 3px var(--selected-soft); }
+.amount-range:focus-visible::-moz-range-thumb { box-shadow: 0 0 0 3px var(--selected-soft); }
+.amount-limits {
+ display: flex; justify-content: space-between;
+ font-size: var(--t-cap); color: var(--text-soft); font-variant-numeric: tabular-nums;
+}
+@media (prefers-reduced-motion: reduce) {
+ .amount-grid::after { animation: none; }
+ .amount-value-stack { transition: none !important; }
+}
+
+/* 预设颜色的分组标签与确认卡标题使用同一档字重。 */
+.opts.mod-color .color-field > legend { font-weight: 500; }
+/* 选中状态只改变外圈,保留色块本身所代表的真实颜色。 */
+.opts.mod-color .color-swatch[aria-pressed="true"] {
+ box-shadow: 0 0 0 2px #00FF08;
+}
+/* 自定义取色器的外框与浏览器内部色块统一为圆形。 */
+.opts.mod-color .color-native,
+.opts.mod-color .color-native::-webkit-color-swatch,
+.opts.mod-color .color-native::-moz-color-swatch {
+ border-radius: var(--radius-circular);
+}
+
+/* Amount Slider:上方数字可直接编辑,并与滑杆双向同步。
+ 轨道不再放刻度点;数值位置由滑块本身和进度色共同表达。 */
+.opts.mod-slider { display: block; padding: 0 11px 10px; }
+.amount-slider {
+ --range-pct: 25%;
+ --amount-track-height: 16px;
+ --amount-thumb-size: calc(var(--amount-track-height) - 2px);
+ --amount-active: #00FF08;
+ display: grid; gap: 7px;
+}
+.amount-readout {
+ min-height: 36px; display: flex; align-items: flex-start; justify-content: center; gap: 4px;
+ color: var(--text-strong); font-variant-numeric: tabular-nums;
+}
+.amount-value-input {
+ box-sizing: content-box; width: 1.2em; height: 34px; padding: 0 2px;
+ appearance: textfield; border: 0; border-radius: var(--radius-sm); outline: none;
+ background: transparent; color: inherit;
+ font-family: var(--sans); font-size: 32px; font-weight: 600; line-height: 34px; text-align: center;
+}
+.amount-value-input::-webkit-outer-spin-button,
+.amount-value-input::-webkit-inner-spin-button { margin: 0; appearance: none; }
+.amount-value-input:hover { background: var(--bg-fill-secondary); }
+.amount-value-input:focus-visible {
+ outline: 1px solid var(--selected); outline-offset: 2px;
+ background: var(--bg);
+}
+.amount-unit { margin-top: 3px; font-size: var(--t-cap); color: var(--text-muted); }
+.amount-rail {
+ position: relative; height: var(--amount-track-height); overflow: hidden;
+ border-radius: var(--radius-circular);
+ background: linear-gradient(90deg,
+ color-mix(in srgb, var(--amount-active) 22%, var(--bg-panel)) 0 var(--range-pct),
+ var(--bg-panel) var(--range-pct) 100%);
+}
+.amount-range {
+ position: absolute; inset: 0; z-index: 1;
+ appearance: none; width: 100%; height: var(--amount-track-height); margin: 0;
+ background: transparent; cursor: grab;
+}
+.amount-range:active { cursor: grabbing; }
+.amount-range:focus-visible { outline: 1px solid var(--selected); outline-offset: -1px; }
+.amount-range::-webkit-slider-runnable-track { height: var(--amount-track-height); background: transparent; }
+.amount-range::-webkit-slider-thumb {
+ appearance: none; width: var(--amount-thumb-size); height: var(--amount-thumb-size); margin-top: 1px;
+ border: 0; border-radius: var(--radius-circular); background: var(--amount-active);
+ box-shadow: var(--shadow-sm);
+}
+.amount-range::-moz-range-track { height: var(--amount-track-height); border: 0; background: transparent; }
+.amount-range::-moz-range-thumb {
+ width: var(--amount-thumb-size); height: var(--amount-thumb-size);
+ border: 0; border-radius: var(--radius-circular); background: var(--amount-active);
+ box-shadow: var(--shadow-sm);
+}
+.amount-limits {
+ display: flex; justify-content: space-between;
+ color: var(--text-muted); font-size: var(--t-cap); font-variant-numeric: tabular-nums;
+}
+
/* ---- 视觉方向:看图选择 ----
来源 specs/current/studio-chat-visual-discovery.md:
风格这类问题不能用文字选项 ——「Modern minimal」「Editorial」这种抽象词,
@@ -2067,12 +2335,17 @@ button.att-d:hover { border-color: var(--border-strong); }
不给它留出头顶那段高度,清单会被卡的上边缘切掉。真实场景里药丸钉在
流水底部,上方本来就是空的,不需要这一层。 */
.pdemo { padding-top: 136px; }
+/* Plan 的文字色只在本组件内使用;展开清单与收起浮层共用。 */
+.steps, .pmini {
+ --plan-current-text: #353535;
+ --plan-other-text: #848484;
+}
.pmini { position: relative; display: inline-flex; }
.pmini .pill {
display: inline-flex; align-items: center; gap: 6px;
padding: 5px 12px; border-radius: var(--radius-pill);
border: 1px solid var(--border); background: var(--bg);
- font-size: var(--t-mini); font-weight: 600; color: var(--text-strong); cursor: default;
+ font-size: var(--t-mini); font-weight: 600; color: var(--plan-current-text); cursor: default;
transition: border-color var(--duration-faster) var(--ease-out);
}
.pmini:hover .pill, .pmini.is-hover .pill { border-color: var(--border-strong); }
@@ -2116,7 +2389,7 @@ button.att-d:hover { border-color: var(--border-strong); }
background: var(--bg);
border-start-start-radius: var(--radius); border-start-end-radius: var(--radius);
}
-.steps li { display: flex; gap: 8px; padding: 5px 11px; font-size: var(--t-mini); line-height: var(--lh-row); color: var(--text); list-style: none; }
+.steps li { display: flex; gap: 8px; padding: 5px 11px; font-size: var(--t-mini); font-weight: 400; line-height: var(--lh-row); color: var(--plan-other-text); list-style: none; }
/* 记号那一格现在是一枚四态图标,画法见 plan-todo.css。
------------------------------------------------------------
这里原先记着三条演进:文字 ✓ 换成 SVG 勾、裸勾换成 .mk.is-ok 的绿底片、
@@ -2125,8 +2398,8 @@ button.att-d:hover { border-color: var(--border-strong); }
未开始 / 进行中 / 做完了 / 取消了 全是同一个圆的四种画法,尺寸也统一了。
.steps li .k(等宽序号)和 .steps li .mk(下移 1.5px 对齐首行)因此都退场,
对齐改由 .steps li .tk 自己负责。 */
-.steps li.is-done { color: var(--text-muted); }
-.steps li.is-now { color: var(--text-strong); font-weight: 600; }
+.steps li.is-done { color: var(--plan-other-text); }
+.steps li.is-now { color: var(--plan-current-text); font-weight: 600; }
/* ---- 答后陈述 ---- */
/* 已回答:卡片收成一条陈述。三种问法收出来的形状不同,但壳是同一个。
@@ -2148,15 +2421,17 @@ button.att-d:hover { border-color: var(--border-strong); }
大片空白 —— 那片空白不表示任何东西,只是让人以为还有内容没加载出来。
写 width 而不是 align-self:flex-start,是为了在 block 和 flex 两种父容器里
都成立(cross-size 不是 auto,flex 的 stretch 就不生效)。 */
-/* 【不套框、不铺底】。这几条是已经定下来的答案,它们是这段对话的一部分,
- 不是一块从流水里抠出来的独立面板 —— 上一条问题、下一条动作都是裸排的,
- 只有它套着一圈边和一层灰底,读起来像被谁装进了盒子。
- 「已确认」那个绿词已经把这段是什么说清楚了;真要分段,靠的是上面那条
- 状态标题和它自己的行距,不是一个框。
- 撤掉框之后左内边距也一起撤 —— 有框时那 11px 是把字从边上推开,
- 没框了它就成了一段无缘无故的缩进,答案该顶到跟旁边内容同一条左边缘。 */
-.answered { width: fit-content; max-width: 100%;
- font-size: var(--t-mini); line-height: var(--lh-row); }
+/* 已确认结果统一加浅灰底,浅色主题复用 --bg-panel(#FAFAFA)。
+ 16px 圆角只属于答案块,不改变其它卡片的圆角;12px 内边距让文字避开圆角。 */
+.answered {
+ --answered-radius: 16px;
+ --answered-padding: 12px;
+ width: fit-content; max-width: 100%; padding: var(--answered-padding);
+ background: var(--bg-panel); border-radius: var(--answered-radius);
+ font-size: var(--t-mini); line-height: var(--lh-row);
+}
+/* 视觉方向答案带缩略图,使用内容卡同档的 12px 圆角。 */
+.answered.mod-visual-answer { --answered-radius: var(--radius-lg); }
/* 「已确认」用绿 —— 绿在这套系统里只有一个意思:这件事定了。
之前它是灰的,和「执行计划」「读了 3 个文件」那些过程行同一档颜色,
回看时一眼扫过去分不出哪条是【你做的决定】、哪条只是 agent 干过的活。
@@ -2167,6 +2442,10 @@ button.att-d:hover { border-color: var(--border-strong); }
一个不带勾的绿词在一屏绿勾里反而更跳。 */
.answered .k { margin-bottom: 3px; color: var(--brand-text); }
.answered .ab { color: var(--text); }
+/* 颜色和数值的短答案行内部垂直居中;卡片位置及其它回答的排版不变。 */
+.answered .ab.mod-value { display: flex; align-items: center; }
+.answered .ab.mod-value > .ak { flex: none; }
+.answered .ab.mod-value > :last-child { min-width: 0; }
/* 只用颜色分层,不再叠字重。答案是 --text-strong、旁边的关键词 .ak 是 --text-soft,
两档颜色已经把"这是答案"和"这是问的哪件事"分开了;再加一档字重是同一件事
说两遍。规则不能删 —— 有浏览器默认的 700,删了反而更重。 */
@@ -2179,7 +2458,7 @@ button.att-d:hover { border-color: var(--border-strong); }
加上之后每一行都自足:扫一眼就知道"这是在说页面"。
词用常规字重的灰,答案才是深色 600 —— 重点词是坐标不是内容,
两个都加粗就分不出哪个是你的回答。 */
-.answered .ak { margin-inline-end: 6px; color: var(--text-soft); font-weight: 400; }
+.answered .ak { margin-inline-end: 6px; color: var(--text-soft); font-weight: 500; }
.answered .al li + li { margin-top: 2px; }
/* 缩略图另起一行,放在文字下面,不跟文字并排。
并排时它跟一行字的高度对不上 —— 字有基线,方块没有,怎么对都差一点,
@@ -2207,8 +2486,10 @@ button.att-d:hover { border-color: var(--border-strong); }
.tool {
display: flex; align-items: center; gap: 8px;
padding: 7px 11px; border: 1px solid var(--border); border-radius: var(--radius);
- background: var(--bg); font-size: var(--t-body); color: var(--text); line-height: var(--lh-row);
+ background: var(--bg); font-size: var(--t-body); color: #A3A3A3; line-height: var(--lh-row);
}
+/* 已完成的配套插图结果行更紧凑,圆角使用 4px 控件档。 */
+.tool.mod-image-result { border-radius: var(--radius-sm); }
.tool + .tool { margin-top: 6px; }
/* 折叠块一律满宽,卡片跟着内容。
------------------------------------------------------------
@@ -2223,8 +2504,8 @@ button.att-d:hover { border-color: var(--border-strong); }
落单的。缩略图靠右:.tool .nm 默认 flex:1 会吃掉剩余空间,把图顶到行尾,
这里正是要这个效果 —— 左边一句"生成了什么",右边是生成的东西本身。 */
.tool .nm { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
-.tool .nm code { font-family: var(--mono); font-size: var(--t-mini); color: var(--text-strong); }
-.tool .ms { flex: none; font-family: var(--mono); font-size: var(--t-cap); color: var(--text-soft); }
+.tool .nm code { font-family: var(--mono); font-size: var(--t-mini); color: #A3A3A3; }
+.tool .ms { flex: none; font-family: var(--mono); font-size: var(--t-cap); color: #A3A3A3; }
/* 工具行前面那枚图标标【是哪类调用】,不标成没成。
------------------------------------------------------------
@@ -2251,13 +2532,13 @@ button.att-d:hover { border-color: var(--border-strong); }
点走 currentColor,失败那行由下面 .tool.is-fail .ti 转红,记号照样一眼可见。
点由 .ti:empty::before 画:标记里 .ti 留空就有,不必再挂一枚 svg。
下面 .ti > svg 那两条留着 —— 哪天某一类真需要单独标一枚图标,塞进去即可用。 */
-.tool .ti { flex: none; width: 15px; height: 15px; display: grid; place-items: center; color: var(--text-strong); }
-.ti > svg { width: 14px; height: 14px; color: var(--text-soft); }
+.tool .ti { flex: none; width: 15px; height: 15px; display: grid; place-items: center; color: #A3A3A3; }
+.ti > svg { width: 16px; height: 16px; color: #A3A3A3; }
.tool.is-fail .ti > svg,
.fold.is-fail > summary .ti > svg { color: var(--red); }
/* 计划里的序号占图标那一格 —— 计划的每一条还没跑,没有"哪类调用"可标,
序号才是它此刻唯一的身份。宽度对齐 .ti,一摞行的左缘不会因为换了内容而错开。 */
-.tool .pk { flex: none; width: 15px; text-align: center; font-family: var(--mono); font-size: var(--t-cap); color: var(--text-soft); }
+.tool .pk { flex: none; width: 15px; text-align: center; font-family: var(--mono); font-size: var(--t-cap); color: #A3A3A3; }
.tool.is-fail .ti { color: var(--red); }
/* 非主产物的文件:文件名【就是】打开它的入口,不另立卡片。
------------------------------------------------------------
@@ -2274,7 +2555,7 @@ button.att-d:hover { border-color: var(--border-strong); }
.tool .fn code { font-family: var(--mono); font-size: var(--t-mini); color: var(--text-strong);
text-underline-offset: 2px; transition: text-decoration-color var(--duration-faster) var(--ease-out); }
.tool .fn:hover code { text-decoration: underline; text-decoration-color: var(--text-soft); }
-.tool.is-fail .fn code { color: var(--text); }
+.tool.is-fail .fn code { color: #A3A3A3; }
/* 跑命令这一行本身就是可折叠的:输出是它吐出来的,不是它旁边的另一块。
------------------------------------------------------------
终端块动辄几十行,摊在流水里会把它上下的记录顶得老远,而多数时候你只想
@@ -2285,6 +2566,9 @@ button.att-d:hover { border-color: var(--border-strong); }
按钮做同一件事 —— 而且按钮嵌在 summary 里,点它会连带把折叠也切了。 */
/* 折叠行里的那一格同理 —— 同一个动作行,收起和摊开不该长两个样。 */
.fold > summary .ti { flex: none; width: 15px; height: 15px; display: grid; place-items: center; color: var(--text-strong); }
+/* 工具调用图标占 16px;没有图标的行首圆点和计划序号保持原尺寸。 */
+.tool .ti:has(> svg),
+.fold > summary .ti:has(> svg) { width: 16px; height: 16px; }
.ti:empty::before { content: ""; width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.fold.is-fail > summary .ti { color: var(--red); }
.fold > summary .why { flex: none; font-size: var(--t-cap); font-weight: 600; color: var(--red); }
@@ -2297,14 +2581,14 @@ button.att-d:hover { border-color: var(--border-strong); }
所以 .nm 在有改动量时收成 flex:0 1 auto(只占文字宽),由 .dst 接过那份
auto 外边距去顶住右侧的耗时。 */
.tool:has(.dst) .nm { flex: 0 1 auto; }
-.tool .dst { flex: none; margin-inline-end: auto; font-family: var(--mono); font-size: var(--t-cap); font-variant-numeric: tabular-nums; color: var(--text-soft); }
+.tool .dst { flex: none; margin-inline-end: auto; font-family: var(--mono); font-size: var(--t-cap); font-variant-numeric: tabular-nums; color: #A3A3A3; }
.tool .dst i { font-style: normal; }
.tool .dst i + i { margin-inline-start: 5px; }
/* 红只标错误本身,不染内容。
原来整行(读取什么、耗时)全是红,"读取 规范.pdf"是这一步在做的事,
不是错误;耗时更只是数据。一整行红反而让真正的错误标记淹没在里面。
现在:行文字回正常色、耗时回常规灰,只剩「失败」两个字是红的。 */
-.tool.is-fail { border-color: var(--red-border); background: var(--red-bg); color: var(--text); }
+.tool.is-fail { border-color: var(--red-border); background: var(--red-bg); color: #A3A3A3; }
/* 同上:不加下划线,与「重发」保持同一条规则 */
.tool.is-fail .why { font-size: var(--t-cap); font-weight: 600; color: var(--red); }
.tool.is-fail .why:hover { color: color-mix(in srgb, var(--red) 70%, var(--text-strong)); }
@@ -2471,6 +2755,7 @@ button.att-d:hover { border-color: var(--border-strong); }
能滚,它是一张卡的体量,却顶着控件的圆角,看着就比同屏的卡"硬"。
12px 和报错卡、Plan 卡、澄清卡是同一档 —— 同样体量的东西用同样的角。 */
.fold .body.mod-stack .code {
+ --term-section-gap: 8px;
padding: 0; border: 1px solid var(--border); border-radius: var(--radius-lg);
background: var(--bg-panel); overflow: hidden;
}
@@ -2484,7 +2769,7 @@ button.att-d:hover { border-color: var(--border-strong); }
撤掉之后这一块只剩它真正要给的东西:执行了什么、吐出了什么。 */
.term {
max-height: 104px; overflow-y: auto; padding: 9px 11px;
- font-family: var(--mono); font-size: var(--t-cap); line-height: 1.65; color: var(--text-muted);
+ font-family: var(--mono); font-size: var(--t-cap); line-height: 1.65; color: #A3A3A3;
}
.term div { white-space: pre-wrap; }
/* 命令自己占一块,不塞在卡头当标题。
@@ -2504,15 +2789,18 @@ button.att-d:hover { border-color: var(--border-strong); }
有 $ 的是我输入的,没有的是它吐出来的,不需要再画一道线复述一遍。
一块里两道横线(这里一道、外框一圈)对一段四行的日志来说也已经够重了。 */
.term.mod-cmd {
- border-top: none; border-bottom: none; color: var(--text-strong);
+ border-top: none; border-bottom: none; color: #A3A3A3;
}
.term.mod-cmd + .term { border-top: none; }
+/* 命令与输出之间总间距 8px,两块相接处各占一半;外侧留白保持不变。 */
+.fold .body.mod-stack .code > .term.mod-cmd:has(+ .term) { padding-bottom: calc(var(--term-section-gap) / 2); }
+.fold .body.mod-stack .code > .term.mod-cmd + .term { padding-top: calc(var(--term-section-gap) / 2); }
.term.mod-cmd div { padding-inline-start: 13px; text-indent: -13px; }
.term.mod-cmd div::before { content: "$ "; color: var(--text-faint); }
.term .ok { color: var(--brand-text); }
/* 终端正文用正常深色,不整行红 —— 那是代码/日志内容,不是错误状态本身。
只有行首的 ✗ 标记是红的。 */
-.term .er { color: var(--text-strong); }
+.term .er { color: #A3A3A3; }
.term .er::first-letter { color: var(--red); font-weight: 700; }
/* 卡头右侧的「失败」二字,是这张卡唯一的红 */
/* 状态在前、耗时在后 —— 全文件统一这一个顺序。
@@ -2533,7 +2821,7 @@ button.att-d:hover { border-color: var(--border-strong); }
.imgs { display: grid; grid-auto-flow: column; grid-auto-columns: 84px; gap: 6px; width: fit-content; max-width: 100%; }
/* 独立出现时不带内边距;套进卡里就得跟卡的其他行一样留边,否则图贴着卡边。 */
.card > .imgs { padding: 10px 11px; }
-.shot { position: relative; aspect-ratio: 3/4; border-radius: var(--radius-sm); overflow: hidden; border: 1px solid var(--border); background: var(--bg-subtle); }
+.shot { position: relative; aspect-ratio: 3/4; border-radius: var(--radius-lg); overflow: hidden; border: 1px solid var(--border); background: var(--bg-subtle); }
/* 生图的占位跟附件缩略图共用 .mini —— 全站只有一种占位灰。
① 那是凭空发明的"四张图不一样"的效果,而占位图的职责只是压住范围,
画出差异反而抢注意力(绿色那块尤其像个状态,不像一张图);
@@ -2551,7 +2839,7 @@ button.att-d:hover { border-color: var(--border-strong); }
信号交给内容本身:旁边三格都填着图,这一格是空的,中间还摆着
「↻ 重试」—— 空 + 一个动作按钮,已经说完了"这张没成功、你可以再来一次"。
红只留给「重试」两个字,那是要点的那一个点。 */
-.shot.is-fail { display: grid; place-items: center; }
+.shot.is-fail { display: grid; place-items: center; border-radius: var(--radius); }
/* 跟附件托盘里那枚重试同一副样子:图标在上、文字在下,整格都是热区。
两处是同一个动作(这一张没成,再来一次),不该有两种画法 ——
原来这里是横排 inline-flex,而且标记里连图标都没有,只剩两个红字。 */
@@ -2633,33 +2921,36 @@ button.att-d:hover { border-color: var(--border-strong); }
它们本来就该待在角上,不该横在画面中央。
数量随产物类型变(HTML 两个、其余一个),所以用 flex 靠右而不是各自定位 ——
少一个的时候整排自己往右收,右缘始终齐。
- 12px 的边距四角同一个数:图卡、视频卡并排时,贴边的距离对得上。 */
+ 8px 的边距四角同一个数:图卡、视频卡并排时,贴边的距离对得上。 */
.art .acts {
- position: absolute; inset-inline-end: 12px; top: 12px; z-index: 2;
+ position: absolute; inset-inline-end: 8px; top: 8px; z-index: 2;
display: flex; justify-content: flex-end; gap: 4px;
}
/* 一枚胶囊:压在产物图上的东西只有一类 —— "拿这份产物干什么"。
- 自带黑底而不是裸白字,底下是产物本身,可能是任何一张图。
+ 深色半透明底保留白字对比,背景模糊让缩略图透出柔和的颜色。
inline-flex + 6px 的缝是给「导出」前面那枚箭头留的:圈里一支向下的箭头,
它说的是"落到本地",而「发布」说的是"送出去" —— 两个方向相反的动作并排,
给其中一个加上方向,那一排就不必逐字读了。 */
.art .acts button {
flex: none; display: inline-flex; align-items: center; gap: 6px;
- padding: 2px 9px; border-radius: var(--radius-pill);
- /* 产品指定 #353535 的实底(原来是 44% 的半透明黑)。
- 半透明的好处是"底下是什么颜色都能压得住",代价是【每张卡上的这枚都不一样】:
- 压在浅图上偏灰、压在深图上几乎看不见边,一排卡看过去按钮深浅不齐。
- 实底把这件事定死:它是一枚固定的控件,不随底下那张图漂移。 */
- background: #353535; color: #fff;
- font-size: var(--t-cap); font-weight: 600; cursor: pointer;
+ padding: 4px 8px; border-radius: var(--radius-pill);
+ /* 只虚化按钮背后的缩略图;内描边不占尺寸,文字与图标保持清晰。 */
+ background: rgb(18 18 18 / 60%); color: #fff;
+ -webkit-backdrop-filter: blur(var(--glass-regular-blur)) saturate(140%);
+ backdrop-filter: blur(var(--glass-regular-blur)) saturate(140%);
+ box-shadow: inset 0 0 0 1px var(--overlay-glass-edge), 0 2px 8px rgb(0 0 0 / 12%);
+ font-size: var(--font-size-12); font-weight: 600; cursor: pointer;
transition: background-color var(--duration-faster) var(--ease-out);
}
-/* 12px:比 caption 的 12px 字号略大一点点会显得图标压着字,同号最稳。
- -1px 的 margin 把 svg 自带的视觉留白吃掉,让圈和字看起来一样高。 */
+/* 图标保留 12px; -1px 的 margin 吃掉 svg 自带的视觉留白。 */
.art .acts button svg { flex: none; width: 12px; height: 12px; margin-inline-start: -1px; }
-/* hover 往下压一档到 #202020(全稿"最深"那一档,勾的底片也是它):
- 实底之后不能再靠加深透明度了,得给一个实实在在的第二档。 */
-.art .acts button:hover { background: #202020; }
+/* 悬停加深半透明底,继续保留磨砂效果。 */
+.art .acts button:hover { background: rgb(18 18 18 / 72%); }
+/* 不支持背景模糊时保留原来的深色底,保证任意缩略图上的可读性。 */
+@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
+ .art .acts button { background: #353535; }
+ .art .acts button:hover { background: #202020; }
+}
/* ---- 全局弹窗:联系支持 ---- */
/* 求助不挂在报错卡里,单独开一个压在整个应用上的弹窗。
@@ -2669,7 +2960,7 @@ button.att-d:hover { border-color: var(--border-strong); }
会来点这里的人已经卡住了。 */
.ovl { display: grid; place-items: center; padding: 18px; border-radius: var(--radius);
background: color-mix(in srgb, var(--text-strong) 26%, transparent); }
-.modal { width: 100%; max-width: 316px; border-radius: var(--radius-lg); background: var(--bg); box-shadow: var(--shadow-lg); overflow: hidden; }
+.modal { width: 100%; max-width: 316px; border-radius: var(--radius-2xl); background: var(--bg); box-shadow: var(--shadow-lg); overflow: hidden; }
/* 标题线不贯穿:左右各收 13px,跟正文的内边距对齐 —— 线的两端落在内容的
左右边界上,而不是撞到弹窗的圆角边上。贯穿的线是"把这张卡切成两半",
收进来的线才是"标题到这儿为止"。
@@ -2810,10 +3101,10 @@ button.att-d:hover { border-color: var(--border-strong); }
.fb .fin.mod-stop i { flex: none; width: 5px; height: 5px; border-radius: 50%; background: var(--text-faint); }
.fb button {
display: grid; place-items: center; width: 26px; height: 26px;
- border-radius: var(--radius-sm); color: var(--text-soft);
+ border-radius: var(--radius-sm); color: var(--message-muted-ink);
transition: background-color var(--duration-faster) var(--ease-out), color var(--duration-faster) var(--ease-out);
}
-.fb button:hover { background: var(--bg-fill-secondary); color: var(--text-strong); }
+.fb button:hover { background: var(--bg-fill-secondary); color: var(--message-muted-ink); }
/* 赞选中的底比「过了」那一档【浅一级】:同一个 #00FF04,掺 55% 白。
------------------------------------------------------------
色号没换,换的是浓度 —— 这枚底是 26×26 的实心方块,而 .mk.is-ok 那枚
@@ -2858,12 +3149,12 @@ button.att-d:hover { border-color: var(--border-strong); }
font-size: var(--t-cap); font-weight: 500; color: var(--brand-text);
}
/* 线底下那一句。新会话此刻只有上下文、还没有话 —— 所以这里不编一段对话出来,
- 只交代"带过来的是什么、接下来轮到谁"。它比标题还轻一档(--text-soft):
+ 只交代"带过来的是什么、接下来轮到谁"。它比标题还轻一档(#A3A3A3):
分界上的标题是这一段的名字,这句只是脚注。 */
/* 跟着上面那条分界【居中】:它是这条线的脚注,不是新会话里的第一条消息 ——
左对齐会让它读成"新会话已经开口说了一句",而这一刻新会话还没有内容。
居中就还它一个附注的身份,和线、标题共用同一条中轴。 */
-.fork-note { display: flex; align-items: center; justify-content: center; gap: 6px; padding-bottom: 2px; font-size: var(--t-cap); color: var(--text-soft); }
+.fork-note { display: flex; align-items: center; justify-content: center; gap: 6px; padding-bottom: 2px; font-size: var(--t-cap); color: var(--message-muted-ink); }
.fork-note svg { flex: none; width: 12px; height: 12px; }
/* 点出来的那两块要"落"一下:静态稿里它们本来就在,分不出是点击的结果;
落这一下(4px + 淡入)说的是"这是刚才那一下带来的"。
@@ -2921,7 +3212,7 @@ button.att-d:hover { border-color: var(--border-strong); }
.nexts button {
display: flex; align-items: center; gap: 8px; width: 100%;
padding: 9px 11px; border: none;
- background: none; font-size: var(--t-mini); color: var(--text); text-align: left;
+ background: none; font-size: var(--t-mini); font-weight: 500; color: var(--text); text-align: left;
transition: background-color var(--duration-faster) var(--ease-out), color var(--duration-faster) var(--ease-out);
}
.nexts button:hover { background: var(--bg-panel); color: var(--text-strong); }
@@ -2988,109 +3279,73 @@ button.att-d:hover { border-color: var(--border-strong); }
line-height: var(--lh-row);
}
/* 22px 的按钮盒对 18px 的首行,上移 2px 才与第一行同心 */
-.qops { display: flex; gap: 1px; margin-top: -2px; }
+.qops { flex: none; display: flex; gap: 1px; margin-top: -2px; }
.qops button { display: grid; place-items: center; width: 22px; height: 22px; border-radius: var(--radius-sm); color: var(--text-soft); }
+.qops button.mod-steer {
+ display: inline-flex; align-items: center; justify-content: center; gap: 4px;
+ width: auto; padding: 0 4px; font-size: inherit; white-space: nowrap;
+}
.qops button:hover { background: var(--bg-fill-secondary); color: var(--text-strong); }
-.qops button svg { width: 12px; height: 12px; }
+.qops button svg { width: 14px; height: 14px; }
/* ---- 升级 ---- */
-/* 圆角走 --radius-lg(12px)而不是别处的 --radius(8px):这张卡里套着一排刻度,
- 刻度是齐边抵到卡的两侧的 —— 角越硬,那排小竖线越像被卡的边"切"了一下。
- 12 是这套 token 的最上一档,和音频条(.aud)同一档。 */
+/* 额度卡采用上下两区;身份说明表继续使用原有浅色外壳。 */
.up { border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--bg); overflow: hidden; }
-/* 两行了(数字 + 后果),顶对齐,按钮跟第一行齐平 */
-/* 卡分两段:上段是「还剩多少、要不要充」(数字 + 后果 + Upgrade),
- 下段是那排刻度。中间加一条通栏分割线 —— 上段是话和动作,下段是量,
- 两件事挨着排就成了一坨;有条线,眼睛才知道读完上面可以停一下。
- 线走通栏(不跟着 11px 内边距缩)—— 它标的是卡内两段的边界,
- 边界该抵到卡的两边;缩进去就成了一段内容自己的装饰。 */
-.up .h { display: flex; align-items: center; gap: 8px; padding: 10px 11px 0; }
-.up .h .amt { flex: 1; min-width: 0; }
-/* 「剩余额度 $3.20」是这张卡的主句,按产品指定单独定了一档:
- 14px(--t-lead,和组件名/卡片标题同级)、600、#353535 —— 比正文大一号、
- 重一档,颜色比 --text-strong(#202020)退半档,免得整句压过后面那个数。
- 金额本身用产品指定的 #F8672F:同一支橙贯穿"额度"这件事,
- 数字是这张卡唯一要人一眼抓到的东西,颜色只给它。 */
-.up .h .amt .n { display: block; font-size: var(--t-lead); font-weight: 600; color: #353535; }
-/* 还有余额时是橙(#F8672F):同一支橙贯穿"额度"这件事,
- 数字是这张卡唯一要人一眼抓到的东西,颜色只给它。
- ------------------------------------------------------------
- 归零【换红】:橙是"注意,快没了",红是"已经不能用了" —— 这两句话
- 分量不一样,同一支橙说两遍,人得读完下面那行字才知道自己在哪一档。
- 这张卡上红只此一处:刻度条归零后是灰的(那是"没有额度"的槽,不是告警),
- 「现在无法开始新任务」也不染色 —— 红只标那个数,眼睛才有落点。 */
-.up .h .amt b { font-family: var(--mono); font-weight: 700; color: #f8672f; }
-.up .h .amt.is-out b { color: var(--red); }
-/* 只报数字不报后果,人没有行动的理由 —— $3.20 是多是少他不知道。
- 这一行讲的是"不充会怎样",不是促销。刻意不写"还能跑 N 轮"之类的
- 估算:单轮消耗随任务浮动,给个数反而是承诺了做不到的精确。 */
-/* 后果说明用 --text-soft(次级文字档),比金额浅一档 ——
- 它是补充说明,不该和"剩余额度 $3.20"抢同一层。
- 耗尽态例外:那条不是补充说明而是硬结论(发不出去了),保持红色。 */
-/* 后果句【单独占一行】,不再挤在 Upgrade 按钮旁边。
- 在 .h 那一行里,它的可用宽度是卡宽减掉按钮 —— 二十来个字必然折行,
- 而且折下来的尾巴常常只剩一两个字(「上」),一行半的形状比两行还难看。
- 搬到按钮下面就是整卡宽,这句话一行放得下,金额和按钮那一行也干净了。
- 顺带把 .h 改成垂直居中:那一行现在只剩「剩余额度 $3.20」和按钮两样,
- 顶对齐是为了让按钮跟【第一行】文字齐平,一行的时候居中才是齐的。 */
-/* 说明句下面那条分割线跟着刻度条一起去掉了 —— 它当初是为了把这句话
- 和底下那排刻度分开,刻度没了,线下面就什么都没有,成了一条收尾的横杠。
- (刻度条那段 .up .meter 的样式留着没删:标记里去掉了,哪天要回来就是
- 把 加回去。) */
-.up .why {
- margin: 6px 11px 10px;
- font-size: var(--t-cap); line-height: var(--lh-row); color: var(--text-soft);
+.up:not(.branch) {
+ --upgrade-card-bg: #121212;
+ --upgrade-card-text: #ffffff;
+ --upgrade-button-ink: #121212;
+ position: relative; isolation: isolate;
+ padding: 16px; border: none; border-radius: 16px;
+ background: var(--upgrade-card-bg); color: var(--upgrade-card-text);
}
-/* 说明句不跟着变色 —— 颜色只给那个数和进度条。
- 额度归零时该看的是「$0.00」和那条已经走到头的刻度,那是事实;
- 「现在无法开始新任务」是它的后果,跟着染色就成了三处告警,
- 一多,眼睛反而不知道该落在哪。灰字加橙数,层次才出来。 */
-/* 进度不是一条线,是一排刻度块。
- ------------------------------------------------------------
- 一条连续的线只说"占了多长";切成一排等宽的小块,读出来的是【还剩几格】——
- 额度本来就是可数的东西(还能跑几轮),离散的记号比连续的长度更贴事实,
- 也更容易一眼估量:数格子比量长度快。
- 实现【不铺 N 个
】:整块用一层 repeating-linear-gradient 当遮罩切开,
- 遮罩对元素和它的子元素同时生效 —— 底下那排灰刻度和上面那截彩色填充
- 被同一副齿切,天然对齐,而填充仍然只是一个百分比宽度的实心块,
- 16% / 100% 这些数照写不误,不用换算成"几格"。
- 3px 齿 + 3px 缝、10px 高:齿比缝略窄会显得散,等宽最稳;
- 高度给到宽的三倍多,才是参考里那种竖条的比例,4px 那种是线不是块。
- 左右收 11px 跟卡头的文字对齐 —— 原来它是通栏贴着卡底的一条线,
- 现在它是一排记号,得站在内容的左边缘上。 */
+/* 保留提供的 SVG,旋转后放在右上角:小星在上、大星在下。 */
+.up.mod-glow::after {
+ content: ''; position: absolute; inset-inline-end: 0; top: 0; z-index: -1;
+ width: 48px; height: 62px; pointer-events: none; transform: rotate(180deg);
+ background: url("data:image/svg+xml,%3Csvg%20width%3D%2267%22%20height%3D%2287%22%20viewBox%3D%220%200%2067%2087%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%3Cpath%20opacity%3D%220.5%22%20d%3D%22M25.1408%2059.8603L30.3371%2053.7463C34.9617%2048.3057%2041.3853%2044.8059%2048.3422%2043.9371L57.9258%2042.7402C60.9727%2042.3598%2062.1548%2038.4443%2059.8294%2036.4355L52.7432%2030.3142C47.2969%2025.6094%2043.8543%2018.9176%2043.1264%2011.6212L42.2837%203.17174C41.9709%200.036192%2038.1292%20-1.12822%2036.1342%201.30788L30.7582%207.87237C26.1159%2013.5412%2019.5483%2017.199%2012.4125%2018.0902L3.12809%2019.2497C0.0811039%2019.6301%20-1.10108%2023.5456%201.22452%2025.5544L8.53913%2031.873C13.8488%2036.4597%2017.2591%2042.9402%2018.0982%2050.0367L19.041%2058.0115C19.4035%2061.0766%2023.1432%2062.2101%2025.1408%2059.8603ZM50.6955%2086.3266L52.1573%2084.6058C54.7633%2081.5378%2058.3849%2079.5636%2062.3081%2079.0724L65.3252%2078.6944C66.957%2078.4901%2067.5894%2076.3956%2066.3442%2075.3194L64.1711%2073.4405C61.1003%2070.7862%2059.1599%2067.0126%2058.7507%2062.8995L58.5112%2060.4887C58.3439%2058.8085%2056.2838%2058.1841%2055.2151%2059.4896L53.682%2061.3632C51.0662%2064.5595%2047.3636%2066.6227%2043.3392%2067.1265L40.4908%2067.4833C38.8593%2067.6877%2038.2269%2069.7822%2039.4718%2070.8584L41.7738%2072.8486C44.7678%2075.4363%2046.6895%2079.0907%2047.1613%2083.0916L47.4263%2085.3357C47.6199%2086.9783%2049.6254%2087.5862%2050.6955%2086.3266Z%22%20fill%3D%22url%28%23paint0_linear_1975_81%29%22%2F%3E%0A%3Cdefs%3E%0A%3ClinearGradient%20id%3D%22paint0_linear_1975_81%22%20x1%3D%2247.8253%22%20y1%3D%2296.362%22%20x2%3D%2247.8253%22%20y2%3D%220%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%0A%3Cstop%20stop-color%3D%22%2300FF08%22%2F%3E%0A%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23121212%22%2F%3E%0A%3C%2FlinearGradient%3E%0A%3C%2Fdefs%3E%0A%3C%2Fsvg%3E") center / contain no-repeat;
+}
+.up .h {
+ display: flex; align-items: center;
+ padding: 0 48px 8px 0; border-bottom: 1px solid rgb(83 83 83 / 40%);
+}
+.up .h .amt { flex: 1; min-width: 0; }
+/* 延续已确认的 16px 字号;标签保持白色,金额用颜色区分余额状态。 */
+.up .h .amt .n {
+ display: block; font-size: var(--font-size-16); line-height: 1.5;
+ font-weight: 400; color: var(--upgrade-card-text);
+}
+.up .h .amt b {
+ font: inherit; font-size: var(--font-size-20); line-height: 1.2; color: #f49624;
+}
+.up .h .amt.is-out b { color: var(--red); }
+/* 下方说明与按钮并排;宽度不足时由内容自动换行,不绑定页面断点。 */
+.up .up-bottom {
+ display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap;
+ gap: 12px 16px; padding-top: 8px;
+}
+.up .why {
+ flex: 1 1 180px; min-width: 0; margin: 0;
+ font-size: var(--font-size-13); line-height: 1.5; font-weight: 400;
+ color: var(--upgrade-card-text);
+}
+.up .up-bottom .btn.mod-primary,
+.up .up-bottom .btn.mod-primary:hover {
+ background: var(--upgrade-surface); color: var(--upgrade-button-ink);
+}
+.up .up-bottom .btn {
+ flex: none; gap: 8px; min-height: 44px; padding: 12px 16px 12px 12px;
+ font-size: var(--font-size-14); line-height: 20px; font-weight: 400;
+}
+.up .up-bottom .btn svg { flex: none; width: 20px; height: 20px; }
+/* 保留旧刻度样式,当前额度卡不显示刻度。 */
.up .meter {
--tick: repeating-linear-gradient(90deg, #000 0 3px, transparent 3px 6px);
height: 10px; margin: 10px 11px; background: var(--border-soft);
-webkit-mask-image: var(--tick); mask-image: var(--tick);
}
.up .meter i { display: block; height: 100%; background: var(--amber); }
-/* 耗尽那一档收成中性灰,不是红。
- ------------------------------------------------------------
- 红是"出事了,去处理";而额度用完不是故障,是一件正常会发生、也早就预告过的事
- ——「额度不足」那一档已经用琥珀提前警告过一轮了。到这一步该说的是【这条已经
- 没有余量了】,一格不剩的刻度本身就把这句话说完了,再刷成红只是把音量拧大,
- 并不多给一个信息。
- 而且这一屏上红另有专职:19 · 报错、上传失败、步骤取消 —— 那几处是真的出了岔子。
- 额度耗尽跟着用红,红这个记号在这份稿子里就不再只有一个意思。
- ------------------------------------------------------------
- 用 --border-strong 而不是刻度槽那档 --border-soft:两者一样色的话整条就
- 跟空槽没有区别,"满格但已耗尽"和"这里没有条"就分不出来了。深浅两套主题里
- --border-strong 都比槽亮一档,这个分界不会因为换主题而消失。 */
.up .meter i.is-out { background: var(--border-strong); }
-/* 底色不动(仍是 --text-strong 的黑),只换字和图标的颜色。
- hover 也得写一遍:.btn.mod-primary:hover 会把 color 改回 --bg,
- 不覆盖的话鼠标一压上去绿就掉了。 */
-.up .h .btn.mod-primary,
-.up .h .btn.mod-primary:hover { color: var(--upgrade-ink); }
-/* 这一枚四边等距:上下左右统一 8px(mod-sm 原本是 4px 11px)。
- ------------------------------------------------------------
- 胶囊按钮扁着放通常没问题 —— 它在一排按钮里,靠左右留白和邻居分开就够了。
- 但这一枚是【单独站在卡右侧】的一枚,左边是两行字(金额 + 后果),它是这张卡
- 唯一的出口。四边等距把它撑成一个方方正正的块,高度正好接近左边那两行的高度,
- 一整张卡就是"一段话 + 一个按钮"两块并排,而不是一段话旁边贴了一条细边。
- 只作用在 .up 的卡头里:别处的 mod-sm(弹窗里的「加入」、报错卡那几枚、
- 反馈弹窗的取消/提交)还是成排出现的,照旧用扁的那一档。 */
-.up .h .btn { padding: 8px; }
.branch { border-top: 1px solid var(--border-soft); }
.branch .r { display: flex; gap: 8px; padding: 6px 11px; border-top: 1px solid var(--border-soft); font-size: var(--t-cap); line-height: var(--lh-row); color: var(--text-muted); }
.branch .r:first-child { border-top: none; }
@@ -3110,7 +3365,7 @@ button.att-d:hover { border-color: var(--border-strong); }
下一行的红标题已经说了。
红最后只剩两处:那枚感叹号和「任务失败」四个字 —— 它们在内容里,不在外壳上,
扫视时先看到的是一张卡,读进去才知道是失败,这个顺序才对。 */
-.errb { border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--bg); padding: 10px 11px; }
+.errb { border: 1px solid var(--border); border-radius: var(--radius-2xl); background: var(--bg); padding: 10px 11px; }
/* 标题那一行底下压一条线,把「出了什么事」和「详情」分开。
线【不贯穿】—— 它落在内容宽度上(卡的左右内距各 11px 天然把它收进来),
而不是从卡的这一边拉到那一边:贯穿的线是把一张卡切成两张卡的画法,
@@ -3326,7 +3581,7 @@ button.att-d:hover { border-color: var(--border-strong); }
/* 第几次 / 共几次:等宽数字,数字跳动时这一行不会跟着抖。
字重跟前面那句话一样是 400 —— 这一行整句("正在重新连接 2/5")是一条状态,
不是一条要你读重点的通知,把次数单独加粗等于在里面挑一个词喊出来。 */
-.tool .cnt { margin-inline-start: 6px; font-variant-numeric: tabular-nums; font-weight: 400; color: inherit; }
+.tool .cnt { margin-inline-start: 6px; font-variant-numeric: tabular-nums; font-weight: 500; color: inherit; }
/* 这一行的字也走流光,和 3 · Thinking 那句同一条动画(15 秒扫一次)——
两处说的是同一件事:「有个东西在自己跑,你不用管」。既然是同一句话,
就该长同一个样,而不是一处在扫、一处干站着。
@@ -3577,7 +3832,7 @@ button.att-d:hover { border-color: var(--border-strong); }
}
.steps li.is-done .tt::after,
.steps li.is-skip .tt::after { transform: scaleX(1); opacity: 1; }
-.steps li.is-skip { color: var(--text-soft); }
+.steps li.is-skip { color: var(--plan-other-text); }
/* ---- 卡头:图标在全部做完时换成绿勾,计数滚一格 ---- */
/* 两枚图标叠在同一格里换,不是并排出现又消失 —— 换的是同一个位置上的同一件
@@ -3667,24 +3922,55 @@ button.att-d:hover { border-color: var(--border-strong); }
落地为止,给一个马上要消失的状态配一个跳动的秒数,只会把注意力钉在一个
从此不再相关的数字上。总耗时最后在回合状态行里有。
------------------------------------------------------------
- 不套框:上游是把滚动区放进一张 Card(圆角 + 描边 + 阴影)。这里不要 ——
- 它是这一轮流水的第一段,和后面的步骤、已完成同一列往下读,单给它画一圈边
- 等于把开场白做成一张卡。渐隐本身已经说清了「上下还有」,边框是重复的话。 */
+ 只铺浅灰底、不加描边和阴影:16px 圆角把滚动区收成完整底卡,
+ 上下各留 8px 与标题和下一段分开;渐隐只落在卡内文字上。 */
.fold.mod-flat > .body.mod-stream {
/* 96px ≈ 5 行,和折叠块里 .mod-scroll 用的是同一个高度,
这一屏里所有"够看但不占屏"的窗口都是这一档。 */
--stream-h: 96px;
/* 渐隐带占上下各约三分之一,和上游 80/150 的比例一致。 */
--stream-fade: 32px;
+ /* 固定底卡使用独立浅灰底,不改变 Thinking 标题行和外层卡片。 */
+ --stream-surface: #FAFAFA;
+ --stream-pad: 8px;
+ --stream-gap: 8px;
height: var(--stream-h);
+ margin-block: var(--stream-gap);
+ position: relative;
+ isolation: isolate;
overflow: hidden;
- /* 上下留白一并去掉:窗口顶边贴着 Thinking 那一行,渐隐从第一像素就开始,
- 再垫内边距的话,渐隐会从一段空白里淡出来,看着像内容没对齐。 */
- padding: 0;
- /* 用 mask 而不是上游那两层渐变遮罩 div。
+ background: transparent;
+ border-radius: 16px;
+ opacity: 1;
+ -webkit-mask-image: none;
+ mask-image: none;
+ /* 浅灰底内四边统一留 8px,文字滚动与渐隐仍限制在这扇定高窗口里。 */
+ padding: var(--stream-pad);
+}
+/* 底卡单独铺在最下层,不参与滚动、透明度或渐隐计算。 */
+.fold.mod-flat > .body.mod-stream::before {
+ content: '';
+ position: absolute;
+ inset: 0;
+ z-index: 0;
+ border-radius: inherit;
+ background: var(--stream-surface);
+ pointer-events: none;
+}
+/* 滚动文字单独在底卡上方成层,渐隐只作用在这个文字窗口。
+ 用 mask 而不是上游那两层渐变遮罩 div。
遮罩 div 的前提是"背景色等于某个已知值",它铺一层实底把两端盖住;
可这一块在画廊里坐着 --bg-panel、在场景稿里坐着 --bg,两处不一样,
盖上去必然有一处露色。mask 抠的是元素自己的 alpha,底下是什么颜色都对。 */
+.fold.mod-flat > .body.mod-stream > .stream-viewport {
+ position: relative;
+ z-index: 1;
+ flex: 1 1 auto;
+ min-height: 0;
+ overflow: hidden;
+ background: transparent;
+ opacity: 1;
+ padding: 0;
-webkit-mask-image: linear-gradient(to bottom,
transparent 0, #000 var(--stream-fade),
#000 calc(100% - var(--stream-fade)), transparent 100%);
@@ -3692,9 +3978,8 @@ button.att-d:hover { border-color: var(--border-strong); }
transparent 0, #000 var(--stream-fade),
#000 calc(100% - var(--stream-fade)), transparent 100%);
}
-/* 头和内容之间那条分隔线也去掉。它原本是给「标题 + 一段正文」分层用的,
- 现在上边缘已经是一道渐隐 —— 线压在渐隐上,等于在同一个位置说两遍。 */
-.fold.mod-flat[open] > summary + .body.mod-stream { border-top: 0; padding-top: 0; }
+/* 标题和底卡之间由 8px 外间距分层,不再重复画一条发丝线。 */
+.fold.mod-flat[open] > summary + .body.mod-stream { border-top: 0; }
/* 滚动流里的推理比普通的 .think 淡:--text-strong → --stream-ink(#bdbdbd,
产品指定,定义在 components.css 顶部)。
------------------------------------------------------------
@@ -3702,9 +3987,9 @@ button.att-d:hover { border-color: var(--border-strong); }
过程,它的作用是"还在想"这件事本身,不是逐字读完 —— 跟正文同一档墨
会把注意力钉在一段马上要滚走的字上。淡一档之后它退成背景里的动静,
要看的时候仍然读得清。 */
-.fold.mod-flat > .body.mod-stream > .think { padding: 0; color: var(--stream-ink); }
+.fold.mod-flat > .body.mod-stream > .stream-viewport > .think { padding: 0; font-weight: 400; color: var(--stream-ink); }
/* 段与段之间留一行的气口,不然滚起来是一堵字墙。 */
-.fold.mod-flat > .body.mod-stream > .think + .think { margin-top: 0.75em; }
+.fold.mod-flat > .body.mod-stream > .stream-viewport > .think + .think { margin-top: 0.75em; }
/* 点开折叠不该留一圈蓝框。
------------------------------------------------------------
@@ -4118,6 +4403,7 @@ body { background: var(--bg-subtle); overflow: auto; }
body { margin: 0; }
.od-preview-root {
font-family: var(--sans);
+ font-weight: 500;
font-size: var(--font-size-13);
line-height: 1.5;
color: var(--text);
@@ -4145,6 +4431,7 @@ body { margin: 0; }
思考中
+
两张图的栅格看着是同一套 —— 先量一下列宽和沟槽,对得上就只复刻一次列表页,商品卡抽出来给设置页共用;对不上再分开做。
规格那份 md 里写了断点,得先读完再定。要是断点和图里的列数对不上,以 md 为准 —— 图是某一个宽度下的截屏,md 才是规则。
商品卡里有价格行。价格是数字,得走等宽,不然一列价格对不齐;但商品名是中文,跟着正文字体走。同一张卡里两种字,是有理由的,不是疏忽。
@@ -4157,6 +4444,7 @@ body { margin: 0; }
设置页的行高比列表页矮一档。如果强行统一,列表页那边的商品名会挤;所以统一的是间距刻度,不是每一处的实际取值。
跳转那一步放最后是对的 —— 两页都没搭起来之前,接跳转等于对着空页面调路由。
最后确认一遍前提:这两张图确实是同一个产品的两屏。配色和圆角对得上,是。可以开始。
+
@@ -4428,7 +4716,7 @@ body { margin: 0; }
@@ -4488,9 +4776,13 @@ body { margin: 0; }
14:32