@miliastry/quasar 1.0.6 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/README.md +1 -1
  2. package/dist/Visuals/lyne.css +374 -9
  3. package/dist/Visuals/osu.css +393 -11
  4. package/dist/index.js +10470 -3336
  5. package/dist/index.mjs +10336 -3337
  6. package/dist/types/Analysis/Contracts/AnalysisReport.d.ts +22 -0
  7. package/dist/types/Analysis/Contracts/Contribution.d.ts +68 -0
  8. package/dist/types/Analysis/Contracts/Pass.d.ts +59 -0
  9. package/dist/types/Analysis/Contracts/PipelineContext.d.ts +34 -0
  10. package/dist/types/Analysis/Passes/Analysis/ColorUsageAnalyzer.d.ts +56 -0
  11. package/dist/types/Analysis/Passes/Analysis/GradientAnalyzer.d.ts +111 -0
  12. package/dist/types/Analysis/Passes/Analysis/MergeableColorAnalyzer.d.ts +26 -0
  13. package/dist/types/Analysis/Passes/Analysis/RainbowAnalyzer.d.ts +47 -0
  14. package/dist/types/Analysis/Passes/Analysis/SymbolAnalyzer.d.ts +89 -0
  15. package/dist/types/Analysis/Passes/Analysis/WaveAnalyzer.d.ts +44 -0
  16. package/dist/types/Analysis/Passes/Analysis/__tests__/GradientAnalyzer.test.d.ts +4 -0
  17. package/dist/types/Analysis/Passes/Analysis/__tests__/MergeableColorAnalyzer.test.d.ts +4 -0
  18. package/dist/types/Analysis/Passes/Analysis/__tests__/RainbowAnalyzer.test.d.ts +4 -0
  19. package/dist/types/Analysis/Passes/Analysis/__tests__/WaveAnalyzer.test.d.ts +4 -0
  20. package/dist/types/Analysis/Passes/Decision/DefaultDecision.d.ts +30 -0
  21. package/dist/types/Analysis/Passes/Decision/PaletteRemapDecision.d.ts +169 -0
  22. package/dist/types/Analysis/Passes/Decision/__tests__/DefaultDecision.test.d.ts +4 -0
  23. package/dist/types/Analysis/Passes/Transform/CollapseGradientTransform.d.ts +37 -0
  24. package/dist/types/Analysis/Passes/Transform/MergeColorsTransform.d.ts +28 -0
  25. package/dist/types/Analysis/Passes/Transform/RainbowCollapseTransform.d.ts +19 -0
  26. package/dist/types/Analysis/Passes/Transform/WaveCollapseTransform.d.ts +20 -0
  27. package/dist/types/Analysis/Passes/Utility/CharacterCountAnalyzer.d.ts +19 -0
  28. package/dist/types/Analysis/Pipeline/Pipeline.d.ts +69 -0
  29. package/dist/types/Analysis/Pipeline/PipelineBuilder.d.ts +31 -0
  30. package/dist/types/Analysis/Pipeline/PipelineStage.d.ts +17 -0
  31. package/dist/types/Analysis/Utils/color-utils.d.ts +60 -0
  32. package/dist/types/Analysis/__tests__/Integration.test.d.ts +8 -0
  33. package/dist/types/Analysis/__tests__/PaletteRemap.test.d.ts +14 -0
  34. package/dist/types/Analysis/__tests__/Pipeline.test.d.ts +10 -0
  35. package/dist/types/Analysis/__tests__/RoundTrip.test.d.ts +30 -0
  36. package/dist/types/Analysis/__tests__/SymbolAnalyzer.test.d.ts +11 -0
  37. package/dist/types/Analysis/index.d.ts +40 -0
  38. package/dist/types/BBCode/BBCodeDocumentModel.d.ts +102 -0
  39. package/dist/types/BBCode/BBCodeToGreenNode.d.ts +111 -0
  40. package/dist/types/BBCode/Parser.d.ts +78 -0
  41. package/dist/types/BBCode/index.d.ts +4 -0
  42. package/dist/types/Collab/positions.d.ts +55 -0
  43. package/dist/types/Commands/Command.d.ts +37 -0
  44. package/dist/types/Commands/CommandRegistry.d.ts +48 -0
  45. package/dist/types/Commands/DeleteNode.d.ts +7 -0
  46. package/dist/types/Commands/InsertText.d.ts +8 -0
  47. package/dist/types/Commands/SplitMerge.d.ts +9 -0
  48. package/dist/types/Commands/WrapInTag.d.ts +8 -0
  49. package/dist/types/Commands/index.d.ts +6 -0
  50. package/dist/types/Diff/TreeDiffer.d.ts +52 -0
  51. package/dist/types/Diff/__tests__/TreeDiffer.test.d.ts +1 -0
  52. package/dist/types/Diff/index.d.ts +2 -0
  53. package/dist/types/Edits/EditPlan.d.ts +144 -0
  54. package/dist/types/Edits/Optimizer.d.ts +78 -0
  55. package/dist/types/Edits/Rules/Rule.d.ts +91 -0
  56. package/dist/types/Edits/Rules/dropEmptyTags.d.ts +40 -0
  57. package/dist/types/Edits/Rules/dropRedundantNesting.d.ts +59 -0
  58. package/dist/types/Edits/Rules/index.d.ts +9 -0
  59. package/dist/types/Edits/Rules/mergeAdjacent.d.ts +93 -0
  60. package/dist/types/Edits/Rules/reorderWrappers.d.ts +42 -0
  61. package/dist/types/Edits/Rules/shortenHex.d.ts +30 -0
  62. package/dist/types/Edits/Rules/tagValue.d.ts +56 -0
  63. package/dist/types/Edits/Rules/unwrapInvisibleColor.d.ts +47 -0
  64. package/dist/types/Edits/applyEdits.d.ts +36 -0
  65. package/dist/types/Edits/index.d.ts +6 -0
  66. package/dist/types/Events/EventBus.d.ts +103 -0
  67. package/dist/types/Events/index.d.ts +2 -0
  68. package/dist/types/Formatter/Formatter.d.ts +32 -0
  69. package/dist/types/Formatter/index.d.ts +2 -0
  70. package/dist/types/HTML/HTMLDocumentModel.d.ts +13 -0
  71. package/dist/types/HTML/HTMLToGreenNode.d.ts +4 -0
  72. package/dist/types/Incremental/BracketIndex.d.ts +101 -0
  73. package/dist/types/Incremental/ChangeTracker.d.ts +69 -0
  74. package/dist/types/Incremental/IncrementalParser.d.ts +246 -0
  75. package/dist/types/Incremental/__tests__/BracketIndex.test.d.ts +1 -0
  76. package/dist/types/Incremental/__tests__/IncrementalParser.test.d.ts +1 -0
  77. package/dist/types/Incremental/index.d.ts +4 -0
  78. package/dist/types/Lexer/BBCodeLexer.d.ts +74 -0
  79. package/dist/types/Lexer/Lexer.d.ts +54 -0
  80. package/dist/types/Lexer/index.d.ts +4 -0
  81. package/dist/types/Linter/Linter.d.ts +58 -0
  82. package/dist/types/Linter/index.d.ts +2 -0
  83. package/dist/types/Markdown/MarkdownAST.d.ts +122 -0
  84. package/dist/types/Markdown/MarkdownDocumentModel.d.ts +15 -0
  85. package/dist/types/Markdown/MarkdownLexer.d.ts +155 -0
  86. package/dist/types/Markdown/MarkdownParser.d.ts +42 -0
  87. package/dist/types/Markdown/MarkdownToGreenNode.d.ts +6 -0
  88. package/dist/types/MilHibri/MilHibriDocumentModel.d.ts +21 -0
  89. package/dist/types/Model/DocumentModel.d.ts +318 -0
  90. package/dist/types/Model/NodeFactory.d.ts +29 -0
  91. package/dist/types/Model/TagRegistry.d.ts +165 -0
  92. package/dist/types/Model/index.d.ts +5 -0
  93. package/dist/types/Plugins/PluginAPI.d.ts +44 -0
  94. package/dist/types/Plugins/PluginRegistry.d.ts +81 -0
  95. package/dist/types/Plugins/index.d.ts +3 -0
  96. package/dist/types/Queries/QueryEngine.d.ts +32 -0
  97. package/dist/types/Queries/index.d.ts +1 -0
  98. package/dist/types/Reconciler/SurgicalReconciler.d.ts +23 -0
  99. package/dist/types/RenderPipeline/RenderPipeline.d.ts +46 -0
  100. package/dist/types/RenderPipeline/RenderTree.d.ts +55 -0
  101. package/dist/types/RenderPipeline/index.d.ts +4 -0
  102. package/dist/types/Repair/NestingRepair.d.ts +48 -0
  103. package/dist/types/Repair/index.d.ts +1 -0
  104. package/dist/types/Semantic/SemanticAnalyzer.d.ts +321 -0
  105. package/dist/types/Semantic/index.d.ts +2 -0
  106. package/dist/types/Symbols/SymbolTable.d.ts +47 -0
  107. package/dist/types/Symbols/index.d.ts +1 -0
  108. package/dist/types/Syntax/GreenNode.d.ts +154 -0
  109. package/dist/types/Syntax/GreenNodePool.d.ts +134 -0
  110. package/dist/types/Syntax/NodeMatcher.d.ts +75 -0
  111. package/dist/types/Syntax/RedNode.d.ts +280 -0
  112. package/dist/types/Syntax/RedNodeStore.d.ts +116 -0
  113. package/dist/types/Syntax/TreeBuilder.d.ts +54 -0
  114. package/dist/types/Syntax/__tests__/GreenNode.test.d.ts +1 -0
  115. package/dist/types/Syntax/__tests__/RedNode.test.d.ts +1 -0
  116. package/dist/types/Syntax/__tests__/RedNodeStore.test.d.ts +1 -0
  117. package/dist/types/Syntax/greenEdit.d.ts +64 -0
  118. package/dist/types/Syntax/hash.d.ts +17 -0
  119. package/dist/types/Syntax/index.d.ts +8 -0
  120. package/dist/types/Syntax/nodeAttr.d.ts +63 -0
  121. package/dist/types/Syntax/partition.d.ts +67 -0
  122. package/dist/types/Syntax/preserveNodeIds.d.ts +47 -0
  123. package/dist/types/Tokens/TokenResolver.d.ts +25 -0
  124. package/dist/types/Tokens/index.d.ts +1 -0
  125. package/dist/types/Transactions/Transaction.d.ts +36 -0
  126. package/dist/types/Transactions/UndoManager.d.ts +63 -0
  127. package/dist/types/Transactions/index.d.ts +3 -0
  128. package/dist/types/Transformers/ASTOptimizer.d.ts +34 -0
  129. package/dist/types/Transformers/GradientTransformer.d.ts +18 -0
  130. package/dist/types/Transformers/GrowTransformer.d.ts +16 -0
  131. package/dist/types/Transformers/RainbowTransformer.d.ts +17 -0
  132. package/dist/types/Transformers/SineWaveTransformer.d.ts +17 -0
  133. package/dist/types/Transformers/Transformer.d.ts +17 -0
  134. package/dist/types/Types/core.d.ts +104 -0
  135. package/dist/types/Types/diagnostics.d.ts +85 -0
  136. package/dist/types/Types/index.d.ts +11 -0
  137. package/dist/types/Types/operations.d.ts +109 -0
  138. package/dist/types/Types/queries.d.ts +67 -0
  139. package/dist/types/Types/symbols.d.ts +42 -0
  140. package/dist/types/Types/tokens.d.ts +75 -0
  141. package/dist/types/Utils/BBCodeGenerator.d.ts +21 -0
  142. package/dist/types/Utils/ColorMath.d.ts +92 -0
  143. package/dist/types/Utils/EffectMath.d.ts +643 -0
  144. package/dist/types/Utils/TagVocabulary.d.ts +104 -0
  145. package/dist/types/Utils/TagVocabulary.test.d.ts +1 -0
  146. package/dist/types/Utils/color.d.ts +29 -0
  147. package/dist/types/Utils/dom-to-svg.d.ts +28 -0
  148. package/dist/types/Utils/dom-to-svg.test.d.ts +1 -0
  149. package/dist/types/Utils/treeTransformers.d.ts +160 -0
  150. package/dist/types/Visitors/BBBlocksExporter.d.ts +27 -0
  151. package/dist/types/Visitors/BBCodeExporter.d.ts +90 -0
  152. package/dist/types/Visitors/BlockPatcher.d.ts +91 -0
  153. package/dist/types/Visitors/DOMMorpher.d.ts +19 -0
  154. package/dist/types/Visitors/HTMLRenderer.d.ts +492 -0
  155. package/dist/types/Visitors/JSONExporter.d.ts +42 -0
  156. package/dist/types/Visitors/MarkdownExporter.d.ts +28 -0
  157. package/dist/types/Visitors/SVGRenderer.d.ts +16 -0
  158. package/dist/types/Visitors/TiptapExporter.d.ts +40 -0
  159. package/dist/types/Visitors/Visitor.d.ts +35 -0
  160. package/dist/types/Visitors/index.d.ts +9 -0
  161. package/dist/types/Visuals/BoxDrawer.d.ts +54 -0
  162. package/dist/types/Visuals/LyneAudio.d.ts +8 -0
  163. package/dist/types/Visuals/index.d.ts +39 -0
  164. package/dist/types/index.d.ts +155 -0
  165. package/package.json +14 -10
  166. package/src/Analysis/Passes/Analysis/ColorUsageAnalyzer.ts +103 -0
  167. package/src/Analysis/Passes/Analysis/GradientAnalyzer.ts +294 -20
  168. package/src/Analysis/Passes/Analysis/SymbolAnalyzer.ts +257 -0
  169. package/src/Analysis/Passes/Decision/PaletteRemapDecision.ts +425 -0
  170. package/src/Analysis/Pipeline/Pipeline.ts +15 -2
  171. package/src/Analysis/index.ts +8 -2
  172. package/src/BBCode/BBCodeDocumentModel.ts +39 -1
  173. package/src/BBCode/BBCodeToGreenNode.ts +18 -12
  174. package/src/BBCode/Parser.ts +38 -1
  175. package/src/Edits/EditPlan.ts +290 -0
  176. package/src/Edits/Optimizer.ts +185 -0
  177. package/src/Edits/Rules/Rule.ts +145 -0
  178. package/src/Edits/Rules/dropEmptyTags.ts +110 -0
  179. package/src/Edits/Rules/dropRedundantNesting.ts +120 -0
  180. package/src/Edits/Rules/index.ts +28 -0
  181. package/src/Edits/Rules/mergeAdjacent.ts +224 -0
  182. package/src/Edits/Rules/reorderWrappers.ts +154 -0
  183. package/src/Edits/Rules/shortenHex.ts +79 -0
  184. package/src/Edits/Rules/tagValue.ts +105 -0
  185. package/src/Edits/Rules/unwrapInvisibleColor.ts +93 -0
  186. package/src/Edits/applyEdits.ts +54 -0
  187. package/src/Edits/index.ts +22 -0
  188. package/src/Events/EventBus.ts +18 -0
  189. package/src/HTML/HTMLToGreenNode.ts +193 -37
  190. package/src/Incremental/BracketIndex.ts +249 -0
  191. package/src/Incremental/IncrementalParser.ts +464 -41
  192. package/src/Lexer/BBCodeLexer.ts +25 -3
  193. package/src/Lexer/index.ts +1 -1
  194. package/src/Markdown/MarkdownAST.ts +65 -2
  195. package/src/Markdown/MarkdownLexer.ts +69 -14
  196. package/src/Markdown/MarkdownParser.ts +749 -62
  197. package/src/Markdown/MarkdownToGreenNode.ts +148 -27
  198. package/src/MilHibri/MilHibriDocumentModel.ts +56 -0
  199. package/src/Model/DocumentModel.ts +138 -5
  200. package/src/Model/TagRegistry.ts +129 -134
  201. package/src/Reconciler/SurgicalReconciler.ts +460 -0
  202. package/src/Repair/NestingRepair.ts +116 -0
  203. package/src/Repair/index.ts +1 -0
  204. package/src/Semantic/SemanticAnalyzer.ts +1845 -65
  205. package/src/Syntax/GreenNodePool.ts +12 -12
  206. package/src/Syntax/RedNode.ts +17 -3
  207. package/src/Syntax/RedNodeStore.ts +9 -1
  208. package/src/Syntax/nodeAttr.ts +172 -0
  209. package/src/Tokens/TokenResolver.ts +55 -0
  210. package/src/Tokens/index.ts +1 -0
  211. package/src/Types/core.ts +15 -0
  212. package/src/Utils/ColorMath.ts +276 -55
  213. package/src/Utils/EffectMath.ts +2462 -0
  214. package/src/Utils/TagVocabulary.ts +141 -0
  215. package/src/Utils/dom-to-svg.ts +28 -12
  216. package/src/Visitors/BBBlocksExporter.ts +15 -1
  217. package/src/Visitors/BBCodeExporter.ts +365 -32
  218. package/src/Visitors/BlockPatcher.ts +123 -22
  219. package/src/Visitors/DOMMorpher.ts +44 -28
  220. package/src/Visitors/HTMLRenderer.ts +771 -205
  221. package/src/Visitors/MarkdownExporter.ts +98 -41
  222. package/src/Visitors/TiptapExporter.ts +1 -0
  223. package/src/Visitors/index.ts +1 -1
  224. package/src/Visuals/BoxDrawer.ts +56 -10
  225. package/src/Visuals/LyneAudio.ts +346 -0
  226. package/src/Visuals/index.ts +8 -4
  227. package/src/Visuals/lyne.css +374 -9
  228. package/src/Visuals/osu.css +393 -11
  229. package/src/index.ts +178 -8
  230. package/dist/index.d.mts +0 -4612
  231. package/dist/index.d.ts +0 -4612
  232. package/src/Analysis/Passes/Analysis/__tests__/GradientAnalyzer.test.ts +0 -135
  233. package/src/Analysis/Passes/Analysis/__tests__/MergeableColorAnalyzer.test.ts +0 -84
  234. package/src/Analysis/Passes/Analysis/__tests__/RainbowAnalyzer.test.ts +0 -99
  235. package/src/Analysis/Passes/Analysis/__tests__/WaveAnalyzer.test.ts +0 -119
  236. package/src/Analysis/Passes/Decision/__tests__/DefaultDecision.test.ts +0 -179
  237. package/src/Analysis/__tests__/Integration.test.ts +0 -162
  238. package/src/Analysis/__tests__/Pipeline.test.ts +0 -133
  239. package/src/Diff/__tests__/TreeDiffer.test.ts +0 -65
  240. package/src/Incremental/__tests__/IncrementalParser.test.ts +0 -164
  241. package/src/Syntax/__tests__/GreenNode.test.ts +0 -33
  242. package/src/Syntax/__tests__/RedNode.test.ts +0 -81
  243. package/src/Syntax/__tests__/RedNodeStore.test.ts +0 -104
  244. package/src/Tests/ASTOptimizerIdempotence.test.ts +0 -77
  245. package/src/Tests/BlockPatcher.test.ts +0 -437
  246. package/src/Tests/BlockPatcherWindowed.test.ts +0 -364
  247. package/src/Tests/BoxDrawer.test.ts +0 -217
  248. package/src/Tests/BoxRichTitle.test.ts +0 -105
  249. package/src/Tests/Chars500kBenchmark.test.ts +0 -151
  250. package/src/Tests/Chars500kEdits.test.ts +0 -321
  251. package/src/Tests/CollabPositions.test.ts +0 -146
  252. package/src/Tests/CompilerPathProfiling.test.ts +0 -186
  253. package/src/Tests/DOMMorpher.test.ts +0 -142
  254. package/src/Tests/DomPatchPerf.test.ts +0 -60
  255. package/src/Tests/EffectSegments.snapshot.json +0 -616
  256. package/src/Tests/EffectSegments.test.ts +0 -68
  257. package/src/Tests/FindNodeAtOffset.test.ts +0 -65
  258. package/src/Tests/Fuzzer.test.ts +0 -166
  259. package/src/Tests/GreenNodePool.test.ts +0 -153
  260. package/src/Tests/Lexer.test.ts +0 -238
  261. package/src/Tests/LyneMode.test.ts +0 -291
  262. package/src/Tests/ModelCoherence.test.ts +0 -180
  263. package/src/Tests/Partition.test.ts +0 -238
  264. package/src/Tests/PluginTags.test.ts +0 -150
  265. package/src/Tests/ProblematicSection.test.ts +0 -46
  266. package/src/Tests/ProblematicSectionHTML.test.ts +0 -58
  267. package/src/Tests/RedReuse.test.ts +0 -134
  268. package/src/Tests/ReproDelete20k.test.ts +0 -62
  269. package/src/Tests/SemanticValidators.test.ts +0 -136
  270. package/src/Tests/StableNodeIds.test.ts +0 -210
  271. package/src/Tests/StudioColorBloat.test.ts +0 -25
  272. package/src/Tests/StudioDebugText.test.ts +0 -27
  273. package/src/Tests/StudioTrailingChar.test.ts +0 -25
  274. package/src/Tests/StudioValidText.test.ts +0 -25
  275. package/src/Tests/UrlImgBug.test.ts +0 -23
  276. package/src/Tests/VisualBuilderFidelity.test.ts +0 -105
  277. package/src/Tests/referenceDocument.ts +0 -119
  278. package/src/Utils/dom-to-svg.test.ts +0 -86
@@ -6,11 +6,14 @@
6
6
  * modificar el renderer HTML.
7
7
  *
8
8
  * Uso:
9
- * // Importar como CSS directo (soportado por Next.js, Vite, Webpack):
10
- * import 'MiliastryPlatform/DocumentEngine/Visuals/osu.css'
9
+ * // Desde la FUENTE, que es como lo consume el monorepo (Next.js, Vite,
10
+ * // Webpack): esta ruta funciona sin haber compilado nada.
11
+ * import '@miliastry/quasar/src/Visuals/osu.css'
12
+ *
13
+ * // Desde el paquete PUBLICADO. Solo resuelve tras `npm run build`, que es
14
+ * // lo que copia los CSS a dist/Visuals (ver scripts/copy-css.mjs).
15
+ * import '@miliastry/quasar/Visuals/osu.css'
11
16
  *
12
- * // O desde un componente React:
13
- * import 'MiliastryPlatform/DocumentEngine/Visuals/osu.css'
14
17
  * // Luego en el JSX: <div className="bbcode-preview" ...
15
18
  *
16
19
  * Para cambiar de tema visual, solo cambia el import del CSS.
@@ -22,6 +25,7 @@
22
25
 
23
26
  export { bindBoxDrawer, toggleBoxWithDrawer } from './BoxDrawer'
24
27
  export type { BoxDrawerOptions } from './BoxDrawer'
28
+ export { setupLyneAudioRuntime, bindLyneAudio } from './LyneAudio'
25
29
 
26
30
  export const visualThemes = [
27
31
  {
@@ -6,21 +6,45 @@
6
6
  *
7
7
  * Scoped under `.bbcode-preview-lyne` and `.theme-lyne`.
8
8
  * All rules strictly override default/osu.css styles to ensure 0% pink bleed.
9
+ *
10
+ * No `@import` of Google Fonts here — the host supplies the faces.
11
+ *
12
+ * This file used to open with
13
+ * @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono…&family=Saira+Condensed…&family=Saira…')
14
+ * and that line broke the desktop app. Chromium reports a stylesheet as FAILED
15
+ * when any of its @imports fails to load, so under a CSP whose `style-src` does
16
+ * not list fonts.googleapis.com (Tauri's) — or simply with no network — the CSS
17
+ * chunk carrying this file rejected, the dynamic import of the whole BBCode
18
+ * feature rejected with it, and the kernel booted without an editor.
19
+ *
20
+ * Miliastry self-hosts these families with next/font and publishes them as
21
+ * `--font-syne-display` / `--font-syne-body` / `--font-syne-mono` (app/layout.tsx;
22
+ * `[data-theme='syne']` in globals.css reads the same variables). They are
23
+ * used when present; the plain family names remain as the fallback for a host
24
+ * that installs the fonts by other means.
9
25
  */
10
26
 
11
- @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Saira+Condensed:wght@600;700&family=Saira:wght@400;600&display=swap');
12
-
13
- :root {
27
+ .theme-lyne,
28
+ .bbcode-preview-lyne,
29
+ [data-theme='syne'],
30
+ [data-dialect='lyne'] {
14
31
  --color-accent: #2EE6E2;
15
32
  --color-accent-bright: #68FFF8;
16
33
  --color-warning: #FFC34D;
34
+ --color-danger: #FF3B5C;
17
35
  --color-text-primary: #FFFFFF;
18
36
  --color-text-mid: #9EACD4;
19
37
  --color-text-dim: #606C8F;
20
38
  --color-hairline: rgba(255, 255, 255, 0.12);
21
- --font-display: "Saira Condensed", sans-serif;
22
- --font-body: "Saira", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
23
- --font-numeric: "IBM Plex Mono", monospace;
39
+ --color-hairline-bright: rgba(142, 155, 196, 0.35);
40
+ --color-surface: #0B1024;
41
+ --color-surface-bright: #141C3C;
42
+ --color-inset-well: #080D20;
43
+ --color-on-accent: #05060F;
44
+ --cut-control: 10px;
45
+ --font-display: var(--font-syne-display, "Saira Condensed"), "Saira Condensed", sans-serif;
46
+ --font-body: var(--font-syne-body, "Saira"), "Saira", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
47
+ --font-numeric: var(--font-syne-mono, "IBM Plex Mono"), "IBM Plex Mono", monospace;
24
48
  --lyne-cut: 8px;
25
49
  }
26
50
 
@@ -52,6 +76,41 @@
52
76
  border-bottom-color: var(--color-accent, #2EE6E2) !important;
53
77
  }
54
78
 
79
+ .bbcode-preview-lyne a:has(img),
80
+ .bbcode-preview-lyne a:has(.bb-img),
81
+ .bbcode-preview-lyne a:has(svg),
82
+ .bbcode-preview-lyne a.bb-link-img,
83
+ .bbcode-preview.theme-lyne a:has(img),
84
+ .bbcode-preview.theme-lyne a:has(.bb-img),
85
+ .bbcode-preview.theme-lyne a:has(svg),
86
+ .bbcode-preview.theme-lyne a.bb-link-img {
87
+ border-bottom: none !important;
88
+ text-decoration: none !important;
89
+ display: inline-block;
90
+ vertical-align: middle;
91
+ }
92
+
93
+ .bbcode-preview-lyne a:has(img):hover,
94
+ .bbcode-preview-lyne a:has(.bb-img):hover,
95
+ .bbcode-preview-lyne a:has(svg):hover,
96
+ .bbcode-preview-lyne a.bb-link-img:hover,
97
+ .bbcode-preview.theme-lyne a:has(img):hover,
98
+ .bbcode-preview.theme-lyne a:has(.bb-img):hover,
99
+ .bbcode-preview.theme-lyne a:has(svg):hover,
100
+ .bbcode-preview.theme-lyne a.bb-link-img:hover {
101
+ border-bottom: none !important;
102
+ text-decoration: none !important;
103
+ }
104
+
105
+ .bbcode-preview-lyne a img,
106
+ .bbcode-preview-lyne a .bb-img,
107
+ .bbcode-preview.theme-lyne a img,
108
+ .bbcode-preview.theme-lyne a .bb-img {
109
+ vertical-align: middle;
110
+ border: none;
111
+ text-decoration: none;
112
+ }
113
+
55
114
  /* Forum @mentions — inherit the accent link look, slightly bolder so they
56
115
  read as handles rather than plain links. */
57
116
  .bbcode-preview-lyne a.bb-mention,
@@ -862,9 +921,256 @@
862
921
  margin: 4px 0 !important;
863
922
  }
864
923
 
865
- /* Audio: replica el .bbAudio original de Lyne (bloque centrado, ancho máx). */
866
- .bb-audio {
867
- display: block !important;
924
+ /* ─── Audio: LINE chrome redesign (spec docs/design-spec/bbcode-audio-player) ── */
925
+ .bbcode-preview-lyne .lx-audio,
926
+ .bbcode-preview.theme-lyne .lx-audio,
927
+ [data-theme='syne'] .lx-audio,
928
+ [data-dialect='lyne'] .lx-audio,
929
+ .lx-audio {
930
+ --c: var(--cut-control, 10px);
931
+ display: inline-block !important;
932
+ width: 100% !important;
933
+ max-width: 560px !important;
934
+ margin: 14px 0 !important;
935
+ background:
936
+ linear-gradient(180deg, var(--color-surface-bright, #141C3C) 0%, var(--color-surface, #0B1024) 38%, var(--color-inset-well, #080D20) 100%) !important;
937
+ border: 1px solid var(--color-hairline-bright, rgba(142, 155, 196, 0.35)) !important;
938
+ clip-path: polygon(var(--c) 0, 100% 0, 100% calc(100% - var(--c)), calc(100% - var(--c)) 100%, 0 100%, 0 var(--c)) !important;
939
+ position: relative;
940
+ font-family: var(--font-body, "Saira", sans-serif);
941
+ transition: border-color 120ms cubic-bezier(0.16, 1.0, 0.3, 1.0);
942
+ text-align: left;
943
+ box-sizing: border-box;
944
+ vertical-align: middle;
945
+ }
946
+ .lx-audio audio {
947
+ position: absolute !important;
948
+ width: 1px !important;
949
+ height: 1px !important;
950
+ opacity: 0 !important;
951
+ pointer-events: none !important;
952
+ clip: rect(0, 0, 0, 0) !important;
953
+ }
954
+ .lx-audio:hover {
955
+ border-color: rgba(46, 230, 226, 0.45) !important;
956
+ }
957
+ .lx-audio.is-playing {
958
+ border-color: rgba(46, 230, 226, 0.6) !important;
959
+ }
960
+
961
+ /* thin accent baseline — the "catch line" motif; fills with progress */
962
+ .lx-audio .lx-track {
963
+ position: relative;
964
+ height: 12px;
965
+ cursor: pointer;
966
+ background:
967
+ repeating-linear-gradient(-45deg, rgba(142,155,196,0.10) 0 2px, transparent 2px 9px),
968
+ var(--color-inset-well, #080D20);
969
+ }
970
+ .lx-audio .lx-track .fill {
971
+ position: absolute;
972
+ inset: 0 auto 0 0;
973
+ width: 0%;
974
+ background: linear-gradient(90deg, rgba(46,230,226,0.10), rgba(46,230,226,0.22));
975
+ border-right: 2px solid var(--color-accent, #2EE6E2);
976
+ box-shadow: 0 0 12px rgba(46, 230, 226, 0.55);
977
+ }
978
+ .lx-audio .lx-row {
979
+ display: flex;
980
+ align-items: center;
981
+ gap: 14px;
982
+ padding: 10px 16px 12px;
983
+ }
984
+ .lx-audio .lx-btn {
985
+ flex: none;
986
+ width: 40px;
987
+ height: 40px;
988
+ display: grid;
989
+ place-items: center;
990
+ background: var(--color-accent, #2EE6E2);
991
+ color: var(--color-on-accent, #05060F);
992
+ cursor: pointer;
993
+ border: none;
994
+ clip-path: polygon(var(--c) 0, 100% 0, 100% calc(100% - var(--c)), calc(100% - var(--c)) 100%, 0 100%, 0 var(--c));
995
+ transition: background 120ms cubic-bezier(0.16, 1.0, 0.3, 1.0), transform 120ms cubic-bezier(0.16, 1.0, 0.3, 1.0);
996
+ }
997
+ .lx-audio .lx-btn:hover {
998
+ background: var(--color-accent-bright, #7FF5F0);
999
+ }
1000
+ .lx-audio .lx-btn:active {
1001
+ transform: scale(0.94);
1002
+ }
1003
+ .lx-audio .lx-btn svg {
1004
+ width: 16px;
1005
+ height: 16px;
1006
+ fill: var(--color-on-accent, #05060F);
1007
+ }
1008
+
1009
+ .lx-audio .lx-title {
1010
+ flex: 1;
1011
+ min-width: 0;
1012
+ }
1013
+ .lx-audio .lx-title .name {
1014
+ font-family: var(--font-display, "Saira Condensed", sans-serif);
1015
+ font-weight: 600;
1016
+ font-size: 16px;
1017
+ text-transform: uppercase;
1018
+ letter-spacing: 1px;
1019
+ white-space: nowrap;
1020
+ overflow: hidden;
1021
+ text-overflow: ellipsis;
1022
+ color: var(--color-text-primary, #F2F5FF);
1023
+ }
1024
+ .lx-audio .lx-title .label {
1025
+ font-family: var(--font-numeric, "IBM Plex Mono", monospace);
1026
+ font-size: 10px;
1027
+ font-weight: 500;
1028
+ letter-spacing: 2px;
1029
+ text-transform: uppercase;
1030
+ color: var(--color-text-dim, #8E9BC4);
1031
+ display: flex;
1032
+ align-items: center;
1033
+ gap: 6px;
1034
+ margin-top: 1px;
1035
+ }
1036
+ .lx-audio .lx-title .label .dot {
1037
+ width: 5px;
1038
+ height: 5px;
1039
+ background: var(--color-text-dim, #8E9BC4);
1040
+ flex: none;
1041
+ transition: background 120ms;
1042
+ }
1043
+ .lx-audio.is-playing .lx-title .label .dot {
1044
+ background: var(--color-accent, #2EE6E2);
1045
+ box-shadow: 0 0 6px rgba(46,230,226,0.9);
1046
+ animation: lx-beat 606ms infinite;
1047
+ }
1048
+ @keyframes lx-beat {
1049
+ 0% { transform: scale(1.25); }
1050
+ 100% { transform: scale(1); }
1051
+ }
1052
+
1053
+ .lx-audio .lx-vol {
1054
+ display: flex;
1055
+ align-items: center;
1056
+ gap: 6px;
1057
+ flex: none;
1058
+ }
1059
+ .lx-audio .lx-vol-btn {
1060
+ background: none;
1061
+ border: none;
1062
+ padding: 2px;
1063
+ cursor: pointer;
1064
+ display: grid;
1065
+ place-items: center;
1066
+ color: var(--color-text-dim, #8E9BC4);
1067
+ transition: color 120ms cubic-bezier(0.16, 1.0, 0.3, 1.0);
1068
+ }
1069
+ .lx-audio .lx-vol-btn:hover {
1070
+ color: var(--color-accent, #2EE6E2);
1071
+ }
1072
+ .lx-audio .lx-vol-btn svg {
1073
+ width: 14px;
1074
+ height: 14px;
1075
+ fill: currentColor;
1076
+ }
1077
+ .lx-audio .lx-vol-slider {
1078
+ -webkit-appearance: none;
1079
+ appearance: none;
1080
+ width: 56px;
1081
+ height: 4px;
1082
+ background: var(--color-inset-well, #080D20);
1083
+ border: 1px solid var(--color-hairline, rgba(142, 155, 196, 0.25));
1084
+ outline: none;
1085
+ cursor: pointer;
1086
+ border-radius: 0;
1087
+ vertical-align: middle;
1088
+ }
1089
+ .lx-audio .lx-vol-slider::-webkit-slider-thumb {
1090
+ -webkit-appearance: none;
1091
+ appearance: none;
1092
+ width: 8px;
1093
+ height: 12px;
1094
+ background: var(--color-accent, #2EE6E2);
1095
+ clip-path: polygon(2px 0, 100% 0, 100% calc(100% - 2px), calc(100% - 2px) 100%, 0 100%, 0 2px);
1096
+ cursor: pointer;
1097
+ transition: transform 120ms, background 120ms;
1098
+ }
1099
+ .lx-audio .lx-vol-slider::-moz-range-thumb {
1100
+ width: 8px;
1101
+ height: 12px;
1102
+ border: none;
1103
+ border-radius: 0;
1104
+ background: var(--color-accent, #2EE6E2);
1105
+ clip-path: polygon(2px 0, 100% 0, 100% calc(100% - 2px), calc(100% - 2px) 100%, 0 100%, 0 2px);
1106
+ cursor: pointer;
1107
+ }
1108
+ .lx-audio .lx-vol-slider:hover::-webkit-slider-thumb {
1109
+ background: var(--color-accent-bright, #7FF5F0);
1110
+ transform: scaleY(1.15);
1111
+ }
1112
+ .lx-audio .lx-vol-slider:hover::-moz-range-thumb {
1113
+ background: var(--color-accent-bright, #7FF5F0);
1114
+ }
1115
+
1116
+ .lx-audio .lx-time {
1117
+ flex: none;
1118
+ font-family: var(--font-numeric, "IBM Plex Mono", monospace);
1119
+ font-weight: 500;
1120
+ font-size: 12px;
1121
+ letter-spacing: 0.5px;
1122
+ color: var(--color-text-mid, #AAB6DE);
1123
+ font-variant-numeric: tabular-nums;
1124
+ }
1125
+ .lx-audio .lx-time .cur {
1126
+ color: var(--color-text-primary, #F2F5FF);
1127
+ }
1128
+
1129
+ .lx-audio .lx-speed {
1130
+ flex: none;
1131
+ font-family: var(--font-numeric, "IBM Plex Mono", monospace);
1132
+ font-size: 11px;
1133
+ font-weight: 500;
1134
+ color: var(--color-text-dim, #8E9BC4);
1135
+ background: none;
1136
+ border: 1px solid var(--color-hairline, rgba(142, 155, 196, 0.18));
1137
+ padding: 3px 8px;
1138
+ cursor: pointer;
1139
+ letter-spacing: 1px;
1140
+ clip-path: polygon(5px 0, 100% 0, 100% calc(100% - 5px), calc(100% - 5px) 100%, 0 100%, 0 5px);
1141
+ transition: color 120ms, border-color 120ms;
1142
+ }
1143
+ .lx-audio .lx-speed:hover {
1144
+ color: var(--color-accent, #2EE6E2);
1145
+ border-color: rgba(46,230,226,0.4);
1146
+ }
1147
+ .lx-audio .lx-speed.active {
1148
+ color: var(--color-accent, #2EE6E2);
1149
+ border-color: rgba(46,230,226,0.5);
1150
+ }
1151
+
1152
+ /* states */
1153
+ .lx-audio.is-loading .lx-btn svg {
1154
+ opacity: 0.3;
1155
+ }
1156
+ .lx-audio.is-loading .fill {
1157
+ border-right-color: var(--color-text-dim, #8E9BC4);
1158
+ box-shadow: none;
1159
+ }
1160
+ .lx-audio.is-error {
1161
+ border-color: rgba(255, 59, 92, 0.5) !important;
1162
+ }
1163
+ .lx-audio.is-error .fill {
1164
+ border-right-color: var(--color-danger, #FF3B5C);
1165
+ box-shadow: 0 0 12px rgba(255,59,92,0.5);
1166
+ }
1167
+ .lx-audio.is-error .lx-title .label {
1168
+ color: var(--color-danger, #FF3B5C);
1169
+ }
1170
+
1171
+ /* Fallback si se usa audio nativo directo */
1172
+ audio.bb-audio {
1173
+ display: inline-block !important;
868
1174
  width: 100% !important;
869
1175
  max-width: 420px !important;
870
1176
  margin: 10px 0 !important;
@@ -1121,3 +1427,62 @@
1121
1427
  background-clip: text !important;
1122
1428
  color: transparent !important;
1123
1429
  }
1430
+
1431
+ /* ─── Lyne (SYNE) Preview Highlight Overrides ────────────────────────────── */
1432
+
1433
+ .theme-lyne [data-bbid]:hover:not(:has([data-bbid]:hover, [data-node-id]:hover)),
1434
+ .bbcode-preview-lyne [data-bbid]:hover:not(:has([data-bbid]:hover, [data-node-id]:hover)) {
1435
+ outline: 1.5px solid #2EE6E2 !important;
1436
+ background-color: rgba(46, 230, 226, 0.1) !important;
1437
+ box-shadow: 0 0 8px rgba(46, 230, 226, 0.25) !important;
1438
+ }
1439
+
1440
+ .theme-lyne[data-hover-highlight="on"] [data-bbid]:hover:not(:has([data-bbid]:hover, [data-node-id]:hover)),
1441
+ .bbcode-preview-lyne[data-hover-highlight="on"] [data-bbid]:hover:not(:has([data-bbid]:hover, [data-node-id]:hover)),
1442
+ .theme-lyne[data-hover-highlight="on"] [data-node-id]:hover:not(:has([data-bbid]:hover, [data-node-id]:hover)),
1443
+ .bbcode-preview-lyne[data-hover-highlight="on"] [data-node-id]:hover:not(:has([data-bbid]:hover, [data-node-id]:hover)) {
1444
+ outline: 1px dashed rgba(46, 230, 226, 0.55) !important;
1445
+ box-shadow: 0 0 6px rgba(46, 230, 226, 0.2) !important;
1446
+ }
1447
+
1448
+ .theme-lyne [data-node-id].cursor-highlight,
1449
+ .bbcode-preview-lyne [data-node-id].cursor-highlight,
1450
+ .theme-lyne .cursor-highlight,
1451
+ .bbcode-preview-lyne .cursor-highlight {
1452
+ outline: 2px solid #2EE6E2 !important;
1453
+ background-color: rgba(46, 230, 226, 0.18) !important;
1454
+ box-shadow: 0 0 12px rgba(46, 230, 226, 0.35) !important;
1455
+ }
1456
+
1457
+ .theme-lyne .bb-empty-line.cursor-highlight,
1458
+ .bbcode-preview-lyne .bb-empty-line.cursor-highlight {
1459
+ background-color: rgba(46, 230, 226, 0.22) !important;
1460
+ outline: 2px solid #2EE6E2 !important;
1461
+ box-shadow: 0 0 8px rgba(46, 230, 226, 0.3) !important;
1462
+ }
1463
+
1464
+ .theme-lyne[data-hover-highlight="on"] .bb-empty-line:hover,
1465
+ .bbcode-preview-lyne[data-hover-highlight="on"] .bb-empty-line:hover {
1466
+ outline: 1px dashed rgba(46, 230, 226, 0.55) !important;
1467
+ background-color: rgba(46, 230, 226, 0.1) !important;
1468
+ }
1469
+
1470
+ .theme-lyne div.bb-block.cursor-highlight::after,
1471
+ .bbcode-preview-lyne div.bb-block.cursor-highlight::after {
1472
+ box-shadow: inset 0 0 0 2px #2EE6E2, 0 0 10px rgba(46, 230, 226, 0.35) !important;
1473
+ background-color: rgba(46, 230, 226, 0.18) !important;
1474
+ }
1475
+
1476
+ .theme-lyne span.bb-block.cursor-highlight,
1477
+ .bbcode-preview-lyne span.bb-block.cursor-highlight {
1478
+ outline: 2px solid #2EE6E2 !important;
1479
+ background-color: rgba(46, 230, 226, 0.18) !important;
1480
+ box-shadow: 0 0 8px rgba(46, 230, 226, 0.3) !important;
1481
+ }
1482
+
1483
+ .theme-lyne ::selection,
1484
+ .bbcode-preview-lyne ::selection {
1485
+ background-color: rgba(46, 230, 226, 0.3) !important;
1486
+ color: #ffffff !important;
1487
+ }
1488
+