From 41f2cc7402fe1fe20ef948fd1a96513020d9fd55 Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Mon, 17 Aug 2026 15:56:27 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20main:=20work=20in=20progress=20[?= =?UTF-8?q?might=20break]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index 3951b27..f556558 100644 --- a/index.html +++ b/index.html @@ -477,6 +477,8 @@ button.sidebar-toggle{
  • ๐ŸŒŽ X U R F ฮž R
  • +
  • ๐ŸŒŽ XRForge
  • +
  • ๐ŸŽž Media Fragments
  • ๐Ÿ“œ level0: File
  • @@ -1180,6 +1182,7 @@ button.sidebar-toggle{ {"created":"20230921095138812","text":"# XR Fragment browsers\n\nJanusWeb can browse JML 3D documents via [level1](#๐Ÿ“œ%20level1:%20URL) XR URI Fragments (basically [hashtag camera teleports](#teleport%20camera)) and is \u003Cb>spec-compatible\u003C/b> regarding the \u003Ca href=\"\" target=\"_blank\"><Link>\u003C/a> tag for [level2 explicit hyperlinks](#๐Ÿ“œ%20level2:%20explicit%20hyperlinks) \n\n> read more at [๐ŸŒŽ JanusXR immersive web](#๐ŸŒŽ%20JanusXR%20immersive%20web)\n\n# How to make one yourself\n\n3D Hypermedia browsers supporting XR Fragments, can be implemented on various levels:\n\n* you can extend [JanusWeb](https://github.com/jbaicoianu/janusweb) browser (best risk/reward-ratio)\n* thru the lens of HTML (your own \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\n> brainstormphase: integrating the XR Fragment parser on native browserlevel (Wolvic, Chromium-based browsers e.g.) for best performance.","tags":"[[๐Ÿ”จ For Developers]]","title":"๐ŸŒŽ 3D hypermedia browsers","modified":"20251107205334904","type":"text/markdown"}, {"created":"20251104144930186","text":"\u003Cbr>\u003Cbr>\n\u003Csvg\n version=\"1.1\"\n id=\"svg1\"\n width=\"1888.6069\"\n height=\"68.32419\"\n viewBox=\"0 0 1888.6069 268.32418\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:svg=\"http://www.w3.org/2000/svg\">\n \u003Cdefs\n id=\"defs1\" />\n \u003Cg\n id=\"g1\"\n transform=\"translate(-564.30528,-368.28465)\">\n \u003Cpath\n style=\"fill:#1a1a1a;fill-opacity:1\"\n d=\"m 1300.4881,508.67159 v -117.4219 l 3.1345,0.42189 3.1344,0.4219 75.8656,69.7254 75.8655,69.7254 0.3451,-70.05873 0.3451,-70.05874 h 22.6549 22.6549 V 508.76016 626.0935 h -2.4089 -2.4089 l -50.5212,-45.66667 -50.5212,-45.66667 -26.0699,-23.58211 -26.0699,-23.58212 -0.3453,69.24879 -0.3452,69.24878 h -22.6548 -22.6547 z\"\n id=\"path8\" />\n \u003Cpath\n style=\"fill:#1a1a1a;fill-opacity:1\"\n d=\"m 1053.6176,576.42683 25.3267,-49.66667 34.1052,-66.63352 34.1052,-66.63351 v -1.03316 -1.03316 h 3.1463 3.1463 l 22.7024,44.33334 22.7024,44.33334 19.0594,37.33333 19.0594,37.33334 18.2438,35.66667 18.2439,35.66667 h -24.8243 -24.8243 l -36.4923,-72.99923 -36.4922,-72.99924 -36.5045,72.99924 -36.5044,72.99923 h -24.7628 -24.7629 z\"\n id=\"path7\" />\n \u003Cpath\n style=\"fill:#1a1a1a;fill-opacity:1\"\n d=\"m 1629.8214,627.55399 -10,-2.30759 -7.3333,-3.16339 -7.3334,-3.16339 -8.2329,-5.13587 -8.233,-5.13587 -7.8228,-8.36258 -7.8228,-8.36258 -5.5909,-10.74645 -5.5909,-10.74644 -2.6773,-11.16817 -2.6774,-11.16817 -0.01,-78.33334 -0.01,-78.33334 h 22.668 22.6667 v 75.71988 75.71987 l 1.9996,7.67683 1.9995,7.67682 4.4836,7.00901 4.4836,7.00901 5.6687,4.85217 5.6687,4.85216 5.8395,2.74489 5.8395,2.74489 9.236,1.5838 9.2359,1.58379 9.6099,-1.48747 9.6099,-1.48747 8.426,-4.14808 8.4259,-4.14807 5.3895,-6.12281 5.3895,-6.12281 3.3741,-6.8964 3.3741,-6.89639 1.2989,-7.9318 1.2988,-7.9318 0.01,-73.00001 0.01,-73.00001 h 22.7334 22.7335 l -0.4804,81.00001 -0.4804,81.00001 -2.3337,8 -2.3337,8 -5.3143,10.84092 -5.3144,10.84092 -7.3199,8.08874 -7.3199,8.08874 -9.1373,6.07444 -9.1372,6.07444 -9.1479,3.45059 -9.1478,3.45058 -9.784,1.87865 -9.7839,1.87865 -15.5494,-0.11596 -15.5539,-0.11596 z\"\n id=\"path5\" />\n \u003Cpath\n style=\"fill:#1a1a1a;fill-opacity:1\"\n d=\"m 1874.4747,629.95255 -13.3467,-0.96569 -11.0513,-2.75053 -11.0514,-2.75052 -10.4914,-4.54652 -10.4914,-4.54652 -14.1009,-9.14964 -14.1009,-9.14963 -0.01,-1.0401 -0.01,-1.0401 11.5429,-16.95991 11.5429,-16.9599 0.3541,-0.45251 0.354,-0.45252 10.2321,6.21131 10.2321,6.2113 11.7583,5.89549 11.7583,5.89548 7.7793,2.09584 7.7793,2.09585 10.2691,0.76933 10.2691,0.76934 8.3531,-1.64339 8.3532,-1.64338 6.1645,-3.12377 6.1644,-3.12377 4.3026,-4.90042 4.3027,-4.90042 1.244,-3.27201 1.244,-3.27201 v -6.08864 -6.08864 l -5.6667,-5.62678 -5.6666,-5.62678 -7.8185,-2.90255 -7.8185,-2.90254 -26.6513,-5.38074 -26.6512,-5.38075 -8.8636,-2.71271 -8.8636,-2.71272 -9.326,-4.86844 -9.326,-4.86845 -8.1145,-8 -8.1144,-8 -3.475,-7.40544 -3.4751,-7.40545 -1.5844,-9.09873 -1.5845,-9.09873 0.8723,-8.82916 0.8723,-8.82916 2.1588,-6.66667 2.1587,-6.66667 4.2439,-6.67413 4.2439,-6.67413 7.0375,-6.32739 7.0376,-6.32739 8.4596,-4.03737 8.4595,-4.03737 10.3946,-2.84569 10.3945,-2.8457 24.6667,-0.03 24.6667,-0.03 10.6666,2.93579 10.6667,2.93579 10,4.71874 10,4.71875 10.3333,6.76149 10.3334,6.76149 v 0.57076 0.57077 l -11.4956,16.26113 -11.4955,16.26114 -1.0652,1.16074 -1.0652,1.16074 -9.8101,-6.11438 -9.8102,-6.11439 -9.6686,-3.98703 -9.6687,-3.98704 -7.98,-1.56997 -7.98,-1.56998 -12.9997,0.62598 -12.9997,0.62598 -8.9558,4.27418 -8.9557,4.27418 -3.2123,4.27717 -3.2124,4.27716 -0.8883,4.19521 -0.8882,4.19521 1.8943,4.53371 1.8943,4.53371 4.1605,3.50083 4.1605,3.50083 7.3165,2.73748 7.3166,2.73748 13.6539,3.46107 13.6538,3.46108 15.5431,3.16559 15.5431,3.16558 8.5073,2.85337 8.5073,2.85337 7.7258,4.10335 7.7257,4.10335 5.8196,5.12257 5.8195,5.12257 4.1787,6.30867 4.1787,6.30868 2.7672,9.1104 2.7672,9.11039 -0.6347,16.24109 -0.6347,16.24108 -2.9252,7.33334 -2.9251,7.33333 -4.5953,6.31166 -4.5952,6.31166 -7.6695,6.02906 -7.6694,6.02906 -9.3333,3.88823 -9.3334,3.88822 -10.6666,2.01983 -10.6667,2.01983 -10,0.49693 -10,0.49694 z\"\n id=\"path4\" />\n \u003Cpath\n style=\"fill:#1a1a1a;fill-opacity:1\"\n d=\"m 921.15479,630.06188 -9.3334,-0.99449 -5.9575,-1.61666 -5.9575,-1.61666 -9.027,-4.54591 -9.027,-4.54591 -9.0155,-8.50605 -9.0155,-8.50606 -4.9865,-8.43182 -4.9865,-8.43183 0.9865,-0.98344 0.9865,-0.98343 14,-6.23287 14,-6.23286 5.5876,-2.42226 5.5876,-2.42225 3.299,5.58539 3.2989,5.58539 4.4468,4.26504 4.4468,4.26503 6.4582,2.85261 6.4583,2.85262 h 8.9944 8.9944 l 5.8807,-1.73914 5.8807,-1.73913 6.7115,-6.71185 6.7115,-6.71185 3.28616,-8 3.2861,-8 0.3928,-82.33334 0.3928,-82.33334 h 22.6567 22.65675 l -0.4131,84.33334 -0.4131,84.33334 -2.361,8 -2.3611,8.00001 -4.914,9.96782 -4.9141,9.96782 -8.22885,8.69884 -8.2289,8.69885 -7.4747,4.50291 -7.4747,4.50291 -8.47846,3.07754 -8.4786,3.07753 -8.5102,0.81655 -8.5102,0.81654 -4,0.41779 -4,0.41778 z\"\n id=\"path3\" />\n \u003Cpath\n style=\"fill:#00c900;fill-opacity:1\"\n d=\"m 2253.919,508.2864 v -118 l 57,0.046 57,0.046 10.6653,1.9 10.6652,1.9 11.1784,5.5391 11.1784,5.5391 8.3927,8.3927 8.3927,8.3927 5.2939,11.1217 5.2939,11.1217 1.7658,7.3333 1.7658,7.3333 -0.1306,14.6667 -0.1306,14.6667 -3.4845,10.7712 -3.4845,10.7712 -5.1187,7.8955 -5.1188,7.8954 -7.9634,7.3333 -7.9635,7.3334 -6.886,3.3333 -6.8861,3.3333 0.4694,1.3816 0.4694,1.3816 27.0207,36.6184 27.0206,36.6185 1.2939,1.6666 1.2938,1.6667 h -27.9314 -27.9314 l -17.3174,-23.6667 -17.3173,-23.6667 -9.7069,-13.6666 -9.7068,-13.6667 h -21.2077 -21.2076 v 37.3333 37.3334 h -23.3333 -23.3334 z m 122.0545,-1.1558 6.7212,-3.1298 3.6759,-4.3686 3.6759,-4.3685 2.9363,-5.4887 2.9362,-5.4886 -0.043,-12.6667 -0.043,-12.6666 -3.0229,-6.6667 -3.023,-6.6667 -4.9109,-5.0404 -4.9109,-5.0404 -6.5986,-1.9596 -6.5986,-1.9596 h -33.0911 -33.0913 v 39.3334 39.3333 l 34.3333,-0.013 34.3334,-0.013 z\"\n id=\"path11\" />\n \u003Cpath\n style=\"fill:#00c900;fill-opacity:1\"\n d=\"m 2202.5998,626.3562 -14.6525,-0.7364 -30.0141,-39.2633 -30.0142,-39.2633 -1.3078,0.041 -1.3079,0.041 -28.6149,39.556 -28.6149,39.556 h -29.2199 -29.2199 l 0.7583,-1.9759 0.7582,-1.9759 34.2982,-45.6907 34.2982,-45.6908 9.2074,-11.6705 9.2073,-11.6705 1.5455,0.9264 1.5456,0.9265 -1.4632,-1.9226 -1.4631,-1.9227 -13.8188,-18.6666 -13.8188,-18.6667 -27.718,-37.1326 -27.7181,-37.1327 v -1.2007 -1.2007 l 24.3333,0.045 24.3333,0.045 30.6667,41.8688 30.6667,41.8688 0.7009,0.086 0.7009,0.086 31.7861,-42.6667 31.7861,-42.6667 h 23.101 23.1009 l 0.7462,1.2074 0.7463,1.2074 -42.7787,56.2311 -42.7786,56.231 2.0507,1.5616 2.0507,1.5615 44.647,58.5902 44.647,58.5902 -0.6653,1.0765 -0.6653,1.0765 -13.588,-0.2636 -13.5879,-0.2636 z m -135.0821,-9.02 4.9319,-4.7914 -0.2653,-1.0149 -0.2653,-1.015 5,-6.0348 5,-6.0349 v -1.1633 -1.1632 l 4,-3.8323 4,-3.8322 v -1.1198 -1.1198 l 7.7376,-10.2974 7.7376,-10.2974 8.8798,-12 8.8799,-12 0.086,-1.3334 0.086,-1.3333 -10.2061,-13.7215 -10.2062,-13.7215 -0.9765,0.3882 -0.9764,0.3881 -6.6369,8.0132 -6.6368,8.0132 -0.5511,1.3571 -0.5512,1.3572 -22,29.1655 -22,29.1655 -3.8075,5.4642 -3.8076,5.4641 -3.1924,3.4063 -3.1925,3.4063 v 1.0988 1.0988 l -4.7336,5.4949 -4.7336,5.4949 -1.0109,1.3334 -1.011,1.3333 22.7446,-0.4127 22.7455,-0.4127 z m 169.068,5.5777 v -0.7059 l -5.3,-6.9608 -5.2999,-6.9608 -5.7001,-7.2068 -5.7,-7.2069 -4,-5.6418 -4,-5.6418 -8.0614,-10.4847 -8.0614,-10.4846 -8.6597,-11.3334 -8.6598,-11.3333 -10.7332,-14.0298 -10.7332,-14.0298 -0.5524,-1.657 -0.5523,-1.657 -11.3266,15.0201 -11.3267,15.0202 -0.5063,1.1855 -0.5063,1.1856 1.4044,-0.8679 1.4043,-0.8679 3.0309,4.2564 3.0308,4.2564 -1.5955,-0.9861 -1.5956,-0.9861 v 0.8659 0.8659 l 6.7627,6.5181 6.7626,6.5181 -0.7654,1.2385 -0.7655,1.2386 6.0028,5.721 6.0028,5.721 0.01,2.0685 0.01,2.0685 5.9899,5.8828 5.99,5.8829 v 1.5232 1.5233 l 4.6825,5.1121 4.6826,5.1122 1.6508,2.978 1.6508,2.9781 5.3333,6.7367 5.3333,6.7366 19.3334,0.4722 19.3333,0.4722 3,0.2948 3,0.2949 z\"\n id=\"path10\" />\n \u003Cpath\n style=\"fill:#00c200;fill-opacity:1;stroke-width:0.382303\"\n d=\"m 648.68458,629.46348 -2.90153,-7.00888 -2.78415,-8.15579 -2.78415,-8.15584 -2.53886,-9.34911 -2.53887,-9.34911 -0.76431,-1.47803 -0.7643,-1.47798 -1.33113,-0.87219 -1.33116,-0.87222 -11.52912,-0.36037 -11.52913,-0.3604 -4.07791,-0.82753 -4.07791,-0.82753 -4.14613,-2.01795 -4.14612,-2.01795 -2.83383,-3.06087 -2.83385,-3.06088 -1.81339,-3.69779 -1.81339,-3.69779 -1.03186,-4.07791 -1.03185,-4.07789 -0.52271,-6.11684 -0.52274,-6.11686 -0.4748,-3.05843 -0.47478,-3.05843 -1.66161,-3.31331 -1.66161,-3.3133 -4.4435,-4.33276 -4.44349,-4.33281 -0.78556,-1.8951 -0.78555,-1.89515 v -1.83802 -1.83803 l 1.30766,-3.91292 1.30767,-3.9129 1.31177,-2.29383 1.31178,-2.29382 3.81046,-6.05648 3.81044,-6.05648 1.59848,-3.37365 1.59848,-3.37367 -0.0386,-4.07792 -0.0387,-4.07787 -0.77643,-5.60713 -0.77644,-5.60713 0.42559,-5.00421 0.42558,-5.00419 1.31981,-5.95515 1.31983,-5.95518 1.75748,-5.3022 1.75749,-5.30221 2.02733,-4.32622 2.02733,-4.32622 2.78002,-4.17808 2.78002,-4.17812 3.49982,-3.26969 3.49982,-3.26969 2.76788,-1.63507 2.76788,-1.63508 2.99301,-0.77441 2.99302,-0.77449 2.35923,0.51562 2.35923,0.51564 1.38114,1.00183 1.38113,1.00186 h 0.43209 0.43205 l 2.51259,-3.44073 2.51259,-3.44071 4.8495,-4.84975 4.84949,-4.84975 4.17763,-3.13413 4.17764,-3.13412 4.99764,-2.824 4.99764,-2.824 5.14105,-2.03291 5.14104,-2.03289 5.05371,-1.26534 5.05371,-1.26536 3.82304,-0.5242 3.82303,-0.52422 4.58764,-0.31231 4.58763,-0.3123 5.86201,0.56229 5.86198,0.56226 4.71942,0.98369 4.71938,0.98367 4.71074,1.56584 4.71073,1.56584 6.11687,3.04589 6.11686,3.04589 4.53227,3.25405 4.53229,3.25408 3.81546,3.45565 3.81546,3.45563 3.63109,4.37792 3.63111,4.37791 0.79443,1.21676 0.79442,1.21675 2.44816,-1.43471 2.44816,-1.43474 3.06328,0.0287 3.06328,0.0291 4.25855,2.11024 4.25856,2.1102 3.75338,3.67715 3.75337,3.67718 2.05286,3.05842 2.05285,3.05844 2.40443,4.78892 2.40441,4.78893 1.96397,5.91558 1.96402,5.91557 1.33771,6.37174 1.33768,6.3717 0.28506,5.0974 0.285,5.09736 -0.82536,5.49512 -0.82535,5.49512 0.0122,3.17044 0.0122,3.17041 1.16274,2.80357 1.16277,2.80356 4.7695,7.64606 4.76947,7.64608 1.65507,3.56814 1.65506,3.5682 0.54953,2.98742 0.54952,2.98744 -0.59548,2.36473 -0.59543,2.36478 -4.75307,4.66881 -4.75307,4.66883 -1.81784,3.82789 -1.81785,3.82793 -0.70931,8.06982 -0.70932,8.06977 -1.24109,4.88224 -1.24116,4.88229 -1.53288,3.01866 -1.53288,3.0187 -1.58565,2.17367 -1.58563,2.1737 -3.06279,2.25471 -3.06282,2.25471 -2.87718,1.07648 -2.87714,1.0765 -3.60914,0.77668 -3.60913,0.7767 -11.50715,0.35527 -11.50713,0.35524 -1.35664,0.88889 -1.35665,0.88893 -0.7461,1.13981 -0.74606,1.13979 -2.8149,10.21217 -2.81486,10.21216 -2.59485,7.62867 -2.59484,7.62867 -2.84369,6.88147 -2.84369,6.88145 -0.16611,0.19563 -0.16612,0.19558 -15.18145,-4.70137 -15.18146,-4.70138 -0.80475,-0.71906 -0.80475,-0.71905 h -7.44926 -7.44936 l -1.68579,0.96417 -1.68577,0.96414 -14.29727,4.38811 -14.29727,4.38808 h -0.29987 -0.29987 z m 26.36125,-3.80305 5.47968,-1.62657 v -0.82146 -0.82141 l -1.52497,-4.51146 -1.52495,-4.5114 -1.4929,-6.16128 -1.49291,-6.16124 -0.53011,-3.82304 -0.53014,-3.82304 -0.30007,-3.82302 -0.30005,-3.82304 -0.43811,-11.21422 -0.43811,-11.21426 -0.87778,-3.80862 -0.87779,-3.80861 -0.88178,-2.05336 -0.88179,-2.05335 -6.1248,-9.27178 -6.12482,-9.27177 -2.55755,-5.00087 -2.55757,-5.00092 -1.76805,-4.33278 -1.76802,-4.33277 -2.08588,-6.37173 -2.08586,-6.3717 -2.06394,-7.60923 -2.06393,-7.60916 -1.76436,-7.93779 -1.76432,-7.93786 -1.8293,-9.93989 -1.82928,-9.93988 -2.00044,-10.44962 -2.00043,-10.44962 -1.77256,-6.46621 -1.77258,-6.4662 -1.76404,-3.50293 -1.76404,-3.50293 -2.08348,-1.88228 -2.08347,-1.88226 h -2.73047 -2.7305 l -3.17376,1.63683 -3.17375,1.63683 -3.18104,2.91483 -3.18105,2.91488 -2.57201,3.73153 -2.57201,3.73157 -1.59206,3.16664 -1.59204,3.16663 -1.4668,3.71486 -1.46682,3.71479 -1.29522,4.58764 -1.29523,4.58765 -0.80211,4.07791 -0.80211,4.07789 -0.49988,4.51882 -0.49988,4.51879 1.04983,6.95032 1.04983,6.95027 -0.27759,3.50962 -0.27758,3.50962 -1.73639,3.62672 -1.73639,3.62673 -4.18114,6.62007 -4.18114,6.62005 -1.52515,3.19567 -1.52515,3.19563 -0.57278,2.73076 -0.57278,2.73076 0.67297,1.6247 0.67298,1.62472 3.49825,3.10909 3.49824,3.10904 1.95723,3.10928 1.95724,3.10927 1.14111,3.05842 1.14111,3.05843 0.49076,6.62658 0.49075,6.62658 0.93517,4.61711 0.93515,4.61713 1.7636,3.79355 1.7636,3.79355 2.41497,2.66803 2.41496,2.66806 3.65564,1.79876 3.65565,1.79878 3.56816,0.76812 3.56817,0.76813 10.19476,0.28226 10.19474,0.28229 2.70681,0.5147 2.7068,0.51473 1.70066,1.4932 1.70065,1.49319 0.85392,2.13418 0.85392,2.13416 2.26438,8.34041 2.26438,8.34045 1.83506,5.70309 1.83506,5.70309 3.30247,8.46824 3.30247,8.46826 7.98111,-2.48387 7.98108,-2.48385 z m 56.95335,-0.52195 2.70988,-6.74623 2.73642,-8.35969 2.73637,-8.35967 1.28718,-5.15613 1.28714,-5.15616 1.25483,-3.83019 1.25484,-3.83021 1.28881,-1.38994 1.28887,-1.38998 1.64035,-0.86125 1.64035,-0.86126 11.21421,-0.37327 11.21423,-0.37329 3.37428,-0.55339 3.37428,-0.55334 2.02755,-0.71537 2.0275,-0.71536 2.06781,-1.05493 2.06784,-1.05489 2.62997,-2.5617 2.63003,-2.5617 1.95044,-4.20698 1.95044,-4.20698 0.80081,-3.31328 0.80081,-3.31331 0.73708,-8.15579 0.73704,-8.15582 1.08379,-2.87787 1.08375,-2.8779 1.93174,-2.98411 1.93174,-2.98407 3.69817,-3.31932 3.69819,-3.3193 0.37212,-1.7781 0.37214,-1.77804 -0.41798,-2.28256 -0.41797,-2.2825 -1.43722,-3.06974 -1.43724,-3.0697 -4.44443,-7.13635 -4.44439,-7.13634 -1.58083,-3.20122 -1.58078,-3.20122 -0.2394,-3.73056 -0.23944,-3.73051 0.88954,-6.5763 0.88952,-6.57626 -0.29538,-4.07792 -0.29537,-4.07792 -0.77317,-4.36629 -0.77316,-4.36629 -1.79744,-6.18514 -1.79744,-6.18516 -1.81537,-4.12888 -1.81536,-4.12893 -1.82829,-3.1605 -1.82829,-3.16047 -2.65384,-3.32115 -2.65384,-3.32117 -2.75074,-2.11846 -2.75079,-2.11849 -2.62272,-1.31441 -2.62271,-1.31435 h -2.37253 -2.37254 l -1.42048,0.73456 -1.4205,0.73455 -1.39853,1.8336 -1.39858,1.83361 -1.44522,3.18741 -1.44528,3.18738 -1.26129,4.35065 -1.26129,4.35061 -1.81609,8.88157 -1.81613,8.88152 -2.63866,14.27266 -2.6387,14.27267 -1.72656,7.64608 -1.72656,7.64607 -2.29918,8.26017 -2.29912,8.26011 -2.30637,6.77713 -2.30635,6.77709 -3.74383,7.64611 -3.74378,7.64607 -5.73826,8.66551 -5.7383,8.66556 -1.43393,3.05842 -1.43392,3.05843 -0.74578,4.58766 -0.74585,4.58763 -0.31119,8.9204 -0.31119,8.92044 -0.5212,6.62657 -0.5212,6.62658 -1.01674,5.09741 -1.01669,5.09736 -1.48089,5.09736 -1.48085,5.09741 -1.04013,3.01462 -1.0401,3.01462 0.28665,0.29868 0.28666,0.29866 12.33069,3.89296 12.33066,3.89299 1.06135,0.0576 1.0614,0.0575 z\"\n id=\"path1\" />\n \u003C/g>\n\u003C/svg>\n\u003Cbr>\u003Cbr>\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/-vE-kAQSUEE?si=ItQQnL8gfu6qXust\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\u003Cbr>\u003Cbr>\n\n# What are [JanusXR](https://janusxr.org) URLs?\n\n> Spoiler alert: they're just (existing) URLs (but with a spatial text-snippet).\n\n[JanusXR](https://janusxr.org) pioneered adding a immersive, collaborative 3D webspace to regular webpages by re-imagining them as interconnected virtual rooms accessed via portals. \n\n> JanusXR interconnected virtual worlds are deeply decentralized because content remains hosted on the open web, allowing users to control their own content, and even customize the open-source software, rather than relying on a proprietary central platform. \n\nYou own it, just by exposing a textfile to the web.\n\n# XR Fragment compliant\n\nJanusWeb is XR Fragment [level1](#๐Ÿ“œ%20level1:%20URL)-compliant, basically [hashtag camera teleports](#teleport%20camera) and is \u003Cb>spec-compatible\u003C/b> regarding the \u003Ca href=\"\" target=\"_blank\"><Link>\u003C/a> tag for [level2 explicit hyperlinks](#๐Ÿ“œ%20level2:%20explicit%20hyperlinks) \n\n# Digital Common Good\n\n[JanusXR](https://janusxr.org) is arguably the most open immersive digital common good, to distribute 3D files to.\n\narguably, it offers:\n\n* the lowest integration cost\n* no lock-in regarding content\n* no lock-in regarding hosting\n* no lock-in regarding code\n* no lock-in regarding blockchain\n* inclusive: zero-login\n* the highest network-value\n* the highest resilience / selfgovernance\n* its (JML) markup language is **embeddable** by nature (inject into any textfile)\n\nLike HTML, it is \u003Cb>application-agnostic\u003C/b>.\u003Cbr>\nIt is a great example of \u003Cb>technology which uses a digital common good (the web/URLs), to produce a new common good.\u003C/b> (without lock-in).\n\n# Interconnected spaces\n\n[JanusWeb](https://github.com/jbaicoianu/janusweb) links piggyback on traditional links (to a blogpage, textfile etc).\n\nIt does this without any lock-in, as any [JanusWeb](https://github.com/jbaicoianu/janusweb) webpage acts \u003Cb>as entrypoint\u003C/b> to all immersive spaces without restrictions.\n\n> If something has an URL, it can be viewed (immersively if possible).\n\n\u003Cbr>\n\u003Csvg\n width=\"76.594551mm\"\n height=\"93.037361mm\"\n viewBox=\"0 0 76.594551 93.037361\"\n version=\"1.1\"\n id=\"svg1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:svg=\"http://www.w3.org/2000/svg\">\n \u003Cdefs\n id=\"defs1\" />\n \u003Cg\n id=\"layer1\"\n transform=\"translate(-63.45405,-40.372418)\">\n \u003Cg\n id=\"g1\"\n style=\"fill:#1a1a1a;stroke-width:3.51118\">\n \u003Cpath\n id=\"path6\"\n style=\"fill:#e9e9ff;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"m 106.18448,111.03698 17.0154,-9.26635 v 18.54861 l -17.0154,6.55242 z\"\n points=\"123.19988,101.77063 123.19988,120.31924 106.18448,126.87166 106.18448,111.03698 \" />\n \u003Cpath\n id=\"path1\"\n style=\"fill:#353564;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"m 85.472583,100.92338 v 18.79675 l 20.711897,7.15153 v -15.83468 z\"\n points=\"85.472583,119.72013 106.18448,126.87166 106.18448,111.03698 85.472583,100.92338 \" />\n \u003Cpath\n id=\"path2\"\n style=\"fill:#4d4d9f;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"m 85.472583,100.92338 16.513897,-13.489861 21.2134,14.337111 -17.0154,9.26635 z\"\n points=\"101.98648,87.433519 123.19988,101.77063 106.18448,111.03698 85.472583,100.92338 \" />\n \u003Cpath\n id=\"path5\"\n style=\"fill:#afafde;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"m 85.472583,119.72013 16.513897,-9.53895 21.2134,10.13806 -17.0154,6.55242 z\"\n points=\"101.98648,110.18118 123.19988,120.31924 106.18448,126.87166 85.472583,119.72013 \" />\n \u003Cpath\n id=\"path4\"\n style=\"fill:#d7d7ff;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"m 101.98648,87.433519 v 22.747661 l 21.2134,10.13806 v -18.54861 z\"\n points=\"101.98648,110.18118 123.19988,120.31924 123.19988,101.77063 101.98648,87.433519 \" />\n \u003Cpath\n id=\"path3\"\n style=\"fill:#8686bf;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 85.472583,100.92338 101.98648,87.433519 v 22.747661 l -16.513897,9.53895 z\"\n points=\"101.98648,87.433519 101.98648,110.18118 85.472583,119.72013 85.472583,100.92338 \" />\n \u003C/g>\n \u003Cg\n id=\"g6\"\n style=\"fill:#1a1a1a;stroke-width:3.51118\">\n \u003Cpath\n id=\"path12\"\n style=\"fill:#e9e9ff;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 85.427053,77.601764 97.797194,63.816906 v 20.24393 L 85.427053,95.090515 Z\"\n points=\"97.797194,63.816906 97.797194,84.060836 85.427053,95.090515 85.427053,77.601764 \" />\n \u003Cpath\n id=\"path7\"\n style=\"fill:#353564;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"m 66.706786,65.143269 v 19.97883 l 18.720267,9.968416 V 77.601764 Z\"\n points=\"66.706786,85.122099 85.427053,95.090515 85.427053,77.601764 66.706786,65.143269 \" />\n \u003Cpath\n id=\"path8\"\n style=\"fill:#4d4d9f;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 66.706786,65.143269 77.716052,46.740748 97.797194,63.816906 85.427053,77.601764 Z\"\n points=\"77.716052,46.740748 97.797194,63.816906 85.427053,77.601764 66.706786,65.143269 \" />\n \u003Cpath\n id=\"path11\"\n style=\"fill:#afafde;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 66.706786,85.122099 77.716052,70.397689 97.797194,84.060836 85.427053,95.090515 Z\"\n points=\"77.716052,70.397689 97.797194,84.060836 85.427053,95.090515 66.706786,85.122099 \" />\n \u003Cpath\n id=\"path10\"\n style=\"fill:#d7d7ff;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 77.716052,46.740748 V 70.397689 L 97.797194,84.060836 V 63.816906 Z\"\n points=\"77.716052,70.397689 97.797194,84.060836 97.797194,63.816906 77.716052,46.740748 \" />\n \u003Cpath\n id=\"path9\"\n style=\"fill:#8686bf;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 66.706786,65.143269 77.716052,46.740748 v 23.656941 l -11.009266,14.72441 z\"\n points=\"77.716052,46.740748 77.716052,70.397689 66.706786,85.122099 66.706786,65.143269 \" />\n \u003C/g>\n \u003Cg\n id=\"g12\"\n style=\"fill:#1a1a1a;stroke-width:3.51118\">\n \u003Cpath\n id=\"path18\"\n style=\"fill:#e9e9ff;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 122.33484,81.788699 135.83,73.454816 v 14.846272 l -13.49516,6.679463 z\"\n points=\"135.83,73.454816 135.83,88.301088 122.33484,94.980551 122.33484,81.788699 \" />\n \u003Cpath\n id=\"path13\"\n style=\"fill:#353564;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"m 103.98816,65.557604 v 16.414004 l 18.34668,13.008943 V 81.788699 Z\"\n points=\"103.98816,81.971608 122.33484,94.980551 122.33484,81.788699 103.98816,65.557604 \" />\n \u003Cpath\n id=\"path14\"\n style=\"fill:#4d4d9f;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 103.98816,65.557604 118.35681,52.247654 135.83,73.454816 122.33484,81.788699 Z\"\n points=\"118.35681,52.247654 135.83,73.454816 122.33484,81.788699 103.98816,65.557604 \" />\n \u003Cpath\n id=\"path17\"\n style=\"fill:#afafde;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 103.98816,81.971608 118.35681,71.303913 135.83,88.301088 122.33484,94.980551 Z\"\n points=\"118.35681,71.303913 135.83,88.301088 122.33484,94.980551 103.98816,81.971608 \" />\n \u003Cpath\n id=\"path16\"\n style=\"fill:#d7d7ff;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"M 118.35681,52.247654 V 71.303913 L 135.83,88.301088 V 73.454816 Z\"\n points=\"118.35681,71.303913 135.83,88.301088 135.83,73.454816 118.35681,52.247654 \" />\n \u003Cpath\n id=\"path15\"\n style=\"fill:#8686bf;fill-rule:evenodd;stroke:none;stroke-linejoin:round\"\n d=\"m 103.98816,65.557604 14.36865,-13.30995 v 19.056259 l -14.36865,10.667695 z\"\n points=\"118.35681,52.247654 118.35681,71.303913 103.98816,81.971608 103.98816,65.557604 \" />\n \u003C/g>\n \u003Ctext\n xml:space=\"preserve\"\n style=\"font-weight:bold;font-size:4.93889px;font-family:Montserrat;-inkscape-font-specification:'Montserrat Bold';text-align:center;letter-spacing:0.288396px;word-spacing:0.923396px;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#1a1a1a;stroke-width:0.929\"\n x=\"76.314232\"\n y=\"44.037067\"\n id=\"text18\">\u003Ctspan\n style=\"font-size:4.93889px;stroke-width:0.929\"\n x=\"76.458427\"\n y=\"44.037067\"\n id=\"tspan19\">blog URL\u003C/tspan>\u003C/text>\n \u003Ctext\n xml:space=\"preserve\"\n style=\"font-weight:bold;font-size:4.93889px;font-family:Montserrat;-inkscape-font-specification:'Montserrat Bold';text-align:center;letter-spacing:0.288396px;word-spacing:0.923396px;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#1a1a1a;stroke-width:0.929\"\n x=\"106.08504\"\n y=\"132.41212\"\n id=\"text18-0\">\u003Ctspan\n style=\"font-size:4.93889px;stroke-width:0.929\"\n x=\"106.22923\"\n y=\"132.41212\"\n id=\"tspan19-2\">any (text) URL\u003C/tspan>\u003C/text>\n \u003Ctext\n xml:space=\"preserve\"\n style=\"font-weight:bold;font-size:4.93889px;font-family:Montserrat;-inkscape-font-specification:'Montserrat Bold';text-align:center;letter-spacing:0.288396px;word-spacing:0.923396px;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#1a1a1a;stroke-width:0.929\"\n x=\"123.01366\"\n y=\"46.377708\"\n id=\"text18-0-9\">\u003Ctspan\n style=\"font-size:4.93889px;stroke-width:0.929\"\n x=\"123.15785\"\n y=\"46.377708\"\n id=\"tspan19-2-0\">textfile URL\u003C/tspan>\u003C/text>\n \u003C/g>\n\u003C/svg>\n\n# JML\n\nHow can regular URLs suddenly turn into a virtual world?\n\n> By injecting a snippet of text (JML) in your blog-article, html-page etc.\n\n```html\n \u003C!--\n \u003CFireBoxRoom>\n \u003CAssets>\n \u003Cassetobject id=\"experience\" src=\"my.glb\"/>\n \u003C/Assets>\n \u003CRoom>\n \u003Cobject pos=\"0 0 0\" collision_id=\"experience\" id=\"experience\" />\n \u003C/Room>\n \u003C/FireBoxRoom>\n -->\n```\n\nWhen a [JanusWeb](https://github.com/jbaicoianu/janusweb)-page surfs to an URL, it will detect any JML, and will \u003Cb>unfold your 2D page into its immersive counterpart\u003C/b>.\n\n> You don't have to publish immersive content on different channels (appstores e.g.), you can use your \u003Cb>existing content as distribution channel for the immersive web\u003C/b>.\n\n# Publishing, How to start?\n\n> Well, you can basically add a JML snippet (like above) to any webpage (besides uploading the 3D file).\n\nMany users enrich their **existing** content (webpages e.g.) with JML,\n\u003Cbr>however these platforms below offer JanusXR content hosting:\n\n* check [VESTA](https://vesta.janusxr.org/popular)\n* check [XRFORGE](https://xrforge.isvery.ninja) (click the meeting- or JanusXR link of an experience)\n\n# Documentation\n\nA good startingpoint is [madjin's janusxr guide](https://github.com/madjin/janus-guide)\n\n# Missing a feature? \n\nJanusXR is an unopiniated immersive layer. But you can add that yourself to the content, or build viewer 'apps' as everything is completely modular.\n\n# A public layer, not a product\n\n> [JanusXR](https://janusxr.org) is not a product, it is a **digital common** anyone can publish to and/or build on top of.\n\n```\nJanusXR is ________\n\na game engine\nfor building social experiences\ncollaborative\nthe spatial web\ndecentralized\nnot controlled by anyone\nuncensored\nfun\nnot for online banking\na learning experience\na waste of time\nlooking forwards\nlooking back\nbuilding the future\npreserving the past\ncompatible with your device\nfusing the real and virtual worlds\nsome markup\na programming environment\na UI toolkit\ninfinitely extensible\nwhiteboxable\nthe metaverse\nnot the metaverse\nstanding on the shoulders of giants\napplication-agnostic\npushing the envelope for virtual events\nan open source project\na work in progress\na labor of love\nsometimes a bit janky\nstill alive\na great experiment\nborn from the ashes of JanusVR, Inc.\nin need of some help\n```\n\n","tags":"Publishing [[๐Ÿงฐ Libraries & Tools]] [[๐Ÿ”จ For Developers]] [[๐Ÿ–ฑ๏ธ For Designers]]","title":"๐ŸŒŽ JanusXR immersive web","modified":"20251116160346309","type":"text/markdown"}, {"created":"20260717124055613","text":"Xurfer is a multimodal textmode/OpenXR webbrowser.\u003Cbr>\nIt browses the web via 3D files and [JML embedded in webpages](#๐ŸŒŽ%20JanusXR%20immersive%20web), and supports XR URI Fragments from the ground up.\n\n\u003Cimg src=\"https://codeberg.org/coderofsalvation/xurfer/media/branch/master/xurfer.webp\" width=\"100%\"/>\n\nThis is an startingpoint for writing your own crossplatform spatial browser.\n\n> See the [codeberg repository here](https://codeberg.org/coderofsalvation/xurfer)","tags":"Publishing [[๐Ÿงฐ Libraries & Tools]] [[๐Ÿ”จ For Developers]] [[๐Ÿ–ฑ๏ธ For Designers]]","title":"๐ŸŒŽ X U R F ฮž R","modified":"20260717124523166","type":"text/markdown"}, +{"created":"20260817134918678","text":"[XRForge](https://xrforge.isvery.ninja) is a utility which builds an open, seamless XR web from simple URLs and directories, without gatekeepers.\u003Cbr>\nIt has multiple angles:\n\n* it's a static webgenerator for XR experience\n* it's webserver (platform)\n* it's a JanusXR VR viewer (to view remote destaations)\n\n> [XRForge](https://xrforge.isvery.ninja) transforms standard local or remote file directories into interconnected 3D spaces. Users can seamlessly \"surf\" spatial webs (plural!), turning everyday directories into 3D portals.\n\n\u003Ca href=\"https://codeberg.org/coderofsalvation/xrforge-v2/media/branch/master/screenshot.jpg\" target=\"_blank\">\n\u003Cimg src=\"https://codeberg.org/coderofsalvation/xrforge-v2/media/branch/master/screenshot.jpg\" width=\"100%\"/>\n\u003C/a>\n\n","tags":"Publishing [[๐Ÿงฐ Libraries & Tools]] [[๐Ÿ”จ For Developers]] [[๐Ÿ–ฑ๏ธ For Designers]]","title":"๐ŸŒŽ XRForge","modified":"20260817135220221","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":"### 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 XR Fragments.\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":"[[optional levels]]","title":"๐Ÿ“œ level0: File","modified":"20260316142252271","type":"text/markdown"}, {"created":"20230427172131986","text":"\u003Cdiv class=\"border padding\" style=\"border:4px solid #F0F\">\n\t\u003Cspan class=\"big hi1\">protocol://\u003C/span>\n\t\u003Cspan class=\"big hi2\">my.org/world.glb\u003C/span>\n\t\u003Cspan class=\"big hi1\">#room2\u003C/span>\n\u003C/div>\n\nURLs are the heart of XR Fragment-based 3D Hypermedia:\n\n* it allows navigating the XR browser to a (different) 3D scene (`world.glb` e.g.)\n* it allows teleporting the user to a different location (`room2` e.g.)\n* it allows back/forward navigation \n* it allows **addressibility** (for 3d objects inside a file)\n\nExamples:\u003Cbr>\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\n\nSoftware uses **level1** for \u003Cb>deeplinking objects\u003C/b>, or to \u003Cb>teleport the user\u003C/b>: here'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]) // teleport\n obj = extractObject(scene,refs[i]) // or purely deeplink\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":"20260720080252313","type":"text/markdown"}, @@ -1266,8 +1269,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":"20260720075803127"}, -{"created":"20230423163641722","title":"$:/state/notebook-sidebar-section","text":"Home","modified":"20260720083232911"}, +{"created":"20230423163640468","title":"$:/state/notebook-sidebar","text":"yes","modified":"20260817134909379"}, +{"created":"20230423163641722","title":"$:/state/notebook-sidebar-section","text":"๐Ÿงฐ Libraries & Tools","modified":"20260817135528506"}, {"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"}, @@ -1275,7 +1278,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":"20260717123747621"}, -{"created":"20230504174435745","title":"$:/state/sidebar","text":"โ€œnoโ€","modified":"20260720075657007"}, +{"created":"20230504174435745","title":"$:/state/sidebar","text":"โ€œnoโ€","modified":"20260817134858189"}, {"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"}, @@ -1351,7 +1354,7 @@ button.sidebar-toggle{ {"created":"20260416080414879","title":"$:/state/toc/Reference/optional levels-๐Ÿ“œ level4: operators--403145756","text":"open","modified":"20260416080414879"}, {"created":"20230622111759784","title":"$:/state/toc/Reference/The parser-THREE.js--403145756","text":"open","modified":"20230622111759784"}, {"title":"$:/status/RequireReloadDueToPluginChange","text":"no"}, -{"created":"20260720075733581","title":"$:/StoryList","text":"","list":"[[XR Fragments]]","modified":"20260720083235385"}, +{"title":"$:/StoryList","created":"20260817134914281","text":"","list":"[[XR Fragments]]","modified":"20260817135605238"}, {"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"}, @@ -1407,7 +1410,7 @@ button.sidebar-toggle{ {"created":"20251006100256067","text":"> What 3D file-format should I save my XR Fragments-compatible experience to?\n\nWhile XR Fragments spec is fileformat-agnostic, its recommended to save to one of the following formats (via your [3D editor](#Edit%20a%203D%20scene%20file))\n:\n\n* [glTF](https://www.khronos.org/gltf/) (*)\n* [usdz](https://openusd.org/release/spec_usdz.html)\n* [X3D](https://en.wikipedia.org/wiki/X3D)\n* [obj](https://en.wikipedia.org/wiki/Wavefront_.obj_file)\n* [collada](https://www.khronos.org/collada)\n* [THREE.json](https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4)\n\n\\* = export to `.glb` for a compressed small file-result.\n\n> For thumbnails (see [[sidecar files]]) the spec uses [[PNG images|https://en.wikipedia.org/wiki/PNG]]\n\n## Textures\n\n[3D editors](#Edit%20a%203D%20scene%20file) allows for adding textures to objects.\nRecommended is to use:\n\n* [JPEG images](https://en.wikipedia.org/wiki/JPEG) for opaque images\n* [PNG images](https://en.wikipedia.org/wiki/PNG) for transparent images\n\n> **Reason:** JPG usually results in smaller filesizes. However there are excellent PNG compressors available like [tinypng](https://tinypng.com), saving a PNG in [GIMP](https://gimp.org) to **Indexed mode** (Image>Mode>Indexed).","tags":"[[Best practices]]","title":"File formats","modified":"20251006131015252","type":"text/markdown"}, {"created":"20240619105321821","text":"3D Objects inside a 3D model can be referenced/shown/hidden via URI filters:\n\u003Cbr>\n\n\u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/filters.gif\" style=\"width:100%\"/>\n\nThis allows high re-usability of 3D modes for remote-, local- and recursive (embedded `src`) usecases:\n\u003Cbr>\u003Cbr>\n\n\u003Cpre>\n\u003Ccode>\n my.io/scene.usdz Embeddable as:\n +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€+\n โ”‚ sky โ”‚ src: http://my.io/scene.udsz#sky (includes building,mainobject,floor)\n โ”‚ +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€+ โ”‚ \n โ”‚ โ”‚ building โ”‚ โ”‚ src: http://my.io/scene.udsz#building (includes mainobject,floor)\n โ”‚ โ”‚ +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€+ โ”‚ โ”‚\n โ”‚ โ”‚ โ”‚ mainobject โ”‚ โ”‚ โ”‚ src: http://my.io/scene.udsz#mainobject (includes floor)\n โ”‚ โ”‚ โ”‚ +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€+ โ”‚ โ”‚ โ”‚\n โ”‚ โ”‚ โ”‚ โ”‚ floor โ”‚ โ”‚ โ”‚ โ”‚ src: http://my.io/scene.udsz#floor (just floor object)\n โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚\n โ”‚ โ”‚ โ”‚ +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€+ โ”‚ โ”‚ โ”‚ href: http://my.io/scene.udsz#-mainobject (hides mainobject when clicked)\n โ”‚ โ”‚ +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€+ โ”‚ โ”‚\n โ”‚ +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€+ โ”‚\n +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€+\n\u003C/code>\n\u003C/pre>\n\nThe [[href]] and [[src]] documentation show various examples, but the full syntax is explained in the spec below.\u003Cbr>\nOn top of that, [[tagged objects]] allow using `tag` metadata to group objects to trigger grouped features\n\n\u003Ch2>What does \"&-interactions*\" do in the demo scene?\u003C/h2>\n\nThe scene-node (3D root) of the [[demo scene|example/assets/index.glb]] indeed contains (startup) [[#]] metadata (`#pos=start&rot=0,40,0&t=0&-interactions*`).\n\u003Cbr>\nIts hiding all 3D objects (and their children) which are tagged with 'interactions'.\u003Cbr>\nFor example: you can see all the menu-items in Blender, but not in the browser.\u003Cbr>\n\n* `&` is just a separator ('AND do the following:')\n* `-` means 'hide'\n* `interactions` selects all objects with name 'interactions' or tag: interactions metadata\n* `*` selects all objects inside those selected objects too (text-objects etc)\n\n> For more on syntax see the spec below\n\n\u003Cbr>\u003Cbr>\n\u003Ciframe src=\"doc/RFC_XR_Fragments.html#xr-fragment-filters\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\nFragment identifiers are derived from \u003Cb>metadata\u003C/b> inside the loaded 3D Model.\u003Cbr>More specific: \u003Cb>object-\u003C/b>, \u003Cb>material-\u003C/b>, and \u003Cb>camera-\u003C/b>names via a strategy called 'Fragment-to-metadata mapping':\n\n\u003Cbr>\u003Cbr>\n\u003Ciframe src=\"doc/RFC_XR_Fragments.html#fragment-to-metadata-mapping\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\n","tags":"[[๐Ÿงช experimental]]","title":"filters","modified":"20250902143004749"}, {"created":"20251006115535367","text":"> How to define disappearing objects above/below/far away from you ''in a 3D file''?\n\n''TIP:'' use transparent materials for fog\n\n\u003Cbr>\n\u003Ccenter>\n\u003Cvideo width=\"100%\" style=\"max-width:500px\" controls src=\"https://files.mastodon.online/media_attachments/files/115/299/267/585/663/936/original/d65107f3667189a6.mp4\" style=\"max-width:400px\"/>\n\u003Cbr>\n\u003Cbr>\n\u003Ca target=\"_blank\" href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?https://copyparty.benetou.fr/webxr-neonjungle-gltf/space_fogtronic.glb\" style=\"padding:20px; border-radius:10px; background:#A0F; color:white;text-decoration:none\">View WebXR demo\u003C/a>\n\u003C/center>\n\u003Cbr>\n\n> ''Fact 1:'' Fog shaders \u003Cb>are not\u003C/b> always necessary for atmospheric effects.\n\n> ''Fact 2:'' Use geometry for near-sight, and images/sprites for far-sight backgrounds (humans cannot perceive depth meters away).\n\nBecause you can often achieve a great sense of depth and visual separation by using a large, partially transparent cylinder or sphere textured with a ''semi-transparent color'' or vertical ''gradient.png'' texture.\u003Cbr>\nThis will act as a soft volumetric divider between an inner and outer scene.\n\n!! Horizontal fog\n\nBy dividing the scene depth by several semitransparant 'filters', a sense of horizontal depth can be achieved:\n\n[img [horizontal_fog.svg]]\n\n> ''fact:'' perceiving fog depends on the objects placed at various distances (3 layers of fog-perception is enough) not on how discrete the fog is.\n\n!! Vertical fog\n\n> See [[Pixel- and gradient-maps]] for info on UV-mapping.\n\n[img[vertical_fog.svg]]\n\n> ''important'': the gradient texture should be transparent (at least the middle), so the objects can be seen clearly. \n\n!!!! gradient.png\n\n\u003Cdiv id=\"texture\">\u003C/div>\n\n> the texture can be 16x16 pixels (no need for big textures). This allows for a variety of gradientcolors & experimentation.","tags":"[[Best practices]]","title":"Fog materials","modified":"20251007164236479","type":"text/vnd.tiddlywiki"}, -{"created":"20230808113746326","text":"Just get your hands on a 3D editor (see this [[๐Ÿ–ฅ Blender โœ…๐Ÿ”ฅ]] guide) 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\n\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\nHere are various ways to create/test 3D files with XR Fragments:\n\n| ''scenario'' | ''how'' | ''notes'' |\n| easiest | see the [[๐Ÿ–ฅ Blender โœ…๐Ÿ”ฅ]] workflow below, by loading a `.glb` 3D file into any \u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">demo\u003C/a> on xrfragment.org | export 3D file (.glb) in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>, after adding a [[href]] \u003Cb>metadata\u003C/b> as \u003Ca href=\"https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html\" target=\"_blank\">custom properties\u003C/a>, and load exported files into \u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">any demo\u003C/a> (see video above)|\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/loading.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n\u003Ch2>Developers\u003C/h2>\n\nFor developers wanting to integrate or build your own 3D hypermedia browser, the easiest is WebXR:\n\n\u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">» View \u003Cb>website.glb\u003C/b> online\u003C/a> or \u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">download \u003Cb>website.glb\u003C/b> and open\u003C/a> it in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>.\u003Cbr>\n(developers can extend a 3D model viewer here \u003Ca href=\"https://codepen.io/coderofsalvation/pen/yLwedvX\" target=\"_blank\">this codepen\u003C/a>)\n\u003Cbr>\u003Cbr>\n\nBut there are also other approaches, as XR Fragments is not tied to any XR-technology or fileformat:\n\n| ''scenario'' | ''how'' | ''notes'' |\n| dev #godot | load the \u003Ca href=\"#%F0%9F%A7%B0%20GODOT\">example project\u003C/a> | |\n| dev #threejs #github #modular | fork \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-three-helloworld\">xfragment-three-helloworld\u003C/a> | requires javascript- and \u003Ca href=\"https://threejs.org\" target=\"_blank\">threejs\u003C/a> developer-knowledge |\n| dev #polyglot | use the [[XR Fragment parser|https://github.com/coderofsalvation/xrfragment/tree/main/dist]] | lowlevel approach, more suitable for other scenarios |\n| dev #spec #browser | implement [[the spec|๐Ÿ“œ XR fragments]] yourself | the spec is simple: parse URL and iterate over a scene |\n| dev #aframe #github | hosted sandbox by \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-helloworld\" target=\"_blank\">forking xrfragment-helloworld\u003C/a> | Basically #1 but it will be hosted for free at your own github URL |\n| dev #aframe #github #modular | fork \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-aframe-helloworld\">xfragment-aframe-helloworld\u003C/a> | requires javascript- and \u003Ca href=\"https://aframe.io\" target=\"_blank\">aframe.io\u003C/a> developer-knowledge |\n\nNext to that, familiarize yourself with XR Fragments by checking these videos: \n\n1. \u003Ca href=\"https://github.com/coderofsalvation/xrfragment.media\" target=\"_blank\">All videos on github\u003C/a> (tip: star the repo)\u003Cbr>\n2. \u003Ca href=\"https://www.youtube.com/playlist?list=PLctjJGlTmeE64XPSQER2BSbjmqVGaWM4J\" target=\"_blank\">All videos on Youtube\u003C/a> (tip: subscribe or add to 'Watch-later' list)","tags":"Home","title":"Getting started","modified":"20250926175054497","type":"text/vnd.tiddlywiki","list-before":"Permacomputing & FAQ"}, +{"created":"20230808113746326","text":"Just get your hands on a 3D editor (see this [[๐Ÿ–ฅ Blender โœ…๐Ÿ”ฅ]] guide) 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\n\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\nHere are various ways to create/test 3D files with XR Fragments:\n\n| ''scenario'' | ''how'' | ''notes'' |\n| easiest | see the [[๐Ÿ–ฅ Blender โœ…๐Ÿ”ฅ]] workflow below, by loading a `.glb` 3D file into any \u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">demo\u003C/a> on xrfragment.org | export 3D file (.glb) in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>, after adding a [[href]] \u003Cb>metadata\u003C/b> as \u003Ca href=\"https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html\" target=\"_blank\">custom properties\u003C/a>, and load exported files into \u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">any demo\u003C/a> (see video above)|\n| janusweb | load your `.glb` with [[href]] metadata into [janusweb](https://web.janusxr.org) |\n| medium | download and experiment with [[XRForge|๐ŸŒŽ XRForge]] | see download link in footer |\n \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/loading.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n\u003Ch2>Developers\u003C/h2>\n\nFor developers wanting to integrate or build your own 3D hypermedia browser, the easiest is WebXR:\n\n\u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">» View \u003Cb>website.glb\u003C/b> online\u003C/a> or \u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-haxe/example/aframe/sandbox/?./../../assets/website.glb\" target=\"_blank\">download \u003Cb>website.glb\u003C/b> and open\u003C/a> it in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>.\u003Cbr>\n(developers can extend a 3D model viewer here \u003Ca href=\"https://codepen.io/coderofsalvation/pen/yLwedvX\" target=\"_blank\">this codepen\u003C/a>)\n\u003Cbr>\u003Cbr>\n\nBut there are also other approaches, as XR Fragments is not tied to any XR-technology or fileformat:\n\n| ''scenario'' | ''how'' | ''notes'' |\n| dev #godot | load the \u003Ca href=\"#%F0%9F%A7%B0%20GODOT\">example project\u003C/a> | |\n| dev #threejs #github #modular | fork \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-three-helloworld\">xfragment-three-helloworld\u003C/a> | requires javascript- and \u003Ca href=\"https://threejs.org\" target=\"_blank\">threejs\u003C/a> developer-knowledge |\n| dev #polyglot | use the [[XR Fragment parser|https://github.com/coderofsalvation/xrfragment/tree/main/dist]] | lowlevel approach, more suitable for other scenarios |\n| dev #spec #browser | implement [[the spec|๐Ÿ“œ XR fragments]] yourself | the spec is simple: parse URL and iterate over a scene |\n| dev #aframe #github | hosted sandbox by \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-helloworld\" target=\"_blank\">forking xrfragment-helloworld\u003C/a> | Basically #1 but it will be hosted for free at your own github URL |\n| dev #aframe #github #modular | fork \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-aframe-helloworld\">xfragment-aframe-helloworld\u003C/a> | requires javascript- and \u003Ca href=\"https://aframe.io\" target=\"_blank\">aframe.io\u003C/a> developer-knowledge |\n\nNext to that, familiarize yourself with XR Fragments by checking these videos: \n\n1. \u003Ca href=\"https://github.com/coderofsalvation/xrfragment.media\" target=\"_blank\">All videos on github\u003C/a> (tip: star the repo)\u003Cbr>\n2. \u003Ca href=\"https://www.youtube.com/playlist?list=PLctjJGlTmeE64XPSQER2BSbjmqVGaWM4J\" target=\"_blank\">All videos on Youtube\u003C/a> (tip: subscribe or add to 'Watch-later' list)","tags":"Home","title":"Getting started","modified":"20260817135538820","type":"text/vnd.tiddlywiki","list-before":"Permacomputing & FAQ"}, {"created":"20230425160210102","text":"\u003Cshader-doodle>\n \u003Csd-node name=\"motionblur\" prevbuffer>\n \u003Csd-node name=\"rotate\">\n \u003Csd-node name=\"basic_gl\">\n \u003Cscript type=\"x-shader/x-fragment\">\n void main() {\n vec2 st = gl_FragCoord.xy / u_resolution.xy;\n vec3 color = vec3(st.x, st.y, abs(sin(u_time)));\n\n gl_FragColor = vec4(color, 1.);\n }\n \u003C/script>\n \u003C/sd-node>\n \u003Cscript type=\"x-shader/x-fragment\">\n uniform sampler2D basic_gl;\n\n const float PI = 3.1415926;\n\n void main() {\n vec2 st = gl_FragCoord.xy / u_resolution.xy;\n\n float angle = 2. * PI * (.5 + .5 * cos(u_time));\n float scale = .7 + .4 * cos(u_time);\n\n mat2 rotation = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\n vec2 p = (st - vec2(.5)) * rotation / scale + vec2(.5);\n\n gl_FragColor = p.x \u003C 0. || p.x > 1. || p.y \u003C 0. || p.y > 1.\n ? vec4(0., 0., 0., 1.)\n : texture2D(basic_gl, p);\n }\n \u003C/script>\n \u003C/sd-node>\n \u003Cscript type=\"x-shader/x-fragment\">\n uniform sampler2D rotate, u_prevbuffer;\n\n void main () {\n vec2 st = gl_FragCoord.xy / u_resolution.xy;\n gl_FragColor = vec4(mix(\n texture2D(rotate, st),\n texture2D(u_prevbuffer, st),\n .8\n ).rgb, 1.);\n }\n \u003C/script>\n \u003C/sd-node>\n \u003Cscript type=\"x-shader/x-fragment\">\n uniform sampler2D motionblur;\n\n void main() {\n vec2 st = gl_FragCoord.xy / u_resolution.xy;\n gl_FragColor = texture2D(motionblur, st);\n }\n \u003C/script>\n\u003C/shader-doodle>","tags":"GLSL","title":"GLSL template","modified":"20230425170513931","type":"text/vnd.tiddlywiki"}, {"created":"20240924135721168","text":"XR Fragments is \u003Cb>not a\u003C/b> fileformat-specific extension, it's a spec for \u003Cb>deeplinking\u003C/b> any 3D file.\u003Cbr>\nThe level2 metadata (See reference) is easy to embed in any 3D editor (not only blender) than it would be to support new GLTF extensions.\u003Cbr>\nThis is not to say extensions are bad (they are superior in certain cases).\u003Cbr>\n\n> Just like URLs allow fileformat-agnostic navigation, 3D asset 'extras' are fileformat-agnostic too, which together allow for XR Fragments.\n\nTo deal with extensions/overlapping features \nsee [native vs XRF features](#native%20vs%20XRF%20features)","tags":"Reference","title":"glTF extensions","modified":"20251107074242841","type":"text/markdown"}, {"created":"20240226111559175","text":"The hashbus sits inbetween HTML's traditional `href` and the toplevel URL.\u003Cbr>\nSay what?\u003Cbr>\n\u003Cbr>\n> Because of historical reasons the `href` bundles interaction (a click) and navigation (replacing the viewport with another resource).\n\nXR Fragments also allows separating these historicially merged actions, by introducing a hashbus:\n\n| href value | updates top-level URL |\n|-|-|\n| `#foo` | yes |\n|`xrf://#foo` | no |\n\nThis allows much more document interactions, with the following benefits:\n\n* interactions don't clutter URLs for back/forward button navigation\n* many usecases don't require a scripting language anymore (hiding/scrolling via [#uv](#uv) e.g.)\n* use same URI Fragment DSL for navigation and interactions\n* re-use URI Templates across 3D nodes\n* allow 3D nodes publish updates to other 3D nodes (via hashbus)\n\nIn short, a complete **hypermediatic feedback loop** (HFL).\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\u003Ciframe src=\"doc/RFC_XR_Fragments.html#hypermediatic-feedbackloop-for-xr-browsers\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\n","tags":"","title":"hashbus","modified":"20240228122229072","type":"text/markdown"},