diff --git a/index.html b/index.html index dc30a29..58bb59d 100644 --- a/index.html +++ b/index.html @@ -1051,10 +1051,10 @@ button.sidebar-toggle{ {"created":"20230427174739986","text":"> in \u003Ca href=\"./dist/xrfragment.js\" target=\"_blank\">xrfragment.js\u003C/a>, and \u003Ca href=\"./dist/xrfragment.module.js\" target=\"_blank\">xrfragment.module.js\u003C/a>\n\nParse a fragment (key/value) and add it to an object store (if valid).\n\n> **NOTE**: You probably want to use the higher-level [URI.parse(url,filter)](#%E2%86%AA%20URI.parse%28url%2Cfilter%29) which calls this function\n\n| args | type | example | comment |\n|-|-|-|-|\n| key | string | `pos` | |\n| value | string | `1.2,3,4` | datatype must comply with [spec](#List%20of%20fragments) |\n| store | object | {} | will not be touched if validation failed, |\n\n> returns true if validated, otherwise false \n\nhere are some interactive examples:\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = {}\nok = xrfragment.Parser.parse('pos','1.2,2,3',frags)\nconsole.log( frags.pos )\n\n\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n\u003Cbr>\n\nUnknown or fragments with wrong type will be rejected:\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = {}\nok = xrfragment.Parser.parse('pos','true',frags)\nconsole.log( frags.pos )\n\n\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n# Spec \n\n> version 0.2 @ 2023-06-27T11:10:08+0200  [![Actions Status](https://github.com/coderofsalvation/xrfragment/workflows/test/badge.svg)](https://github.com/coderofsalvation/xrfragment/actions)\n\nIn case your programming language has no parser ([check here](https://github.com/coderofsalvation/xrfragment/tree/main/dist)) you can [crosscompile it](https://github.com/coderofsalvation/xrfragment/blob/main/build.hxml), or roll your own `Parser.parse(k,v,store)` using the spec:\n\n1. requirement: receive arguments: key (string), value (string), store (writable associative array/object)\n1. add keys without values to store as [predefined view](predefined_view)\n1. check if fragment is official XR Fragment\n1. guess the type of the value (string,int,float,x,y,z,color,args,query)\n1. don't add to store if value-type is incorrect\n1. if valid, add to store\n1. prefix non-offical fragment key's with underscore (and add to store)\n\n> icanhazcode? yes, see [Parser.hx](https://github.com/coderofsalvation/xrfragment/blob/main/src/xrfragment/Parser.hx)\n\n# Tests\n \nthe spec is tested with [JSON unittests](./../src/spec) consumed by [Test.hx](./../src/Test.hx) to cross-test all languages.\n\n","tags":"[[šŸ”Ø xrfragment-haxe]]","title":"↪ Parser.parse(k,v,store)","modified":"20250926183010695","type":"text/markdown"}, {"created":"20230427150948872","text":"> in \u003Ca href=\"./dist/xrfragment.js\" target=\"_blank\">xrfragment.js\u003C/a>, and \u003Ca href=\"./dist/xrfragment.module.js\" target=\"_blank\">xrfragment.module.js\u003C/a>\n\nValidates and turns a XR fragment string (`document.location.hash` in javascript e.g.) into objectform using [Parser.parse(k,v,store)](#↪%20Parser.parse(k,v,store)).\n\n| args | type | example | comment |\n|-|-|-|-|\n| url | string | `#pos=1.2,3,4`\u003Cbr>`#pos=1.2,3,4&t=1,2`| |\n| filter | integer\u003Cbr>(bitmask) | `0` = no filter\u003Cbr>`XRF.NAVIGATOR` (default)\u003Cbr>`XRF.EMBEDDED`\u003Cbr>`XRF.PV_OVERRIDE` | filter out fragments which are not flagged with this flag.\u003Cbr>\u003Cbr>For example, parsing with `XRF.NAVIGATOR` will ignore any fragments which are not flagged as such (like `scale` in case of top-level URI navigation).\u003Cbr>On the other hand, `XRF.EMBEDDED` makes sense when parsing an embedded URI (`src: other.gltf#scale=2,2,2` e.g.)\u003Cbr> |\n\n> returns an object with validated fragment(values) as key(objects)\n\nhere are some interactive examples:\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = xrfragment.URI.parse('#pos=1.0,2.0,3.0')\nconsole.log( frags.pos )\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n\u003Cbr>\n\nYou can combine them with the `&` character:\u003Cbr>\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = xrfragment.URI.parse('#t=1,100&pos=1,2,3.1')\nconsole.log( frags.t )\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\nUnallowed fragments can be filtered out:\u003Cbr>\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">XRF = xrfragment.XRF\nfrags = xrfragment.URI.parse('#scale=1,2,3', XRF.NAVIGATOR )\nconsole.log( frags )\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n> The above is perfect for top-level browser navigation (which should not parse \u003Cb>embedded-only\u003C/b> XR Fragments like `scale` or [queries](#queries))\n\nAnother example for parsing embedded assets\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">XRF = xrfragment.XRF\nmymodel = {userData:{src: \"other.gltf#scale=2,2,2\"}} // mock THREE.js\nfrags = xrfragment.URI.parse( mymodel.userData.src, XRF.EMBEDDED )\nconsole.log( frags.scale.x )\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n> The above is perfect for embedded content (`scale` fragment is allowed here)\n\nFinally, parsing \u003Cb>custom\u003C/b> framework-specific fragments is also possible (they are prefixed with `_`)\u003Cbr>\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = xrfragment.URI.parse(\"#pos=0,0,1&foo=123&bar=flop\")\nconsole.log(frags._foo.int)\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n> The above is perfect for embedded content (`scale` fragment is allowed here)\n\n# Spec\n\n> version 0.2 [![Actions Status](https://github.com/coderofsalvation/xrfragment/workflows/test/badge.svg)](https://github.com/coderofsalvation/xrfragment/actions) generated by `make doc` @ 2023-06-27T11:18:12+0200\n\n### XR Fragment URI Grammar \n\n```\n reserved = gen-delims / sub-delims\n gen-delims = \"#\" / \"&\" \n sub-delims = \",\" / \"=\"\n```\n\n> Example: `://foo.com/my3d.asset#pos=1,0,0&prio=-5&t=0,100`\n\n| Explanation | |\n|-|-|\n| `pos=1,2,3` | vector/coordinate argument e.g. |\n| `pos=1,2,3&rot=0,90,0&q=.foo` | combinators |\n\nIn case your programming language has no parser ([check here](https://github.com/coderofsalvation/xrfragment/tree/main/dist)) you can [crosscompile it](https://github.com/coderofsalvation/xrfragment/blob/main/build.hxml), or roll your own `Parser.parse(k,v,store)` using the spec:\n\n1. store key/values into a associative array or dynamic object\n1. fragment URI starts with `#`\n1. fragments are split by `&`\n1. loop thru each fragment\n1. for each fragment split on `=` to separate key/values \n1. fragment-values are urlencoded (space becomes `+` using `encodeUriComponent` e.g.)\n1. for every recognized fragment key/value-pair call [Parser.parse](#%E2%86%AA%20Parser.parse%28k%2Cv%2Cstore%29)\n\n> icanhazcode? yes, see [URI.hx](https://github.com/coderofsalvation/xrfragment/blob/main/src/xrfragment/URI.hx)\n\n# Tests\n \nthe spec is tested with [JSON unittests](./../src/spec) consumed by [Test.hx](./../src/Test.hx) to cross-test all languages.\n","tags":"[[šŸ”Ø xrfragment-haxe]]","title":"↪ URI.parse(url,filter)","modified":"20250926183010703","type":"text/markdown","list-after":"List of fragments"}, {"created":"20230830155016049","text":"\n> **DISCLAIMER**: XR Macros is a tiny logic-layer which falls outside of the scope of the XR Fragment spec (for now). \u003Cbr>They currently demonstrate features beyond the addressibility/navigation/embedding-focus of XR Fragments, and fall more into the demo/authoring-side of things. Every XR macro demonstration should potentially be replaced by piggybacking \u003Ca href=\"https://github.com/omigroup/gltf-extensions\" target=\"_blank\">OMI extensions\u003C/a> (when they support the usecase).\n\u003Cbr>\n\nXR Macros are a tiny roundrobin logic-layer **defined inside** 3D assets/scenes. \u003Cbr>\nMacros introduce a lowest-common-denominator logic-layer, by recursive, economic re-use of the querystring syntax (which the XR Fragment parser already uses).\u003Cbr>\n\u003Cbr>\nThe example XR macro's are based on common usecases & features found in 3D engines, to offer an lowcode alternative to basic experiences without requiring a scripting language.\u003Cbr>\n(Sometimes a spreadsheet will do instead of a programming language).\u003Cbr>\n\n# Spec\n\nBelow is the related section of the spec (full spec here: [[HTML|doc/RFC_XR_Macros.html]], [[TXT|doc/RFC_XR_Fragments.txt]], [[XML|doc/RFC_XR_Fragments.xml]])\n\n\u003Ciframe src=\"doc/RFC_XR_Macros.html#core-principle\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\n# Example macros\n\n| XR macro | type | access | supported\u003Cbr>in\u003Cbr>sandbox |info |\n|----------|------|--------------|-|------|\n| **fov** |int 1..360|šŸ”“ šŸ’„ šŸ‘© šŸ”—|āœ”| hints field of view to renderer|\n| **clip** |[vector2](#vector) |šŸ”“ šŸ’„ šŸ‘© šŸ”—|āœ”| hints camera clipping to renderer |\n| **bg** |[vector3](#vector)|šŸ”“ šŸ’„ šŸ‘© šŸ”—|āœ”| hints background rgb values (0..255) to renderer\n| **fog** |[vector2](#vector)|šŸ”“ šŸ’„ šŸ‘© šŸ”—|āœ”| hints fog settings to renderer |\n| **env** |string|šŸ”“ šŸ’„ šŸ”—|āœ”|query selector / object manipulation|\n| [show](#show) |integer [0-1] |šŸ”’ šŸŽ² šŸ’„ šŸ”—| āœ”|show/hide [queried](#queries) object(s)|\n| [mov](#mov) |[vector3](#vector ) |šŸ”’ šŸŽ² šŸ’„ šŸ”—| āœ”|move [queried](#queries) object(s) \u003Cb>relatively\u003C/b> (instead of \u003Cb>absolute\u003C/b> using `#pos=`)|\n| [scale](#scale) |[vector3](#vector ) |šŸ”“ šŸŽ² šŸ’„ šŸ”—| āœ”|scale [queried](#queries) object(s) |\n| **prio** |int|šŸ”’||asset loading linking|\n| **gravity** |[vector3](#vector) |šŸ”“ šŸ’„ šŸ”—||animation|\n| **physics** |[vector3](#vector) |šŸ”“ šŸ’„ šŸ”—||animation|\n| **namespace** |string|šŸ”’||author / metadata|\n| **SPDX** |string|šŸ”’||author / metadata|\n| **unit** |string|šŸ”’||author / metadata|\n| **description** |string|šŸ”’||author / metadata|\n| **session** |[url](#url ) |šŸ”“ šŸ’„ šŸ‘© šŸ”— āœ‹?||multiparty|\n\nšŸ”’ = value(s) can only be defined in 3D asset (immutable)\u003Cbr>\nšŸ”“ = value(s) can be overwritten in certain context (by url)\u003Cbr>\nšŸŽ² = multiple values will be roundrobin'ed (`#pos=0,0,0|1,0,0` e.g.)\u003Cbr>\nšŸ’„ = value(s) can be overwritten by [predefined_view](#predefined_view)\u003Cbr>\nšŸ‘© = value(s) can be overwritten when user clicks `href` (value) or top-level URL change(see [How it works](#How%20it%20works))\u003Cbr>\nšŸ”— = value(s) can be overwritten when 3D asset is embedded/linked as `src` value\u003Cbr>\nāœ‹? = value(s) can be overwritten by offering confirmation/undo to user\u003Cbr>\u003Cbr>\n\n\u003Cdiv style=\"max-width:600px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/fovfogclip.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\nfor more info see [How it works](#How%20it%20works)","tags":"","title":"āÆļø XR Macros","modified":"20231122145951626","type":"text/markdown"}, -{"created":"20250922165010537","text":"Application can adopt XR Fragments at various levels, depending on application needs.\u003Cbr>\n\n> The \u003Cb>higher\u003C/b> the level, the \u003Cb>lower\u003C/b> the adoption-priority.\u003Cbr>\n\n!! Level1\n\n\u003Cb>Level1\u003C/b> is the ''soul'' of XR fragments.\u003Cbr>\n\n> All \u003Cb>other\u003C/b> levels are \u003Cb>optional\u003C/b> and \u003Cb>not required\u003C/b>\n\nClick on coloured items below to navigate the various levels:\n\n\u003Csvg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 180 1106.3 573.6\" width=\"1106.390574570778\" height=\"573.6\">\u003C!-- svg-source:excalidraw -->\u003Cmetadata>\u003C/metadata>\u003Cdefs>\u003Cstyle class=\"style-fonts\">\n a { cursor:pointer} \u003C/style>\u003C/defs>\u003Ca href=\"#XRF%20microformat\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(10 10) rotate(0 489.1666666666668 295)\">\u003Cpath d=\"M0.16 -0.32 L978.16 -1.39 L980.31 588.19 L-1.32 590.15\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffec99\">\u003C/path>\u003Cpath d=\"M0 0 C311.16 -3.74, 621.41 -3.21, 978.33 0 M978.33 0 C977.31 150.47, 977.29 299.03, 978.33 590 M978.33 590 C642.78 586.06, 308.18 587.35, 0 590 M0 590 C-0.83 429.74, 0.17 270.77, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level0%3A%20File\">\u003Cg stroke-linecap=\"round\" transform=\"translate(65.91666666666674 74) rotate(0 462.25000000000006 262.875)\">\u003Cpath d=\"M-0.18 -1.39 L926.47 -1.81 L923.18 525.9 L0.3 526.15\" stroke=\"none\" stroke-width=\"0\" fill=\"#d0bfff\">\u003C/path>\u003Cpath d=\"M0 0 C350.33 2.93, 699.57 2.64, 924.5 0 M924.5 0 C925.32 194.78, 925.44 389.94, 924.5 525.75 M924.5 525.75 C727.69 524.12, 531.28 523.37, 0 525.75 M0 525.75 C2.21 397.36, 2.01 267.71, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level1%3A%20URL\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(122.91666666666674 132.91666666666669) rotate(0 433.12500000000006 232.70833333333331)\">\u003Cpath d=\"M1.97 -1.81 L864.93 0.15 L866.55 465.82 L-1.95 464.88\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffc9c9\">\u003C/path>\u003Cpath d=\"M0 0 C187.63 0.17, 376.57 0.83, 866.25 0 M866.25 0 C867.2 178.86, 866.01 358.59, 866.25 465.42 M866.25 465.42 C662.56 468.8, 458.89 468.03, 0 465.42 M0 465.42 C-0.63 346.61, -0.78 227.46, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level2%3A%20explicit%20hyperlinks\">\u003Cg stroke-opacity=\"0.3\" fill-opacity=\"0.3\" stroke-linecap=\"round\" transform=\"translate(172.5000000000001 188.16666666666669) rotate(0 410.41666666666674 205.83333333333334)\">\u003Cpath d=\"M-1.32 0.15 L821.13 0.4 L818.88 411.13 L0.57 410.57\" stroke=\"none\" stroke-width=\"0\" fill=\"#96f2d7\">\u003C/path>\u003Cpath d=\"M0 0 C232.67 1.98, 464.88 1.96, 820.83 0 M820.83 0 C820.83 94.72, 821.07 190.74, 820.83 411.67 M820.83 411.67 C494.64 411.05, 168.95 412.06, 0 411.67 M0 411.67 C-0.28 258.31, 0.9 105.49, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level3%3A%20Media%20Fragments\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(235.54166666666742 249.00000000000045) rotate(0 381.6666666666667 177.5)\">\u003Cpath d=\"M0.3 0.4 L761.38 -0.54 L763.91 353.9 L0.48 354.77\" stroke=\"none\" stroke-width=\"0\" fill=\"#e3fafc\">\u003C/path>\u003Cpath d=\"M0 0 C188.98 -0.67, 376.04 -0.54, 763.33 0 M763.33 0 C760.51 75.07, 762.58 150.78, 763.33 355 M763.33 355 C530.99 352.44, 299.93 352.24, 0 355 M0 355 C1.47 252.93, -0.65 153.29, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level4%3A%20prefix%20operators\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(290.54166666666765 309.0000000000004) rotate(0 354.1666666666666 145.83333333333334)\">\u003Cpath d=\"M-1.95 -0.54 L708.91 -1.1 L708.82 291.43 L-1.05 290.7\" stroke=\"none\" stroke-width=\"0\" fill=\"#d0bfff\">\u003C/path>\u003Cpath d=\"M0 0 C232.37 -0.41, 465.12 -1.45, 708.33 0 M708.33 0 C708.36 64, 706.97 128.04, 708.33 291.67 M708.33 291.67 C561.99 292.66, 414.38 292.53, 0 291.67 M0 291.67 C-3.14 224.54, -1.93 157.48, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\" transform=\"translate(233.73796366666738 722.0833330000005) rotate(0 431.32630545205524 24)\">\u003Cpath d=\"M12 0 C305.67 -1.78, 601.55 -2.59, 850.65 0 C855.31 2.29, 866.14 3.87, 862.65 12 C865.62 17.15, 860.53 21.06, 862.65 36 C865.36 44.63, 858.99 48.07, 850.65 48 C592.53 51.43, 335.48 51.43, 12 48 C7.21 44.86, -1.27 44.49, 0 36 C-2.71 28.86, 3.69 29.86, 0 12 C3.02 3.91, 5.31 -0.32, 12 0\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffffff\">\u003C/path>\u003Cpath d=\"M12 0 C285.11 -2.12, 558.98 -1.94, 850.65 0 M12 0 C230.77 0.75, 449.14 0.79, 850.65 0 M850.65 0 C859.31 1.41, 862.81 3.68, 862.65 12 M850.65 0 C858.45 -1.6, 864.92 1.92, 862.65 12 M862.65 12 C863.07 15.67, 862.13 23.8, 862.65 36 M862.65 12 C862.18 17.4, 862.83 23.79, 862.65 36 M862.65 36 C862.95 44.95, 859.95 49.1, 850.65 48 M862.65 36 C862.89 45.79, 857.91 47.39, 850.65 48 M850.65 48 C642.08 47.59, 431.68 47.67, 12 48 M850.65 48 C544.09 45.11, 238.29 45.47, 12 48 M12 48 C5.77 49.64, -1.82 43.77, 0 36 M12 48 C2.27 47.22, 1.28 43.49, 0 36 M0 36 C-1.81 29.74, 1.81 20.15, 0 12 M0 36 C-0.43 29.84, 0.23 24.39, 0 12 M0 12 C-1.95 4.15, 3.94 -1.9, 12 0 M0 12 C-1.52 4.43, 2.59 -0.86, 12 0\" stroke=\"#1e1e1e\" stroke-width=\"2\" fill=\"none\">\u003C/path>\u003C/g>\u003Ca href=\"#%F0%9F%93%9Clevel5%3A%20URI%20Templates\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(345.541666666668 370.66666666666714) rotate(0 327.5 115.83333333333331)\">\u003Cpath d=\"M0.48 -0.23 L653.95 -0.96 L655.24 231.72 L0.3 232.62\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffc9c9\">\u003C/path>\u003Cpath d=\"M0 0 C223.6 1.77, 448.15 3.07, 655 0 M655 0 C653.51 62.02, 655.63 126.77, 655 231.67 M655 231.67 C452.67 232.22, 250.72 230.9, 0 231.67 M0 231.67 C-1.94 159.98, 0.19 88.26, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level2%3A%20explicit%20hyperlinks\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(512.8139984099943 210.79166666666714) rotate(0 230.25 12.5)\">\u003Ctext x=\"460.5\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">load 3D hypermedia via href-values inside 3D files \u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel6%3A%20XDG%20soundtheme\">\u003Cg stroke-opacity=\"0.3\" fill-opacity=\"0.3\" stroke-linecap=\"round\" transform=\"translate(397.0000000000015 427.97699133333384) rotate(0 299.16666666666663 85.83333333333337)\">\u003Cpath d=\"M0.24 0.05 L598.63 0.95 L599.63 172.77 L0.21 173.22\" stroke=\"none\" stroke-width=\"0\" fill=\"#96f2d7\">\u003C/path>\u003Cpath d=\"M0 0 C140.3 -2.29, 280.63 -3.06, 598.33 0 M598.33 0 C599.06 43.45, 598.72 86.15, 598.33 171.67 M598.33 171.67 C359.87 170.2, 121.45 169.31, 0 171.67 M0 171.67 C-0.01 124.54, -1.54 76.92, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel6%3A%20XDG%20soundtheme\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(418.82877127002064 444.5937500000005) rotate(0 116 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">XDG sound theme\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level1%3A%20URL\">\u003Cg transform=\"translate(311.57217836718826 730.060111789466) rotate(0 115.63090550996719 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.26465476771203px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\"> scene.glb#world3\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(199.31695163250106 601.9626576503124) rotate(0 36.97619047619048 59.303571428571445)\">\u003Cpath d=\"M0.39 0.85 C12.92 20.67, 61.81 98.93, 74.05 118.42\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(262.2336182991678 599.8793243169791) rotate(0 165.84523809523796 59.952380952380906)\">\u003Cpath d=\"M0.1 -0.19 C55.29 19.51, 276.12 99.24, 331.58 119.07\" stroke=\"#2f9e44\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9Clevel6%3A%20XDG%20soundtheme\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(780.9310860569805 449.4249986503124) rotate(0 96.64167022705078 12.5)\">\u003Ctext x=\"193.28334045410156\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">user interface sounds\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel7%3A%20engine%20prefixes\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(448.0416662991671 494.9856079836458) rotate(0 275.00000000000034 55.83333333333337)\">\u003Cpath d=\"M-0.16 1.5 L549.67 -1.58 L549.87 112.97 L2 110.09\" stroke=\"none\" stroke-width=\"0\" fill=\"#a18072\">\u003C/path>\u003Cpath d=\"M0 0 C159.38 -2.7, 320.27 -2.05, 550 0 M550 0 C549.48 34.65, 549.4 71.26, 550 111.67 M550 111.67 C413.96 112.05, 278.26 112.45, 0 111.67 M0 111.67 C-0.76 71.49, -1.13 32.92, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\" transform=\"translate(998.1502849658342 247.9626576503124) rotate(0 30.208333333333485 177.70833333333337)\">\u003Cpath d=\"M15.1 0 C27.3 0.5, 39.59 -1.75, 45.31 0 M45.31 0 C54.85 0.57, 59.32 5.52, 60.42 15.1 M60.42 15.1 C59.4 108.9, 59.44 203.27, 60.42 340.31 M60.42 340.31 C61.71 351.48, 55.59 356.97, 45.31 355.42 M45.31 355.42 C37.78 355.1, 30.63 354.93, 15.1 355.42 M15.1 355.42 C3.46 355.29, 1.3 352.38, 0 340.31 M0 340.31 C2.18 268.83, 3.1 197.66, 0 15.1 M0 15.1 C-1.82 4.81, 3.53 -0.68, 15.1 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.4\" fill-opacity=\"0.4\" transform=\"translate(316.9836182991678 600.8793243169791) rotate(0 203.75000000000006 61.61309523809524)\">\u003Cpath d=\"M0.18 0.24 C68.03 20.71, 338.39 102.52, 406.33 122.9\" stroke=\"#6741d9\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9Clevel6%3A%20XDG%20soundtheme\">\u003Cg transform=\"translate(935.6070432781829 729.8312528022138) rotate(0 71.84636199568104 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.26465476771203px\" fill=\"#1971c2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">&menu_click\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level3%3A%20Media%20Fragments\">\u003Cg transform=\"translate(572.6572505564633 729.9439575240058) rotate(0 46.63434284327809 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.264654767712027px\" fill=\"#2f9e44\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">&t=1,10\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(237.02689647086663 785.1821910000006) rotate(0 108.35832977294922 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">clickable object in scene\u003C/text>\u003C/g>\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" stroke-linecap=\"round\" transform=\"translate(489.04166666666754 551.5000000000005) rotate(0 256 26)\">\u003Cpath d=\"M1.77 1.64 L510.18 -0.23 L510.5 51.32 L1.11 51.55\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffffff\">\u003C/path>\u003Cpath d=\"M0 0 C165.59 1.17, 331.97 1.2, 512 0 M512 0 C512.54 19.62, 511.69 35.61, 512 52 M512 52 C384.9 51.7, 255.97 51.78, 0 52 M0 52 C-2.19 31.8, -0.08 14.62, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Ca href=\"#%F0%9F%93%9C%20level1%3A%20URL\">\u003Cg transform=\"translate(376.1582370533855 119.43750000000006) rotate(0 297.95001220703125 25)\">\u003Ctext x=\"595.9000244140625\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\"> \u003C/text>\u003Ctext x=\"595.9000244140625\" y=\"44.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">to object or virtual world position via (implicit 3D hyperdeep) links\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#XRF%20microformat\">\u003Cg stroke-opacity=\"0.4\" fill-opacity=\"0.4\" transform=\"translate(629.793509608073 27.916666000000077) rotate(0 171.57499694824224 12.5)\">\u003Ctext x=\"343.1499938964844\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">via Webfinger, HTML Microformat e.g.\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#XRF%20microformat\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(33.12119210319031 27.16666600000002) rotate(0 59.775001525878906 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">discovery\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level0%3A%20File\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(593.1202946744793 92.54599099999996) rotate(0 190.43333435058588 12.5)\">\u003Ctext x=\"380.8666687011719\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\"> autodetect .ogg/.vtt/.json/.png sidecarfiles\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level2%3A%20explicit%20hyperlinks\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(194.025950713542 204.95833400000004) rotate(0 115.11666870117188 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">Explicit hyperlinks\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level0%3A%20File\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(89.27833781510424 86.83333299999998) rotate(0 74.79166412353516 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">sidecar files\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level1%3A%20URL\">\u003Cg transform=\"translate(141.59743043570973 141.66666700000002) rotate(0 27.33333396911621 17.5)\">\u003Ctext x=\"54.66666793823242\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">URL\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-opacity=\"0.8\" fill-opacity=\"0.8\" stroke-linecap=\"round\" transform=\"translate(80.16666666666697 323.49999999999994) rotate(0 42.62499999999997 59)\">\u003Cpath d=\"M21.31 0 C39.61 0.79, 48.08 1.52, 63.94 0 C81.64 -0.13, 83.61 5.69, 85.25 21.31 C84.48 41.85, 89.14 69.32, 85.25 96.69 C85.59 110.97, 78.38 119.03, 63.94 118 C45.6 114.2, 34.96 114.19, 21.31 118 C5.84 118.49, -3.53 107.62, 0 96.69 C4.47 83.73, 4.18 63.57, 0 21.31 C1.31 6.79, 8.17 1.06, 21.31 0\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffffff\">\u003C/path>\u003Cpath d=\"M21.31 0 C32.17 -0.05, 47.49 2.07, 63.94 0 M63.94 0 C76.57 -1.67, 84.04 7.54, 85.25 21.31 M85.25 21.31 C84.09 45.95, 84.41 70.37, 85.25 96.69 M85.25 96.69 C86.36 110.45, 78.66 119.08, 63.94 118 M63.94 118 C53.37 118.11, 38.18 117.41, 21.31 118 M21.31 118 C7.81 116.92, 0.28 111.14, 0 96.69 M0 96.69 C0.67 64.76, -0.59 37.01, 0 21.31 M0 21.31 C-1.23 6.36, 8.12 -0.77, 21.31 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Cg stroke-opacity=\"0.8\" fill-opacity=\"0.8\" transform=\"translate(90.96666590372752 357.49999999999994) rotate(0 31.825000762939453 25)\">\u003Ctext x=\"31.825000762939453\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"middle\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">XR\u003C/text>\u003Ctext x=\"31.825000762939453\" y=\"44.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"middle\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">Movies\u003C/text>\u003C/g>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(990.4166666666666 131.25) rotate(0 -433.75 0)\">\u003Cpath d=\"M0 0 C-254.82 0, -509.64 0, -867.5 0 M0 0 C-286.18 0, -572.36 0, -867.5 0\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(122.91666666666674 131.25) rotate(0 0 97.5)\">\u003Cpath d=\"M0 0 C0 77.99, 0 155.99, 0 195 M0 0 C0 74.52, 0 149.03, 0 195\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(122.91666666666674 441.24999999999994) rotate(0 0 78.75)\">\u003Cpath d=\"M0 0 C0 34.08, 0 68.17, 0 157.5 M0 0 C0 45.46, 0 90.93, 0 157.5\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(123.41666666666674 597.5) rotate(0 23.778439153438967 0)\">\u003Cpath d=\"M0 0 C15.31 0, 30.63 0, 47.56 0 M0 0 C12.66 0, 25.32 0, 47.56 0\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg transform=\"translate(85.91666666666674 562.25) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">0\u003C/text>\u003C/g>\u003Cg transform=\"translate(141.16667429606127 561.5) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">1\u003C/text>\u003C/g>\u003Cg transform=\"translate(191.16667429606127 562) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">2\u003C/text>\u003C/g>\u003Cg transform=\"translate(965.4166666666666 444.99999999999994) rotate(89.99999999999994 66.67500305175781 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">non-normative\u003C/text>\u003C/g>\u003Cg transform=\"translate(252.41667429606127 561) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">3\u003C/text>\u003C/g>\u003Cg transform=\"translate(310.9166742960613 561.25) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">4\u003C/text>\u003C/g>\u003Cg transform=\"translate(365.91667429606116 560.75) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">5\u003C/text>\u003C/g>\u003Cg transform=\"translate(416.48148829606123 559.75) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">6\u003C/text>\u003C/g>\u003Cg transform=\"translate(462.16667429606116 559.75) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">7\u003C/text>\u003C/g>\u003Cg stroke-linecap=\"round\" transform=\"translate(998.0416665707777 74.0000003333376) rotate(0 30.91666671461121 87.47916649999789)\">\u003Cpath d=\"M0 0 C17.17 -2.02, 30.56 -0.14, 61.83 0 M61.83 0 C59.45 35.13, 61.69 70.97, 61.83 174.96 M61.83 174.96 C41.79 176.44, 16.3 176.85, 0 174.96 M0 174.96 C-0.72 105.79, 1.8 35.53, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Cg transform=\"translate(978.8908821896158 146.28671470019532) rotate(89.99999999999994 45.375 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">normative\u003C/text>\u003C/g>\u003Cg stroke-linecap=\"round\" transform=\"translate(187.86489866666716 507.349905) rotate(0 145.70696045205528 18.33333316666878)\">\u003Cpath d=\"M9.17 0 C70.33 -1.16, 125.88 -2.49, 282.25 0 C288.04 1.06, 292.47 3.22, 291.41 9.17 C292.84 14.45, 293.12 21.77, 291.41 27.5 C294.56 31.93, 289.12 35.96, 282.25 36.67 C185.88 33.38, 89.27 35.38, 9.17 36.67 C0.88 35.54, 0.79 35.9, 0 27.5 C1.01 20.61, 1.98 17.65, 0 9.17 C-3.17 4.82, 1 -0.65, 9.17 0\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffffff\">\u003C/path>\u003Cpath d=\"M9.17 0 C63 -0.96, 120.08 -0.89, 282.25 0 M282.25 0 C287.61 1.01, 290.64 4.12, 291.41 9.17 M291.41 9.17 C292.39 12.38, 292.76 20.78, 291.41 27.5 M291.41 27.5 C291.34 32.7, 287.57 36.95, 282.25 36.67 M282.25 36.67 C175.18 36.69, 71.1 35.66, 9.17 36.67 M9.17 36.67 C3.1 36.8, 0.57 35.16, 0 27.5 M0 27.5 C-1.44 24.89, -1.44 18.36, 0 9.17 M0 9.17 C0.27 1.1, 1.24 -1.62, 9.17 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(170.97354497354468 596.2857142857101) rotate(0 0 -204.375)\">\u003Cpath d=\"M0 0 C0 -121.37, 0 -242.75, 0 -408.75 M0 0 C0 -106.84, 0 -213.68, 0 -408.75\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(169.72354497354468 186.28571428571013) rotate(0 408.12500000000006 0)\">\u003Cpath d=\"M0 0 C190.92 0, 381.83 0, 816.25 0 M0 0 C218.98 0, 437.96 0, 816.25 0\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(989.5497219000414 131.25000057142802) rotate(0 0 26.535713999999984)\">\u003Cpath d=\"M0 0 C0 12.66, 0 25.32, 0 53.07 M0 0 C0 20.7, 0 41.39, 0 53.07\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9C%20level3%3A%20Media%20Fragments\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(256.6779136242809 263.104167571428) rotate(0 106.94166564941406 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">Media fragments\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level3%3A%20Media%20Fragments\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(696.1157181452769 264.62500057142796) rotate(0 136.10000610351562 12.5)\">\u003Ctext x=\"272.20001220703125\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">control timeline of href-values\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel7%3A%20engine%20prefixes\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(496.1701737402851 508.43615857142794) rotate(0 96.34166717529297 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">engine prefixes\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel7%3A%20engine%20prefixes\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(798.5135550033939 512.6666663965841) rotate(0 88.3499984741211 12.5)\">\u003Ctext x=\"176.6999969482422\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">viewerspecific hints\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level4%3A%20prefix%20operators\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(316.7803825764296 326.317809571428) rotate(0 100.90833282470703 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">Prefix operators\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level4%3A%20prefix%20operators\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(606.4407511482065 329.052083571428) rotate(0 182.30833435058594 12.5)\">\u003Ctext x=\"364.6166687011719\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">objectbased interactivity via href-values \u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel5%3A%20URI%20Templates\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(374.9166750173473 384.22703657142796) rotate(0 90.50833129882812 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">URI templates\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel5%3A%20URI%20Templates\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(664.3938935593393 387.03057957142795) rotate(0 153.74166870117188 12.5)\">\u003Ctext x=\"307.48333740234375\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">reactive properties via href-values\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(91.91665884114218 601.2147681347399) rotate(0 14.351190476190538 41.625)\">\u003Cpath d=\"M0.9 0.21 C5.81 14.27, 24.17 69.38, 28.81 83.27\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg transform=\"translate(54.78817892799202 738.6540095714281) rotate(0 66.06666564941406 62.5)\">\u003Ctext x=\"132.13333129882812\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">then check for:\u003C/text>\u003Ctext x=\"132.13333129882812\" y=\"44.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.png\u003C/text>\u003Ctext x=\"132.13333129882812\" y=\"69.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.ogg\u003C/text>\u003Ctext x=\"132.13333129882812\" y=\"94.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.vtt\u003C/text>\u003Ctext x=\"132.13333129882812\" y=\"119.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.json\u003C/text>\u003C/g>\u003Cg transform=\"translate(262.51430867164436 511.403446571428) rotate(0 73.76153494956674 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">interactivity\u003C/text>\u003C/g>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(144.3889628411422 600.3100851347399) rotate(0 167.8690476190477 59.03571428571428)\">\u003Cpath d=\"M0.93 -0.82 C56.7 18.68, 279.07 97.33, 334.7 117.32\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9C%20level4%3A%20prefix%20operators\">\u003Cg transform=\"translate(697.8523259444576 729.9329041671845) rotate(0 43.77702954958437 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.264654767712027px\" fill=\"#6741d9\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">&!menu\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.4\" fill-opacity=\"0.4\" transform=\"translate(418.98049025559123 599.1636230051215) rotate(0 294.79166666666686 60.54166666666663)\">\u003Cpath d=\"M-1.05 1.07 C97.22 21.3, 490.07 100.85, 588.54 120.66\" stroke=\"#1971c2\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9Clevel5%3A%20URI%20Templates\">\u003Cg transform=\"translate(804.5714764752562 729.362550976567) rotate(0 53.46181410667634 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.26465476771203px\" fill=\"#f08c00\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">&foo=bar\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.4\" fill-opacity=\"0.4\" transform=\"translate(362.57249804974356 604.9309815403644) rotate(0 240.982142857143 57.952380952380906)\">\u003Cpath d=\"M0.16 -1.18 C80.48 18.05, 400.75 95.55, 480.87 114.93\" stroke=\"#f08c00\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\" transform=\"translate(232.81944157077783 723.7505133333375) rotate(0 44.738969499999996 23.166409999999985)\">\u003Cpath d=\"M11.58 0 C35.71 0, 59.84 0, 77.89 0 C85.62 0, 89.48 3.86, 89.48 11.58 C89.48 19.33, 89.48 27.08, 89.48 34.75 C89.48 42.47, 85.62 46.33, 77.89 46.33 C62.49 46.33, 47.08 46.33, 11.58 46.33 C3.86 46.33, 0 42.47, 0 34.75 C0 28.94, 0 23.14, 0 11.58 C0 3.86, 3.86 0, 11.58 0\" stroke=\"none\" stroke-width=\"0\" fill=\"#3c3d3c\">\u003C/path>\u003Cpath d=\"M11.58 0 C32.38 0, 53.17 0, 77.89 0 M11.58 0 C38.03 0, 64.47 0, 77.89 0 M77.89 0 C85.62 0, 89.48 3.86, 89.48 11.58 M77.89 0 C85.62 0, 89.48 3.86, 89.48 11.58 M89.48 11.58 C89.48 20.56, 89.48 29.54, 89.48 34.75 M89.48 11.58 C89.48 19.01, 89.48 26.44, 89.48 34.75 M89.48 34.75 C89.48 42.47, 85.62 46.33, 77.89 46.33 M89.48 34.75 C89.48 42.47, 85.62 46.33, 77.89 46.33 M77.89 46.33 C63.83 46.33, 49.77 46.33, 11.58 46.33 M77.89 46.33 C51.67 46.33, 25.45 46.33, 11.58 46.33 M11.58 46.33 C3.86 46.33, 0 42.47, 0 34.75 M11.58 46.33 C3.86 46.33, 0 42.47, 0 34.75 M0 34.75 C0 29.09, 0 23.43, 0 11.58 M0 34.75 C0 25.68, 0 16.61, 0 11.58 M0 11.58 C0 3.86, 3.86 0, 11.58 0 M0 11.58 C0 3.86, 3.86 0, 11.58 0\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003Ca href=\"#href\">\u003Cg transform=\"translate(254.29617526651055 727.2218125238091) rotate(0 25.233333587646484 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#ffffff\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">href\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(45.83695751243954 692.327004785714) rotate(0 68.93333557128904 22)\">\u003Ctext x=\"0\" y=\"33.580799999999996\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"35.199999999999996px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.* ?\u003C/text>\u003C/g>\u003C/svg>\n\t\t\t\n\n!! Organogram\n\n\u003C$tidgraph start=\"Reference\" nodetemplate=\"PotOfGold\"/>","tags":"Reference","title":"ā“ What are levels?","modified":"20250922200545335","type":"text/vnd.tiddlywiki"}, +{"created":"20250922165010537","text":"Applications can adopt XR Fragments at various levels, depending on application needs.\u003Cbr>\n\n!! Level1\n\n\u003Cb>Level1\u003C/b> is the ''soul'' of XR fragments.\u003Cbr>\n\n> All \u003Cb>other\u003C/b> levels are \u003Cb>optional\u003C/b> and \u003Cb>not required\u003C/b>\n\nThe \u003Cb>higher\u003C/b> the level, the \u003Cb>lower\u003C/b> the adoption-priority.\u003Cbr>\n\n> Click on coloured items below to navigate the various levels:\n\n\u003Csvg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 180 1106.3 573.6\" width=\"1106.390574570778\" height=\"573.6\">\u003C!-- svg-source:excalidraw -->\u003Cmetadata>\u003C/metadata>\u003Cdefs>\u003Cstyle class=\"style-fonts\">\n a { cursor:pointer} \u003C/style>\u003C/defs>\u003Ca href=\"#XRF%20microformat\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(10 10) rotate(0 489.1666666666668 295)\">\u003Cpath d=\"M0.16 -0.32 L978.16 -1.39 L980.31 588.19 L-1.32 590.15\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffec99\">\u003C/path>\u003Cpath d=\"M0 0 C311.16 -3.74, 621.41 -3.21, 978.33 0 M978.33 0 C977.31 150.47, 977.29 299.03, 978.33 590 M978.33 590 C642.78 586.06, 308.18 587.35, 0 590 M0 590 C-0.83 429.74, 0.17 270.77, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level0%3A%20File\">\u003Cg stroke-linecap=\"round\" transform=\"translate(65.91666666666674 74) rotate(0 462.25000000000006 262.875)\">\u003Cpath d=\"M-0.18 -1.39 L926.47 -1.81 L923.18 525.9 L0.3 526.15\" stroke=\"none\" stroke-width=\"0\" fill=\"#d0bfff\">\u003C/path>\u003Cpath d=\"M0 0 C350.33 2.93, 699.57 2.64, 924.5 0 M924.5 0 C925.32 194.78, 925.44 389.94, 924.5 525.75 M924.5 525.75 C727.69 524.12, 531.28 523.37, 0 525.75 M0 525.75 C2.21 397.36, 2.01 267.71, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level1%3A%20URL\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(122.91666666666674 132.91666666666669) rotate(0 433.12500000000006 232.70833333333331)\">\u003Cpath d=\"M1.97 -1.81 L864.93 0.15 L866.55 465.82 L-1.95 464.88\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffc9c9\">\u003C/path>\u003Cpath d=\"M0 0 C187.63 0.17, 376.57 0.83, 866.25 0 M866.25 0 C867.2 178.86, 866.01 358.59, 866.25 465.42 M866.25 465.42 C662.56 468.8, 458.89 468.03, 0 465.42 M0 465.42 C-0.63 346.61, -0.78 227.46, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level2%3A%20explicit%20hyperlinks\">\u003Cg stroke-opacity=\"0.3\" fill-opacity=\"0.3\" stroke-linecap=\"round\" transform=\"translate(172.5000000000001 188.16666666666669) rotate(0 410.41666666666674 205.83333333333334)\">\u003Cpath d=\"M-1.32 0.15 L821.13 0.4 L818.88 411.13 L0.57 410.57\" stroke=\"none\" stroke-width=\"0\" fill=\"#96f2d7\">\u003C/path>\u003Cpath d=\"M0 0 C232.67 1.98, 464.88 1.96, 820.83 0 M820.83 0 C820.83 94.72, 821.07 190.74, 820.83 411.67 M820.83 411.67 C494.64 411.05, 168.95 412.06, 0 411.67 M0 411.67 C-0.28 258.31, 0.9 105.49, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level3%3A%20Media%20Fragments\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(235.54166666666742 249.00000000000045) rotate(0 381.6666666666667 177.5)\">\u003Cpath d=\"M0.3 0.4 L761.38 -0.54 L763.91 353.9 L0.48 354.77\" stroke=\"none\" stroke-width=\"0\" fill=\"#e3fafc\">\u003C/path>\u003Cpath d=\"M0 0 C188.98 -0.67, 376.04 -0.54, 763.33 0 M763.33 0 C760.51 75.07, 762.58 150.78, 763.33 355 M763.33 355 C530.99 352.44, 299.93 352.24, 0 355 M0 355 C1.47 252.93, -0.65 153.29, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level4%3A%20prefix%20operators\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(290.54166666666765 309.0000000000004) rotate(0 354.1666666666666 145.83333333333334)\">\u003Cpath d=\"M-1.95 -0.54 L708.91 -1.1 L708.82 291.43 L-1.05 290.7\" stroke=\"none\" stroke-width=\"0\" fill=\"#d0bfff\">\u003C/path>\u003Cpath d=\"M0 0 C232.37 -0.41, 465.12 -1.45, 708.33 0 M708.33 0 C708.36 64, 706.97 128.04, 708.33 291.67 M708.33 291.67 C561.99 292.66, 414.38 292.53, 0 291.67 M0 291.67 C-3.14 224.54, -1.93 157.48, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\" transform=\"translate(233.73796366666738 722.0833330000005) rotate(0 431.32630545205524 24)\">\u003Cpath d=\"M12 0 C305.67 -1.78, 601.55 -2.59, 850.65 0 C855.31 2.29, 866.14 3.87, 862.65 12 C865.62 17.15, 860.53 21.06, 862.65 36 C865.36 44.63, 858.99 48.07, 850.65 48 C592.53 51.43, 335.48 51.43, 12 48 C7.21 44.86, -1.27 44.49, 0 36 C-2.71 28.86, 3.69 29.86, 0 12 C3.02 3.91, 5.31 -0.32, 12 0\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffffff\">\u003C/path>\u003Cpath d=\"M12 0 C285.11 -2.12, 558.98 -1.94, 850.65 0 M12 0 C230.77 0.75, 449.14 0.79, 850.65 0 M850.65 0 C859.31 1.41, 862.81 3.68, 862.65 12 M850.65 0 C858.45 -1.6, 864.92 1.92, 862.65 12 M862.65 12 C863.07 15.67, 862.13 23.8, 862.65 36 M862.65 12 C862.18 17.4, 862.83 23.79, 862.65 36 M862.65 36 C862.95 44.95, 859.95 49.1, 850.65 48 M862.65 36 C862.89 45.79, 857.91 47.39, 850.65 48 M850.65 48 C642.08 47.59, 431.68 47.67, 12 48 M850.65 48 C544.09 45.11, 238.29 45.47, 12 48 M12 48 C5.77 49.64, -1.82 43.77, 0 36 M12 48 C2.27 47.22, 1.28 43.49, 0 36 M0 36 C-1.81 29.74, 1.81 20.15, 0 12 M0 36 C-0.43 29.84, 0.23 24.39, 0 12 M0 12 C-1.95 4.15, 3.94 -1.9, 12 0 M0 12 C-1.52 4.43, 2.59 -0.86, 12 0\" stroke=\"#1e1e1e\" stroke-width=\"2\" fill=\"none\">\u003C/path>\u003C/g>\u003Ca href=\"#%F0%9F%93%9Clevel5%3A%20URI%20Templates\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(345.541666666668 370.66666666666714) rotate(0 327.5 115.83333333333331)\">\u003Cpath d=\"M0.48 -0.23 L653.95 -0.96 L655.24 231.72 L0.3 232.62\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffc9c9\">\u003C/path>\u003Cpath d=\"M0 0 C223.6 1.77, 448.15 3.07, 655 0 M655 0 C653.51 62.02, 655.63 126.77, 655 231.67 M655 231.67 C452.67 232.22, 250.72 230.9, 0 231.67 M0 231.67 C-1.94 159.98, 0.19 88.26, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level2%3A%20explicit%20hyperlinks\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(512.8139984099943 210.79166666666714) rotate(0 230.25 12.5)\">\u003Ctext x=\"460.5\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">load 3D hypermedia via href-values inside 3D files \u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel6%3A%20XDG%20soundtheme\">\u003Cg stroke-opacity=\"0.3\" fill-opacity=\"0.3\" stroke-linecap=\"round\" transform=\"translate(397.0000000000015 427.97699133333384) rotate(0 299.16666666666663 85.83333333333337)\">\u003Cpath d=\"M0.24 0.05 L598.63 0.95 L599.63 172.77 L0.21 173.22\" stroke=\"none\" stroke-width=\"0\" fill=\"#96f2d7\">\u003C/path>\u003Cpath d=\"M0 0 C140.3 -2.29, 280.63 -3.06, 598.33 0 M598.33 0 C599.06 43.45, 598.72 86.15, 598.33 171.67 M598.33 171.67 C359.87 170.2, 121.45 169.31, 0 171.67 M0 171.67 C-0.01 124.54, -1.54 76.92, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel6%3A%20XDG%20soundtheme\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(418.82877127002064 444.5937500000005) rotate(0 116 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">XDG sound theme\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level1%3A%20URL\">\u003Cg transform=\"translate(311.57217836718826 730.060111789466) rotate(0 115.63090550996719 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.26465476771203px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\"> scene.glb#world3\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(199.31695163250106 601.9626576503124) rotate(0 36.97619047619048 59.303571428571445)\">\u003Cpath d=\"M0.39 0.85 C12.92 20.67, 61.81 98.93, 74.05 118.42\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(262.2336182991678 599.8793243169791) rotate(0 165.84523809523796 59.952380952380906)\">\u003Cpath d=\"M0.1 -0.19 C55.29 19.51, 276.12 99.24, 331.58 119.07\" stroke=\"#2f9e44\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9Clevel6%3A%20XDG%20soundtheme\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(780.9310860569805 449.4249986503124) rotate(0 96.64167022705078 12.5)\">\u003Ctext x=\"193.28334045410156\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">user interface sounds\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel7%3A%20engine%20prefixes\">\u003Cg stroke-opacity=\"0.2\" fill-opacity=\"0.2\" stroke-linecap=\"round\" transform=\"translate(448.0416662991671 494.9856079836458) rotate(0 275.00000000000034 55.83333333333337)\">\u003Cpath d=\"M-0.16 1.5 L549.67 -1.58 L549.87 112.97 L2 110.09\" stroke=\"none\" stroke-width=\"0\" fill=\"#a18072\">\u003C/path>\u003Cpath d=\"M0 0 C159.38 -2.7, 320.27 -2.05, 550 0 M550 0 C549.48 34.65, 549.4 71.26, 550 111.67 M550 111.67 C413.96 112.05, 278.26 112.45, 0 111.67 M0 111.67 C-0.76 71.49, -1.13 32.92, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\" transform=\"translate(998.1502849658342 247.9626576503124) rotate(0 30.208333333333485 177.70833333333337)\">\u003Cpath d=\"M15.1 0 C27.3 0.5, 39.59 -1.75, 45.31 0 M45.31 0 C54.85 0.57, 59.32 5.52, 60.42 15.1 M60.42 15.1 C59.4 108.9, 59.44 203.27, 60.42 340.31 M60.42 340.31 C61.71 351.48, 55.59 356.97, 45.31 355.42 M45.31 355.42 C37.78 355.1, 30.63 354.93, 15.1 355.42 M15.1 355.42 C3.46 355.29, 1.3 352.38, 0 340.31 M0 340.31 C2.18 268.83, 3.1 197.66, 0 15.1 M0 15.1 C-1.82 4.81, 3.53 -0.68, 15.1 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.4\" fill-opacity=\"0.4\" transform=\"translate(316.9836182991678 600.8793243169791) rotate(0 203.75000000000006 61.61309523809524)\">\u003Cpath d=\"M0.18 0.24 C68.03 20.71, 338.39 102.52, 406.33 122.9\" stroke=\"#6741d9\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9Clevel6%3A%20XDG%20soundtheme\">\u003Cg transform=\"translate(935.6070432781829 729.8312528022138) rotate(0 71.84636199568104 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.26465476771203px\" fill=\"#1971c2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">&menu_click\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level3%3A%20Media%20Fragments\">\u003Cg transform=\"translate(572.6572505564633 729.9439575240058) rotate(0 46.63434284327809 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.264654767712027px\" fill=\"#2f9e44\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">&t=1,10\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(237.02689647086663 785.1821910000006) rotate(0 108.35832977294922 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">clickable object in scene\u003C/text>\u003C/g>\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" stroke-linecap=\"round\" transform=\"translate(489.04166666666754 551.5000000000005) rotate(0 256 26)\">\u003Cpath d=\"M1.77 1.64 L510.18 -0.23 L510.5 51.32 L1.11 51.55\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffffff\">\u003C/path>\u003Cpath d=\"M0 0 C165.59 1.17, 331.97 1.2, 512 0 M512 0 C512.54 19.62, 511.69 35.61, 512 52 M512 52 C384.9 51.7, 255.97 51.78, 0 52 M0 52 C-2.19 31.8, -0.08 14.62, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Ca href=\"#%F0%9F%93%9C%20level1%3A%20URL\">\u003Cg transform=\"translate(376.1582370533855 119.43750000000006) rotate(0 297.95001220703125 25)\">\u003Ctext x=\"595.9000244140625\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\"> \u003C/text>\u003Ctext x=\"595.9000244140625\" y=\"44.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">to object or virtual world position via (implicit 3D hyperdeep) links\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#XRF%20microformat\">\u003Cg stroke-opacity=\"0.4\" fill-opacity=\"0.4\" transform=\"translate(629.793509608073 27.916666000000077) rotate(0 171.57499694824224 12.5)\">\u003Ctext x=\"343.1499938964844\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">via Webfinger, HTML Microformat e.g.\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#XRF%20microformat\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(33.12119210319031 27.16666600000002) rotate(0 59.775001525878906 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">discovery\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level0%3A%20File\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(593.1202946744793 92.54599099999996) rotate(0 190.43333435058588 12.5)\">\u003Ctext x=\"380.8666687011719\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\"> autodetect .ogg/.vtt/.json/.png sidecarfiles\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level2%3A%20explicit%20hyperlinks\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(194.025950713542 204.95833400000004) rotate(0 115.11666870117188 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">Explicit hyperlinks\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level0%3A%20File\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(89.27833781510424 86.83333299999998) rotate(0 74.79166412353516 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">sidecar files\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level1%3A%20URL\">\u003Cg transform=\"translate(141.59743043570973 141.66666700000002) rotate(0 27.33333396911621 17.5)\">\u003Ctext x=\"54.66666793823242\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">URL\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-opacity=\"0.8\" fill-opacity=\"0.8\" stroke-linecap=\"round\" transform=\"translate(80.16666666666697 323.49999999999994) rotate(0 42.62499999999997 59)\">\u003Cpath d=\"M21.31 0 C39.61 0.79, 48.08 1.52, 63.94 0 C81.64 -0.13, 83.61 5.69, 85.25 21.31 C84.48 41.85, 89.14 69.32, 85.25 96.69 C85.59 110.97, 78.38 119.03, 63.94 118 C45.6 114.2, 34.96 114.19, 21.31 118 C5.84 118.49, -3.53 107.62, 0 96.69 C4.47 83.73, 4.18 63.57, 0 21.31 C1.31 6.79, 8.17 1.06, 21.31 0\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffffff\">\u003C/path>\u003Cpath d=\"M21.31 0 C32.17 -0.05, 47.49 2.07, 63.94 0 M63.94 0 C76.57 -1.67, 84.04 7.54, 85.25 21.31 M85.25 21.31 C84.09 45.95, 84.41 70.37, 85.25 96.69 M85.25 96.69 C86.36 110.45, 78.66 119.08, 63.94 118 M63.94 118 C53.37 118.11, 38.18 117.41, 21.31 118 M21.31 118 C7.81 116.92, 0.28 111.14, 0 96.69 M0 96.69 C0.67 64.76, -0.59 37.01, 0 21.31 M0 21.31 C-1.23 6.36, 8.12 -0.77, 21.31 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Cg stroke-opacity=\"0.8\" fill-opacity=\"0.8\" transform=\"translate(90.96666590372752 357.49999999999994) rotate(0 31.825000762939453 25)\">\u003Ctext x=\"31.825000762939453\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"middle\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">XR\u003C/text>\u003Ctext x=\"31.825000762939453\" y=\"44.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"middle\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">Movies\u003C/text>\u003C/g>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(990.4166666666666 131.25) rotate(0 -433.75 0)\">\u003Cpath d=\"M0 0 C-254.82 0, -509.64 0, -867.5 0 M0 0 C-286.18 0, -572.36 0, -867.5 0\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(122.91666666666674 131.25) rotate(0 0 97.5)\">\u003Cpath d=\"M0 0 C0 77.99, 0 155.99, 0 195 M0 0 C0 74.52, 0 149.03, 0 195\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(122.91666666666674 441.24999999999994) rotate(0 0 78.75)\">\u003Cpath d=\"M0 0 C0 34.08, 0 68.17, 0 157.5 M0 0 C0 45.46, 0 90.93, 0 157.5\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(123.41666666666674 597.5) rotate(0 23.778439153438967 0)\">\u003Cpath d=\"M0 0 C15.31 0, 30.63 0, 47.56 0 M0 0 C12.66 0, 25.32 0, 47.56 0\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg transform=\"translate(85.91666666666674 562.25) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">0\u003C/text>\u003C/g>\u003Cg transform=\"translate(141.16667429606127 561.5) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">1\u003C/text>\u003C/g>\u003Cg transform=\"translate(191.16667429606127 562) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">2\u003C/text>\u003C/g>\u003Cg transform=\"translate(965.4166666666666 444.99999999999994) rotate(89.99999999999994 66.67500305175781 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">non-normative\u003C/text>\u003C/g>\u003Cg transform=\"translate(252.41667429606127 561) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">3\u003C/text>\u003C/g>\u003Cg transform=\"translate(310.9166742960613 561.25) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">4\u003C/text>\u003C/g>\u003Cg transform=\"translate(365.91667429606116 560.75) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">5\u003C/text>\u003C/g>\u003Cg transform=\"translate(416.48148829606123 559.75) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">6\u003C/text>\u003C/g>\u003Cg transform=\"translate(462.16667429606116 559.75) rotate(0 6 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">7\u003C/text>\u003C/g>\u003Cg stroke-linecap=\"round\" transform=\"translate(998.0416665707777 74.0000003333376) rotate(0 30.91666671461121 87.47916649999789)\">\u003Cpath d=\"M0 0 C17.17 -2.02, 30.56 -0.14, 61.83 0 M61.83 0 C59.45 35.13, 61.69 70.97, 61.83 174.96 M61.83 174.96 C41.79 176.44, 16.3 176.85, 0 174.96 M0 174.96 C-0.72 105.79, 1.8 35.53, 0 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Cg transform=\"translate(978.8908821896158 146.28671470019532) rotate(89.99999999999994 45.375 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">normative\u003C/text>\u003C/g>\u003Cg stroke-linecap=\"round\" transform=\"translate(187.86489866666716 507.349905) rotate(0 145.70696045205528 18.33333316666878)\">\u003Cpath d=\"M9.17 0 C70.33 -1.16, 125.88 -2.49, 282.25 0 C288.04 1.06, 292.47 3.22, 291.41 9.17 C292.84 14.45, 293.12 21.77, 291.41 27.5 C294.56 31.93, 289.12 35.96, 282.25 36.67 C185.88 33.38, 89.27 35.38, 9.17 36.67 C0.88 35.54, 0.79 35.9, 0 27.5 C1.01 20.61, 1.98 17.65, 0 9.17 C-3.17 4.82, 1 -0.65, 9.17 0\" stroke=\"none\" stroke-width=\"0\" fill=\"#ffffff\">\u003C/path>\u003Cpath d=\"M9.17 0 C63 -0.96, 120.08 -0.89, 282.25 0 M282.25 0 C287.61 1.01, 290.64 4.12, 291.41 9.17 M291.41 9.17 C292.39 12.38, 292.76 20.78, 291.41 27.5 M291.41 27.5 C291.34 32.7, 287.57 36.95, 282.25 36.67 M282.25 36.67 C175.18 36.69, 71.1 35.66, 9.17 36.67 M9.17 36.67 C3.1 36.8, 0.57 35.16, 0 27.5 M0 27.5 C-1.44 24.89, -1.44 18.36, 0 9.17 M0 9.17 C0.27 1.1, 1.24 -1.62, 9.17 0\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(170.97354497354468 596.2857142857101) rotate(0 0 -204.375)\">\u003Cpath d=\"M0 0 C0 -121.37, 0 -242.75, 0 -408.75 M0 0 C0 -106.84, 0 -213.68, 0 -408.75\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(169.72354497354468 186.28571428571013) rotate(0 408.12500000000006 0)\">\u003Cpath d=\"M0 0 C190.92 0, 381.83 0, 816.25 0 M0 0 C218.98 0, 437.96 0, 816.25 0\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(989.5497219000414 131.25000057142802) rotate(0 0 26.535713999999984)\">\u003Cpath d=\"M0 0 C0 12.66, 0 25.32, 0 53.07 M0 0 C0 20.7, 0 41.39, 0 53.07\" stroke=\"#1e1e1e\" stroke-width=\"4\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9C%20level3%3A%20Media%20Fragments\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(256.6779136242809 263.104167571428) rotate(0 106.94166564941406 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">Media fragments\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level3%3A%20Media%20Fragments\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(696.1157181452769 264.62500057142796) rotate(0 136.10000610351562 12.5)\">\u003Ctext x=\"272.20001220703125\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">control timeline of href-values\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel7%3A%20engine%20prefixes\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(496.1701737402851 508.43615857142794) rotate(0 96.34166717529297 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">engine prefixes\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel7%3A%20engine%20prefixes\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(798.5135550033939 512.6666663965841) rotate(0 88.3499984741211 12.5)\">\u003Ctext x=\"176.6999969482422\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">viewerspecific hints\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level4%3A%20prefix%20operators\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(316.7803825764296 326.317809571428) rotate(0 100.90833282470703 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">Operators\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9C%20level4%3A%20prefix%20operators\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(606.4407511482065 329.052083571428) rotate(0 182.30833435058594 12.5)\">\u003Ctext x=\"364.6166687011719\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">objectbased interactivity via href-values \u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel5%3A%20URI%20Templates\">\u003Cg stroke-opacity=\"0.5\" fill-opacity=\"0.5\" transform=\"translate(374.9166750173473 384.22703657142796) rotate(0 90.50833129882812 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">URI templates\u003C/text>\u003C/g>\u003C/a>\u003Ca href=\"#%F0%9F%93%9Clevel5%3A%20URI%20Templates\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(664.3938935593393 387.03057957142795) rotate(0 153.74166870117188 12.5)\">\u003Ctext x=\"307.48333740234375\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">reactive properties via href-values\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(91.91665884114218 601.2147681347399) rotate(0 14.351190476190538 41.625)\">\u003Cpath d=\"M0.9 0.21 C5.81 14.27, 24.17 69.38, 28.81 83.27\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg transform=\"translate(54.78817892799202 738.6540095714281) rotate(0 66.06666564941406 62.5)\">\u003Ctext x=\"132.13333129882812\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">then check for:\u003C/text>\u003Ctext x=\"132.13333129882812\" y=\"44.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.png\u003C/text>\u003Ctext x=\"132.13333129882812\" y=\"69.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.ogg\u003C/text>\u003Ctext x=\"132.13333129882812\" y=\"94.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.vtt\u003C/text>\u003Ctext x=\"132.13333129882812\" y=\"119.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"end\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.json\u003C/text>\u003C/g>\u003Cg transform=\"translate(262.51430867164436 511.403446571428) rotate(0 73.76153494956674 12.5)\">\u003Ctext x=\"0\" y=\"19.08\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"20px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">interactivity\u003C/text>\u003C/g>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(144.3889628411422 600.3100851347399) rotate(0 167.8690476190477 59.03571428571428)\">\u003Cpath d=\"M0.93 -0.82 C56.7 18.68, 279.07 97.33, 334.7 117.32\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9C%20level4%3A%20prefix%20operators\">\u003Cg transform=\"translate(697.8523259444576 729.9329041671845) rotate(0 43.77702954958437 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.264654767712027px\" fill=\"#6741d9\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">&!menu\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.4\" fill-opacity=\"0.4\" transform=\"translate(418.98049025559123 599.1636230051215) rotate(0 294.79166666666686 60.54166666666663)\">\u003Cpath d=\"M-1.05 1.07 C97.22 21.3, 490.07 100.85, 588.54 120.66\" stroke=\"#1971c2\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Ca href=\"#%F0%9F%93%9Clevel5%3A%20URI%20Templates\">\u003Cg transform=\"translate(804.5714764752562 729.362550976567) rotate(0 53.46181410667634 15.79040922982)\">\u003Ctext x=\"0\" y=\"24.102480648397275\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"25.26465476771203px\" fill=\"#f08c00\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">&foo=bar\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-linecap=\"round\">\u003Cg stroke-opacity=\"0.4\" fill-opacity=\"0.4\" transform=\"translate(362.57249804974356 604.9309815403644) rotate(0 240.982142857143 57.952380952380906)\">\u003Cpath d=\"M0.16 -1.18 C80.48 18.05, 400.75 95.55, 480.87 114.93\" stroke=\"#f08c00\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\" transform=\"translate(232.81944157077783 723.7505133333375) rotate(0 44.738969499999996 23.166409999999985)\">\u003Cpath d=\"M11.58 0 C35.71 0, 59.84 0, 77.89 0 C85.62 0, 89.48 3.86, 89.48 11.58 C89.48 19.33, 89.48 27.08, 89.48 34.75 C89.48 42.47, 85.62 46.33, 77.89 46.33 C62.49 46.33, 47.08 46.33, 11.58 46.33 C3.86 46.33, 0 42.47, 0 34.75 C0 28.94, 0 23.14, 0 11.58 C0 3.86, 3.86 0, 11.58 0\" stroke=\"none\" stroke-width=\"0\" fill=\"#3c3d3c\">\u003C/path>\u003Cpath d=\"M11.58 0 C32.38 0, 53.17 0, 77.89 0 M11.58 0 C38.03 0, 64.47 0, 77.89 0 M77.89 0 C85.62 0, 89.48 3.86, 89.48 11.58 M77.89 0 C85.62 0, 89.48 3.86, 89.48 11.58 M89.48 11.58 C89.48 20.56, 89.48 29.54, 89.48 34.75 M89.48 11.58 C89.48 19.01, 89.48 26.44, 89.48 34.75 M89.48 34.75 C89.48 42.47, 85.62 46.33, 77.89 46.33 M89.48 34.75 C89.48 42.47, 85.62 46.33, 77.89 46.33 M77.89 46.33 C63.83 46.33, 49.77 46.33, 11.58 46.33 M77.89 46.33 C51.67 46.33, 25.45 46.33, 11.58 46.33 M11.58 46.33 C3.86 46.33, 0 42.47, 0 34.75 M11.58 46.33 C3.86 46.33, 0 42.47, 0 34.75 M0 34.75 C0 29.09, 0 23.43, 0 11.58 M0 34.75 C0 25.68, 0 16.61, 0 11.58 M0 11.58 C0 3.86, 3.86 0, 11.58 0 M0 11.58 C0 3.86, 3.86 0, 11.58 0\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003Ca href=\"#href\">\u003Cg transform=\"translate(254.29617526651055 727.2218125238091) rotate(0 25.233333587646484 17.5)\">\u003Ctext x=\"0\" y=\"26.712\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#ffffff\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">href\u003C/text>\u003C/g>\u003C/a>\u003Cg stroke-opacity=\"0.6\" fill-opacity=\"0.6\" transform=\"translate(45.83695751243954 692.327004785714) rotate(0 68.93333557128904 22)\">\u003Ctext x=\"0\" y=\"33.580799999999996\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"35.199999999999996px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">scene.* ?\u003C/text>\u003C/g>\u003C/svg>\n\t\t\t\n\n!! Organogram\n\n\u003C$tidgraph start=\"Reference\" nodetemplate=\"PotOfGold\"/>","tags":"Reference","title":"ā“ What are levels?","modified":"20250928180854366","type":"text/vnd.tiddlywiki"}, {"created":"20230921095138812","text":"Hypermedia browsers supporting XR Fragments can be implemented on various levels:\n\n* thru the lens of HTML (a \u003Cb>pseudo-browser\u003C/b> using javascript like \u003Ca href=\"/example/aframe/sandbox\" target=\"_blank\">the sandbox\u003C/a> which uses the [THREE](#🧰%20THREE.js) or [AFRAME](#🧰%20AFRAME) javascript library)\n* the [Godot XRF Library](#%F0%9F%A7%B0%20GODOT) is also suitable direction for making native XR hypermedia browsers.\n* thru the lens of hypermedia browsers (opening XR Documents (`.gltf`, `.obj` e.g) natively using URLs, these don't exist (yet))\n> in progress: integrating the XR Fragment parser on native browserlevel (Wolvic, Chromium-based browsers e.g.) for best performance.","tags":"[[🧰 Libraries & Tools]]","title":"šŸŒŽ 3D hypermedia browsers","modified":"20241209132308842","type":"text/markdown"}, {"created":"20240207122728580","text":"The current scene and [[src]] media (including the 3D timeline) can be further manipulated using [[Media Fragment URIs|https://www.w3.org/TR/media-frags/]].\n\nSo far `#t=` has been standardized by W3C.\u003Cbr>\nThough not being part of the XR Fragments standard, the demos suggest extra media fragments like `#loop`, `#s` and `#uv` to compensate for the lack of loop/speed/uv control.\n\u003Cbr>\u003Cbr>\n\nXR Fragments is endorsing W3C Media Fragments for media-control, as well as [[URI Templates|https://www.rfc-editor.org/rfc/rfc6570]] for text-templating.\n\n\u003Cbr>\n\u003Cdiv style=\"max-width:600px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/media_uv_template_fragments.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n","tags":"level3","title":"šŸŽž Media Fragments","modified":"20250906100509940"}, -{"created":"20250903100524508","text":"### Compatibility\n\nCompatible 3D fileformats: [glTF](https://www.khronos.org/gltf/), [usdz](https://openusd.org/release/spec_usdz.html), [obj](https://en.wikipedia.org/wiki/Wavefront_.obj_file), [collada](https://www.khronos.org/collada), [THREE.json](https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4), [X3D](https://en.wikipedia.org/wiki/X3D) e.g.\n\u003Cbr>\nA 3D scene-file can be considered \u003Cb>XR Fragment-compatible\u003C/b> when it contains metadata:\u003Cbr>\n1. implicit: it has at least one sidecar-file\u003Cbr>\n2. explicit: object(s) have \u003Ca href=\"#href\">href\u003C/a> extras.\n3. explicit: it has at least one [system folder](#system%20folders) (one objectname starting with underscore) \n\n* = last wins in case of non-unique names\n\n### Loading a file\n\n\u003C\u003Ctoc-selective-expandable 'level0' sort[title]>>","tags":"Reference","title":"šŸ“œ level0: File","modified":"20250928161123292","type":"text/markdown"}, +{"created":"20250903100524508","text":"### Capable 3D fileformats\n\n[glTF](https://www.khronos.org/gltf/), [usdz](https://openusd.org/release/spec_usdz.html), [obj](https://en.wikipedia.org/wiki/Wavefront_.obj_file), [collada](https://www.khronos.org/collada), [THREE.json](https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4), [X3D](https://en.wikipedia.org/wiki/X3D) e.g. are capable of being XR Fragment-compatible.\n\u003Cbr>\nThe requirements of any 3D file is: a scenegraph with 1 or more named objects.\n\n\n### XR Fragment Compatible\n\nA 3D scene-file can be considered \u003Cb>XR Fragment-compatible\u003C/b> when it matches **one of these** heuristics\u003Cbr>\n1. implicit: it has at least one [sidecar-file](#sidecar%20files)\u003Cbr>\n2. explicit: an object has an \u003Ca href=\"#href\">href\u003C/a> extra.\n3. explicit: it has at least one [system folder](#system%20folders) (one objectname starting with underscore) \n\n* = last wins in case of non-unique names\n\n### Loading a file\n\n\u003C\u003Ctoc-selective-expandable 'level0' sort[title]>>","tags":"Reference","title":"šŸ“œ level0: File","modified":"20250928180754463","type":"text/markdown"}, {"created":"20230427172131986","text":"URLs are the heart of XR Fragment-based 3D Hypermedia:\n\n* they allow navigating the XR browser to a (different) 3D scene file\n* they allow teleporting the user to a different location\n* they allow back/forward navigation \n* they allow [[controlling the 3D timeline|šŸŽž Media Fragments]]\n\n> [![Actions Status](https://github.com/coderofsalvation/xrfragment/workflows/test/badge.svg)](https://github.com/coderofsalvation/xrfragment/actions)\u003Cbr>Bare minimum addressibility URI fragments for spatial browsers & apps. \u003Cbr>It allows users to share 4D (intent) URLs to eachother like:\u003Cbr>`https://linux.world/#roomF&t=1,100`\u003Cbr>`linuxapp://conference/nixworkshop?newuser#roomC&t=2,200`\u003Cbr>`androidapp://page1?tutorial#roomB&t=1,100`\u003Cbr>\n\nImplicit and Explicit **adressibility** is the core of the XR Fragments spec, as well as **user teleportation**:\n\n\u003C\u003Ctoc-selective-expandable 'level1' sort[title]>>\n\nHere's pseudocode for a level1 XR Fragments browser in THREE.js:\n\n```\n// by default the (VR) user gets position at 0,0,0 at the loaded scene (+VR userheight)\n\nurl = 'world.glb#roomB&car'\nfile = url.split(\"#\")[0] \nxrf = new URLSearchParams( url.split(\"#\")[1] )\nrefs = ([...xrf.keys()]).filter( (k) => !k.match(/(t)/) ) // skip mediafrags\n\n// set last (nonoperator) objectname as camera-location\nfor( i in refs ){\n scene.setActiveCameraByName(refs[i]) \n}\n```\n\n> for robust parsing of XR Fragments use a http query-language parser, or the polyglot [parser](#šŸ”Ø%20XR%20Fragments%20parser)\n\n\u003Cbr>\n\n\u003Cbr>\nBelow is the related section of the spec (full spec here: \u003Ca href=\"doc/RFC_XR_Fragments.html\" target=\"_blank\">HTML\u003C/a>, \u003Ca href=\"doc/RFC_XR_Fragments.txt\" target=\"_blank\">TXT\u003C/a>)\n\n\u003Cbr>\u003Cbr>\n\n\u003Ciframe sandbox=\"allow-scripts\" src=\"doc/RFC_XR_Fragments.html#list-of-uri-fragments\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\nFor more info see [How it works](#How%20it%20works)\n\n","tags":"Reference","title":"šŸ“œ level1: URL","modified":"20250928161924044","type":"text/markdown"}, {"created":"20240206123412197","text":"Hyperlinks can be added to a 3D file, via the [href](#href) metadata attribute.\n\n> All modern 3D editors can attach metadata to objects, and export it to a 3D file.\u003Cbr>\n\nAn Easy **nocode** way to add metadata is [by adding custom properties in blender e.g.](https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html). This is demonstrated in the getting started video: \n\n\u003Cdiv style=\"max-width:300px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/gettingstarted2024.mp4#t=200\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\u003Cbr>\u003Cbr>\n\n\n\n| custom property | type | functionality |\n|----------|------|--------------|\n| [href](#href) | string (uri or [predefined view](#predefined_view)) | href navigation / portals / teleporting to other XR documents|\n\n\u003Cbr>\n\n\u003Cb>Object metadata\u003C/b> can also be added/exported programmatically, for example in \u003Ca href=\"https://threejs.org\" target=\"_blank\">AFRAME/THREE.js\u003C/a> can export GLB/USDZ/OBJ/COLLADA-files with them, after setting `myobject.userData.href = \"#nameofplane\"` e.g.\n## Spec\n\nBelow is the related section of the spec (full spec here: \u003Ca href=\"doc/RFC_XR_Fragments.html\" target=\"_blank\">HTML\u003C/a>, \u003Ca href=\"doc/RFC_XR_Fragments.txt\" target=\"_blank\">TXT\u003C/a>)\n\n\u003Ciframe sandbox=\"allow-scripts\" src=\"doc/RFC_XR_Fragments.html\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n","tags":"Reference","title":"šŸ“œ level2: explicit hyperlinks","modified":"20250922200854499","type":"text/markdown"}, {"created":"20250902135126450","text":"# XR Movies\n\nJust like with 2D media-files, W3C mediafragments (`#t=1,2`) can be used to control a timeline via the [#t](##t) primitive.\nXR Fragments Level3 makes the 3D timeline, as well as URL-referenced files **controllable** via Media Fragments like:\n\n* [level2](#šŸ“œ%20level2:%20explicit%20links) [hrefs](#href) (`href: #t=4` e.g. to control 3D timeline)\n* [level4](#šŸ“œ%20level4:%20xrf:%20URI%20scheme): `xrf:` URI scheme:\n * `href: xrf:foo.wav#t=0` to play a wav\n * `href: xrf:news.glb?clone#t=0` to instance and play another experience\n\n## The fragments\n\n\u003C\u003Ctoc-selective-expandable 'level3' sort[title]>>\n\n> this allows for interactive deeplinkable XR movies.\n\nCombined with [href](#href) metadata attached to button-objects, clickable interactive timelines can be constructed (interactive XR movies e.g.).\n\n> For more info see [#t](##t)\n\n## XRF viewer pseudocode\n\n```\n// by default the (VR) user gets position at 0,0,0 at the loaded scene (+VR userheight)\n\nurl = 'world.glb#roomB&car'\nfile = url.split(\"#\")[0] \nxrf = new URLSearchParams( url.split(\"#\")[1] )\nrefs = ([...xrf.keys()]).filter( (k) => !k.match(/(t)/) ) // extract mediafrags\n\nif( xrf.get('t') ) scene.playAnimations( xrf.get('t') )\n```\n","tags":"Reference","title":"šŸ“œ level3: Media Fragments","modified":"20250928161837712","type":"text/markdown"}, @@ -1136,8 +1136,8 @@ button.sidebar-toggle{ {"created":"20230425164931250","title":"$:/state/folded/AFRAME template","text":"show","modified":"20230425164935940"}, {"created":"20230425164931250","title":"$:/state/folded/GLSL shader template","text":"show","modified":"20230425164939576"}, {"created":"20230424142403302","text":"checked","title":"$:/state/import/select-all","modified":"20230424142404392"}, -{"created":"20230423163640468","title":"$:/state/notebook-sidebar","text":"yes","modified":"20250928152542900"}, -{"created":"20230423163641722","title":"$:/state/notebook-sidebar-section","text":"Home","modified":"20250928162006102"}, +{"created":"20230423163640468","title":"$:/state/notebook-sidebar","text":"yes","modified":"20250928180428422"}, +{"created":"20230423163641722","title":"$:/state/notebook-sidebar-section","text":"Reference","modified":"20250928180429855"}, {"created":"20230427102758222","title":"$:/state/plugin-info--1887569658-$:/plugins/ihm/tidgraph--50210113","text":"documentation","modified":"20230427102759911"}, {"created":"20230427092525294","title":"$:/state/plugin-info--391242618-$:/plugins/tiddlywiki/browser-storage","text":"yes","modified":"20230427092525375"}, {"created":"20230427093219686","title":"$:/state/plugin-info--391242618-$:/plugins/tiddlywiki/browser-storage--605768392","text":"settings","modified":"20230427094141558"}, @@ -1145,7 +1145,7 @@ button.sidebar-toggle{ {"created":"20240627123502664","title":"$:/state/plugin-info-1605320774-$:/themes/nico/notebook--1711715474","text":"contents","modified":"20240627123505187"}, {"created":"20230424093627704","title":"$:/state/plugin-info-833095967-Draft of '$:/core'---1604322978","text":"readme","modified":"20230424093629208"}, {"created":"20230423163649566","title":"$:/state/showeditpreview","text":"no","modified":"20250207145432476"}, -{"created":"20230504174435745","title":"$:/state/sidebar","text":"ā€œnoā€","modified":"20250928152510675"}, +{"created":"20230504174435745","title":"$:/state/sidebar","text":"ā€œnoā€","modified":"20250928180425344"}, {"created":"20230423163453188","title":"$:/state/tab--1963855381","text":"$:/core/ui/ControlPanel/Palette","modified":"20240718192009185"}, {"created":"20230427092954391","title":"$:/state/tab--2112689675","text":"$:/core/ui/ControlPanel/Advanced","modified":"20250211170652750"}, {"created":"20230424093058379","title":"$:/state/tab--697582678","text":"$:/core/ui/ControlPanel/Settings/TiddlyWiki","modified":"20230427093030201"}, @@ -1164,7 +1164,7 @@ button.sidebar-toggle{ {"created":"20250902140446967","title":"$:/state/toc/level3-šŸŽž Media Fragments-1869724228","text":"close","modified":"20250902140447802"}, {"created":"20241007085320030","title":"$:/state/toc/Reference-šŸ“œ level 1 spec--403145756","text":"open","modified":"20241007085320030"}, {"created":"20241007085406064","title":"$:/state/toc/Reference-šŸ“œ level 1 spec: URL--403145756","text":"open","modified":"20241007085406064"}, -{"created":"20250924095259064","title":"$:/state/toc/Reference-šŸ“œ level0: File--403145756","text":"close","modified":"20250928161508628"}, +{"created":"20250924095259064","title":"$:/state/toc/Reference-šŸ“œ level0: File--403145756","text":"close","modified":"20250928181024424"}, {"created":"20241007085601222","title":"$:/state/toc/Reference-šŸ“œ level1: URL--403145756","text":"close","modified":"20250928161506533"}, {"created":"20250922160153227","title":"$:/state/toc/Reference-šŸ“œ level2: explicit hyperlinks--403145756","text":"close","modified":"20250928162002123"}, {"created":"20250902140915727","title":"$:/state/toc/Reference-šŸ“œ level2: explicit links--403145756","text":"open","modified":"20250903120156897"}, @@ -1210,7 +1210,7 @@ button.sidebar-toggle{ {"created":"20230622104329622","title":"$:/state/toc/Reference/js/AFRAME-THREE.js--403145756","text":"open","modified":"20230622104329622"}, {"created":"20230622111759784","title":"$:/state/toc/Reference/The parser-THREE.js--403145756","text":"open","modified":"20230622111759784"}, {"title":"$:/status/RequireReloadDueToPluginChange","text":"no"}, -{"title":"$:/StoryList","created":"20250928152547845","text":"","list":"[[XR Fragments]]","modified":"20250928161932191"}, +{"title":"$:/StoryList","created":"20250928180430928","text":"","list":"[[XR Fragments]]","modified":"20250928180801784"}, {"created":"20230423163445948","title":"$:/theme","text":"$:/themes/nico/notebook","modified":"20240718191943667"}, {"created":"20240627122947980","text":"{\n \"tiddlers\": {\n \"$:/themes/nico/notebook/LICENSE\": {\n \"title\": \"$:/themes/nico/notebook/LICENSE\",\n \"created\": \"20200419141443144\",\n \"modified\": \"20210118213330307\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\nMIT License Copyright (c) 2020 [[Nicolas Petton|https://nicolas.petton.fr]] nicolas@petton.fr\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\"Software\\\"), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is furnished\\nto do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice (including the next\\nparagraph) shall be included in all copies or substantial portions of the\\nSoftware.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS\\nOR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF\\nOR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\"\n },\n \"$:/themes/nico/notebook/themetweaks\": {\n \"title\": \"$:/themes/nico/notebook/themetweaks\",\n \"created\": \"20201217172915960\",\n \"modified\": \"20210123211851680\",\n \"tags\": \"$:/tags/ControlPanel/Appearance\",\n \"caption\": \"{{$:/language/ThemeTweaks/ThemeTweaks}}\",\n \"text\": \"\\\\define lingo-base() $:/language/ThemeTweaks/\\n\\nYou can tweak certain aspects of the ''Notebook'' theme.\\n\\n! \u003C\u003Clingo Options>>\\n\\n|\u003C$link to=\\\"$:/themes/nico/notebook/options/stickytitles\\\">\u003C\u003Clingo Options/StickyTitles>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Options/StickyTitles/Hint>>// |\u003C$select tiddler=\\\"$:/themes/nico/notebook/options/stickytitles\\\">\u003Coption value=\\\"no\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"yes\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003C\u003Clingo Options/CodeWrapping>>\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003Coption value=\\\"pre\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"pre-wrap\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\\\">Reveal tiddler controls on mouseover\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\\\">\u003Coption value=\\\"no\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"yes\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n\\n! \u003C\u003Clingo Settings>>\\n\\n|\u003C$link to=\\\"$:/themes/nico/notebook/settings/fontfamily\\\">\u003C\u003Clingo Settings/FontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/settings/fontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/settings/codefontfamily\\\">\u003C\u003Clingo Settings/CodeFontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/settings/codefontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/settings/editorfontfamily\\\">\u003C\u003Clingo Settings/EditorFontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/settings/editorfontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n\\n! \u003C\u003Clingo Metrics>>\\n\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\">\u003C\u003Clingo Metrics/FontSize>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\">\u003C\u003Clingo Metrics/LineHeight>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\">\u003C\u003Clingo Metrics/BodyFontSize>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/bodyfontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\">\u003C\u003Clingo Metrics/BodyLineHeight>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/bodylineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\">\u003C\u003Clingo Metrics/SidebarBreakpoint>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarBreakpoint/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/metrics/sidebar-width\\\">\u003C\u003Clingo Metrics/SidebarWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarWidth/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/sidebar-width\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/metrics/story-width\\\">\u003C\u003Clingo Metrics/StoryWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryWidth/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/story-width\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n\\n\"\n },\n \"$:/themes/nico/notebook/base\": {\n \"title\": \"$:/themes/nico/notebook/base\",\n \"created\": \"20200419141443144\",\n \"modified\": \"20210120224227503\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n\\\\define if-sidebar(text)\\n \u003C$reveal state=\\\"$:/state/notebook-sidebar\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n $text$\\n \u003C/$reveal>\\n\\\\end\\n\\n\\\\define if-reveal-tiddler-controls-on-hover(text)\\n \u003C$reveal state=\\\"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n $text$\\n \u003C/$reveal>\\n\\\\end\\n \\n/* Top and bottom bars */\\n\\n/* Hide the top-right bar */\\n.tc-topbar.tc-topbar-right {\\n display: none;\\n}\\n\\ndiv.tc-sidebar-header {\\n padding: 0;\\n min-height: 0;\\n}\\n\\n.tc-story-river {\\n padding: 6px 0 !important;\\n width: 100% !important;\\n max-width: {{$:/themes/nico/notebook/metrics/story-width}} !important;\\n margin: 0 auto !important;\\n margin-top: 34px !important;\\n}\\n\\ndiv.tc-tiddler-frame {\\n width: 100%;\\n margin: 20px 0;\\n background: \u003C\u003Ccolour tiddler-background>>;\\n box-shadow: 0 5px 20px rgba(0,0,0, 0.12);\\n border-radius: 6px;\\n padding: 42px 60px 60px 60px;\\n}\\n\\nh1.tc-site-title {\\n margin-top: 14px;\\n font-size: 1.5em !important;\\n}\\n\\n.nc-bar {\\n padding: 10px;\\n height: {{$:/themes/nico/notebook/metrics/topbar-height}};\\n background: \u003C\u003Ccolour page-background>>;\\n display: flex;\\n justify-content: space-between;\\n}\\n\\n.nc-topbar-wrapper {\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n /* The z-index needs to be above the z-index used in tiddlers in zoomin view */\\n z-index: 501;\\n}\\n\\n.nc-bar.nc-topbar {\\n top: 0;\\n background: \u003C\u003Ccolour page-background>>ee;\\n max-width: calc({{$:/themes/nico/notebook/metrics/story-width}} + 40px);\\n padding: 10px 20px;\\n margin: 0 auto;\\n}\\n\\n.nc-bar.nc-bottombar {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n /* The z-index needs to be above the z-index used in tiddlers in zoomin view */\\n z-index: 501;\\n}\\n\\n.nc-bar .left svg {\\n fill: \u003C\u003Ccolour sidebar-controls-foreground>>;\\n}\\n\\n.nc-bar input[type=\\\"search\\\"] {\\n width: 200px;\\n padding: .6em 1em;\\n margin-top: -.2em;\\n background: \u003C\u003Ccolour sidebar-button-foreground>>44;\\n color: \u003C\u003Ccolour foreground>>cc;\\n transition: all ease-in .2s;\\n border: 1px solid transparent;\\n outline: 0;\\n}\\n\\n.nc-bar input[type=\\\"search\\\"]:focus {\\n width: 300px;\\n background: \u003C\u003Ccolour tiddler-background>>;\\n color: \u003C\u003Ccolour foreground>>;\\n border: 1px solid \u003C\u003Ccolour primary>>;\\n box-shadow: 0 0 .2rem 0 \u003C\u003Ccolour primary>>;\\n}\\n\\ninput[type=\\\"search\\\"]::-webkit-search-cancel-button {\\n -webkit-appearance: auto;\\n}\\n\\n.nc-bar .tc-block-dropdown.tc-search-drop-down {\\n margin-left: 0;\\n width: 400px;\\n border: 0;\\n box-shadow: 0 0 6px 0 rgba(0,0,0,.2);\\n border-radius: 6px;\\n padding: 20px 0;\\n}\\n\\n.nc-bar p {\\n margin: 0;\\n}\\n\\n.nc-bar .tc-page-controls {\\n margin-top: 0;\\n}\\n\\n.nc-bar .tc-page-controls button {\\n margin-right: .8em;\\n}\\n\\n.nc-bar .tc-page-controls button .tc-btn-text {\\n font-size: 14px;\\n}\\n\\n.nc-bar .tc-block-dropdown {\\n max-height: 70vh;\\n overflow: auto;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-topbar {\\n display: none;\\n }\\n\\n .tc-story-river {\\n padding: 0 !important;\\n margin-top: 0 !important;\\n margin-bottom: 60px !important;\\n }\\n\\n div.tc-tiddler-frame {\\n margin: 0;\\n box-shadow: none;\\n border-radius: 0;\\n border-top: 0;\\n }\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-bottombar {\\n display: none;\\n }\\n}\\n\\n@media(max-width: 1100px) {\\n .nc-bar input[type=\\\"search\\\"] {\\n width: 200px;\\n }\\n}\\n\\n/* Sidebar */\\n\\n@keyframes sidebar-appear {\\n 0% {\\n left: -{{$:/themes/nico/notebook/metrics/sidebar-width}};\\n }\\n 100% {\\n left: 0;\\n }\\n}\\n\\n\u003C\u003Cif-sidebar \\\"\\\"\\\"\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-sidebar {\\n animation: sidebar-appear .14s;\\n padding-top: 10px;\\n }\\n}\\n\\\"\\\"\\\">>\\n\\n.nc-sidebar {\\n background: \u003C\u003Ccolour tiddler-background>>;\\n border-right: 1px solid \u003C\u003Ccolour tiddler-border>>;\\n width: {{$:/themes/nico/notebook/metrics/sidebar-width}};\\n overflow-y: auto;\\n overflow-x: hidden;\\n z-index: 100;\\n}\\n\\n.nc-sidebar .segment {\\n border-bottom: 1px solid rgba(0,0,0,.1);\\n}\\n\\n.nc-sidebar ol {\\n margin: 0;\\n padding: 0;\\n list-style: none;\\n line-height: 1.8em;\\n}\\n\\n.nc-sidebar ol ol {\\n padding-left: 18px;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .mobile-only {\\n display: none;\\n }\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .desktop-only {\\n display: none;\\n }\\n}\\n\\n.nc-sidebar h1.tc-site-title {\\n margin: 0;\\n}\\n\\n.nc-sidebar p {\\n margin: 6px 0;\\n}\\n\\n.nc-sidebar .tc-site-subtitle {\\n color: \u003C\u003Ccolour site-title-foreground>>;\\n}\\n\\n.nc-sidebar .section .label {\\n padding: 2px 0;\\n color: \u003C\u003Ccolour site-title-foreground>>;\\n fill: \u003C\u003Ccolour site-title-foreground>>;\\n font-weight: bold;\\n line-height: 1.6em;\\n display: block;\\n width: 100%;\\n text-align: left;\\n padding: 8px 15px;\\n border-radius: 0;\\n}\\n\\n.nc-sidebar .section:not(.open) .label:hover {\\n background: rgba(0,0,0,.06);\\n}\\n\\n.nc-sidebar .section.open .label {\\n color: \u003C\u003Ccolour tiddler-background>>;\\n fill: \u003C\u003Ccolour tiddler-background>>;\\n background: \u003C\u003Ccolour primary>>;\\n border-bottom: 1px solid rgba(0,0,0,.1);\\n}\\n\\n.nc-sidebar .section .label .caret {\\n display: inline-block;\\n width: 15px;\\n float: right;\\n}\\n\\n.nc-sidebar .content {\\n padding: 6px 15px;\\n font-size: 1em;\\n}\\n\\n.nc-sidebar .tc-tiddlylink {\\n color: \u003C\u003Ccolour primary>>;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-sidebar {\\n position: fixed;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n }\\n}\\n\\n\u003C\u003Cif-sidebar \\\"\\\"\\\"\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n @keyframes sidebar-slide {\\n 0% {\\n left: -100vw;\\n }\\n 100% {\\n left: 0;\\n }\\n }\\n .nc-sidebar {\\n overflow: auto;\\n position: fixed;\\n width: 100%;\\n left: 0;\\n top: 0;\\n bottom: 48px;\\n z-index: 3000;\\n animation: sidebar-slide ease-in .2s;\\n animation-fill-mode: forwards;\\n }\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .tc-page-container {\\n margin-left: {{$:/themes/nico/notebook/metrics/sidebar-width}} !important;\\n }\\n\\n .nc-topbar-wrapper {\\n left: {{$:/themes/nico/notebook/metrics/sidebar-width}};\\n }\\n}\\n\\\"\\\"\\\">>\\n\\n/* Animate the hamburger button */\\n\\n@keyframes menu-bars-1 {\\n 0% {}\\n 100% {\\n transform: rotate(-45deg) translateY(-10px) translateX(-6px);\\n fill: \u003C\u003Ccolour foreground>>;\\n }\\n}\\n\\n@keyframes menu-bars-2 {\\n 0% {}\\n 100% { opacity: 0; }\\n}\\n\\n@keyframes menu-bars-3 {\\n 0% {}\\n 100% {\\n transform: rotate(45deg) translateY(6px) translateX(2px);\\n fill: \u003C\u003Ccolour foreground>>;\\n }\\n}\\n\\n.sidebar-toggle {\\n /* position: fixed; */\\n /* top: 6px; */\\n /* left: 6px; */\\n /* z-index: 600; */\\n /* padding: 4px; */\\n /* border-radius: 8px; */\\n margin-right: 10px;\\n transition: all ease-in-out .2s;\\n fill: \u003C\u003Ccolour sidebar-controls-foreground>>;\\n}\\n\\n.sidebar-toggle:hover,\\n.sidebar-toggle.open {\\n fill: \u003C\u003Ccolour sidebar-controls-foreground-hover>>;\\n}\\n\\n/* @media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) { */\\n/* .sidebar-toggle { */\\n/* top: auto; */\\n/* bottom: 10px; */\\n/* left: 10px; */\\n/* } */\\n/* } */\\n\\n.sidebar-toggle .bars .bar {\\n transform: rotate(0) translateY(0) translateX(0);\\n opacity: 1;\\n transform-origin: 20px 10px;\\n transition: transform 0.4s ease-in-out, opacity 0.2s ease-in-out, fill .4s ease-in-out;\\n}\\n\\n.sidebar-toggle .bars .bar:nth-of-type(3) {\\n transform-origin: 20px 20px;\\n}\\n\\n.sidebar-toggle.open .bars .bar:nth-of-type(1) {\\n animation: menu-bars-1 .6s;\\n animation-fill-mode: forwards;\\n}\\n.sidebar-toggle.open .bars .bar:nth-of-type(2) {\\n animation: menu-bars-2 .6s;\\n animation-fill-mode: forwards;\\n}\\n.sidebar-toggle.open .bars .bar:nth-of-type(3) {\\n animation: menu-bars-3 .6s;\\n animation-fill-mode: forwards;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n div.tc-tiddler-frame {\\n padding: 14px;\\n }\\n}\\n\\n/* Inputs */\\n\\ninput, textarea {\\n transition: border .14s ease-in-out;\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n border: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n padding: .5em;\\n border-radius: 4px;\\n}\\n\\ninput:focus, textarea:focus {\\n box-shadow: 0 0 0.2rem 0 \u003C\u003Ccolour primary>>;\\n outline: 0;\\n border-color: \u003C\u003Ccolour primary>>;\\n}\\n\\nbutton {\\n border-radius: 1.5em;\\n border: 1px solid #ccc;\\n background: \u003C\u003Ccolour tiddler-background>>;\\n padding: .3em 1em;\\n cursor: pointer;\\n transition: box-shadow ease-in .1s;\\n color: \u003C\u003Ccolor foreground>>;\\n}\\n\\nbutton:focus, button:active {\\n outline: 0 none;\\n}\\n\\nbutton.tc-btn-invisible {\\n border-radius: 0;\\n}\\n\\n.tc-editor-toolbar button,\\n.tc-editor-toolbar button.tc-btn-invisible {\\n border-radius: 3px;\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n color: \u003C\u003Ccolour foreground>>;\\n fill: \u003C\u003Ccolour foreground>>;\\n border: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n}\\n\\n.tc-editor-toolbar button:hover,\\n.tc-editor-toolbar button:active {\\n border-color: \u003C\u003Ccolour primary>>;\\n background: \u003C\u003Ccolour primary>>;\\n color: \u003C\u003Ccolour background>>;\\n fill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n transition: border .14s ease-in-out;\\n border: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n padding: 4px;\\n border-radius: 4px;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor:focus,\\n.tc-tiddler-frame textarea.tc-edit-texteditor:focus,\\n.tc-tiddler-frame iframe.tc-edit-texteditor:focus {\\n box-shadow: 0 0 0.2rem 0 \u003C\u003Ccolour primary>>;\\n outline: 0;\\n border-color: \u003C\u003Ccolour primary>>;\\n}\\n\\n.tc-tiddler-controls .tc-btn-text {\\n font-size: 16px;\\n}\\n\\n\u003C\u003Cif-reveal-tiddler-controls-on-hover \\\"\\\"\\\"\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .tc-tiddler-frame .tc-tiddler-controls svg {\\n opacity: 0;\\n transition: all .2s ease-in;\\n }\\n\\n .tc-tiddler-controls svg.tc-image-close-button,\\n .tc-tiddler-controls .py-toggle-todo-button svg,\\n .tc-tiddler-controls svg.tc-image-done-button,\\n .tc-tiddler-frame .tc-tiddler-controls:hover svg {\\n opacity: 1;\\n }\\n\\n .tc-tiddler-controls .py-toggle-todo-button .done svg {\\n fill: #2da562;\\n }\\n}\\n\\\"\\\"\\\">>\\n\\nbutton.tc-tag-label, span.tc-tag-label {\\n padding: 0.3em 1em !important;\\n}\\n\\n/* Fonts */\\n\\nhtml, body {\\n font-family: {{$:/themes/nico/notebook/settings/fontfamily}};\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n font-family: {{$:/themes/nico/notebook/settings/editorfontfamily}};\\n}\\n\\npre, code {\\n font-family: {{$:/themes/nico/notebook/settings/codefontfamily}};\\n}\\n\\n.tc-titlebar, .tc-site-title {\\n font-size: 28px !important;\\n line-height: 34px !important;\\n font-weight: 600 !important;\\n letter-spacing: -0.5px !important;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n font-weight: 600;\\n}\\n\\n.tc-tiddler-body h1,\\n.tc-tiddler-body h2,\\n.tc-tiddler-preview-preview h1,\\n.tc-tiddler-preview-preview h2 {\\n font-weight: bold;\\n}\\n\\ndiv.tc-tiddler-frame .tc-tiddler-body {\\n font-size: {{$:/themes/nico/notebook/metrics/bodyfontsize}};\\n line-height: {{$:/themes/nico/notebook/metrics/bodylineheight}};\\n}\\n\\n/* Tabs */\\n\\ndiv.tc-tab-buttons {\\n margin-bottom: -4px;\\n}\\n\\ndiv.tc-tab-buttons button {\\n font-weight: bold;\\n font-size: 1.2em;\\n line-height: 1em;\\n padding: .6em .8em .4em .8em;\\n border: 0;\\n border-radius: 0;\\n background: transparent;\\n cursor: pointer;\\n transition: background ease-in .2s;\\n}\\n\\ndiv.tc-tab-buttons button:hover {\\n background: rgba(0,0,0,.03);\\n}\\n\\ndiv.tc-tab-buttons button.tc-tab-selected {\\n border: 0;\\n background: transparent;\\n border-bottom: 4px solid \u003C\u003Ccolour primary>>;\\n}\\n\\n/* Dropdowns */\\n\\n@keyframes pop {\\n 0% {\\n transform: scale(0.8);\\n opacity: 0;\\n }\\n\\n 80% {\\n transform: scale(1.03);\\n opacity: 1;\\n }\\n\\n 100% {\\n transform: scale(1);\\n opacity: 1;\\n }\\n}\\n\\n.tc-drop-down {\\n box-shadow: 0 0 10px rgba(0,0,0,.2);\\n border-radius: 6px;\\n padding: 10px 0 !important;\\n animation: pop .15s ease-in forwards;\\n}\\n\\n.tc-drop-down a, .tc-drop-down button {\\n padding: 3px 15px !important;\\n}\\n\\n.tc-search-results {\\n line-height: 2em;\\n}\\n\\n.tc-search-results em {\\n font-weight: bold;\\n font-style: normal;\\n}\\n\\n/* Draft list */\\n\\n.tc-drafts-list {\\n font-size: .9em;\\n left: auto;\\n right: 0;\\n}\\n\\n.tc-drafts-list a {\\n padding: 6px 12px;\\n font-weight: bold;\\n border-top-left-radius: 6px;\\n border-top-right-radius: 6px;\\n display: inline-block;\\n}\\n\\n.nc-refs {\\n color: #888;\\n font-size: .9em;\\n}\\n\\n.nc-refs h4 {\\n margin-bottom: 4px;\\n}\\n\\n.nc-post-created {\\n color: #acacac;\\n font-size: .8em;\\n}\\n\"\n },\n \"$:/themes/nico/notebook/changelog\": {\n \"title\": \"$:/themes/nico/notebook/changelog\",\n \"caption\": \"ChangeLog\",\n \"created\": \"20201217180707912\",\n \"modified\": \"20210202214001915\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"! 1.4.1\\n\\n!! Fixes\\n\\n* Fix the transclusion mode of sidebar sections\\n* Fix section title rendering for tiddlers without a caption field\\n* Fix the colour of links in the sidebar when using Notebook palettes with Vanilla\\n\\n! 1.4.0\\n\\n!! Features\\n\\n* New redesigned topbar layout\\n* Add a configuration setting for the story width\\n* Add support for keyboard navigation in the search dropdown\\n\\n! 1.3.6\\n\\n!! Improvements\\n\\n* Improve the style of tabs\\n* New animation for drop-downs\\n* Use a lighter page background colour in the beige palette\\n\\n!! Fixes\\n\\n* Fix the default ctrl+shift+F shortcut for focusing the search input\\n\\n! 1.3.5\\n\\n!! Features\\n\\n* Add an option to reveal tiddler controls on mouseover\\n\\n! 1.3.4\\n\\n!! Improvements\\n\\n* Add a keyboard shortcut (alt+shift+s) to toggle Notebook sidebar\\n* Add missing colours to tiddler editor fields in the dark palette\\n\\n!! Fixes\\n\\n* Fix the size of toolbar button labels when the $:/config/Toolbar/Text is set to yes\\n\\n! 1.3.3\\n\\n!! Improvements\\n\\n* Make the sidebar more generic by using the default sidebar sections\\n\\n! 1.3.2\\n\\n!! Improvements\\n\\n* Add colours for messages in the dark palette\\n* Add colours for notification in the dark palette\\n* Set colours for messages in the beige palette\\n\\n! 1.3.1\\n\\n!! Features\\n\\n* New font family settings distinct from the Vanilla theme\\n\\n!! Improvements\\n\\n* Use a slightly lighter colour as the search input background\\n* Improve contrast of sidebar buttons in the dark palette\\n\\n!! Fixes\\n\\n* Fix tiddler control button colours in all three palettes\\n* Fix tab colours in palette-dark\\n\\n! 1.3.0\\n\\n!! Improvements\\n\\n* New dark colour palette\\n* Use a darker color for tiddler subtitles\\n* Add back the WebKit search cancel button in search inputs\\n\\n!! Fixes\\n\\n* Fix the z-index of the topbar for the zoomin story view\\n* Fix the font weight of tiddler titles in edit mode\\n\\n! 1.2.0\\n\\n!! Improvements\\n\\n* Better support for dark colour palettes\\n\\n!! Fixes\\n\\n* Fix rendering of overflowing/wrapping text in the sidebar\\n\\n! 1.1.0\\n\\n!! Features\\n\\n* New theme tweaks tab dedicated to Notebook in the control panel\\n* Inputs in the edit template are now styled consistently with other inputs\\n\\n!! Fixes\\n\\n* Fixes the position of sticky tiddler titles when the option is turned on\\n\"\n },\n \"$:/config/ShortcutInfo/notebook-focus-search\": {\n \"title\": \"$:/config/ShortcutInfo/notebook-focus-search\",\n \"text\": \"Focus on the topbar search field\"\n },\n \"$:/config/shortcuts/notebook-focus-search\": {\n \"title\": \"$:/config/shortcuts/notebook-focus-search\",\n \"text\": \"ctrl+shift+F\"\n },\n \"$:/config/Search/AutoFocus\": {\n \"title\": \"$:/config/Search/AutoFocus\",\n \"text\": \"false\"\n },\n \"$:/config/shortcuts/sidebar-search\": {\n \"title\": \"$:/config/shortcuts/sidebar-search\",\n \"text\": \"\"\n },\n \"$:/themes/nico/notebook/images/bars\": {\n \"title\": \"$:/themes/nico/notebook/images/bars\",\n \"created\": \"20200428212322206\",\n \"modified\": \"20201210210231235\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg class=\\\"bars\\\" height=\\\"21pt\\\" viewBox=\\\"0 0 42 42\\\" enable-background=\\\"new 0 0 32 22.5\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n \u003Cg class=\\\"svg-menu-toggle\\\" sketch:type=\\\"MSLayerGroup\\\">\\n \u003Crect class=\\\"bar\\\" x=\\\"8\\\" y=\\\"28\\\" width=\\\"26\\\" height=\\\"4\\\">\u003C/rect>\\n \u003Crect class=\\\"bar\\\" x=\\\"8\\\" y=\\\"19\\\" width=\\\"26\\\" height=\\\"4\\\">\u003C/rect>\\n \u003Crect class=\\\"bar\\\" x=\\\"8\\\" y=\\\"10\\\" width=\\\"26\\\" height=\\\"4\\\">\u003C/rect>\\n \u003C/g>\\n\u003C/svg>\\n\"\n },\n \"$:/themes/nico/notebook/images/caret-down\": {\n \"title\": \"$:/themes/nico/notebook/images/caret-down\",\n \"created\": \"20200429194348688\",\n \"modified\": \"20201210210230919\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg width=\\\"6pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\">\u003Cpath d=\\\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\\\"/>\u003C/svg>\\n\"\n },\n \"$:/themes/nico/notebook/images/caret-right\": {\n \"title\": \"$:/themes/nico/notebook/images/caret-right\",\n \"created\": \"20200429194305719\",\n \"modified\": \"20201210210230909\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg width=\\\"4pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 192 512\\\">\u003Cpath d=\\\"M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z\\\"/>\u003C/svg>\\n\"\n },\n \"$:/themes/nico/notebook/images/color-switch\": {\n \"title\": \"$:/themes/nico/notebook/images/color-switch\",\n \"created\": \"20201210170859810\",\n \"creator\": \"nico\",\n \"modified\": \"20201210205606403\",\n \"modifier\": \"nico\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg width=\\\"20px\\\" height=\\\"20px\\\" viewBox=\\\"0 0 16 16\\\" class=\\\"bi bi-circle-half\\\" fill=\\\"currentColor\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n \u003Cpath fill-rule=\\\"evenodd\\\" d=\\\"M8 15V1a7 7 0 1 1 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z\\\"/>\\n\u003C/svg\\n\"\n },\n \"$:/themes/nico/notebook/metrics/bodyfontsize\": {\n \"title\": \"$:/themes/nico/notebook/metrics/bodyfontsize\",\n \"created\": \"20200428203454207\",\n \"modified\": \"20201210205606363\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"15px\\n\"\n },\n \"$:/themes/nico/notebook/metrics/bodylineheight\": {\n \"title\": \"$:/themes/nico/notebook/metrics/bodylineheight\",\n \"created\": \"20200428203454207\",\n \"modified\": \"20201210205606363\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"22px\"\n },\n \"$:/themes/nico/notebook/metrics/sidebar-width\": {\n \"title\": \"$:/themes/nico/notebook/metrics/sidebar-width\",\n \"created\": \"20200429144554294\",\n \"modified\": \"20201210210231246\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"350px\\n\"\n },\n \"$:/themes/nico/notebook/metrics/story-width\": {\n \"title\": \"$:/themes/nico/notebook/metrics/story-width\",\n \"created\": \"20210123210054185\",\n \"modified\": \"20210123211911688\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"800px\\n\"\n },\n \"$:/themes/nico/notebook/metrics/topbar-height\": {\n \"title\": \"$:/themes/nico/notebook/metrics/topbar-height\",\n \"created\": \"20200428203454207\",\n \"modified\": \"20201210205606363\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"52px\\n\"\n },\n \"$:/themes/nico/notebook/options/stickytitles\": {\n \"title\": \"$:/themes/nico/notebook/options/stickytitles\",\n \"text\": \"no\"\n },\n \"$:/themes/nico/notebook/options/codewrapping\": {\n \"title\": \"$:/themes/nico/notebook/options/codewrapping\",\n \"text\": \"pre-wrap\"\n },\n \"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\": {\n \"title\": \"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\",\n \"text\": \"no\"\n },\n \"$:/core/ui/PageTemplate/sidebar\": {\n \"title\": \"$:/core/ui/PageTemplate/sidebar\",\n \"created\": \"20200430072116835\",\n \"modified\": \"20201217174129501\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\\\define config-title()\\n$:/config/SideBarSegments/Visibility/$(listItem)$\\n\\\\end\\n\\nOverwritten by $:/themes/nico/notebook so that the default sidebar does not get rendered.\\n\"\n },\n \"$:/themes/tiddlywiki/vanilla/themetweaks\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/themetweaks\",\n \"caption\": \"{{$:/language/ThemeTweaks/ThemeTweaks}}\",\n \"created\": \"20201217163834291\",\n \"modified\": \"20201217163914434\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"Overwritten by $:/themes/nico/notebook so that the Vanilla theme tweaks do not appear in the control panel. \"\n },\n \"$:/themes/nico/notebook/palettes/palette-beige\": {\n \"title\": \"$:/themes/nico/notebook/palettes/palette-beige\",\n \"text\": \"alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #c63636\\ndownload-background: #66cccc\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: #ddd\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #da8548\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nforeground: #3F3B3B\\nmessage-background: #e6f5e8\\nmessage-border: #2b5532\\nmessage-foreground: #2b5532\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #f5f5ee\\npre-background: #f6f6f6\\npre-border: #cccccc\\nprimary: #7f4bca\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: #a6a69c\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: \u003C\u003Ccolour sidebar-button-foreground>>\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #ffffff\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour primary>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour tab-foreground>>\\nsite-title-foreground: #353748\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #eeeeee\\ntab-border-selected: #cccccc\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour foreground>>\\ntab-foreground: #888888\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #ffeedd\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #dbdbc7;\\ntiddler-controls-foreground-hover: #888888;\\ntiddler-controls-foreground-selected: #888888;\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: rgba(0,0,0,.2)\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #aaaaaa\\ntiddler-title-foreground: #333\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"description\": \"A beige colour palette for Notebook\",\n \"name\": \"Notebook Beige\",\n \"tags\": \"$:/tags/Palette $:/tags/notebook/Palette\"\n },\n \"$:/themes/nico/notebook/palettes/palette-dark\": {\n \"title\": \"$:/themes/nico/notebook/palettes/palette-dark\",\n \"text\": \"alert-background: #643b43\\nalert-border: #3f181f\\nalert-highlight: #881122\\nalert-muted-foreground: #bc8b94\\nbackground: #383e49\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-border:\\nbutton-foreground:\\ncode-background: #2c323b\\ncode-border: #111\\ncode-foreground: #dd1144\\ndirty-indicator: #c63636\\ndownload-background: #98be65\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: #111\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #da8548\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #61afef\\nexternal-link-foreground: #c678dd\\nforeground: #c8ced8\\nmessage-background: #2c323e\\nmessage-border: #111\\nmessage-foreground: #d5e2f1\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #3a5e39\\nnotification-border: #192c19\\npage-background: #262b33\\npre-background: \u003C\u003Ccolour page-background>>\\npre-border: \u003C\u003Ccolour tiddler-border>>\\nprimary: #bf93ff\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: #5e646f\\nsidebar-controls-foreground-hover: #cad2e5\\nsidebar-controls-foreground: \u003C\u003Ccolour sidebar-button-foreground>>\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #cad2e5\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: \u003C\u003Ccolour tab-background-selected>>\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour primary>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour tab-foreground>>\\nsite-title-foreground: \u003C\u003Ccolour foreground>>\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: \u003C\u003Ccolour page-background>>\\ntab-border-selected: \u003C\u003Ccolour foreground>>\\ntab-border: #cad2e5\\ntab-divider: #cad2e5\\ntab-foreground-selected: #ecf2ff\\ntab-foreground: #cad2e5\\ntable-border: #aaaaaa\\ntable-footer-background: #a8a8a8\\ntable-header-background: #262b33\\ntag-background: #fcb671\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #111\\ntiddler-controls-foreground-hover: #cad2e5\\ntiddler-controls-foreground-selected: #cad2e5\\ntiddler-controls-foreground: #5e646f\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: rgba(255, 255, 255, 0.3)\\ntiddler-editor-fields-even: \u003C\u003Ccolour background>>\\ntiddler-editor-fields-odd: #2c323b\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #aaaaaa\\ntiddler-title-foreground: \u003C\u003Ccolour foreground>>\\ntoolbar-cancel-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-done-button:\\ntoolbar-edit-button:\\ntoolbar-info-button:\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"description\": \"A dark colour palette for Notebook\",\n \"name\": \"Notebook Dark\",\n \"tags\": \"$:/tags/Palette $:/tags/notebook/Palette\"\n },\n \"$:/themes/nico/notebook/palettes/palette-grey\": {\n \"title\": \"$:/themes/nico/notebook/palettes/palette-grey\",\n \"text\": \"alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #c63636\\ndownload-background: #66cccc\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: #ddd\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #da8548\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nforeground: #283c46\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #f4f4f4\\npre-background: #f6f6f6\\npre-border: #cccccc\\nprimary: #127edd\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: #a6a69c\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: \u003C\u003Ccolour sidebar-button-foreground>>\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #ffffff\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour primary>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour tab-foreground>>\\nsite-title-foreground: #353748\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #eeeeee\\ntab-border-selected: #cccccc\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour foreground>>\\ntab-foreground: #888888\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #ffeedd\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #ddd\\ntiddler-controls-foreground-hover: #888888;\\ntiddler-controls-foreground-selected: #888888;\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: rgba(0,0,0,.2)\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #aaaaaa\\ntiddler-title-foreground: #333\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"description\": \"A grey color palette for Notebook\",\n \"name\": \"Notebook Grey\",\n \"tags\": \"$:/tags/Palette $:/tags/notebook/Palette\"\n },\n \"$:/themes/nico/notebook/settings/codefontfamily\": {\n \"title\": \"$:/themes/nico/notebook/settings/codefontfamily\",\n \"created\": \"20210101213404232\",\n \"modified\": \"20210101214210227\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\"Fira Mono\\\",\\\"Liberation Mono\\\",Menlo,Courier,monospace\\n\"\n },\n \"$:/themes/nico/notebook/settings/fontfamily\": {\n \"title\": \"$:/themes/nico/notebook/settings/fontfamily\",\n \"created\": \"20210101213404232\",\n \"modified\": \"20210101213411800\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\"Segoe UI\\\",Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\"\\n\"\n },\n \"$:/themes/nico/notebook/shortcuts/notebook-focus-search\": {\n \"title\": \"$:/themes/nico/notebook/shortcuts/notebook-focus-search\",\n \"created\": \"20201210122048919\",\n \"key\": \"((notebook-focus-search))\",\n \"modified\": \"20210115130024907\",\n \"tags\": \"$:/tags/KeyboardShortcut\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$action-sendmessage $message=\\\"tm-focus-selector\\\" $param=\\\".nc-topbar input\\\"/>\\n\"\n },\n \"$:/themes/nico/notebook/shortcuts/toggle-sidebar\": {\n \"title\": \"$:/themes/nico/notebook/shortcuts/toggle-sidebar\",\n \"created\": \"20210115130000707\",\n \"key\": \"((toggle-sidebar))\",\n \"modified\": \"20210115130021883\",\n \"tags\": \"$:/tags/KeyboardShortcut\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$list\\n filter=\\\"[[$:/state/notebook-sidebar]is[missing]] [{$:/state/notebook-sidebar}removeprefix[yes]]\\\"\\n emptyMessage=\\\"\\\"\\\"\u003C$action-setfield $tiddler=\\\"$:/state/notebook-sidebar\\\" text=\\\"yes\\\"/>\\\"\\\"\\\"\\n>\\n \u003C$action-setfield $tiddler=\\\"$:/state/notebook-sidebar\\\" text=\\\"no\\\"/>\\n\u003C/$list>\\n\"\n },\n \"$:/themes/nico/notebook/stickytitles\": {\n \"title\": \"$:/themes/nico/notebook/stickytitles\",\n \"created\": \"20201217172915960\",\n \"modified\": \"20201217180034682\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\u003C$reveal state=\\\"$:/themes/nico/notebook/options/stickytitles\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n\\n.tc-tiddler-title {\\n position: -webkit-sticky;\\n position: -moz-sticky;\\n position: -o-sticky;\\n position: -ms-sticky;\\n position: sticky;\\n top: {{$:/themes/nico/notebook/metrics/topbar-height}};\\n background: \u003C\u003Ccolour tiddler-background>>;\\n z-index: 500;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .tc-tiddler-title {\\n top: 0;\\n }\\n}\\n\\n\u003C$list filter=\\\"[range[100]]\\\">\\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`\u003C$text text=\u003C\u003CcurrentTiddler>>/>`) {\\nz-index: `\u003C$text text={{{ [[200]subtract\u003CcurrentTiddler>] }}}/>`;\\n}\\n`\\n\u003C/$list>\\n\u003C/$reveal>\\n\"\n },\n \"$:/themes/nico/notebook/tags/Sidebar\": {\n \"title\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"created\": \"20200429164516951\",\n \"list\": \"$:/themes/nico/notebook/ui/Buttons/menu $:/themes/nico/notebook/ui/Sidebar/Headings $:/themes/nico/notebook/ui/Sidebar/Search $:/themes/nico/notebook/Sidebar/Sections\",\n \"modified\": \"20201210205606504\",\n \"type\": \"text/vnd.tiddlywiki\"\n },\n \"$:/themes/nico/notebook/tags/SidebarSection\": {\n \"title\": \"$:/themes/nico/notebook/tags/SidebarSection\",\n \"created\": \"20200429201017275\",\n \"list\": \"$:/themes/nico/notebook/ui/Sidebar/Open $:/themes/nico/notebook/ui/Sidebar/Recent $:/themes/nico/notebook/ui/Sidebar/Tools $:/themes/nico/notebook/ui/Sidebar/More\",\n \"modified\": \"20201210215658901\",\n \"type\": \"text/vnd.tiddlywiki\"\n },\n \"$:/themes/nico/notebook/ui/Bottombar\": {\n \"title\": \"$:/themes/nico/notebook/ui/Bottombar\",\n \"created\": \"20200429113453340\",\n \"modified\": \"20201210210230886\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$reveal state=\\\"$:/state/notebook-bottombar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"yes\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n \u003Cdiv class=\\\"nc-bar nc-bottombar\\\">\\n \u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/NotebookTopbar]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n \u003C$reveal type=\\\"nomatch\\\" state=\u003C\u003Cconfig-title>> text=\\\"hide\\\" tag=\\\"div\\\">\\n \u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\\\"block\\\"/>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003Cdiv class=\\\"left\\\">\\n {{$:/themes/nico/notebook/ui/Buttons/menu}}\\n \u003C/div>\\n \u003Cdiv class=\\\"right\\\">\\n {{$:/core/ui/SideBarSegments/page-controls}}\\n \u003C/div>\\n \u003C/div>\\n\u003C/$reveal>\\n\\n\"\n },\n \"$:/themes/nico/notebook/ui/Buttons/SwitchPalette\": {\n \"title\": \"$:/themes/nico/notebook/ui/Buttons/SwitchPalette\",\n \"created\": \"20201210171047824\",\n \"description\": \"Toggle between grey/beige colour palette\",\n \"modified\": \"20210118213335643\",\n \"tags\": \"$:/tags/PageControls\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Cspan class=\\\"desktop-only\\\">\\n \u003C$vars\\n palettes=\\\"[all[tiddlers+shadows]tag[$:/tags/notebook/Palette]]\\\"\\n popupTiddler=\u003C\u003Cqualify \\\"$:/state/notebook/palette-dropdown\\\">>\\n >\\n \u003C$button\\n popup=\u003C\u003CpopupTiddler>>\\n tooltip=\\\"Switch colours\\\"\\n aria-label=\\\"Switch colours\\\"\\n class=\u003C\u003Ctv-config-toolbar-class>>\\n >\\n \u003C$list filter=\\\"[\u003Ctv-config-toolbar-icons>match[yes]]\\\">\\n\\t{{$:/themes/nico/notebook/images/color-switch}}\\n \u003C/$list>\\n\\n \u003C$list filter=\\\"[\u003Ctv-config-toolbar-text>match[yes]]\\\">\\n\\t\u003Cspan class=\\\"tc-btn-text\\\">Switch colours\u003C/span>\\n \u003C/$list>\\n\\n \u003C$reveal state=\u003C\u003CpopupTiddler>> type=\\\"popup\\\" position=\\\"belowleft\\\" class=\\\"tc-drop-down\\\">\\n\\t\u003C$list filter=\u003C\u003Cpalettes>>>\\n\\t \u003C$button class=\\\"tc-btn-invisible\\\">\\n\\t {{!!name}}\\n\\t \u003C$action-setfield $tiddler=\\\"$:/palette\\\" text={{!!title}}/>\\n\\t \u003C/$button>\\n\\t\u003C/$list>\\n \u003C/$reveal>\\n\\n \u003C/$button>\\n \u003C/$vars>\\n\u003C/span>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Buttons/menu\": {\n \"title\": \"$:/themes/nico/notebook/ui/Buttons/menu\",\n \"created\": \"20200429115248943\",\n \"modified\": \"20210124211756417\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$reveal state=\\\"$:/state/notebook-sidebar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" retain=\\\"yes\\\" animate=\\\"no\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar\\\" setTo=\\\"no\\\" tooltip=\\\"Toggle menu\\\" class=\\\"tc-btn-invisible sidebar-toggle open\\\">\\n {{$:/themes/nico/notebook/images/bars}}\\n \u003C/$button>\\n\u003C/$reveal>\\n\\n\u003C$reveal type=\\\"nomatch\\\" state=\\\"$:/state/notebook-sidebar\\\" text=\\\"yes\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar\\\" setTo=\\\"yes\\\" tooltip=\\\"Toggle menu\\\" class=\\\"tc-btn-invisible sidebar-toggle\\\">\\n {{$:/themes/nico/notebook/images/bars}}\\n \u003C/$button>\\n\u003C/$reveal>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Search\": {\n \"title\": \"$:/themes/nico/notebook/ui/Search\",\n \"created\": \"20200429191943257\",\n \"modified\": \"20210126170723413\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define advanced-search-actions()\\n\u003C$action-setfield $tiddler=\\\"$:/temp/advancedsearch/input\\\" text={{$:/temp/notebook-search}}/>\\n\u003C$action-setfield $tiddler=\\\"$:/temp/advancedsearch/refresh\\\" text=\\\"yes\\\"/>\\n\u003C$action-navigate $to=\\\"$:/AdvancedSearch\\\"/>\\n\\\\end\\n\\n\\\\define input-accept-actions()\\n\u003C$list filter=\\\"[\u003C__tiddler__>get[text]!is[missing]] ~[\u003C__tiddler__>get[text]is[shadow]]\\\">\\n \u003C$action-navigate $to={{{ [\u003C__tiddler__>get[text]] }}}/>\\n \u003C$action-deletetiddler $filter=\\\"[[$:/temp/search]] [\u003CsearchTiddler>] [\u003CsearchListState>]\\\"/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define cancel-search-actions()\\n\u003C$list filter=\\\"[\u003CsearchTiddler>get[text]!match{$:/temp/search}]\\\" emptyMessage=\\\"\\\"\\\"\u003C$action-deletetiddler $filter=\\\"[[$:/temp/search]] [\u003CsearchTiddler>] [\u003CsearchListState>]\\\"/>\\\"\\\"\\\">\\n \u003C$action-setfield $tiddler=\\\"$:/temp/search\\\" text={{{ [\u003CsearchTiddler>get[text]] }}}/>\\n \u003C$action-setfield $tiddler=\\\"$:/temp/search/refresh\\\" text=\\\"yes\\\"/>\u003C/$list>\\n\\\\end\\n\\n\u003C$vars editTiddler=\\\"$:/temp/search\\\"\\n searchTiddler=\\\"$:/temp/search/input\\\"\\n searchListState=\u003C\u003Cqualify \\\"$:/state/search-list/selected-item\\\">>>\\n \u003C$macrocall $name=\\\"keyboard-driven-input\\\"\\n\\t tiddler=\u003C\u003CeditTiddler>>\\n\\t storeTitle=\u003C\u003CsearchTiddler>>\\n\\t selectionStateTitle=\u003C\u003CsearchListState>>\\n\\t refreshTitle=\\\"$:/temp/search/refresh\\\"\\n\\t type=\\\"search\\\"\\n\\t tag=\\\"input\\\"\\n\\t focus={{$:/config/Search/AutoFocus}}\\n\\t focusPopup=\\\"$:/state/popup/notebook-search\\\"\\n\\t class=\\\"tc-popup-handle\\\"\\n\\t filterMinLength={{$:/config/Search/MinLength}}\\n\\t placeholder=\\\"Search...\\\"\\n\\t inputAcceptActions=\u003C\u003Cinput-accept-actions>>\\n\\t inputCancelActions=\u003C\u003Ccancel-search-actions>>\\n\\t cancelPopups=\\\"yes\\\"\\n\\t configTiddlerFilter=\\\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\\\"\\n\\t />\\n \u003C$button\\n tooltip={{$:/language/Buttons/AdvancedSearch/Hint}}\\n aria-label={{$:/language/Buttons/AdvancedSearch/Caption}}\\n class=\\\"tc-btn-invisible tc-page-controls\\\"\\n >\\n {{$:/core/images/advanced-search-button}}\\n \u003C\u003Cadvanced-search-actions>>\\n \u003C/$button>\\n \u003C$reveal tag=\\\"div\\\" class=\\\"tc-block-dropdown-wrapper\\\" state=\\\"$:/state/popup/notebook-search\\\" type=\\\"nomatch\\\" text=\\\"\\\" default=\\\"\\\">\\n \u003C$list filter=\\\"[\u003CsearchTiddler>get[text]minlength{$:/config/Search/MinLength}limit[1]]\\\" emptyMessage=\\\"\\\" variable=\\\"listItem\\\">\\n \u003Cdiv class=\\\"tc-block-dropdown tc-search-drop-down\\\">\\n \u003C$tiddler tiddler=\u003C\u003CconfigTiddler>>>\\n {{$:/themes/nico/notebook/ui/Sidebar/SearchResults}}\\n \u003C/$tiddler>\\n \u003C/div>\\n \u003C/$list>\\n \u003C/$reveal>\\n\u003C/$vars>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/Headings\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/Headings\",\n \"created\": \"20200429160014174\",\n \"modified\": \"20201210210231267\",\n \"tags\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Cdiv class=\\\"segment\\\">\\n \u003Cdiv class=\\\"content\\\">\\n \u003Ch1 class=\\\"tc-site-title\\\">\\n {{$:/SiteTitle}}\\n \u003C/h1>\\n \u003Cdiv class=\\\"tc-site-subtitle\\\">\\n {{$:/SiteSubtitle}}\\n \u003C/div>\\n \u003C/div>\\n\u003C/div>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/Search\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/Search\",\n \"created\": \"20200429191943257\",\n \"modified\": \"20210124220152702\",\n \"tags\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Cdiv class=\\\"mobile-only\\\">\\n \u003Cdiv class=\\\"segment\\\">\\n \u003Cdiv class=\\\"content search\\\">\\n {{$:/themes/nico/notebook/ui/Search}}\\n \u003C/div>\\n \u003C/div>\\n\u003C/div>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/SearchResults\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/SearchResults\",\n \"created\": \"20200429191943257\",\n \"modified\": \"20210126164631418\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define searchResultList()\\n \u003Csmall>{{$:/language/Search/Matches/Title}}\u003C/small>\\n\\n \u003C$list filter=\\\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\\\">\\n \u003Cspan class={{{[\u003CcurrentTiddler>addsuffix[-primaryList]] -[\u003CsearchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\\n \u003C$transclude tiddler=\\\"$:/core/ui/ListItemTemplate\\\"/>\\n \u003C/span>\\n \u003C/$list>\\n\\n \u003Csmall>{{$:/language/Search/Matches/All}}\u003C/small>\\n\\n \u003C$list filter=\\\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\\\">\\n \u003Cspan class={{{[\u003CcurrentTiddler>addsuffix[-secondaryList]] -[\u003CsearchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\\n \u003C$transclude tiddler=\\\"$:/core/ui/ListItemTemplate\\\"/>\\n \u003C/span>\\n \u003C/$list>\\n\\\\end\\n\\n\u003Cdiv class=\\\"tc-search-results\\\">\\n \u003C\u003CsearchResultList>>\\n\u003C/div>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/SectionTemplate\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/SectionTemplate\",\n \"created\": \"20200429161226897\",\n \"modified\": \"20210202213859460\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define sidebarHeading()\\n\u003C$vars tv-wikilinks=\\\"no\\\">\\n \u003C$transclude field=\\\"caption\\\">\\n \u003C$view field=\\\"title\\\"/>\\n \u003C/$transclude>\\n\u003C/$vars>\\n\\\\end\\n\\n\u003C$reveal state=\\\"$:/state/notebook-sidebar-section\\\" type=\\\"match\\\" text=\u003C\u003CcurrentTiddler>> default=\\\"no\\\" animate=\\\"no\\\">\\n \u003Cdiv class=\\\"segment section open\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar-section\\\" setTo=\\\"\\\" class=\\\"tc-btn-invisible label\\\">\\n \u003C\u003CsidebarHeading>>\\n \u003Cspan class=\\\"caret\\\">{{$:/themes/nico/notebook/images/caret-down}}\u003C/span>\\n \u003C/$button>\\n \u003Cdiv class=\\\"content\\\">\\n \u003C$transclude $tiddler=\u003C\u003CcurrentTiddler>> mode=\\\"block\\\"/>\\n \u003C/div>\\n \u003C/div>\\n\u003C/$reveal>\\n\u003C$reveal state=\\\"$:/state/notebook-sidebar-section\\\" type=\\\"nomatch\\\" text=\u003C\u003CcurrentTiddler>> default=\\\"yes\\\" animate=\\\"no\\\">\\n \u003Cdiv class=\\\"segment section\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar-section\\\" setTo=\u003C\u003CcurrentTiddler>> class=\\\"tc-btn-invisible label\\\">\\n \u003C\u003CsidebarHeading>>\\n \u003Cspan class=\\\"caret\\\">{{$:/themes/nico/notebook/images/caret-right}}\u003C/span>\\n \u003C/$button>\\n \u003C/div>\\n\u003C/$reveal>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/Sections\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/Sections\",\n \"created\": \"20200429163239707\",\n \"modified\": \"20210112213620486\",\n \"tags\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$list filter=\\\"[all[shadows+tiddlers]!has[draft.of]tag[$:/tags/SideBar]]\\\">\\n {{||$:/themes/nico/notebook/ui/Sidebar/SectionTemplate}}\\n\u003C/$list>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar\",\n \"created\": \"20200428201218885\",\n \"modified\": \"20210112213605486\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\\\define config-title()\\n$:/config/SideBarSegments/Visibility/$(listItem)$\\n\\\\end\\n\\n\u003C$reveal state=\\\"$:/state/notebook-sidebar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" retain=\\\"yes\\\" animate=\\\"no\\\">\\n \u003C$scrollable fallthrough=\\\"no\\\">\\n \u003Cdiv class=\\\"nc-sidebar\\\">\\n \u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/themes/nico/notebook/tags/Sidebar]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n \u003C$reveal type=\\\"nomatch\\\" state=\u003C\u003Cconfig-title>> text=\\\"hide\\\" tag=\\\"div\\\">\\n \u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\\\"inline\\\"/>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003C/div>\\n \u003C/$scrollable>\\n\u003C/$reveal>\\n\\n\"\n },\n \"$:/themes/nico/notebook/ui/Topbar\": {\n \"title\": \"$:/themes/nico/notebook/ui/Topbar\",\n \"created\": \"20200428203101797\",\n \"modified\": \"20210124213834458\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$reveal state=\\\"$:/state/notebook-topbar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"yes\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n \u003Cdiv class=\\\"nc-topbar-wrapper\\\">\\n \u003Cdiv class=\\\"nc-bar nc-topbar tc-adjust-top-of-scroll\\\">\\n \u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/NotebookTopbar]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n \u003C$reveal type=\\\"nomatch\\\" state=\u003C\u003Cconfig-title>> text=\\\"hide\\\" tag=\\\"div\\\">\\n \u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\\\"block\\\"/>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003Cdiv class=\\\"left\\\">\\n\\t{{$:/themes/nico/notebook/ui/Buttons/menu}}\\n {{$:/themes/nico/notebook/ui/Search}}\\n \u003C/div>\\n \u003Cdiv class=\\\"right\\\">\\n {{$:/core/ui/SideBarSegments/page-controls}}\\n \u003C/div>\\n \u003C/div>\\n \u003C/div>\\n\u003C/$reveal>\\n\\n\"\n }\n }\n}","bag":"default","revision":"0","version":"1.4.1","type":"application/json","title":"$:/themes/nico/notebook","source":"https://github.com/NicolasPetton/Notebook","plugin-type":"theme","name":"Notebook theme","list":"LICENSE changelog","description":"A clean, uncluttered TiddlyWiki theme","dependents":"$:/themes/tiddlywiki/vanilla $:/plugins/nico/notebook-mobile","core-version":">=5.1.22","author":"NicolasPetton","modified":"20240627123010609"}, {"created":"20200429144554294","title":"$:/themes/nico/notebook/metrics/sidebar-width","modified":"20230423163514560","tags":"","type":"text/vnd.tiddlywiki","text":"300px"}, @@ -1330,7 +1330,7 @@ button.sidebar-toggle{ {"created":"20230427204906096","text":"comma-separated coordinates e.g. which after parsing can be accessed using `.x`, `.y`, `.z` etc.\n\n| type | example |\n|-|-|\n| vector2 | `1.2,3` or `0.4,0.6` | \n| vector3 | `1.2,3,4` or `0.4,0.6,5` | \n\nhere are some interactive examples:\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = {}\nok = xrfragment.Parser.parse('pos','1.2,2,3',frags)\nconsole.log( frags.pos.z )\n\n\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n","tags":"","title":"vector","modified":"20230427205327718","type":"text/markdown"}, {"created":"20250904105246150","text":"> **NOTE**: a subtitle-file allows for hasslefree [XR movies](#XR%20Movies) optimized for accessibility (screenreader, text-to-speech)\n\nSubtitle files must be provided as [sidecar-files](#šŸ“œ%20level0:%20File) either in:\n\n* standard SRT format (with the header renamed to WEBVTT, and `.srt` to `.vtt`)\n* WebVTT format (`.vtt`), in which case only the SRT-equivalent subset of features will be processed. Specifically, the parser recognizes plain cue blocks consisting of an optional identifier, a start --> end timestamp line, and unstyled text. Any additional WebVTT features such as styling, positioning, regions, notes, or metadata will be ignored.\n\n## Example .vtt file\n\n```\nWEBVTT\n\n1\n00:00:01.000 --> 00:00:04.000\nHello, world!\n\n2\n00:00:05.000 --> 00:00:07.000\nThis is an example subtitle.\n```\n\n","tags":"","title":"WebVTT subtitles","modified":"20250904105904428","type":"text/markdown"}, {"created":"20230427103350051","text":"","tags":"","title":"WebXR","modified":"20230427103400217"}, -{"created":"20230424092557827","text":"\u003Cb>Hyperlink the 3D world\u003C/b>.\u003Cbr>\nA standard for (deep)linking 3D files.\u003Cbr>\n''Turn'' 3D files ''into'' local-first, interactive, accessible \u003Ca href=\"#XR%Movies\">XR movies\u003C/a>,\u003Cbr>E-learnings & 3D websites.\n\u003Cbr>\u003Cbr>\n\n\u003Cdiv style=\"max-width:800px;box-shadow:none\" class=\"border\">\n\u003C$videojs _autoplay controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/hyperlinking-the-3d-world.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n\u003Cbr>\nEmpower existing 3D\n\u003Cu tabindex=\"0\">fileformats\n \u003Cspan>like \u003Cb>glTF\u003C/b>, \u003Cb>usdz\u003C/b>, \u003Cb>obj\u003C/b>, \u003Cb>collada\u003C/b> which are used in websites, Game Engines, and like \u003Ca href=\"#Edit%20a%203D%20scene%20file\">3D editors\u003C/a>.\u003Cbr>XR Fragments makes 3D files interactive \u003C/span>\n\u003C/u> via \n\u003Cu tabindex=\"0\">URLS\n \u003Cspan>, using any \n \u003Cu tabindex=\"0\">protocol\n \u003Cspan>, not necessarily served via HTTP, but also \u003Ca href=\"https://ipfs.com\" target=\"_blank\">IPFS\u003C/a>, \u003Ca href=\"https://hypercore-protocol.github.io/new-website/guides/getting-started/\" target=\"_blank\">hypercore\u003C/a>, \u003Ca href=\"https://github.com/webtorrent/webtorrent\" target=\"_blank\">webtorrent\u003C/a> e.g\u003C/span>\n\t \u003C/u>\n\t\u003C/span>\n\u003C/u>.\nThis allows spatial\n \u003Cu tabindex=\"0\">interactions \n\t \u003Cspan>, like browser-navigation, teleportation, importing scenes, spatial hypermedia, allowing useful audiovisual immersive\u003C/span>\n\t\t\u003Cu tabindex=\"0\">experiences\n\t\t \u003Cspan>like e-learnings, quiz, realtime-rendered 3D movies, and audiovisual storytelling\u003C/span>\n\t\t\u003C/u>\n\t\u003C/u>\nvia 3D \n\u003Cu tabindex=\"0\">metadata\n \u003Cspan>, so called 'extras' embedded in 3D files ('custom properties' in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>)\u003C/span>\n\u003C/u>\nand promote URI's and \n\u003Cu tabindex=\"0\">Local-First\n \u003Cspan> data, which lives local, and ideally only syncs/shares elsewhere via ''open user-operated internet'' protocols.\u003C/span>\n\u003C/u>\n.\n\n\n\u003Cdiv style=\"text-align:center\">\n\u003Cb style=\"font-size:11px\">~10 mins podcast introduction\u003C/b>\u003Cbr>\n\u003Caudio controls src=\"https://coderofsalvation.codeberg.page/xrfragment.media/podcast-xrfragments-intro.mp3\" type=\"audio/mpeg\">\n\u003C/audio>\n\u003C/div>\n\u003Cbr>\nAvoid \u003Cb>cloud lock-in\u003C/b>, by making your 3D experiences \u003Cb>portable\u003C/b> to \u003Cb>outlast\u003C/b> current technologies.\n\n\u003Cdiv style=\"display:inline-block; padding:0px 20px; border-radius:5px 5px 0px 0px; border:2px solid #555;background: #ededed;font-weight: bold;font-size: 16px;border-bottom: none;\">website.glb#scene1\u003C/div>\n\u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">\n \u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/website.glb.jpg\" style=\"border-left: 2px solid #555; cursor:pointer\">\n\u003C/a>\n\u003Ccenter>\n \u003Ca class=\"btn\" href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\" style=\"padding:10px 30px\">Try 3D file\u003C/a>\n\u003C/center>\n\n\u003Cbr>\n\u003Cdiv style=\"max-width:800px;box-shadow:none\" class=\"border\">\n\u003C$videojs _autoplay controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/showreel_2024.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n\u003Cdiv>#spatialweb #openinternet #interoperable #accessibility #3Dhypermedia\u003C/div>\n\u003Ccenter>\n \u003Ca class=\"btn\" href=\"https://matrix.to/#/#xrfragments:matrix.org\" target=\"_blank\" style=\"padding:10px 30px\">Join Matrix Community\u003C/a>\n\u003C/center>\n\u003Cbr>\n\n\u003Ctable style=\"border:none\">\n \u003Ctr>\n\t \u003Ctd style=\"border:none;vertical-align:top; width:49%\">\n\t\t\t\u003Cb>šŸŽØ no-code design-first\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>šŸ„ surf 3D scenes in AR/VR\u003C/b>\u003Cbr/>\n\t \u003Cb>šŸ“Ž embeddable\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>šŸ¤ interoperable\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>ā›” network-agnostic, local-first\u003C/b>\u003Cbr/>\n \u003Cb>šŸ’¾ compatible with glTF FBX USDZ OBJ and more\u003C/b>\u003Cbr/>\t\t\t\t\t\n\t\t\u003C/td>\n\t\t\u003Ctd style=\"border:none;vertical-align:top\">\n\t\t\t\u003Cb>šŸ”® 99% compatible with \u003Cb>future fileformats\u003C/b>\u003C/b>\u003Cbr/>\n \u003Cb>🌱 friendly to opensource & corporations\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>ā¤ļø \u003Cb>no\u003C/b> fileformat or editor lock-in\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>šŸ§‘ā€šŸŒ¾ solo-user read-only 3D content\u003C/b>\u003Cbr/>\n\t\t\u003C/td>\n\t\u003C/tr>\n\u003C/table>\n\u003Cbr>\n\n\u003Ch2>Made for 3D designers\u003C/h2>\n[img[xrfragment.jpg]]\n\u003Cbr>\u003CBr>\n\n\n\u003C\u003C\u003C\nSee [[How it works]]\n\u003C\u003C\u003C\n\n\n\u003Ch2>TLDR\u003C/h2>\n\nThe \u003Cb>TLDR\u003C/b> of processing 3D files with XR Fragments [pseudocode]:\n\u003Cbr>\u003Cbr>\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" class=\"sandboxify noresult\" style=\"min-height:190px;width:100%;max-width:800px;\">foreach object in scene:\n if object.extra.href:\n\t object.onClick = updateCameraFromURL(object.extra.href, camera, timeline)\n \nif changed(app.URL):\n camera.updateCameraFromURL(app.URL)\n \t\ndocument.location.href = 'my.org/foo.glb#roomC'\n\n\u003C/textarea>\n\u003C/div> \n\u003Cbr>\n\u003Ch2>Virtual worlds without lock-in\u003C/h2>\n\nScale beyond companies, appstores, network protocols and file-formats:\n\n\u003Cdiv style=\"max-width:600px;box-shadow:none;padding:15px\" class=\"border\">\n\u003C$videojs _autoplay controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/xrfragment.bumper2.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\u003Cbr>\n\n\u003Ch3>Virtual worlds connected via URLs\u003C/h3>\n\n[img[urls.svg]]\n\n\u003Cbr>\n\nXR Fragments is a spec to link 3D models into a basic interactive XR experience.\u003Cbr>\nThink of it as bundling virtual worlds into a \u003Cb>spatial book\u003C/b>.\u003Cbr>\n\u003Cb>Basically:\u003C/b> 3D hypermedia files (the middle greenzone below).\u003Cbr>\n\u003Cbr>\u003Cbr>\n\u003Cdiv style=\"width:100%;max-width:900px;border-radius:15px;box-shadow:none;padding:20px\" class=\"border\">\n[img[xrfsweetspot.jpg]]\n\u003C/div>\n\u003Cbr>\u003Cbr>\nXR Fragments \u003Cb>empowers designers\u003C/b> to embed \u003Cb>simple interactions & navigation\u003C/b> inside a \u003Cb>3D file\u003C/b>.\u003Cbr>\nThis \u003Cb>no longer\u003C/b> requires developers to implement trivial interactive stuff.\u003Cbr>\nIt promotes \u003Cb>design-first, secure, durable and interoperable\u003C/b> XR experiences from \u003Cb>3D models\u003C/b>, basically 3D hypermedia, mitigating \u003Cb>handcoded-XR-apps-as-3D-content-burial-sites\u003C/b>.\u003Cbr>\n\u003Cbr>\n\u003Ch2>Why focus on designers and 3D files?\u003C/h2>\n\u003Cbr>\n\u003Cquote>\u003Ci>\"Future 3D file formats commoditize yesterdays 3D engines\"\u003C/i> ~ Leon van Kammen\u003C/quote>\n\u003Cbr>\u003Cbr>\nDevelopers tend to fall in love with \u003Cb>specific shiny\u003C/b> 3D technologies, which typically \u003Cb>buries\u003C/b> 3D content inside them.\u003Cbr>\nThese however, still lack \u003Cb>addressibility\u003C/b> and \u003Cb>interoperability\u003C/b> unlike \u003Cb>3D Models\u003C/b>, which can use XR Fragments \u003Cb>URLs\u003C/b> as a basic primitive.\n\u003Cbr>\u003Cbr>\n\u003Ch2>Getting Started\u003C/h2>\n\nJust get your hands on a 3D editor and follow the steps in the video:\n\u003Cbr>\u003Cbr>\n\u003Cdiv style=\"max-width:600px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/gettingstarted2024.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\u003Cbr>\u003CBr>\nCheck [[How it works|How it works]], or \u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">view a \u003Cb>demo.glb\u003C/b> scene right now\u003C/a>, or see the menu in the left corner for more.\n\u003Cbr>\u003Cbr>\n\u003Ch2>Presentation\u003C/h2>\n\u003Cbr>\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bfxqm1q_GXw?start=1445\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen>\u003C/iframe>\n\n\u003C!-- persist telescopic unfolds -->\n\u003C\u003Cscript>>\n\u003Cscript>\n([...document.querySelectorAll('u')]).map( (u) => {\n u.addEventListener('click', e => e.target.className = 'show' )\n});\n\u003C/script>\n\u003C\u003Cscript 0>>\n","tags":"Home","title":"XR Fragments","modified":"20250926181611631","list-before":"How it works"}, +{"created":"20230424092557827","text":"\u003Cb>Hyperlink the 3D world\u003C/b>.\u003Cbr>\nThe standard for (deep)linking 3D files.\u003Cbr>\n''Turn'' 3D files ''into'' local-first, interactive, accessible \u003Ca href=\"#XR%Movies\">XR movies\u003C/a>,\u003Cbr>E-learnings & 3D websites.\n\u003Cbr>\u003Cbr>\n\n\u003Cdiv style=\"max-width:800px;box-shadow:none\" class=\"border\">\n\u003C$videojs _autoplay controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/hyperlinking-the-3d-world.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n\u003Cbr>\nEmpower existing 3D\n\u003Cu tabindex=\"0\">fileformats\n \u003Cspan>like \u003Cb>glTF\u003C/b>, \u003Cb>usdz\u003C/b>, \u003Cb>obj\u003C/b>, \u003Cb>collada\u003C/b> which are used in websites, Game Engines, and like \u003Ca href=\"#Edit%20a%203D%20scene%20file\">3D editors\u003C/a>.\u003Cbr>XR Fragments makes 3D files interactive \u003C/span>\n\u003C/u> via \n\u003Cu tabindex=\"0\">URLS\n \u003Cspan>, using any \n \u003Cu tabindex=\"0\">protocol\n \u003Cspan>, not necessarily served via HTTP, but also \u003Ca href=\"https://ipfs.com\" target=\"_blank\">IPFS\u003C/a>, \u003Ca href=\"https://hypercore-protocol.github.io/new-website/guides/getting-started/\" target=\"_blank\">hypercore\u003C/a>, \u003Ca href=\"https://github.com/webtorrent/webtorrent\" target=\"_blank\">webtorrent\u003C/a> e.g\u003C/span>\n\t \u003C/u>\n\t\u003C/span>\n\u003C/u>.\nThis allows spatial\n \u003Cu tabindex=\"0\">interactions \n\t \u003Cspan>, like browser-navigation, teleportation, importing scenes, spatial hypermedia, allowing useful audiovisual immersive\u003C/span>\n\t\t\u003Cu tabindex=\"0\">experiences\n\t\t \u003Cspan>like e-learnings, quiz, realtime-rendered 3D movies, and audiovisual storytelling\u003C/span>\n\t\t\u003C/u>\n\t\u003C/u>\nvia 3D \n\u003Cu tabindex=\"0\">metadata\n \u003Cspan>, so called 'extras' embedded in 3D files ('custom properties' in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>)\u003C/span>\n\u003C/u>\nand promote URI's and \n\u003Cu tabindex=\"0\">Local-First\n \u003Cspan> data, which lives local, and ideally only syncs/shares elsewhere via ''open user-operated internet'' protocols.\u003C/span>\n\u003C/u>\n.\n\n\n\u003Cdiv style=\"text-align:center\">\n\u003Cb style=\"font-size:11px\">~10 mins podcast introduction\u003C/b>\u003Cbr>\n\u003Caudio controls src=\"https://coderofsalvation.codeberg.page/xrfragment.media/podcast-xrfragments-intro.mp3\" type=\"audio/mpeg\">\n\u003C/audio>\n\u003C/div>\n\u003Cbr>\nAvoid \u003Cb>cloud lock-in\u003C/b>, by making your 3D experiences \u003Cb>portable\u003C/b> to \u003Cb>outlast\u003C/b> current technologies.\n\n\u003Cdiv style=\"display:inline-block; padding:0px 20px; border-radius:5px 5px 0px 0px; border:2px solid #555;background: #ededed;font-weight: bold;font-size: 16px;border-bottom: none;\">website.glb#scene1\u003C/div>\n\u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">\n \u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/website.glb.jpg\" style=\"border-left: 2px solid #555; cursor:pointer\">\n\u003C/a>\n\u003Ccenter>\n \u003Ca class=\"btn\" href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\" style=\"padding:10px 30px\">Try 3D file\u003C/a>\n\u003C/center>\n\n\u003Cbr>\n\u003Cdiv style=\"max-width:800px;box-shadow:none\" class=\"border\">\n\u003C$videojs _autoplay controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/showreel_2024.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n\u003Cdiv>#spatialweb #openinternet #interoperable #accessibility #3Dhypermedia\u003C/div>\n\u003Ccenter>\n \u003Ca class=\"btn\" href=\"https://matrix.to/#/#xrfragments:matrix.org\" target=\"_blank\" style=\"padding:10px 30px\">Join Matrix Community\u003C/a>\n\u003C/center>\n\u003Cbr>\n\n\u003Ctable style=\"border:none\">\n \u003Ctr>\n\t \u003Ctd style=\"border:none;vertical-align:top; width:49%\">\n\t\t\t\u003Cb>šŸŽØ no-code design-first\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>šŸ„ surf 3D scenes in AR/VR\u003C/b>\u003Cbr/>\n\t \u003Cb>šŸ“Ž embeddable\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>šŸ¤ interoperable\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>ā›” network-agnostic, local-first\u003C/b>\u003Cbr/>\n \u003Cb>šŸ’¾ compatible with glTF FBX USDZ OBJ and more\u003C/b>\u003Cbr/>\t\t\t\t\t\n\t\t\u003C/td>\n\t\t\u003Ctd style=\"border:none;vertical-align:top\">\n\t\t\t\u003Cb>šŸ”® 99% compatible with \u003Cb>future fileformats\u003C/b>\u003C/b>\u003Cbr/>\n \u003Cb>🌱 friendly to opensource & corporations\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>ā¤ļø \u003Cb>no\u003C/b> fileformat or editor lock-in\u003C/b>\u003Cbr/>\n\t\t\t\u003Cb>šŸ§‘ā€šŸŒ¾ solo-user read-only 3D content\u003C/b>\u003Cbr/>\n\t\t\u003C/td>\n\t\u003C/tr>\n\u003C/table>\n\u003Cbr>\n\n\u003Ch2>Made for 3D designers\u003C/h2>\n[img[xrfragment.jpg]]\n\u003Cbr>\u003CBr>\n\n\n\u003C\u003C\u003C\nSee [[How it works]]\n\u003C\u003C\u003C\n\n\n\u003Ch2>TLDR\u003C/h2>\n\nThe \u003Cb>TLDR\u003C/b> of processing 3D files with XR Fragments [pseudocode]:\n\u003Cbr>\u003Cbr>\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" class=\"sandboxify noresult\" style=\"min-height:190px;width:100%;max-width:800px;\">foreach object in scene:\n if object.extra.href:\n\t object.onClick = updateCameraFromURL(object.extra.href, camera, timeline)\n \nif changed(app.URL):\n camera.updateCameraFromURL(app.URL)\n \t\ndocument.location.href = 'my.org/foo.glb#roomC'\n\n\u003C/textarea>\n\u003C/div> \n\u003Cbr>\n\u003Ch2>Virtual worlds without lock-in\u003C/h2>\n\nScale beyond companies, appstores, network protocols and file-formats:\n\n\u003Cdiv style=\"max-width:600px;box-shadow:none;padding:15px\" class=\"border\">\n\u003C$videojs _autoplay controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/xrfragment.bumper2.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\u003Cbr>\n\n\u003Ch3>Virtual worlds connected via URLs\u003C/h3>\n\n[img[urls.svg]]\n\n\u003Cbr>\n\nXR Fragments is a spec to link 3D models into a basic interactive XR experience.\u003Cbr>\nThink of it as bundling virtual worlds into a \u003Cb>spatial book\u003C/b>.\u003Cbr>\n\u003Cb>Basically:\u003C/b> 3D hypermedia files (the middle greenzone below).\u003Cbr>\n\u003Cbr>\u003Cbr>\n\u003Cdiv style=\"width:100%;max-width:900px;border-radius:15px;box-shadow:none;padding:20px\" class=\"border\">\n[img[xrfsweetspot.jpg]]\n\u003C/div>\n\u003Cbr>\u003Cbr>\nXR Fragments \u003Cb>empowers designers\u003C/b> to embed \u003Cb>simple interactions & navigation\u003C/b> inside a \u003Cb>3D file\u003C/b>.\u003Cbr>\nThis \u003Cb>no longer\u003C/b> requires developers to implement trivial interactive stuff.\u003Cbr>\nIt promotes \u003Cb>design-first, secure, durable and interoperable\u003C/b> XR experiences from \u003Cb>3D models\u003C/b>, basically 3D hypermedia, mitigating \u003Cb>handcoded-XR-apps-as-3D-content-burial-sites\u003C/b>.\u003Cbr>\n\u003Cbr>\n\u003Ch2>Why focus on designers and 3D files?\u003C/h2>\n\u003Cbr>\n\u003Cquote>\u003Ci>\"Future 3D file formats commoditize yesterdays 3D engines\"\u003C/i> ~ Leon van Kammen\u003C/quote>\n\u003Cbr>\u003Cbr>\nDevelopers tend to fall in love with \u003Cb>specific shiny\u003C/b> 3D technologies, which typically \u003Cb>buries\u003C/b> 3D content inside them.\u003Cbr>\nThese however, still lack \u003Cb>addressibility\u003C/b> and \u003Cb>interoperability\u003C/b> unlike \u003Cb>3D Models\u003C/b>, which can use XR Fragments \u003Cb>URLs\u003C/b> as a basic primitive.\n\u003Cbr>\u003Cbr>\n\u003Ch2>Getting Started\u003C/h2>\n\nJust get your hands on a 3D editor and follow the steps in the video:\n\u003Cbr>\u003Cbr>\n\u003Cdiv style=\"max-width:600px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/gettingstarted2024.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\u003Cbr>\u003CBr>\nCheck [[How it works|How it works]], or \u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">view a \u003Cb>demo.glb\u003C/b> scene right now\u003C/a>, or see the menu in the left corner for more.\n\u003Cbr>\u003Cbr>\n\u003Ch2>Presentation\u003C/h2>\n\u003Cbr>\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bfxqm1q_GXw?start=1445\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen>\u003C/iframe>\n\n\u003C!-- persist telescopic unfolds -->\n\u003C\u003Cscript>>\n\u003Cscript>\n([...document.querySelectorAll('u')]).map( (u) => {\n u.addEventListener('click', e => e.target.className = 'show' )\n});\n\u003C/script>\n\u003C\u003Cscript 0>>\n","tags":"Home","title":"XR Fragments","modified":"20250928181013420","list-before":"How it works"}, {"created":"20250903111630328","text":"The viewer should ideally \u003Cb>presents a play-button\u003C/b> when:\n\n* at least one animationdata-item is defined in the 3D file\n* and/or when a timeline file (soundtrack or subtitle) sidecar-file is detected\n\nSee [complementary file](#šŸ“œ%20level0:%20File) for detection of sidecar-files, for enhanced accessibility via [WebVTT subtitles](#WebVTT%20subtitles), thumbnails, soundtrack e.g.\n\n\n\n","tags":"","title":"XR Movies","modified":"20250904105805727","type":"text/markdown"}, {"created":"20250516081212327","text":"How can applications discover 3D experiences on a network?\n\n> Answer: the **XRF microformat** \n\nThe XRF microformat are [optional](#Progressive%20enhancement) network heuristics which applications can detect across various usecases.\n\n## via HTML webpage\n\nIf the browser/application requests an webpage (`https://nlnet.nl` e.g.) it should check for the [rel-me microformat](https://gmpg.org/xfn/) :\n\n```\n\u003Clink rel=\"me\" href=\"scene.xrf.glb\"/>\n```\n\nThis way the application loads `https://nlnet.nl/scene.glb` when the user types `nlnet.nl` into the URLbar.\u003Cbr>\nOptionally, `type` can be specified for dynamically generated 3D files:\n\n```\n\u003Clink rel=\"me\" href=\"https://worlds.org/scene.php\" type=\"model/gltf+binary\" />\n```\n\nThe `type`-attribute is for fallback-purposes.\u003Cbr>\nViewer-supported 3D file-extensions (`.glb` e.g.) will **ALWAYS** take precedence over the (non)presence of the `type` attribute.\u003Cbr>\nThe reason is that platforms (Mastodon 'labels' e.g.) don't allow specifying type-attributes.\u003Cbr>\nAnother reason is that XR Fragments is filetype-agnostic, so flexibility is expected on the viewer-side.\n\n> NOTE: in case of multiple 3D files mentioned in `\u003Clink rel=\"me\"`, only the first (supported 3D filetype) will be chosen.\n\n## via WebFinger\n\nWhen John has an account on foo.com, how can other applications request his 3D homepage by simply entering `john@foo.com`?\n\n> Answer: it can be requested at `https://foo.com/.well-known/webfinger?resource=acct:john@foo.com`, resulting in:\n\n```\n{\n \"subject\": \"acct:john@foo.com\",\n \"aliases\": [\n \"https://mastodon.example/social/john\",\n \"https://john.foo.com\",\n \"https://3d.john.foo.com/model/scene.glb\"\n ],\n \"properties\": {\n \"http://schema.org/name\": \"John Doe\",\n \"http://schema.org/description\": \"Developer, 3D Enthusiast, and Social Explorer\"\n },\n \"links\": [\n {\n \"rel\": \"http://ostatus.org/schema/1.0/subscribe\",\n \"template\": \"https://mastodon.example/social/john/{uri}\"\n },\n {\n \"rel\": \"self\",\n \"type\": \"text/html\",\n \"href\": \"https://john.foo.com\"\n },\n {\n \"rel\": \"me\",\n \"type\": \"text/html\",\n \"href\": \"https://john.foo.com\"\n },\n {\n \"rel\": \"me\",\n \"type\": \"model/gltf+binary\",\n \"href\": \"https://3d.john.foo.com/model/scene.xrf.glb\"\n }\n ]\n}\n```\n\nThis way the application will load `https://3d.john.foo.com/model/scene.glb` when the user types `john@foo.com` into the user field.\n\n## via Text (URI)\n\nAnother way for an application to trigger loading a 3D scene is by detecting URI's of 3D scene-files any text:\n\n* `foo.glb` (or any other popular 3D extension)\n* `https://foo.com/scene.glb` (or any other popular protocol)\n\nThis way, the application can highlight the link whenever it detects the URI (in a text-file or text-section of a 3D model)","tags":"[[šŸ“œ level1: URL]] level1 optional","title":"XRF microformat","modified":"20250928161214028","type":"text/markdown"}, {"created":"20250910100333866","text":"Prefixing the `xrf:` to [href](#href)-values **will prevent** [level2](#šŸ“œ%20level2:%20explicit%20links) [href](#href)-values from changing the top-Level URL.\n\n> **Usecase**: for non-shareable URLs like `href: xrf:#t=4,5`, to display a stateful msg e.g.).\n\n**Reason:** XR Fragments is inspired by HTML's [href-attribute](https://en.wikipedia.org/wiki/Hyperlink), which does various things:\n\n1. it updates the browser-location\n2. it makes something clickable\n3. it jumps to another document / elsewhere in the same document\n4. and more\n\nThe `xrf:` scheme will just do 2 & 3 (so the URL-values will not leak into the top-level URL).\n\n## compliance with RFC 3986\n\n* unimplemented/unknown URI schemes (`xrf:...` e.g.) will not update the top-level URL","tags":"[[šŸ“œ level4: operators]] level4","title":"xrf: URI scheme","modified":"20250926184516482","type":"text/markdown"},