diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..d7951d9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Gemfile.lock +_site diff --git a/Gemfile b/Gemfile new file mode 100755 index 0000000..157e918 --- /dev/null +++ b/Gemfile @@ -0,0 +1,7 @@ +source 'https://rubygems.org' + +gem "jekyll", "~> 4.3.4" # installed by `gem jekyll` +# gem "webrick" # required when using Ruby >= 3 and Jekyll <= 4.2.2 + +gem "just-the-docs", "0.10.0" # pinned to the current release +# gem "just-the-docs" # always download the latest release diff --git a/README.md b/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/_config.yml b/_config.yml new file mode 100755 index 0000000..0f97090 --- /dev/null +++ b/_config.yml @@ -0,0 +1,3 @@ +title: Prototyping Studio +remote_theme: just-the-docs/just-the-docs +#theme: just-the-docs diff --git a/attachments/PXL_20240827_200416705.jpg b/attachments/PXL_20240827_200416705.jpg new file mode 100755 index 0000000..8308f70 Binary files /dev/null and b/attachments/PXL_20240827_200416705.jpg differ diff --git a/attachments/PXL_20240827_200444307.jpg b/attachments/PXL_20240827_200444307.jpg new file mode 100755 index 0000000..1d9ad64 Binary files /dev/null and b/attachments/PXL_20240827_200444307.jpg differ diff --git a/attachments/SmartShop-SUV-Manual-2021.pdf b/attachments/SmartShop-SUV-Manual-2021.pdf new file mode 100755 index 0000000..1866651 Binary files /dev/null and b/attachments/SmartShop-SUV-Manual-2021.pdf differ diff --git a/attachments/cube_prusa_v1.stl b/attachments/cube_prusa_v1.stl old mode 100644 new mode 100755 diff --git a/lib/media/pasted-image-20240819101345.png b/attachments/e3d_v6_hotend.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819101345.png rename to attachments/e3d_v6_hotend.png diff --git a/attachments/fan-shroud.stl b/attachments/fan-shroud.stl old mode 100644 new mode 100755 diff --git a/lib/media/pasted-image-20240819094609.png b/attachments/first_layer_calibration.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819094609.png rename to attachments/first_layer_calibration.png diff --git a/attachments/laguna_cnc.jpg b/attachments/laguna_cnc.jpg new file mode 100755 index 0000000..46ebbb5 Binary files /dev/null and b/attachments/laguna_cnc.jpg differ diff --git a/lib/media/pasted-image-20240819094736.png b/attachments/nozzle_replacement.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819094736.png rename to attachments/nozzle_replacement.png diff --git a/lib/media/pasted-image-20240313132650.png b/attachments/pasted-image-20240313132650.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240313132650.png rename to attachments/pasted-image-20240313132650.png diff --git a/lib/media/pasted-image-20240321100257.png b/attachments/pasted-image-20240321100257.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240321100257.png rename to attachments/pasted-image-20240321100257.png diff --git a/lib/media/pasted-image-20240321100934.png b/attachments/pasted-image-20240321100934.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240321100934.png rename to attachments/pasted-image-20240321100934.png diff --git a/lib/media/pasted-image-20240321105401.png b/attachments/pasted-image-20240321105401.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240321105401.png rename to attachments/pasted-image-20240321105401.png diff --git a/lib/media/pasted-image-20240325131546.png b/attachments/pasted-image-20240325131546.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240325131546.png rename to attachments/pasted-image-20240325131546.png diff --git a/lib/media/pasted-image-20240325132025.png b/attachments/pasted-image-20240325132025.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240325132025.png rename to attachments/pasted-image-20240325132025.png diff --git a/lib/media/pasted-image-20240325133105.png b/attachments/pasted-image-20240325133105.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240325133105.png rename to attachments/pasted-image-20240325133105.png diff --git a/lib/media/pasted-image-20240325134011.png b/attachments/pasted-image-20240325134011.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240325134011.png rename to attachments/pasted-image-20240325134011.png diff --git a/lib/media/pasted-image-20240325143617.png b/attachments/pasted-image-20240325143617.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240325143617.png rename to attachments/pasted-image-20240325143617.png diff --git a/lib/media/pasted-image-20240423163839.png b/attachments/pasted-image-20240423163839.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240423163839.png rename to attachments/pasted-image-20240423163839.png diff --git a/lib/media/pasted-image-20240424141613.png b/attachments/pasted-image-20240424141613.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240424141613.png rename to attachments/pasted-image-20240424141613.png diff --git a/lib/media/pasted-image-20240425125434.png b/attachments/pasted-image-20240425125434.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240425125434.png rename to attachments/pasted-image-20240425125434.png diff --git a/lib/media/pasted-image-20240425143741.png b/attachments/pasted-image-20240425143741.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240425143741.png rename to attachments/pasted-image-20240425143741.png diff --git a/lib/media/pasted-image-20240425144427.png b/attachments/pasted-image-20240425144427.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240425144427.png rename to attachments/pasted-image-20240425144427.png diff --git a/lib/media/pasted-image-20240425152111.png b/attachments/pasted-image-20240425152111.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240425152111.png rename to attachments/pasted-image-20240425152111.png diff --git a/lib/media/pasted-image-20240425152207.png b/attachments/pasted-image-20240425152207.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240425152207.png rename to attachments/pasted-image-20240425152207.png diff --git a/lib/media/pasted-image-20240425164514.png b/attachments/pasted-image-20240425164514.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240425164514.png rename to attachments/pasted-image-20240425164514.png diff --git a/lib/media/pasted-image-20240426144814.png b/attachments/pasted-image-20240426144814.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240426144814.png rename to attachments/pasted-image-20240426144814.png diff --git a/lib/media/pasted-image-20240507155011.png b/attachments/pasted-image-20240507155011.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240507155011.png rename to attachments/pasted-image-20240507155011.png diff --git a/lib/media/pasted-image-20240507155313.png b/attachments/pasted-image-20240507155313.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240507155313.png rename to attachments/pasted-image-20240507155313.png diff --git a/lib/media/pasted-image-20240507155955.png b/attachments/pasted-image-20240507155955.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240507155955.png rename to attachments/pasted-image-20240507155955.png diff --git a/lib/media/pasted-image-20240507160846.png b/attachments/pasted-image-20240507160846.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240507160846.png rename to attachments/pasted-image-20240507160846.png diff --git a/lib/media/pasted-image-20240507160937.png b/attachments/pasted-image-20240507160937.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240507160937.png rename to attachments/pasted-image-20240507160937.png diff --git a/lib/media/pasted-image-20240620173103.png b/attachments/pasted-image-20240620173103.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240620173103.png rename to attachments/pasted-image-20240620173103.png diff --git a/lib/media/pasted-image-20240627150629.png b/attachments/pasted-image-20240627150629.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240627150629.png rename to attachments/pasted-image-20240627150629.png diff --git a/lib/media/pasted-image-20240627150658.png b/attachments/pasted-image-20240627150658.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240627150658.png rename to attachments/pasted-image-20240627150658.png diff --git a/lib/media/pasted-image-20240702142641.png b/attachments/pasted-image-20240702142641.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240702142641.png rename to attachments/pasted-image-20240702142641.png diff --git a/lib/media/pasted-image-20240711092417.png b/attachments/pasted-image-20240711092417.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240711092417.png rename to attachments/pasted-image-20240711092417.png diff --git a/lib/media/pasted-image-20240725092643.png b/attachments/pasted-image-20240725092643.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240725092643.png rename to attachments/pasted-image-20240725092643.png diff --git a/lib/media/pasted-image-20240814122014.png b/attachments/pasted-image-20240814122014.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240814122014.png rename to attachments/pasted-image-20240814122014.png diff --git a/lib/media/pasted-image-20240820151656.png b/attachments/pasted-image-20240820151656.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240820151656.png rename to attachments/pasted-image-20240820151656.png diff --git a/lib/media/pasted-image-20240822114638.png b/attachments/pasted-image-20240822114638.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240822114638.png rename to attachments/pasted-image-20240822114638.png diff --git a/lib/media/pasted-image-20240819092712.png b/attachments/prusa_calibration_cube.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819092712.png rename to attachments/prusa_calibration_cube.png diff --git a/lib/media/pasted-image-20240819092845.png b/attachments/prusa_fan_shroud.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819092845.png rename to attachments/prusa_fan_shroud.png diff --git a/lib/media/pasted-image-20240819095720.png b/attachments/prusa_mk3s.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819095720.png rename to attachments/prusa_mk3s.png diff --git a/lib/media/pxl_20240319_144259489.jpg b/attachments/pxl_20240319_144259489.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240319_144259489.jpg rename to attachments/pxl_20240319_144259489.jpg diff --git a/lib/media/pxl_20240319_145331118.jpg b/attachments/pxl_20240319_145331118.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240319_145331118.jpg rename to attachments/pxl_20240319_145331118.jpg diff --git a/lib/media/pxl_20240319_171946523.jpg b/attachments/pxl_20240319_171946523.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240319_171946523.jpg rename to attachments/pxl_20240319_171946523.jpg diff --git a/lib/media/pxl_20240319_172014827.jpg b/attachments/pxl_20240319_172014827.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240319_172014827.jpg rename to attachments/pxl_20240319_172014827.jpg diff --git a/lib/media/pxl_20240319_172848682.jpg b/attachments/pxl_20240319_172848682.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240319_172848682.jpg rename to attachments/pxl_20240319_172848682.jpg diff --git a/lib/media/pxl_20240319_173002852-1.jpg b/attachments/pxl_20240319_173002852-1.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240319_173002852-1.jpg rename to attachments/pxl_20240319_173002852-1.jpg diff --git a/lib/media/pxl_20240319_173301916.jpg b/attachments/pxl_20240319_173301916.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240319_173301916.jpg rename to attachments/pxl_20240319_173301916.jpg diff --git a/lib/media/pxl_20240320_165610904.jpg b/attachments/pxl_20240320_165610904.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240320_165610904.jpg rename to attachments/pxl_20240320_165610904.jpg diff --git a/lib/media/pxl_20240320_170425712.jpg b/attachments/pxl_20240320_170425712.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240320_170425712.jpg rename to attachments/pxl_20240320_170425712.jpg diff --git a/lib/media/pxl_20240321_172025118.jpg b/attachments/pxl_20240321_172025118.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240321_172025118.jpg rename to attachments/pxl_20240321_172025118.jpg diff --git a/lib/media/pxl_20240408_194056440.jpg b/attachments/pxl_20240408_194056440.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240408_194056440.jpg rename to attachments/pxl_20240408_194056440.jpg diff --git a/lib/media/pxl_20240606_214558811.jpg b/attachments/pxl_20240606_214558811.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240606_214558811.jpg rename to attachments/pxl_20240606_214558811.jpg diff --git a/lib/media/pxl_20240702_180558808.jpg b/attachments/pxl_20240702_180558808.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240702_180558808.jpg rename to attachments/pxl_20240702_180558808.jpg diff --git a/lib/media/pxl_20240711_130039653.jpg b/attachments/pxl_20240711_130039653.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240711_130039653.jpg rename to attachments/pxl_20240711_130039653.jpg diff --git a/lib/media/pxl_20240715_142834985-1.jpg b/attachments/pxl_20240715_142834985-1.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240715_142834985-1.jpg rename to attachments/pxl_20240715_142834985-1.jpg diff --git a/lib/media/pxl_20240715_201005331.jpg b/attachments/pxl_20240715_201005331.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240715_201005331.jpg rename to attachments/pxl_20240715_201005331.jpg diff --git a/lib/media/pxl_20240716_214940816.jpg b/attachments/pxl_20240716_214940816.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240716_214940816.jpg rename to attachments/pxl_20240716_214940816.jpg diff --git a/lib/media/pxl_20240722_170217056.jpg b/attachments/pxl_20240722_170217056.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240722_170217056.jpg rename to attachments/pxl_20240722_170217056.jpg diff --git a/lib/media/pxl_20240729_190949474.jpg b/attachments/pxl_20240729_190949474.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240729_190949474.jpg rename to attachments/pxl_20240729_190949474.jpg diff --git a/lib/media/pxl_20240822_144006532.png b/attachments/pxl_20240822_144006532.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240822_144006532.png rename to attachments/pxl_20240822_144006532.png diff --git a/lib/media/pxl_20240822_153808649-(1).jpg b/attachments/pxl_20240822_153808649.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240822_153808649-(1).jpg rename to attachments/pxl_20240822_153808649.jpg diff --git a/lib/media/pxl_20240822_154147049.png b/attachments/pxl_20240822_154147049.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240822_154147049.png rename to attachments/pxl_20240822_154147049.png diff --git a/lib/media/pxl_20240822_154500545.jpg b/attachments/pxl_20240822_154500545.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240822_154500545.jpg rename to attachments/pxl_20240822_154500545.jpg diff --git a/lib/media/pxl_20240822_155323516.jpg b/attachments/pxl_20240822_155323516.jpg old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240822_155323516.jpg rename to attachments/pxl_20240822_155323516.jpg diff --git a/lib/media/pxl_20240822_160133655.png b/attachments/pxl_20240822_160133655.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pxl_20240822_160133655.png rename to attachments/pxl_20240822_160133655.png diff --git a/lib/media/pasted-image-20240819091655.png b/attachments/visual_troubleshooting.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819091655.png rename to attachments/visual_troubleshooting.png diff --git a/lib/media/pasted-image-20240819093604.png b/attachments/voron_calibration_cube.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819093604.png rename to attachments/voron_calibration_cube.png diff --git a/attachments/voron_design_cube_v7.stl b/attachments/voron_design_cube_v7.stl old mode 100644 new mode 100755 diff --git a/lib/media/pasted-image-20240819093718.png b/attachments/voron_test_grid.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819093718.png rename to attachments/voron_test_grid.png diff --git a/attachments/voron_test_grid_v2.stl b/attachments/voron_test_grid_v2.stl old mode 100644 new mode 100755 diff --git a/lib/media/pasted-image-20240819095610.png b/attachments/voron_v2.4.png old mode 100644 new mode 100755 similarity index 100% rename from lib/media/pasted-image-20240819095610.png rename to attachments/voron_v2.4.png diff --git a/attachments/work_holding.jpg b/attachments/work_holding.jpg new file mode 100755 index 0000000..920db07 Binary files /dev/null and b/attachments/work_holding.jpg differ diff --git a/cnc/bitSwap.md b/cnc/bitSwap.md new file mode 100755 index 0000000..a4ef00d --- /dev/null +++ b/cnc/bitSwap.md @@ -0,0 +1,31 @@ +--- +title: Changing Tools +parent: CNC +layout: default +nav_order: 10 +--- + +## Adding / Swapping Bits in Tool Change Rack +![](../attachments/pxl_20240321_172025118.jpg) +- Choose collet corresponding to bit shank diameter + - Collet size engraved on front face + - 1/8", 1/4", 3/8", 1/2" imperial sizes available + - 4mm, 6mm, 8mm metric sizes available +- Tighten bit in collet by hand (clockwise) + - All cutting flutes should be below collet + - The bit shank should be inserted a minimum of 2/3 (100% ideal) of the collet length + - For example, a 1.5" length collet requires at least 1" of bit shank inserted, however ideal insert length is 1.5" +- Finish tightening bit in collet using "ER 32" wrench & CNC tool mount bracket +![](../attachments/pxl_20240319_144259489.jpg) +![](../attachments/pxl_20240319_171946523.jpg) +- Press & hold green button on side of spindle +- ![](../attachments/pxl_20240319_172014827.jpg) +- Position tool holder under spindle head +- Release green button + + + +- On the CNC screen, update the "current tool" number to reflect which tool position the new bit will be physically located in +- Park tool +- Execute "Automatic Touchoff" +- Update Fusion cloud tool library to reflect new tool numbering diff --git a/cnc/cnc.md b/cnc/cnc.md new file mode 100755 index 0000000..9004423 --- /dev/null +++ b/cnc/cnc.md @@ -0,0 +1,9 @@ +--- +title: CNC +parent: Index +layout: default +--- +![Laguna CNC](../attachments/laguna_cnc.jpg) + +## Model SS2-SUV-48 +[SmartShop SUV User Manual](../attachments/SmartShop-SUV-Manual-2021.pdf) diff --git a/cnc/createSetup.md b/cnc/createSetup.md new file mode 100755 index 0000000..ab6967c --- /dev/null +++ b/cnc/createSetup.md @@ -0,0 +1,20 @@ +--- +title: Create Setup +parent: CNC +layout: default +nav_order: 3.1 +--- +## Creating Setup +- Switch from "Design" to "Manufacturing" workspace in Fusion (top left corner) +- Setup > New Setup +- On "Setup" tab, set "Stock Point" to the BOTTOM corner of the stock + - Previous instructions used top of stock & update bit length, this approach is not compatible with multi bit operations +- Still in "Setup" tab, select the model body/bodies to be machined +![](../attachments/pasted-image-20240313132650.png) +- In the "Stock" tab", select "Fixed Size Box" (preferred) or "Relative Size Box" (advanced) +- Set stock dimensions to actual measured values + - Use calipers to measure stock thicknesses, inaccurate values can result in broken bits + - X,Y dimensions are important but not as critical as material thickness (Z). +- If the model orientation doesn't fit within the specified stock, use a "Manufacturing Model" to rotate or re-arrange parts to fit. + - [Manufacturing Model Overview](https://help.autodesk.com/view/fusion360/ENU/?guid=MFG-MANUFACTURING-MODEL-OVERVIEW) + diff --git a/cnc/feedsSpeeds.md b/cnc/feedsSpeeds.md new file mode 100755 index 0000000..53dcc73 --- /dev/null +++ b/cnc/feedsSpeeds.md @@ -0,0 +1,15 @@ +--- +title: Feeds and Speeds +parent: CNC +layout: default +nav_order: 8 +--- +## Feeds & Speeds +- Many tool manufacturers provide feed & speed recommendations for their tools. These settings provide a good starting point and should be utilized when dialing in settings for new materials. It is important to note the RPM ratings on bits and not to exceed these values when setting up operations. +- Most of the tools used in the Laguna CNC are from Amana Tools. Amana has a Fusion 360 library of their bit offerings, including all the relevant numbers and measurements which describe the tools geometry (number of cutting flutes, length of flutes, bit diameter, etc). + +![](../attachments/pasted-image-20240321105401.png) +- [Choosing the Right Endmill for the Job](https://www.endmill.com.au/blog/choosing-the-right-end-mill-for-the-job/) // selecting bits, good read, recommended +- [Amana Fusion 360 Tool Library](https://www.amanatool.com/view-amana-tool-fusion-360-library) +- [Sample bit](https://www.amanatool.com/46420-solid-carbide-spiral-plunge-3-8-dia-x-1-1-4-x-3-8-shank-down-cut.html?ff=1&fp=8806) +- [Sample feeds and speeds](https://www.amanatool.com/pub/media/productattachments/Solid-Carbide-Spiral-Plunge-2-3-Flute-v26.pdf) diff --git a/cnc/fileFormats.md b/cnc/fileFormats.md new file mode 100755 index 0000000..fcb2c75 --- /dev/null +++ b/cnc/fileFormats.md @@ -0,0 +1,12 @@ +--- +title: File Formats +parent: CNC +layout: default +nav_order: 2 +--- +## File Formats +- Preferred file formats include: F3D, F3Z, STEP, SVG, DXF, PRT + - Always verify model dimensions, imported vector files files are not always the correct scale + - "Inspect" tool is useful for verifying a known dimension +- Can accept OBJ and STL files if necessary +- Do NOT accept generated gcode (.PRG, .NC) files, tool paths must be validated before cutting diff --git a/cnc/generateToolPath.md b/cnc/generateToolPath.md new file mode 100755 index 0000000..9799171 --- /dev/null +++ b/cnc/generateToolPath.md @@ -0,0 +1,53 @@ +--- +title: Generate Tool Path +parent: CNC +layout: default +nav_order: 3.2 +--- +## Generate Tool Paths +- Tool paths should be generated immediately prior to cutting to ensure bit numbers have not changed. + - If a tool path takes a long time to generate and/or must be generated in advance, make sure to verify each tool number in the operation vs the tools installed in the machine before starting a cut. +- Utilize template & bit library via Fusion 360 teams (requires invite to proto team) as much as possible + - [Toolpath Template Library](https://help.autodesk.com/view/fusion360/ENU/?guid=MFG-REF-TOOLPATH-TEMPLATE-LIBRARY) +- Check template library for preset operations, for example 2D contour cut in plywood. + - Make sure to select "Cloud" templates for most up to date feeds & speeds + - These templates represent previous successful operations and should be utilized whenever possible. + - Some operations have several bit size options, in general select the largest bit that meets detail requirements of the design. + - Settings can be adjusted to meet project specific needs, if they differ significantly from the template settings, consider creating a new template. + - Make sure to clear any "Selected geometries" in templates (if applicable) and update with geometries from current document + - Templates use the following naming convention + - Machine Name, Material, Operation Type, Bit Size +- Note, tool numbers in templates are NOT automatically updated and need to be verified against latest installed tools + +### Toolpaths from Template +- Setup > Create From Template > Select Template +![](../attachments/pasted-image-20240321100257.png) +- Make sure "Cloud" templates are selected unless explicitly using a local template + - Cloud libraries must be enabled ["(How to install a cloud tool library)"](https://www.autodesk.com/support/technical/article/caas/sfdcarticles/sfdcarticles/How-to-install-a-cloud-tool-library-in-Fusion-360.html) + +![](../attachments/pasted-image-20240325143617.png) +- When selecting a contour cut, pay attention to which side of the cut line the bit is on (indicated w/ a red arrow). Clicking on the red arrow will change where the bit cuts relative to the indicated contour line. +![](../attachments/pasted-image-20240321100934.png) +### Toolpaths from Scratch + +- 2D Adaptive preferred over 2D Pocket, high speed machining (HSM) limits how much of the bit is cutting at a given time, improving tool life and reducing breakage + - [2D Adaptive Clearing Reference](https://help.autodesk.com/view/fusion360/ENU/?guid=GUIDA73542E9-ED9C-4BD9-A87D-3A0ECA8BEB41) + - Optimal load: 0.25 x tool_diameter + - Depth of cut: Max 50% diameter of tool + +#### 2D Adaptive +- Critical parameters + - Tool Tab + - Feed per tooth + - Indicates how much material is each revolution by each cutting edge when the machine is performing a normal cut, typical values range from (0.002 to 0.01") + - Plunge Feed per Revolution + - Same as feed per tooth but specific to vertical cutting/drilling, end mills have different geometry than drill bits and are not as efficient cutting straight down into material. Typical values are ~50% of the feed per tooth value (0.001 to 0.005") + - ![](../attachments/pasted-image-20240627150629.png) + - Passes Tab + - Optimal Load + - Indicates the maximum amount of tool engagement, as a rule of thumb this value should be approximately 25% of the tool diameter + - For example, a good starting point for a 3/8" endmill is 0.09375" (0.375 * 0.25) + - This value can be increased or decrease when machining harder/softer materials (lower for hard materials, higher for soft materials) + - Maximum Roughing Stepdown + - ![](../attachments/pasted-image-20240627150658.png) + diff --git a/cnc/hardware.md b/cnc/hardware.md new file mode 100755 index 0000000..4426662 --- /dev/null +++ b/cnc/hardware.md @@ -0,0 +1,27 @@ +--- +title: Hardware +layout: default +parent: CNC +nav_order: 1 +--- +## Hardware +### Body +![](../attachments/pasted-image-20240425125434.png) +### Tool Head +![](../attachments/pasted-image-20240425152111.png) +### Tool Holder Assembly +![](../attachments/pasted-image-20240425152207.png) +### Tool Rack +![](../attachments/pxl_20240319_145331118.jpg) +Tool rack has space for up to 8 tools, numbered 1-8 (left to right as viewed from front) +### Pressure Regulator +![](../attachments/pasted-image-20240425144427.png) +### Air Inlet +![](../attachments/pasted-image-20240425143741.png) +### Control Box +![](../attachments/pasted-image-20240425164514.png) +- Vacuum Table - Vacuum Pump 1 +- Position Rods - Helps with stock alignment +- E-Stops - Main panel & remote +- Remote - Used to manually position tool head during setup, also has an E-stop +- Lubricant pump - keeps rails lubricated, activate a few seconds, then manually jog toolhead with remote diff --git a/cnc/lagunaChecklist.md b/cnc/lagunaChecklist.md new file mode 100755 index 0000000..25b3fd5 --- /dev/null +++ b/cnc/lagunaChecklist.md @@ -0,0 +1,31 @@ +--- +title: Laguna Pre-Cut Checklist +layout: default +parent: CNC +--- + +## Fusion 360 +
+
+
+
+
+
+
+
+ +## Laguna Control +
+
+
+
+
+
+
+
+
+
+
+
+
+ diff --git a/cnc/maintenance.md b/cnc/maintenance.md new file mode 100755 index 0000000..bc03f4e --- /dev/null +++ b/cnc/maintenance.md @@ -0,0 +1,34 @@ +--- +title: Maintenance +parent: CNC +layout: default +nav_order: 9 +--- +## Maintenance + +### Lubricate Linear Rails +- Check the oil level on the back of the spindle head, top off as needed +- On Laguna control console, press the "Lubricant Pump" button +- Release the button after a few seconds +- After a few seconds, use the remote to manually jog the spindle through the full X,Y,Z range of motion to distribute the oil +- Repeat this operation for every 15 hours of use or after the machine has been sitting idle for an extended period of time + +### Spoil Board Leveling +- Minimum spoil board thickness is 0.5" +- Be mindful of the position rods when leveling + - Rods should be in the down position when cutting + - Cutting depth should be at least 1/8" above position rods in stowed position +- In Fusion 360 + - Create extruded rectangle corresponding to spoil board size + - Alternatively use pre-made project https://a360.co/4aps348 + - Use 'Flycut Template' + - Make sure the stock thickness in setup is identical to model thickness + - Model should not be centered within larger stock (e.g. 0.6" model in 1" stock) + - Make sure origin is located at bottom of model +- On Laguna Control Screen + - Setup > CNC Positions + - Set 'Z-Spoil' to 0.0 +- Set X,Y zero point on corner of stock +- Run program, should remove less than 1/8" of material +- After cut finishes, set 'Z-Spoil' to the stock thickness specified in Fusion + - VERY IMPORTANT, DO NOT SKIP diff --git a/cnc/operation.md b/cnc/operation.md new file mode 100755 index 0000000..972cb47 --- /dev/null +++ b/cnc/operation.md @@ -0,0 +1,17 @@ +--- +title: Work Flow +parent: CNC +layout: default +nav_order: 3 +--- +## Work Flow +- Autodesk Fusion 360 is used for the computer aided manufacturing (CAM) operations +- The CAM work consists of the following stages: + - Create Setup - defines the stock/material that the model will be created from + - Generate Tool Paths - dictates how/where a specific bit/mill moves, multiple tool paths are routinely used to manufacture parts. + - Simulation - provides a virtual "mock up" of the tool paths without running the CNC + - Post Processing - converts tool paths to CNC specific gcode + - Run - gcode is executing on the physical CNC + +![](../attachments/pasted-image-20240423163839.png) + diff --git a/cnc/postProcessing.md b/cnc/postProcessing.md new file mode 100755 index 0000000..498d15b --- /dev/null +++ b/cnc/postProcessing.md @@ -0,0 +1,24 @@ +--- +title: Post Processing +parent: CNC +layout: default +nav_order: 3.4 +--- +## Post Processing +- Post processing creates the gcode file for a specific CNC +- For setups with multiple operations, can either generate a single file or multiple files +- If a single file is used with multiple bits, the Laguna automatic tool change (ATC) system will swap bits when each operation is complete. + - As previously noted, for the ATC system to work properly and avoid damage to equipment/stock, setup origin must be located at the bottom of the stock and all bits must be zero'd to the spoilboard using the "Automatic Touch Off" buttom on the Laguna Control Screen. +- Consider using multiple individual files when + - Individual operations are estimated to take a long time (estimated machining times are shown in the bottom right corner of the screen) + - Manual tool changes are required + - Parts need to be inspected after an operation before proceeding +![](../attachments/pasted-image-20240325133105.png) +- The "Post Processing" screen allows the output files to be named (if not already configured via the Setup > Post Processing tab) and specifies an output directory for the gcode file (.PRG) +- Make sure the "Laguna CNC / laguna" post processor is selected, if not use the navigator to find it via Fusion's cloud library. +- The units should be set to "Document unit" to ensure tool paths are scaled correctly. +- Select "Post" to generate the gcode +- Copy the output file to a USB drive for use in the CNC Control System +![](../attachments/pasted-image-20240325134011.png) + + diff --git a/cnc/procedures.md b/cnc/procedures.md new file mode 100755 index 0000000..195829d --- /dev/null +++ b/cnc/procedures.md @@ -0,0 +1,91 @@ +--- +title: Procedures +parent: CNC +layout: default +nav_order: 5 +--- +## Procedures + +### Startup Procedure +- Turn on air pressure using [Air Inlet](hardware#air-inlet) +- Verify pressure on [Pressure Regulator](hardware#pressure-regulator) is approximately 0.45 MPa +- Turn on power using the [Power Switch](hardware#control-box) on the control box +- Switch key to "ON" (clockwise) +- Press green power button +- Wait for system to boot + +### Shutdown Procedure +- Park any installed tooling (Home screen > Park) +- Press green power button +- Switch key to 'OFF' position (counter-clockwise) +- Turn on main power +- Turn off air + +### Running Program +- Insert USB device into the control panel +- Copy project file from USB + - From the control screen + - Setup > Program Manager + - Select "USB" tab on left + - Select desired file (.PRG extension) + - Can sort by name, date, size + - With file selected, press "Copy" + - Select "Programs" tab on left + - Select "Paste" +- Verify GCode + - From control screen + - Setup > Verify G-Code + - If program not already select use drop down to select + - Select "Load" + - Select "Check Code" + - Wait for check to complete, indicated by a blue check mark or a reported error + +![](../attachments/pxl_20240319_172848682.jpg) + +- Load a tool into the toolhead (if not already loaded) + - Option 1 - Auto Touchoff (Recommended) + - Setup > CNC Tool Data + - Select tool number from dropdown + - Select "Execute Automatic Touch On/Off" + - Option 2 - MDI Command (Advanced) + - Setup > CNC Settings + - MDI Command + - "M06 T\" e.g. `M06 T2` // load tool \#2 +- Position the toolhead at the X,Y origin of the stock + - Use the handheld remote to manually jog the toolhead + - Press and hold the "Enable Switch" on the remote to allow motion + - Will automatically open the "JOG" screen + - Select movement axis using left dial (X,Y,Z,4) + - Mill does not currently have a 4th axis + - Select the movement multiplier using the right dial (1x,10x,100x) + - Avoid using the 100x multiplier when moving the Z axis, it could result in bit breakage + - With bit position over the X,Y origin of the stock, press "Teach ZPO" + - The dust boot can be raised on the Laguna control screen to provide a clear view of bit during alignment + - **DO NOT PRESS** "Teach Tool Length", tools should only be zero'd using the auto touch off system + - Verify X,Y origin was set correctly + - With "Zero Point Offset" selected from the drop down (not Machine Coordinates or Relative Coordinates), verify X Axis and Y Axis read <= 0.001 in + +![](../attachments/pxl_20240319_173002852-1.jpg) + +- Run through the [Laguna Pre-Cut Checklist](lagunaChecklist) +- From main screen press "Run" + +### Pausing a Program +- To pause operation, press "Hold" from main screen + - Spindle remains **ON** by default when paused + - Spindle can be stopped (optionally) via + - Main > Settings + - Set "Spindle Override" to 0% + +![](../attachments/pxl_20240319_173301916.jpg) + +### Resuming a Program +- If spindle was turned off, (0%), set "Spindle Override" to 100% + - **DO NOT** resume cut operation with spindle at 0%, this could damage bits or the machine +- From "Main" tab, press "Run" + +### Emergency Stop +- The emergency stop buttons on the Control Box or Remote can be pressed at any time to immediately stop all machining. +- Program stopped via E-Stop cannot be resumed (i.e. E-Stop is not a pause) + + diff --git a/cnc/projectShowcase.md b/cnc/projectShowcase.md new file mode 100755 index 0000000..381781b --- /dev/null +++ b/cnc/projectShowcase.md @@ -0,0 +1,39 @@ +--- +title: CNC Project Showcase +layout: default +parent: Index +--- +## Summer 2024 + +### MDF Wing Forms +Two Part Form +![](../attachments/PXL_20240827_200444307.jpg) +![](../attachments/PXL_20240827_200416705.jpg) +Dual Layer +![](../attachments/pxl_20240729_190949474.jpg) +Single Layer +![](../attachments/pxl_20240722_170217056.jpg) +### Plywood Camp Sign +![](../attachments/pxl_20240702_180558808.jpg) +![](../attachments/pxl_20240715_142834985-1.jpg) +### Foam Topo Map +![](../attachments/pasted-image-20240702142641.png) +### Wood Air Foil Form +![](../attachments/pasted-image-20240620173103.png) +### Aluminum Faceplate +![](../attachments/pxl_20240606_214558811.jpg) +## Spring 2024 +### Foam Topo Map +![](../attachments/pasted-image-20240507155313.png) +### MDF Template for Ceramic Tile +![](../attachments/pasted-image-20240507155955.png) +### Plywood Flat Pack Desk +![](../attachments/pasted-image-20240507155011.png) +### Cherry Speaker Cabinets +![](../attachments/pxl_20240408_194056440.jpg) + +### Brass Retirement Engraving +![](../attachments/pasted-image-20240507160846.png) + +### MDF Marvel Aztec Calendar +![](../attachments/pasted-image-20240507160937.png) diff --git a/cnc/simulation.md b/cnc/simulation.md new file mode 100755 index 0000000..8acaab0 --- /dev/null +++ b/cnc/simulation.md @@ -0,0 +1,17 @@ +--- +title: Simulation +parent: CNC +layout: default +nav_order: 3.2 +--- +## Simulation +- All generated tool paths should be simulated prior to post processing +- Individual or multiple tool paths can be simulated by selecting desired operations (or setup for all), then selecting "Simulate" +![](../attachments/pasted-image-20240325132025.png) +- Use the play/pause buttons at the bottom of the screen to preview the operations. +- Watch for any errors/warnings in simulation timeline (indicated by vertical red lines) +- Do NOT post process any operation that has simulation errors, it could result in damage to equipment and/or stock. +- Hovering over errors will give a description of issue that must be addressed in the tool path settings. +![](../attachments/pasted-image-20240325131546.png) + + diff --git a/cnc/tips.md b/cnc/tips.md new file mode 100755 index 0000000..fba32a5 --- /dev/null +++ b/cnc/tips.md @@ -0,0 +1,17 @@ +--- +title: Tips +parent: CNC +layout: default +nav_order: 11 +--- +## General Tips +- It's often a good idea to "cut air" prior to cutting the actual material. This is accomplished by intentionally setting the material thickness in your Fusion360 setup to a value 2-3x larger than the actual material thickness. When the operation is run on the CNC, the bit should remain in the air rather than touching the material or spoilboard. By observing the "fake" cut (with the e-stop in hand), you visually verify the toolpaths are what you expect. This method can catch potential tool plunges or unit issue (mm vs inches). + +- Manufacturing models are useful for flat packing a desin without modifying the model (see [Worked Examples](workedExamples#flat-packing-a-design) ) + +![](../attachments/pasted-image-20240424141613.png) + +- Manufacturing models can be used to cut multiple identical parts from stock by creating a pattern [(Creating a Rectangular Pattern)](https://help.autodesk.com/view/fusion360/ENU/?guid=SKT-CREATE-RECTANGULAR-PATTERN) + +![](../attachments/pasted-image-20240426144814.png) + diff --git a/cnc/workHolding.md b/cnc/workHolding.md new file mode 100755 index 0000000..2deab67 --- /dev/null +++ b/cnc/workHolding.md @@ -0,0 +1,25 @@ +--- +title: Work Holding +parent: CNC +layout: default +nav_order: 7 +--- +## Work Holding + - Proper work holding is critically important, particularly for small pieces. It is very easy for a piece to come lose and come into contact with the mill bit, causing damage to the work piece and potentially damage the bit. + - There are many options for work holding including available and should be utilized on a per job basis. + - Double sided tape + - Tabs (configurable in Fusion 360) + - [Tabs reference](https://help.autodesk.com/view/fusion360/ENU/?guid=MFG-REF-2D-CONTOUR-TABS) + - Clamps / Fixtures + - Screws / Staples + - Vacuum +- When utilizing work holding that could interfere with the mill bit, caution must be taken to ensure the clamps/fixtures will not collide with the tool head. +- Soft materials such as foam blocks can be used to mock up actual clamps for verification. + - We won't actually be cutting material at this point, we will only "cut air". + - We will run the operations and observe whether any part of the tool head contacts the foam blocks. + - If the operation completes issue, we will install clamps in the EXACT space where the foam was located. + +![](../attachments/pxl_20240320_165610904.jpg) +![](../attachments/pxl_20240320_170425712.jpg) + + diff --git a/cnc/workedExamples.md b/cnc/workedExamples.md new file mode 100755 index 0000000..106acff --- /dev/null +++ b/cnc/workedExamples.md @@ -0,0 +1,15 @@ +--- +title: Worked Examples +parent: CNC +layout: default +--- +## Worked Examples + +### Flat Packing a Design + + + +### CAM + + + diff --git a/demoBoard/airQualityNode.md b/demoBoard/airQualityNode.md new file mode 100755 index 0000000..7827293 --- /dev/null +++ b/demoBoard/airQualityNode.md @@ -0,0 +1,17 @@ +--- +title: Air Quality Node +layout: default +parent: Demo Board +--- +## Air Quality Node +![](../attachments/pxl_20240716_214940816.jpg) + +### Hardware +SGP30 Air Quality Sensor + +Arduino "Metro Mini" + +### Sample Code + + + diff --git a/demoBoard/arcadeButtonNode.md b/demoBoard/arcadeButtonNode.md new file mode 100755 index 0000000..747f132 --- /dev/null +++ b/demoBoard/arcadeButtonNode.md @@ -0,0 +1,20 @@ +--- +title: Arcade Button Node +layout: default +parent: Demo Board +--- +## Arcade Button Node +![](../attachments/pxl_20240822_160133655.png) +### Hardware +Arcade Button Breakout + +Arcade Button + +Arduino "Metro Mini" + +![](../attachments/pasted-image-20240725092643.png) +### Sample Code + + + + diff --git a/demoBoard/demoBoard.md b/demoBoard/demoBoard.md new file mode 100755 index 0000000..6913bea --- /dev/null +++ b/demoBoard/demoBoard.md @@ -0,0 +1,16 @@ +--- +title: Demo Board +layout: default +parent: Index +--- + +![](../attachments/pxl_20240822_144006532.png) +## Code Repository + +## Commonly Used Headers + + +## Arduino IDE Resources +Adding Board Libraries to Arduino IDE + + diff --git a/demoBoard/irDistanceNode.md b/demoBoard/irDistanceNode.md new file mode 100755 index 0000000..fe6f7ad --- /dev/null +++ b/demoBoard/irDistanceNode.md @@ -0,0 +1,14 @@ +--- +title: IR Distance Node +layout: default +parent: Demo Board +--- +## IR Distance Node +![](../attachments/pxl_20240711_130039653.jpg) +### Hardware +IR Sensor + +Arduino "Metro" + +### Sample Code + diff --git a/demoBoard/lcdNode.md b/demoBoard/lcdNode.md new file mode 100755 index 0000000..0a28684 --- /dev/null +++ b/demoBoard/lcdNode.md @@ -0,0 +1,19 @@ +--- +title: LCD Node +layout: default +parent: Demo Board +--- +## LCD Display Node +![](../attachments/pxl_20240822_154147049.png) +### Hardware + +LCD Display + +LCD Backpack + +Arduino "Metro Mini" + +### Sample Code + + + diff --git a/demoBoard/ledMatrixNode.md b/demoBoard/ledMatrixNode.md new file mode 100755 index 0000000..2bfe3ab --- /dev/null +++ b/demoBoard/ledMatrixNode.md @@ -0,0 +1,19 @@ +--- +title: LED Matrix Node +layout: default +parent: Demo Board +--- +## LED Matrix Node +![](../attachments/pxl_20240715_201005331.jpg) + +### Hardware + +![](../attachments/pasted-image-20240711092417.png) + +### Tutorial + + +### Sample Code + + + diff --git a/demoBoard/linearActuatorNode.md b/demoBoard/linearActuatorNode.md new file mode 100755 index 0000000..46f84b5 --- /dev/null +++ b/demoBoard/linearActuatorNode.md @@ -0,0 +1,16 @@ +--- +title: Linear Actuator Node +layout: default +parent: Demo Board +--- +## Servo / Linear Actuator Node +![](../attachments/pxl_20240822_155323516.jpg) + +### Sample Code + + +### Hardware + + +### Wiring +![](../attachments/pasted-image-20240814122014.png) diff --git a/demoBoard/pirNode.md b/demoBoard/pirNode.md new file mode 100755 index 0000000..59922b7 --- /dev/null +++ b/demoBoard/pirNode.md @@ -0,0 +1,14 @@ +--- +title: PIR Node +layout: default +parent: Demo Board +--- + +## PIR Node +![](../attachments/pxl_20240822_154500545.jpg) + +### Sample Code +[Sample Code]( diff --git a/demoBoard/potentiometerNode.md b/demoBoard/potentiometerNode.md new file mode 100755 index 0000000..cc781fd --- /dev/null +++ b/demoBoard/potentiometerNode.md @@ -0,0 +1,9 @@ +--- +title: Potentiometer Node +layout: default +parent: Demo Board +--- +## Potentiometer Node + +### Sample Code + diff --git a/demoBoard/rotaryEncoderNode.md b/demoBoard/rotaryEncoderNode.md new file mode 100755 index 0000000..feef448 --- /dev/null +++ b/demoBoard/rotaryEncoderNode.md @@ -0,0 +1,21 @@ +--- +title: Rotary Encoder Node +layout: default +parent: Demo Board +--- +![](../attachments/pxl_20240822_153808649.jpg) +### Hardware +#### I2C Rotary Interface + +#### Knobs + +#### Encoder + + +### Wiring +![](../attachments/pasted-image-20240820151656.png) + +### Tutorial + +### Sample Code + diff --git a/demoBoard/soundNode.md b/demoBoard/soundNode.md new file mode 100755 index 0000000..f441146 --- /dev/null +++ b/demoBoard/soundNode.md @@ -0,0 +1,16 @@ +--- +title: Sound Node +layout: default +parent: Demo Board +--- +## Sound Node +![](../attachments/pasted-image-20240822114638.png) +### Hardware + +### Tutorials + +### Dependencies +Adafruit VS1053 Library by Adafruit + +### Sample Code + diff --git a/index.html b/index.html deleted file mode 100644 index 6aa08c1..0000000 --- a/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - Old Page - - - - - diff --git a/index.md b/index.md new file mode 100755 index 0000000..9e0eed6 --- /dev/null +++ b/index.md @@ -0,0 +1,5 @@ +--- +title: Index +layout: home +nav_order: 1 +--- diff --git a/lib/fonts/05b618077343fbbd92b7.ttf b/lib/fonts/05b618077343fbbd92b7.ttf deleted file mode 100644 index 0878199..0000000 Binary files a/lib/fonts/05b618077343fbbd92b7.ttf and /dev/null differ diff --git a/lib/fonts/2d5198822ab091ce4305.woff2 b/lib/fonts/2d5198822ab091ce4305.woff2 deleted file mode 100644 index bc4be66..0000000 Binary files a/lib/fonts/2d5198822ab091ce4305.woff2 and /dev/null differ diff --git a/lib/fonts/454577c22304619db035.ttf b/lib/fonts/454577c22304619db035.ttf deleted file mode 100644 index 91a2a44..0000000 Binary files a/lib/fonts/454577c22304619db035.ttf and /dev/null differ diff --git a/lib/fonts/4bb6ac751d1c5478ff3a.woff2 b/lib/fonts/4bb6ac751d1c5478ff3a.woff2 deleted file mode 100644 index a89cf4c..0000000 Binary files a/lib/fonts/4bb6ac751d1c5478ff3a.woff2 and /dev/null differ diff --git a/lib/fonts/52ac8f3034507f1d9e53.ttf b/lib/fonts/52ac8f3034507f1d9e53.ttf deleted file mode 100644 index c790e04..0000000 Binary files a/lib/fonts/52ac8f3034507f1d9e53.ttf and /dev/null differ diff --git a/lib/fonts/535a6cf662596b3bd6a6.woff2 b/lib/fonts/535a6cf662596b3bd6a6.woff2 deleted file mode 100644 index 4a81dc7..0000000 Binary files a/lib/fonts/535a6cf662596b3bd6a6.woff2 and /dev/null differ diff --git a/lib/fonts/70cc7ff27245e82ad414.ttf b/lib/fonts/70cc7ff27245e82ad414.ttf deleted file mode 100644 index 3563e73..0000000 Binary files a/lib/fonts/70cc7ff27245e82ad414.ttf and /dev/null differ diff --git a/lib/fonts/72505e6a122c6acd5471.woff2 b/lib/fonts/72505e6a122c6acd5471.woff2 deleted file mode 100644 index f2ea706..0000000 Binary files a/lib/fonts/72505e6a122c6acd5471.woff2 and /dev/null differ diff --git a/lib/fonts/94f2f163d4b698242fef.otf b/lib/fonts/94f2f163d4b698242fef.otf deleted file mode 100644 index 263ae4c..0000000 Binary files a/lib/fonts/94f2f163d4b698242fef.otf and /dev/null differ diff --git a/lib/fonts/b5f0f109bc88052d4000.woff2 b/lib/fonts/b5f0f109bc88052d4000.woff2 deleted file mode 100644 index 611e90c..0000000 Binary files a/lib/fonts/b5f0f109bc88052d4000.woff2 and /dev/null differ diff --git a/lib/fonts/c8ba52b05a9ef10f4758.woff2 b/lib/fonts/c8ba52b05a9ef10f4758.woff2 deleted file mode 100644 index 6c2b689..0000000 Binary files a/lib/fonts/c8ba52b05a9ef10f4758.woff2 and /dev/null differ diff --git a/lib/fonts/cb10ffd7684cd9836a05.woff2 b/lib/fonts/cb10ffd7684cd9836a05.woff2 deleted file mode 100644 index a619fc5..0000000 Binary files a/lib/fonts/cb10ffd7684cd9836a05.woff2 and /dev/null differ diff --git a/lib/fonts/cbe0ae49c52c920fd563.woff2 b/lib/fonts/cbe0ae49c52c920fd563.woff2 deleted file mode 100644 index c24c2bd..0000000 Binary files a/lib/fonts/cbe0ae49c52c920fd563.woff2 and /dev/null differ diff --git a/lib/media/874d8b8e340f75575caa.svg b/lib/media/874d8b8e340f75575caa.svg deleted file mode 100644 index a6471ff..0000000 --- a/lib/media/874d8b8e340f75575caa.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/lib/media/favicon.png b/lib/media/favicon.png deleted file mode 100644 index 6f99489..0000000 Binary files a/lib/media/favicon.png and /dev/null differ diff --git a/lib/metadata.json b/lib/metadata.json deleted file mode 100644 index 60bee3a..0000000 --- a/lib/metadata.json +++ /dev/null @@ -1,754 +0,0 @@ -{ - "vaultName": "PrototypingStudio", - "lastExport": 1725656450756, - "pluginVersion": "1.8.01", - "validBodyClasses": "publish css-settings-manager theme-dark show-inline-title show-ribbon", - "useCustomHeadContent": false, - "useCustomFavicon": false, - "files": [ - "Public/CNC/CNC Project Showcase.md", - "Public/CNC/Laguna CNC Operation Instructions.md", - "Public/CNC/Laguna Pre-Cut Checklist.md", - "Public/DemoBoard/Prototyping Studio Demo Board.md", - "Public/Maintenance/Prototyping Studio Maintenance Resources.md", - "Public/Index.md", - "lib/media/pxl_20240729_190949474.jpg", - "lib/media/pxl_20240722_170217056.jpg", - "lib/media/pxl_20240702_180558808.jpg", - "lib/media/pxl_20240715_142834985-1.jpg", - "lib/media/pasted-image-20240702142641.png", - "lib/media/pasted-image-20240620173103.png", - "lib/media/pxl_20240606_214558811.jpg", - "lib/media/pasted-image-20240507155313.png", - "lib/media/pasted-image-20240507155955.png", - "lib/media/pasted-image-20240507155011.png", - "lib/media/pxl_20240408_194056440.jpg", - "lib/media/pasted-image-20240507160846.png", - "lib/media/pasted-image-20240507160937.png", - "lib/media/pasted-image-20240425125434.png", - "lib/media/pasted-image-20240425152111.png", - "lib/media/pasted-image-20240425152207.png", - "lib/media/pxl_20240319_145331118.jpg", - "lib/media/pasted-image-20240425144427.png", - "lib/media/pasted-image-20240425143741.png", - "lib/media/pasted-image-20240425164514.png", - "lib/media/pasted-image-20240423163839.png", - "lib/media/pasted-image-20240313132650.png", - "lib/media/pasted-image-20240424141613.png", - "lib/media/pasted-image-20240426144814.png", - "lib/media/pasted-image-20240321100257.png", - "lib/media/pasted-image-20240325143617.png", - "lib/media/pasted-image-20240321100934.png", - "lib/media/pasted-image-20240627150629.png", - "lib/media/pasted-image-20240627150658.png", - "lib/media/pasted-image-20240325132025.png", - "lib/media/pasted-image-20240325131546.png", - "lib/media/pasted-image-20240325133105.png", - "lib/media/pasted-image-20240325134011.png", - "lib/media/pxl_20240319_172848682.jpg", - "lib/media/pxl_20240319_173002852-1.jpg", - "lib/media/pxl_20240319_173301916.jpg", - "lib/media/pxl_20240320_165610904.jpg", - "lib/media/pxl_20240320_170425712.jpg", - "lib/media/pasted-image-20240321105401.png", - "lib/media/pxl_20240321_172025118.jpg", - "lib/media/pxl_20240319_144259489.jpg", - "lib/media/pxl_20240319_171946523.jpg", - "lib/media/pxl_20240319_172014827.jpg", - "lib/media/pxl_20240822_144006532.png", - "lib/media/pxl_20240822_153808649-(1).jpg", - "lib/media/pasted-image-20240820151656.png", - "lib/media/pasted-image-20240822114638.png", - "lib/media/pxl_20240822_160133655.png", - "lib/media/pasted-image-20240725092643.png", - "lib/media/pxl_20240822_154147049.png", - "lib/media/pxl_20240716_214940816.jpg", - "lib/media/pxl_20240715_201005331.jpg", - "lib/media/pasted-image-20240711092417.png", - "lib/media/pxl_20240711_130039653.jpg", - "lib/media/pxl_20240822_155323516.jpg", - "lib/media/pasted-image-20240814122014.png", - "lib/media/pxl_20240822_154500545.jpg", - "lib/media/pasted-image-20240819091655.png", - "lib/media/pasted-image-20240819101345.png", - "lib/media/pasted-image-20240819095720.png", - "lib/media/pasted-image-20240819094609.png", - "lib/media/pasted-image-20240819094736.png", - "lib/media/pasted-image-20240819092845.png", - "lib/media/pasted-image-20240819092712.png", - "lib/media/pasted-image-20240819095610.png", - "lib/media/pasted-image-20240819093718.png", - "lib/media/pasted-image-20240819093604.png", - "lib/fonts/94f2f163d4b698242fef.otf", - "lib/fonts/72505e6a122c6acd5471.woff2", - "lib/fonts/2d5198822ab091ce4305.woff2", - "lib/fonts/c8ba52b05a9ef10f4758.woff2", - "lib/fonts/cb10ffd7684cd9836a05.woff2", - "lib/fonts/b5f0f109bc88052d4000.woff2", - "lib/fonts/cbe0ae49c52c920fd563.woff2", - "lib/fonts/535a6cf662596b3bd6a6.woff2", - "lib/fonts/70cc7ff27245e82ad414.ttf", - "lib/fonts/454577c22304619db035.ttf", - "lib/fonts/52ac8f3034507f1d9e53.ttf", - "lib/fonts/05b618077343fbbd92b7.ttf", - "lib/fonts/4bb6ac751d1c5478ff3a.woff2", - "lib/media/874d8b8e340f75575caa.svg", - "lib/scripts/webpage.js", - "lib/media/favicon.png", - "lib/styles/obsidian.css", - "lib/styles/global-variable-styles.css", - "lib/styles/main-styles.css" - ], - "mainDependencies": [ - "lib/fonts/94f2f163d4b698242fef.otf", - "lib/fonts/72505e6a122c6acd5471.woff2", - "lib/fonts/2d5198822ab091ce4305.woff2", - "lib/fonts/c8ba52b05a9ef10f4758.woff2", - "lib/fonts/cb10ffd7684cd9836a05.woff2", - "lib/fonts/b5f0f109bc88052d4000.woff2", - "lib/fonts/cbe0ae49c52c920fd563.woff2", - "lib/fonts/535a6cf662596b3bd6a6.woff2", - "lib/fonts/70cc7ff27245e82ad414.ttf", - "lib/fonts/454577c22304619db035.ttf", - "lib/fonts/52ac8f3034507f1d9e53.ttf", - "lib/fonts/05b618077343fbbd92b7.ttf", - "lib/fonts/4bb6ac751d1c5478ff3a.woff2", - "lib/media/874d8b8e340f75575caa.svg", - "lib/scripts/webpage.js", - "lib/media/favicon.png", - "lib/styles/obsidian.css", - "lib/styles/global-variable-styles.css", - "lib/styles/main-styles.css" - ], - "fileInfo": { - "Public/CNC/CNC Project Showcase.md": { - "modifiedTime": 1725656450756, - "sourceSize": 834, - "exportedPath": "public/cnc/cnc-project-showcase.html", - "dependencies": [ - "lib/media/pxl_20240729_190949474.jpg", - "lib/media/pxl_20240722_170217056.jpg", - "lib/media/pxl_20240702_180558808.jpg", - "lib/media/pxl_20240715_142834985-1.jpg", - "lib/media/pasted-image-20240702142641.png", - "lib/media/pasted-image-20240620173103.png", - "lib/media/pxl_20240606_214558811.jpg", - "lib/media/pasted-image-20240507155313.png", - "lib/media/pasted-image-20240507155955.png", - "lib/media/pasted-image-20240507155011.png", - "lib/media/pxl_20240408_194056440.jpg", - "lib/media/pasted-image-20240507160846.png", - "lib/media/pasted-image-20240507160937.png" - ] - }, - "Public/CNC/Laguna CNC Operation Instructions.md": { - "modifiedTime": 1725656450756, - "sourceSize": 19297, - "exportedPath": "public/cnc/laguna-cnc-operation-instructions.html", - "dependencies": [ - "lib/media/pasted-image-20240425125434.png", - "lib/media/pasted-image-20240425152111.png", - "lib/media/pasted-image-20240425152207.png", - "lib/media/pxl_20240319_145331118.jpg", - "lib/media/pasted-image-20240425144427.png", - "lib/media/pasted-image-20240425143741.png", - "lib/media/pasted-image-20240425164514.png", - "lib/media/pasted-image-20240423163839.png", - "lib/media/pasted-image-20240313132650.png", - "lib/media/pasted-image-20240424141613.png", - "lib/media/pasted-image-20240426144814.png", - "lib/media/pasted-image-20240321100257.png", - "lib/media/pasted-image-20240325143617.png", - "lib/media/pasted-image-20240321100934.png", - "lib/media/pasted-image-20240627150629.png", - "lib/media/pasted-image-20240627150658.png", - "lib/media/pasted-image-20240325132025.png", - "lib/media/pasted-image-20240325131546.png", - "lib/media/pasted-image-20240325133105.png", - "lib/media/pasted-image-20240325134011.png", - "lib/media/pxl_20240319_172848682.jpg", - "lib/media/pxl_20240319_173002852-1.jpg", - "lib/media/pxl_20240319_173301916.jpg", - "lib/media/pxl_20240320_165610904.jpg", - "lib/media/pxl_20240320_170425712.jpg", - "lib/media/pasted-image-20240321105401.png", - "lib/media/pxl_20240321_172025118.jpg", - "lib/media/pxl_20240319_144259489.jpg", - "lib/media/pxl_20240319_171946523.jpg", - "lib/media/pxl_20240319_172014827.jpg" - ] - }, - "Public/CNC/Laguna Pre-Cut Checklist.md": { - "modifiedTime": 1725656450756, - "sourceSize": 1087, - "exportedPath": "public/cnc/laguna-pre-cut-checklist.html", - "dependencies": [] - }, - "Public/DemoBoard/Prototyping Studio Demo Board.md": { - "modifiedTime": 1725656450756, - "sourceSize": 4292, - "exportedPath": "public/demoboard/prototyping-studio-demo-board.html", - "dependencies": [ - "lib/media/pxl_20240822_144006532.png", - "lib/media/pxl_20240822_153808649-(1).jpg", - "lib/media/pasted-image-20240820151656.png", - "lib/media/pasted-image-20240822114638.png", - "lib/media/pxl_20240822_160133655.png", - "lib/media/pasted-image-20240725092643.png", - "lib/media/pxl_20240822_154147049.png", - "lib/media/pxl_20240716_214940816.jpg", - "lib/media/pxl_20240715_201005331.jpg", - "lib/media/pasted-image-20240711092417.png", - "lib/media/pxl_20240711_130039653.jpg", - "lib/media/pxl_20240822_155323516.jpg", - "lib/media/pasted-image-20240814122014.png", - "lib/media/pxl_20240822_154500545.jpg" - ] - }, - "lib/media/pasted-image-20240507155313.png": { - "modifiedTime": 1725656450756, - "sourceSize": 907087, - "exportedPath": "lib/media/pasted-image-20240507155313.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240507155955.png": { - "modifiedTime": 1725656450756, - "sourceSize": 708506, - "exportedPath": "lib/media/pasted-image-20240507155955.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240507155011.png": { - "modifiedTime": 1725656450756, - "sourceSize": 1004776, - "exportedPath": "lib/media/pasted-image-20240507155011.png", - "dependencies": [] - }, - "lib/media/pxl_20240408_194056440.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 3044948, - "exportedPath": "lib/media/pxl_20240408_194056440.jpg", - "dependencies": [] - }, - "lib/media/pasted-image-20240507160846.png": { - "modifiedTime": 1725656450756, - "sourceSize": 546244, - "exportedPath": "lib/media/pasted-image-20240507160846.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240507160937.png": { - "modifiedTime": 1725656450756, - "sourceSize": 663433, - "exportedPath": "lib/media/pasted-image-20240507160937.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240425125434.png": { - "modifiedTime": 1725656450756, - "sourceSize": 1053781, - "exportedPath": "lib/media/pasted-image-20240425125434.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240425152111.png": { - "modifiedTime": 1725656450756, - "sourceSize": 1512441, - "exportedPath": "lib/media/pasted-image-20240425152111.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240425152207.png": { - "modifiedTime": 1725656450756, - "sourceSize": 905524, - "exportedPath": "lib/media/pasted-image-20240425152207.png", - "dependencies": [] - }, - "lib/media/pxl_20240319_145331118.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2421298, - "exportedPath": "lib/media/pxl_20240319_145331118.jpg", - "dependencies": [] - }, - "lib/media/pasted-image-20240425144427.png": { - "modifiedTime": 1725656450756, - "sourceSize": 745212, - "exportedPath": "lib/media/pasted-image-20240425144427.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240425143741.png": { - "modifiedTime": 1725656450756, - "sourceSize": 629469, - "exportedPath": "lib/media/pasted-image-20240425143741.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240425164514.png": { - "modifiedTime": 1725656450756, - "sourceSize": 1384428, - "exportedPath": "lib/media/pasted-image-20240425164514.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240423163839.png": { - "modifiedTime": 1725656450756, - "sourceSize": 14514, - "exportedPath": "lib/media/pasted-image-20240423163839.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240313132650.png": { - "modifiedTime": 1725656450756, - "sourceSize": 671732, - "exportedPath": "lib/media/pasted-image-20240313132650.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240424141613.png": { - "modifiedTime": 1725656450756, - "sourceSize": 530794, - "exportedPath": "lib/media/pasted-image-20240424141613.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240426144814.png": { - "modifiedTime": 1725656450756, - "sourceSize": 276667, - "exportedPath": "lib/media/pasted-image-20240426144814.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240321100257.png": { - "modifiedTime": 1725656450756, - "sourceSize": 774771, - "exportedPath": "lib/media/pasted-image-20240321100257.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240325143617.png": { - "modifiedTime": 1725656450756, - "sourceSize": 66876, - "exportedPath": "lib/media/pasted-image-20240325143617.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240321100934.png": { - "modifiedTime": 1725656450756, - "sourceSize": 654354, - "exportedPath": "lib/media/pasted-image-20240321100934.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240325132025.png": { - "modifiedTime": 1725656450756, - "sourceSize": 694348, - "exportedPath": "lib/media/pasted-image-20240325132025.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240325131546.png": { - "modifiedTime": 1725656450756, - "sourceSize": 588592, - "exportedPath": "lib/media/pasted-image-20240325131546.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240325133105.png": { - "modifiedTime": 1725656450756, - "sourceSize": 812902, - "exportedPath": "lib/media/pasted-image-20240325133105.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240325134011.png": { - "modifiedTime": 1725656450756, - "sourceSize": 48324, - "exportedPath": "lib/media/pasted-image-20240325134011.png", - "dependencies": [] - }, - "lib/media/pxl_20240319_172848682.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 4781898, - "exportedPath": "lib/media/pxl_20240319_172848682.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240319_173002852-1.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 4774186, - "exportedPath": "lib/media/pxl_20240319_173002852-1.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240319_173301916.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 4756596, - "exportedPath": "lib/media/pxl_20240319_173301916.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240320_165610904.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 3167520, - "exportedPath": "lib/media/pxl_20240320_165610904.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240320_170425712.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 3628793, - "exportedPath": "lib/media/pxl_20240320_170425712.jpg", - "dependencies": [] - }, - "lib/media/pasted-image-20240321105401.png": { - "modifiedTime": 1725656450756, - "sourceSize": 223249, - "exportedPath": "lib/media/pasted-image-20240321105401.png", - "dependencies": [] - }, - "lib/media/pxl_20240321_172025118.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2549658, - "exportedPath": "lib/media/pxl_20240321_172025118.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240319_144259489.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2811689, - "exportedPath": "lib/media/pxl_20240319_144259489.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240319_171946523.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2273074, - "exportedPath": "lib/media/pxl_20240319_171946523.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240319_172014827.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2865907, - "exportedPath": "lib/media/pxl_20240319_172014827.jpg", - "dependencies": [] - }, - "lib/fonts/94f2f163d4b698242fef.otf": { - "modifiedTime": 1725656450756, - "sourceSize": 66800, - "exportedPath": "lib/fonts/94f2f163d4b698242fef.otf", - "dependencies": [] - }, - "lib/fonts/72505e6a122c6acd5471.woff2": { - "modifiedTime": 1725656450756, - "sourceSize": 104232, - "exportedPath": "lib/fonts/72505e6a122c6acd5471.woff2", - "dependencies": [] - }, - "lib/fonts/2d5198822ab091ce4305.woff2": { - "modifiedTime": 1725656450756, - "sourceSize": 104332, - "exportedPath": "lib/fonts/2d5198822ab091ce4305.woff2", - "dependencies": [] - }, - "lib/fonts/c8ba52b05a9ef10f4758.woff2": { - "modifiedTime": 1725656450756, - "sourceSize": 98868, - "exportedPath": "lib/fonts/c8ba52b05a9ef10f4758.woff2", - "dependencies": [] - }, - "lib/fonts/cb10ffd7684cd9836a05.woff2": { - "modifiedTime": 1725656450756, - "sourceSize": 106876, - "exportedPath": "lib/fonts/cb10ffd7684cd9836a05.woff2", - "dependencies": [] - }, - "lib/fonts/b5f0f109bc88052d4000.woff2": { - "modifiedTime": 1725656450756, - "sourceSize": 105804, - "exportedPath": "lib/fonts/b5f0f109bc88052d4000.woff2", - "dependencies": [] - }, - "lib/fonts/cbe0ae49c52c920fd563.woff2": { - "modifiedTime": 1725656450756, - "sourceSize": 106108, - "exportedPath": "lib/fonts/cbe0ae49c52c920fd563.woff2", - "dependencies": [] - }, - "lib/fonts/535a6cf662596b3bd6a6.woff2": { - "modifiedTime": 1725656450756, - "sourceSize": 111708, - "exportedPath": "lib/fonts/535a6cf662596b3bd6a6.woff2", - "dependencies": [] - }, - "lib/fonts/70cc7ff27245e82ad414.ttf": { - "modifiedTime": 1725656450756, - "sourceSize": 192740, - "exportedPath": "lib/fonts/70cc7ff27245e82ad414.ttf", - "dependencies": [] - }, - "lib/fonts/454577c22304619db035.ttf": { - "modifiedTime": 1725656450756, - "sourceSize": 161376, - "exportedPath": "lib/fonts/454577c22304619db035.ttf", - "dependencies": [] - }, - "lib/fonts/52ac8f3034507f1d9e53.ttf": { - "modifiedTime": 1725656450756, - "sourceSize": 191568, - "exportedPath": "lib/fonts/52ac8f3034507f1d9e53.ttf", - "dependencies": [] - }, - "lib/fonts/05b618077343fbbd92b7.ttf": { - "modifiedTime": 1725656450756, - "sourceSize": 155288, - "exportedPath": "lib/fonts/05b618077343fbbd92b7.ttf", - "dependencies": [] - }, - "lib/fonts/4bb6ac751d1c5478ff3a.woff2": { - "modifiedTime": 1725656450756, - "sourceSize": 7876, - "exportedPath": "lib/fonts/4bb6ac751d1c5478ff3a.woff2", - "dependencies": [] - }, - "lib/media/874d8b8e340f75575caa.svg": { - "modifiedTime": 1725656450756, - "sourceSize": 317, - "exportedPath": "lib/media/874d8b8e340f75575caa.svg", - "dependencies": [] - }, - "lib/scripts/webpage.js": { - "modifiedTime": 1725656450756, - "sourceSize": 47290, - "exportedPath": "lib/scripts/webpage.js", - "dependencies": [] - }, - "lib/media/favicon.png": { - "modifiedTime": 1725656450756, - "sourceSize": 1105, - "exportedPath": "lib/media/favicon.png", - "dependencies": [] - }, - "lib/styles/obsidian.css": { - "modifiedTime": 1725656450756, - "sourceSize": 130208, - "exportedPath": "lib/styles/obsidian.css", - "dependencies": [] - }, - "lib/styles/global-variable-styles.css": { - "modifiedTime": 1725656450756, - "sourceSize": 328, - "exportedPath": "lib/styles/global-variable-styles.css", - "dependencies": [] - }, - "lib/styles/main-styles.css": { - "modifiedTime": 1725656450756, - "sourceSize": 23130, - "exportedPath": "lib/styles/main-styles.css", - "dependencies": [] - }, - "Public/Index.md": { - "modifiedTime": 1725656450756, - "sourceSize": 209, - "exportedPath": "public/index.html", - "dependencies": [] - }, - "lib/media/pxl_20240606_214558811.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2985701, - "exportedPath": "lib/media/pxl_20240606_214558811.jpg", - "dependencies": [] - }, - "lib/media/pasted-image-20240620173103.png": { - "modifiedTime": 1725656450756, - "sourceSize": 1327354, - "exportedPath": "lib/media/pasted-image-20240620173103.png", - "dependencies": [] - }, - "lib/media/pxl_20240702_180558808.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 3240467, - "exportedPath": "lib/media/pxl_20240702_180558808.jpg", - "dependencies": [] - }, - "lib/media/pasted-image-20240627150629.png": { - "modifiedTime": 1725656450756, - "sourceSize": 61456, - "exportedPath": "lib/media/pasted-image-20240627150629.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240627150658.png": { - "modifiedTime": 1725656450756, - "sourceSize": 49128, - "exportedPath": "lib/media/pasted-image-20240627150658.png", - "dependencies": [] - }, - "lib/styles/supported-plugins.css": { - "modifiedTime": 1722009350554, - "sourceSize": 2428, - "exportedPath": "lib/styles/supported-plugins.css", - "dependencies": [] - }, - "lib/media/pasted-image-20240702142641.png": { - "modifiedTime": 1725656450756, - "sourceSize": 1038226, - "exportedPath": "lib/media/pasted-image-20240702142641.png", - "dependencies": [] - }, - "lib/media/pxl_20240715_201005331.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2478052, - "exportedPath": "lib/media/pxl_20240715_201005331.jpg", - "dependencies": [] - }, - "lib/media/pasted-image-20240711092417.png": { - "modifiedTime": 1725656450756, - "sourceSize": 138411, - "exportedPath": "lib/media/pasted-image-20240711092417.png", - "dependencies": [] - }, - "lib/media/pxl_20240711_130039653.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 1789767, - "exportedPath": "lib/media/pxl_20240711_130039653.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240715_142834985-1.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 4451148, - "exportedPath": "lib/media/pxl_20240715_142834985-1.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240722_170217056.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2794530, - "exportedPath": "lib/media/pxl_20240722_170217056.jpg", - "dependencies": [] - }, - "lib/media/pasted-image-20240725092643.png": { - "modifiedTime": 1725656450756, - "sourceSize": 945050, - "exportedPath": "lib/media/pasted-image-20240725092643.png", - "dependencies": [] - }, - "lib/media/pxl_20240716_214940816.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2289700, - "exportedPath": "lib/media/pxl_20240716_214940816.jpg", - "dependencies": [] - }, - "Public/Maintenance/Prototyping Studio Maintenance Resources.md": { - "modifiedTime": 1725656450756, - "sourceSize": 1522, - "exportedPath": "public/maintenance/prototyping-studio-maintenance-resources.html", - "dependencies": [ - "lib/media/pasted-image-20240819091655.png", - "lib/media/pasted-image-20240819101345.png", - "lib/media/pasted-image-20240819095720.png", - "lib/media/pasted-image-20240819094609.png", - "lib/media/pasted-image-20240819094736.png", - "lib/media/pasted-image-20240819092845.png", - "lib/media/pasted-image-20240819092712.png", - "lib/media/pasted-image-20240819095610.png", - "lib/media/pasted-image-20240819093718.png", - "lib/media/pasted-image-20240819093604.png" - ] - }, - "lib/media/pxl_20240729_190949474.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2583665, - "exportedPath": "lib/media/pxl_20240729_190949474.jpg", - "dependencies": [] - }, - "lib/media/pasted-image-20240814122014.png": { - "modifiedTime": 1725656450756, - "sourceSize": 15455, - "exportedPath": "lib/media/pasted-image-20240814122014.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819091655.png": { - "modifiedTime": 1725656450756, - "sourceSize": 704211, - "exportedPath": "lib/media/pasted-image-20240819091655.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819095720.png": { - "modifiedTime": 1725656450756, - "sourceSize": 424931, - "exportedPath": "lib/media/pasted-image-20240819095720.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819094609.png": { - "modifiedTime": 1725656450756, - "sourceSize": 218288, - "exportedPath": "lib/media/pasted-image-20240819094609.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819094736.png": { - "modifiedTime": 1725656450756, - "sourceSize": 38751, - "exportedPath": "lib/media/pasted-image-20240819094736.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819092845.png": { - "modifiedTime": 1725656450756, - "sourceSize": 79561, - "exportedPath": "lib/media/pasted-image-20240819092845.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819092712.png": { - "modifiedTime": 1725656450756, - "sourceSize": 89155, - "exportedPath": "lib/media/pasted-image-20240819092712.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819095610.png": { - "modifiedTime": 1725656450756, - "sourceSize": 5154028, - "exportedPath": "lib/media/pasted-image-20240819095610.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819093718.png": { - "modifiedTime": 1725656450756, - "sourceSize": 156893, - "exportedPath": "lib/media/pasted-image-20240819093718.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819093604.png": { - "modifiedTime": 1725656450756, - "sourceSize": 90038, - "exportedPath": "lib/media/pasted-image-20240819093604.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240819101345.png": { - "modifiedTime": 1725656450756, - "sourceSize": 168061, - "exportedPath": "lib/media/pasted-image-20240819101345.png", - "dependencies": [] - }, - "lib/media/pxl_20240822_144006532.png": { - "modifiedTime": 1725656450756, - "sourceSize": 8817306, - "exportedPath": "lib/media/pxl_20240822_144006532.png", - "dependencies": [] - }, - "lib/media/pxl_20240822_153808649-(1).jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2298504, - "exportedPath": "lib/media/pxl_20240822_153808649-(1).jpg", - "dependencies": [] - }, - "lib/media/pasted-image-20240820151656.png": { - "modifiedTime": 1725656450756, - "sourceSize": 804262, - "exportedPath": "lib/media/pasted-image-20240820151656.png", - "dependencies": [] - }, - "lib/media/pasted-image-20240822114638.png": { - "modifiedTime": 1725656450756, - "sourceSize": 9184646, - "exportedPath": "lib/media/pasted-image-20240822114638.png", - "dependencies": [] - }, - "lib/media/pxl_20240822_160133655.png": { - "modifiedTime": 1725656450756, - "sourceSize": 5912441, - "exportedPath": "lib/media/pxl_20240822_160133655.png", - "dependencies": [] - }, - "lib/media/pxl_20240822_154147049.png": { - "modifiedTime": 1725656450756, - "sourceSize": 7304218, - "exportedPath": "lib/media/pxl_20240822_154147049.png", - "dependencies": [] - }, - "lib/media/pxl_20240822_155323516.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 2747423, - "exportedPath": "lib/media/pxl_20240822_155323516.jpg", - "dependencies": [] - }, - "lib/media/pxl_20240822_154500545.jpg": { - "modifiedTime": 1725656450756, - "sourceSize": 1782804, - "exportedPath": "lib/media/pxl_20240822_154500545.jpg", - "dependencies": [] - } - } -} \ No newline at end of file diff --git a/lib/rss.xml b/lib/rss.xml deleted file mode 100644 index 7ae241f..0000000 --- a/lib/rss.xml +++ /dev/null @@ -1,478 +0,0 @@ -<![CDATA[PrototypingStudio]]>http://github.com/dylang/node-rsslib\media\favicon.pngPrototypingStudioWebpage HTML Export plugin for ObsidianFri, 06 Sep 2024 21:00:52 GMTFri, 06 Sep 2024 21:00:50 GMT60<![CDATA[CNC Project Showcase]]>

Dual Layer
-PXL_20240729_190949474.jpg
-Single Layer
-PXL_20240722_170217056.jpg

PXL_20240702_180558808.jpgPXL_20240715_142834985 1.jpg

Pasted image 20240702142641.png

Pasted image 20240620173103.png

PXL_20240606_214558811.jpg


Pasted image 20240507155313.png

Pasted image 20240507155955.png

Pasted image 20240507155011.png

PXL_20240408_194056440.jpg

Pasted image 20240507160846.png

Pasted image 20240507160937.png]]>
public\cnc\cnc-project-showcase.htmlPublic/CNC/CNC Project Showcase.mdMon, 29 Jul 2024 21:10:57 GMT<figure><img src="lib\media\pxl_20240729_190949474.jpg"></figure>
<![CDATA[Laguna CNC Operation Instructions]]>

Pasted image 20240425125434.png

Pasted image 20240425152111.png

Pasted image 20240425152207.png

PXL_20240319_145331118.jpg
-
Tool rack has space for up to 8 tools, numbered 1-8 (left to right as viewed from front) -

Pasted image 20240425144427.png

Pasted image 20240425143741.png

Pasted image 20240425164514.png
-
Vacuum Table - Vacuum Pump 1 -
Position Rods - Helps with stock alignment -
E-Stops - Main panel & remote -
Remote - Used to manually position tool head during setup, also has an E-stop -
Lubricant pump - keeps rails lubricated, activate a few seconds, then manually jog toolhead with remote -

-
Preferred file formats include: F3D, F3Z, STEP, SVG, DXF, PRT - -
Always verify model dimensions, imported vector files files are not always the correct scale -
"Inspect" tool is useful for verifying a known dimension - - -
Can accept OBJ and STL files if necessary -
Do NOT accept generated gcode (.PRG, .NC) files, tool paths must be validated before cutting -

-
Autodesk Fusion 360 is used for the computer aided manufacturing (CAM) operations -
The CAM work consists of the following stages: - -
Create Setup - defines the stock/material that the model will be created from -
Generate Tool Paths - dictates how/where a specific bit/mill moves, multiple tool paths are routinely used to manufacture parts. -
Simulation - provides a virtual "mock up" of the tool paths without running the CNC -
Post Processing - converts tool paths to CNC specific gcode -
Run - gcode is executing on the physical CNC - - -
Pasted image 20240423163839.png

-
Switch from "Design" to "Manufacturing" workspace in Fusion (top left corner) -
Setup > New Setup -
On "Setup" tab, set "Stock Point" to the BOTTOM corner of the stock - -
Previous instructions used top of stock & update bit length, this approach is not compatible with multi bit operations - - -
Still in "Setup" tab, select the model body/bodies to be machined
-Pasted image 20240313132650.png -
In the "Stock" tab", select "Fixed Size Box" (preferred) or "Relative Size Box" (advanced) -
Set stock dimensions to actual measured values - -
Use calipers to measure stock thicknesses, inaccurate values can result in broken bits -
X,Y dimensions are important but not as critical as material thickness (Z). - - -
If the model orientation doesn't fit within the specified stock, use a "Manufacturing Model" to rotate or re-arrange parts to fit. - -
https://help.autodesk.com/view/fusion360/ENU/?guid=MFG-MANUFACTURING-MODEL-OVERVIEW -
Manufacturing models are useful for flat packing a design without modifying the model - -
Pasted image 20240424141613.png - - -
Can also be used to cut multiple identical parts from stock by creating a pattern - -
Pasted image 20240426144814.png -
https://help.autodesk.com/view/fusion360/ENU/?guid=SKT-CREATE-RECTANGULAR-PATTERN - - - - -

-
Tool paths should be generated immediately prior to cutting to ensure bit numbers have not changed. - -
If a tool path takes a long time to generate and/or must be generated in advance, make sure to verify each tool number in the operation vs the tools installed in the machine before starting a cut. - - -
Utilize template & bit library via Fusion 360 teams (requires invite to proto team) as much as possible - -
https://help.autodesk.com/view/fusion360/ENU/?guid=MFG-REF-TOOLPATH-TEMPLATE-LIBRARY - - -
Check template library for preset operations, for example 2D contour cut in plywood. - -
Make sure to select "Cloud" templates for most up to date feeds & speeds -
These templates represent previous successful operations and should be utilized whenever possible. -
Some operations have several bit size options, in general select the largest bit that meets detail requirements of the design. -
Settings can be adjusted to meet project specific needs, if they differ significantly from the template settings, consider creating a new template. -
Make sure to clear any "Selected geometries" in templates (if applicable) and update with geometries from current document -
Templates use the following naming convention - -
Machine Name, Material, Operation Type, Bit Size - - - - -
Note, tool numbers in templates are NOT automatically updated and need to be verified against latest installed tools -
####### Toolpaths from Template
-
Setup > Create From Template > Select Template
-Pasted image 20240321100257.png -
Make sure "Cloud" templates are selected unless explicitly using a local template - -
Cloud libraries must be enabled (https://www.autodesk.com/support/technical/article/caas/sfdcarticles/sfdcarticles/How-to-install-a-cloud-tool-library-in-Fusion-360.html) - - -
Pasted image 20240325143617.png
-
When selecting a contour cut, pay attention to which side of the cut line the bit is on (indicated w/ a red arrow). Clicking on the red arrow will change where the bit cuts relative to the indicated contour line.
-Pasted image 20240321100934.png -

-
2D Adaptive preferred over 2D Pocket, high speed machining (HSM) limits how much of the bit is cutting at a given time, improving tool life and reducing breakage - -
https://help.autodesk.com/view/fusion360/ENU/?guid=GUIDA73542E9-ED9C-4BD9-A87D-3A0ECA8BEB41 -
Optimal load: 0.25 x tool_diameter -
Depth of cut: Max 50% diameter of tool - - -

-
Critical parameters - -
Tool Tab - -
Feed per tooth - -
Indicates how much material is each revolution by each cutting edge when the machine is performing a normal cut, typical values range from (0.002 to 0.01") - - -
Plunge Feed per Revolution - -
Same as feed per tooth but specific to vertical cutting/drilling, end mills have different geometry than drill bits and are not as efficient cutting straight down into material. Typical values are ~50% of the feed per tooth value (0.001 to 0.005") - - - - -
Pasted image 20240627150629.png -
Passes Tab - -
Optimal Load - -
Indicates the maximum amount of tool engagement, as a rule of thumb this value should be approximately 25% of the tool diameter - -
For example, a good starting point for a 3/8" endmill is 0.09375" (0.375 * 0.25) - - -
This value can be increased or decrease when machining harder/softer materials (lower for hard materials, higher for soft materials) - - -
Maximum Roughing Stepdown - - -
Pasted image 20240627150658.png - - -

-
All generated tool paths should be simulated prior to post processing -
Individual or multiple tool paths can be simulated by selecting desired operations (or setup for all), then selecting "Simulate"
-Pasted image 20240325132025.png -
Use the play/pause buttons at the bottom of the screen to preview the operations. -
Watch for any errors/warnings in simulation timeline (indicated by vertical red lines) -
Do NOT post process any operation that has simulation errors, it could result in damage to equipment and/or stock. -
Hovering over errors will give a description of issue that must be addressed in the tool path settings.
-Pasted image 20240325131546.png -

-
Post processing creates the gcode file for a specific CNC -
For setups with multiple operations, can either generate a single file or multiple files -
If a single file is used with multiple bits, the Laguna automatic tool change (ATC) system will swap bits when each operation is complete. - -
As previously noted, for the ATC system to work properly and avoid damage to equipment/stock, setup origin must be located at the bottom of the stock and all bits must be zero'd to the spoilboard using the "Automatic Touch Off" buttom on the Laguna Control Screen. - - -
Consider using multiple individual files when
-- Individual operations are estimated to take a long time (estimated machining times are shown in the bottom right corner of the screen)
-- Manual tool changes are required
-- Parts need to be inspected after an operation before proceeding
-Pasted image 20240325133105.png -
The "Post Processing" screen allows the output files to be named (if not already configured via the Setup > Post Processing tab) and specifies an output directory for the gcode file (.PRG) -
Make sure the "Laguna CNC / laguna" post processor is selected, if not use the navigator to find it via Fusion's cloud library. -
The units should be set to "Document unit" to ensure tool paths are scaled correctly. -
Select "Post" to generate the gcode -
Copy the output file to a USB drive for use in the CNC Control System
-Pasted image 20240325134011.png -







-
Turn on air pressure using wall mounted valve -
Verify pressure on regulator is approximately 0.45 MPa -
Turn on power using the power switch on the control box -
Switch key to "ON" (clockwise) -
Press green power button -
Wait for system to boot -

-
Park any installed tooling (Home screen > Park) -
Press green power button -
Switch key to 'OFF' position (counter-clockwise) -
Turn on main power -
Turn off air -

-
-Insert USB device into the control panel - -
-Copy project file from USB - -
From the control screen - -
Setup > Program Manager -
Select "USB" tab on left -
Select desired file (.PRG extension) - -
Can sort by name, date, size - - -
With file selected, press "Copy" -
Select "Programs" tab on left -
Select "Paste" - - - - -
-Verify GCode
-- From control screen
-- Setup > Verify G-Code
-- If program not already select use drop down to select
-- Select "Load"
-- Select "Check Code"
-- Wait for check to complete, indicated by a blue check mark or a reported error
-- Checkmark does NOT stay on screen, must watch for it
-PXL_20240319_172848682.jpg - -
-Load a tool into the toolhead (if not already loaded) - -
Option 1 - Auto Touchoff (Recommended) - -
Setup > CNC Tool Data -
Select tool number from dropdown -
Select "Execute Automatic Touch On/Off" - - -
Option 2 - MDI Command (Advanced) - -
Setup > CNC Settings -
MDI Command - -
"M06 T<tool number>" e.g. M06 T2 // load tool #2 - - - - - - -
-Position the toolhead at the X,Y origin of the stock
-- Use the handheld remote to manually jog the toolhead
-- Press and hold the "Enable Switch" on the remote to allow motion
-- Will automatically open the "JOG" screen
-- Select movement axis using left dial (X,Y,Z,4)
-- Mill does not currently have a 4th axis
-- Select the movement multiplier using the right dial (1x,10x,100x)
-- Avoid using the 100x multiplier when moving the Z axis, it could result in bit breakage
-- With bit position over the X,Y origin of the stock, press "Teach ZPO"
-- The dust boot can be raised on the Laguna control screen to provide a clear view of bit during alignment
-- DO NOT PRESS "Teach Tool Length", tools should only be zero'd using the auto touch off system
-- Verify X,Y origin was set correctly
-- With "Zero Point Offset" selected from the drop down (not Machine Coordinates or Relative Coordinates), verify X Axis and Y Axis read <= 0.001 in
-PXL_20240319_173002852 1.jpg - -
-Run through the Laguna Pre-Cut Checklist - -
-From main screen press "Run" - -
-Pause Operation (Optional)
-- To pause operation, press "Hold" from main screen
-- Spindle remains on by default when paused
-- Spindle can be stopped (optional) via
-- Main > Settings
-- Set "Spindle Override" to 0%
-PXL_20240319_173301916.jpg - -
-Resume Operation (Optional) - -
If spindle was turned off, (0%), set "Spindle Override" to 100% - -
DO NOT resume cut operation with spindle at 0%, this could damage bits or the machine - - -
From "Main" tab, press "Run" - - -
-Emergency Stop (Optional, hopefully) - -
The emergency stop buttons on the Control Box or Remote can be pressed at any time to immediately stop all machining. -
Program stopped via E-Stop cannot be resumed (i.e. E-Stop is not a pause) - - -


-
Proper work holding is critically important, particularly for small pieces. It is very easy for a piece to come lose and come into contact with the mill bit, causing damage to the work piece and potentially damage the bit. -
There are many options for work holding including available and should be utilized on a per job basis. - -
Double sided tape -
Tabs (configurable in Fusion 360) - -
https://help.autodesk.com/view/fusion360/ENU/?guid=MFG-REF-2D-CONTOUR-TABS - - -
Clamps / Fixtures -
Screws / Staples -
Vacuum - - -
When utilizing work holding that could interfere with the mill bit, caution must be taken to ensure the clamps/fixtures will not collide with the tool head. -
Soft materials such as foam blocks can be used to mock up actual clamps for verification. - -
We won't actually be cutting material at this point, we will only "cut air". -
We will run the operations and observe whether any part of the tool head contacts the foam blocks. -
If the operation completes issue, we will install clamps in the EXACT space where the foam was located. - - -
PXL_20240320_165610904.jpg
-PXL_20240320_170425712.jpg

-
Many tool manufacturers provide feed & speed recommendations for their tools. These settings provide a good starting point and should be utilized when dialing in settings for new materials. It is important to note the RPM ratings on bits and not to exceed these values when setting up operations. -
Most of the tools used in the Laguna CNC are from Amana Tools. Amana has a Fusion 360 library of their bit offerings, including all the relevant numbers and measurements which describe the tools geometry (number of cutting flutes, length of flutes, bit diameter, etc). -

Pasted image 20240321105401.png
-
https://www.endmill.com.au/blog/choosing-the-right-end-mill-for-the-job/ // selecting bits, good read, recommended -
Amana Fusion 360 Tool Library - -
https://www.amanatool.com/view-amana-tool-fusion-360-library -
Amana-Tool-Fusion-Master.tools // available via Prototyping Studio team cloud - - -
Sample bit - -
https://www.amanatool.com/46420-solid-carbide-spiral-plunge-3-8-dia-x-1-1-4-x-3-8-shank-down-cut.html?ff=1&fp=8806 - - -
Sample feeds and speeds - -
Solid-Carbide-Spiral-Plunge-2-3-Flute-v26.pdf -
https://www.amanatool.com/pub/media/productattachments/Solid-Carbide-Spiral-Plunge-2-3-Flute-v26.pdf - - -

PXL_20240321_172025118.jpg
-
Choose collet corresponding to bit shank diameter - -
Collet size engraved on front face -
1/8", 1/4", 3/8", 1/2" imperial sizes available -
4mm, 6mm, 8mm metric sizes available - - -
Tighten bit in collet by hand (clockwise) - -
All cutting flutes should be below collet -
The bit shank should be inserted a minimum of 2/3 (100% ideal) of the collet length - -
For example, a 1.5" length collet requires at least 1" of bit shank inserted, however ideal insert length is 1.5" - - - - -
Finish tightening bit in collet using "ER 32" wrench & CNC tool mount bracket
-PXL_20240319_144259489.jpg
-PXL_20240319_171946523.jpg -
Press & hold green button on side of spindle -
PXL_20240319_172014827.jpg -
Position tool holder under spindle head -
Release green button -

-
On the CNC screen, update the "current tool" number to reflect which tool position the new bit will be physically located in -
Park tool -
Execute "Automatic Touchoff" -
Update Fusion cloud tool library to reflect new tool numbering -

-
It's often a good idea to "cut air" prior to cutting the actual material. This is accomplished by intentionally setting the material thickness in your Fusion360 setup to a value 2-3x larger than the actual material thickness. When the operation is run on the CNC, the bit should remain in the air rather than touching the material or spoilboard. By observing the "fake" cut (with the e-stop in hand), you visually verify the toolpaths are what you expect. This method can catch potential tool plunges or unit issue (mm vs inches). -
The Laguna control panel has a "axis limit" setting which could be helpful in single bit operations. This could be set to the tool offset length, ensuring the gcode can't move the bit below the top of the spoilboard. The "check gcode" tool will throw a warning if the operation attempts to go below this limit. - -
Note - for this to work, the tool must be loaded already as retrieving the bit from the tool holder requires more Z travel. - - -
Verify all tool lengths are approx. -10 inches, anything significantly less (0-3 inches) could indicate a bit has been previously zero'd on top of stock. -


-
Check the oil level on the back of the spindle head, top off as needed -
On Laguna control console, press the "Lubricant Pump" button -
Release the button after a few seconds -
After a few seconds, use the remote to manually jog the spindle through the full X,Y,Z range of motion to distribute the oil -
Repeat this operation for every 15 hours of use or after the machine has been sitting idle for an extended period of time -

-
Minimum spoil board thickness is 0.5" -
Be mindful of the position rods when leveling - -
Rods should be in the down position when cutting -
Cutting depth should be at least 1/8" above position rods in stowed position - - -
In Fusion 360 - -
Create extruded rectangle corresponding to spoil board size - -
Alternatively use pre-made project https://a360.co/4aps348 - - -
Use 'Flycut Template' -
Make sure the stock thickness in setup is identical to model thickness - -
Model should not be centered within larger stock (e.g. 0.6" model in 1" stock) - - -
Make sure origin is located at bottom of model - - -
On Laguna Control Screen - -
Setup > CNC Positions -
Set 'Z-Spoil' to 0.0 - - -
Set X,Y zero point on corner of stock -
Run program, should remove less than 1/8" of material -
Run the program -
After cut finishes, set 'Z-Spoil' to the stock thickness specified in Fusion - -
VERY IMPORTANT, DO NOT SKIP - - -


Laguna Pre-Cut Checklist

CNC Project Showcase]]>
public\cnc\laguna-cnc-operation-instructions.htmlPublic/CNC/Laguna CNC Operation Instructions.mdThu, 27 Jun 2024 19:07:36 GMT<figure><img src="lib\media\pasted-image-20240425125434.png"></figure>
<![CDATA[Laguna Pre-Cut Checklist]]>
-
Origin located at BOTTOM of stock -
Tool numbers up to date w/ installed bits -
Contour cuts on correct side of cutting line (inside, outside) -
Feed per tooth < 0.01 // in general, soft materials such as foam can exceed this threshold -
Optimal Load <= Tool Diameter x 0.25 // 2D & 3D adaptive tool paths -
Simulation free of errors & warnings -
Laguna specific post processor used (output file has .PRG extension) -
Post processor uses "DOCUMENT UNITS" setting -

-
X/Y zero point established -
All bits zero'd via auto touchoff -
Gcode verified -
CNC bed clear except stock -
At least one other staff member in Proto Studio (in case of emergency) -
Door to fabrication room closed -
Everyone has appropriate PPE (glasses, headphones, mask) -
Everyone located at a safe distance from CNC -
Vacuum pump on -
Stock secure to bed via vacuum pressure, double sided tape, tabs or fixture -
Position rods lowered -
Dust collection on -
CNC operator within reach of an e-stop -]]>
public\cnc\laguna-pre-cut-checklist.htmlPublic/CNC/Laguna Pre-Cut Checklist.mdFri, 14 Jun 2024 13:53:20 GMT
<![CDATA[Prototyping Studio Demo Board]]> PXL_20240822_144006532.png

https://github.com/Prototyping-Studio/demoBoardPublic/

https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/busyboard.h
-https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/publishedVar.h


PXL_20240822_153808649 (1).jpg

https://www.adafruit.com/product/5752 // I2C rotary interface
-https://www.adafruit.com/product/5538 // knobs
-https://www.digikey.com/en/products/detail/bourns-inc/PEC11R-4215F-S0024/4499665 // encoder

Pasted image 20240820151656.png
-https://cdn-learn.adafruit.com/assets/assets/000/122/296/original/adafruit_products_metroStemma_bb.jpg

https://learn.adafruit.com/adafruit-i2c-quad-rotary-encoder-breakout?view=all

https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/encoder_demo/encoder_demo.ino

Pasted image 20240822114638.png

https://www.adafruit.com/product/1788 // MP3 shield w/ SD card reader

https://learn.adafruit.com/adafruit-music-maker-shield-vs1053-mp3-wav-wave-ogg-vorbis-player?view=all

Adafruit VS1053 Library by Adafruit
-https://github.com/adafruit/Adafruit_VS1053_Library

https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/music_demo/music_demo.ino

PXL_20240822_160133655.png

Arcade Button Breakout https://www.adafruit.com/product/5296
-Arcade Button https://www.adafruit.com/product/3430
-Arduino "Metro Mini" https://www.adafruit.com/product/2590
Pasted image 20240725092643.png

https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/arcade_button_demo/arcade_button_demo.ino
-https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/arcade_button_demo/ButtonLED.h

PXL_20240822_154147049.png

LCD Display https://www.adafruit.com/product/181
-LCD Backpack https://www.adafruit.com/product/292
-Arduino "Metro Mini" https://www.adafruit.com/product/2590

https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/lcd_demo/lcd_demo.ino

PXL_20240716_214940816.jpg

SGP30 Air Quality Sensor https://www.adafruit.com/product/3709
-Arduino "Metro Mini" https://www.adafruit.com/product/2590

https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/air_quality_demo/air_quality_demo.ino

PXL_20240715_201005331.jpg

https://www.adafruit.com/product/3444
-Pasted image 20240711092417.png
-https://learn.adafruit.com/assets/63279

https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/matrix_demo/matrix_demo.ino

PXL_20240711_130039653.jpg

IR Sensor https://www.adafruit.com/product/164
-Arduino "Metro" https://www.adafruit.com/product/2488

https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/ir_demo/ir_demo.ino

PXL_20240822_155323516.jpg

https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/servo_demo/servo_demo.ino)

https://www.thingiverse.com/thing:3170748

Pasted image 20240814122014.png

PXL_20240822_154500545.jpg

Sample Code

https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor?view=all



https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/led_demo/led_demo.ino)


Sample Code

https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino?view=all


https://github.com/Prototyping-Studio/demoBoardPublic/blob/master/potentiometer_demo/potentiometer_demo.ino

Adding Board Libraries to Arduino IDE
-https://learn.adafruit.com/adafruit-metro-mini/arduino-ide-usage]]>
public\demoboard\prototyping-studio-demo-board.htmlPublic/DemoBoard/Prototyping Studio Demo Board.mdThu, 22 Aug 2024 16:54:56 GMT<figure><img src="lib\media\pxl_20240822_144006532.png"></figure>
<![CDATA[Prototyping Studio Maintenance Resources]]>
Pasted image 20240819091655.png
-https://www.simplify3d.com/resources/print-quality-troubleshooting/

Pasted image 20240819101345.png
-Anatory of a Hotend

Pasted image 20240819095720.png

https://help.prusa3d.com/tag/mk3s

https://help.prusa3d.com/article/cold-pull-mk3s-mk2-5s_2075

Pasted image 20240819094609.png
-https://help.prusa3d.com/article/first-layer-calibration-i3_112364

Pasted image 20240819094736.png
-https://help.prusa3d.com/article/changing-or-replacing-the-nozzle-mk2-5s-mk3s-mk3s-mk3-5_2069


Pasted image 20240819092845.png
-fan-shroud.stl

Pasted image 20240819092712.png
-Cube_Prusa_v1.stl

Pasted image 20240819095610.png

https://docs.vorondesign.com/tuning/secondary_printer_tuning.html#belt-tension


Pasted image 20240819093718.png
-Voron_Test_Grid_v2.stl

Pasted image 20240819093604.png
-Calibration Cube

-
Requires Github account & invite to Prototyping Studio team -
Contains slicer profiles & klipper config files
-https://github.com/Prototyping-Studio/3dPrinters/tree/main -]]>
public\maintenance\prototyping-studio-maintenance-resources.htmlPublic/Maintenance/Prototyping Studio Maintenance Resources.mdFri, 06 Sep 2024 20:57:54 GMT<figure><img src="lib\media\pasted-image-20240819091655.png"></figure>
<![CDATA[Index]]>
Prototyping Studio Maintenance Resources

Laguna CNC Operation Instructions
-Laguna Pre-Cut Checklist
-CNC Project Showcase

Prototyping Studio Demo Board]]>
public\index.htmlPublic/Index.mdMon, 19 Aug 2024 14:02:27 GMT
\ No newline at end of file diff --git a/lib/scripts/webpage.js b/lib/scripts/webpage.js deleted file mode 100644 index daf949e..0000000 --- a/lib/scripts/webpage.js +++ /dev/null @@ -1 +0,0 @@ -let absoluteBasePath,relativeBasePath,relativePathname,webpageContainer,documentContainer,viewContent,leftSidebar,rightSidebar,sidebarCollapseIcons,sidebarGutters,sidebars,sidebarDefaultWidth,sidebarTargetWidth,contentTargetWidth,themeToggle,searchInput,fileTree,outlineTree,fileTreeItems,outlineTreeItems,canvasWrapper,canvas,canvasNodes,canvasBackground,canvasBackgroundPattern,focusedCanvasNode,loadingIcon,documentType,embedType,customType,deviceSize,lastScreenWidth,loadedURL=new URL(window.location.href),isOffline=!1,collapseIconUp=["m7 15 5 5 5-5","m7 9 5-5 5 5"],collapseIconDown=["m7 20 5-5 5 5","m7 4 5 5 5-5"],isTouchDevice=isTouchCapable(),fullyInitialized=!1;async function initGlobalObjects(){"file:"!=window.location.protocol&&await loadIncludes(),loadingIcon=document.createElement("div"),loadingIcon.classList.add("loading-icon"),document.body.appendChild(loadingIcon),loadingIcon.innerHTML="
",webpageContainer=document.querySelector(".webpage-container"),documentContainer=document.querySelector(".document-container"),leftSidebar=document.querySelector(".sidebar-left"),rightSidebar=document.querySelector(".sidebar-right"),fileTree=document.querySelector(".file-tree"),outlineTree=document.querySelector(".outline-tree"),fileTreeItems=Array.from(document.querySelectorAll(".tree-container.file-tree .tree-item")),sidebars=[],sidebarGutters=[],sidebarCollapseIcons=[],leftSidebar&&rightSidebar&&(sidebarCollapseIcons=Array.from(document.querySelectorAll(".sidebar-collapse-icon")),sidebarGutters=[sidebarCollapseIcons[0].parentElement,sidebarCollapseIcons[1].parentElement],sidebars=[sidebarGutters[0].parentElement,sidebarGutters[1].parentElement]),themeToggle=document.querySelector(".theme-toggle-input")}async function initializePage(){focusedCanvasNode=null,canvasWrapper=document.querySelector(".canvas-wrapper")??canvasWrapper,canvas=document.querySelector(".canvas")??canvas;let e=document.querySelectorAll(".canvas-node");canvasNodes=e.length>0?e:canvasNodes,canvasBackground=document.querySelector(".canvas-background")??canvasBackground,canvasBackgroundPattern=document.querySelector(".canvas-background pattern")??canvasBackgroundPattern,viewContent=document.querySelector(".document-container > .view-content")??document.querySelector(".document-container > .markdown-preview-view")??viewContent,outlineTreeItems=Array.from(document.querySelectorAll(".tree-container.outline-tree .tree-item")),fullyInitialized||("file:"==window.location.protocol&&initializeForFileProtocol(),await initGlobalObjects(),initializeDocumentTypes(document),setupSidebars(),setupThemeToggle(),await setupSearch(),setupRootPath(document),sidebarDefaultWidth=await getComputedPixelValue("--sidebar-width"),contentTargetWidth=.9*await getComputedPixelValue("--line-width"),window.addEventListener("resize",(()=>onResize())),onResize()),setTimeout((()=>documentContainer.classList.remove("hide"))),!rightSidebar||"video"!=embedType&&"embed"!=embedType&&"excalidraw"!=customType&&"kanban"!=customType&&"canvas"!=documentType?rightSidebar&&rightSidebar.temporarilyCollapsed&&rightSidebar.collapsed&&(rightSidebar.collapse(!1),rightSidebar.temporarilyCollapsed=!1):rightSidebar.collapsed||rightSidebar.temporaryCollapse(),parseURLParams(),relativePathname=getVaultRelativePath(loadedURL.href)}function initializePageEvents(e){e&&(setupHeaders(e),setupTrees(e),setupLists(e),setupCallouts(e),setupCheckboxes(e),setupCanvas(e),setupCodeblocks(e),setupLinks(e),setupScroll(e))}function initializeDocumentTypes(e){e.querySelector(".document-container > .markdown-preview-view")?documentType="markdown":e.querySelector(".canvas-wrapper")?documentType="canvas":(documentType="custom",e.querySelector(".kanban-plugin")?customType="kanban":e.querySelector(".excalidraw-plugin")&&(customType="excalidraw"))}function initializeForFileProtocol(){let e=document.querySelector(".graph-view-placeholder");e&&(console.log("Running locally, skipping graph view initialization and hiding graph."),e.style.display="none",e.previousElementSibling.style.display="none")}function onEndResize(){document.body.classList.toggle("resizing",!1)}function onStartResize(){document.body.classList.toggle("resizing",!0)}window.onload=async function(){await initializePage(),initializePageEvents(document),setActiveDocument(loadedURL,!0,!1,!1),fullyInitialized=!0},window.onpopstate=function(e){if(e.preventDefault(),e.stopPropagation(),document.body.classList.contains("floating-sidebars")&&(!leftSidebar.collapsed||!rightSidebar.collapsed))return leftSidebar.collapse(!0),void rightSidebar.collapse(!0);loadDocument(getURLPath(),!1,!0),console.log("Popped state: "+getURLPath())};let checkStillResizingTimeout,isResizing=!1;function onResize(e=!1){function t(e,t){let o=window.innerWidth;return o>e&&oe&&o=t)}function o(e){let t=window.innerWidth;return t>e&&null==lastScreenWidth||t>e&&lastScreenWidthe}isResizing||(onStartResize(),isResizing=!0),o(contentTargetWidth+2*sidebarDefaultWidth)||o(1025)?(deviceSize="large-screen",document.body.classList.toggle("floating-sidebars",!1),document.body.classList.toggle("is-large-screen",!0),document.body.classList.toggle("is-small-screen",!1),document.body.classList.toggle("is-tablet",!1),document.body.classList.toggle("is-phone",!1),sidebars.forEach((function(e){e.collapse(!1)})),sidebarGutters.forEach((function(e){e.collapse(!1)}))):t(1*(contentTargetWidth+sidebarDefaultWidth),contentTargetWidth+2*sidebarDefaultWidth)||t(769,1024)?(deviceSize="small screen",document.body.classList.toggle("floating-sidebars",!1),document.body.classList.toggle("is-large-screen",!1),document.body.classList.toggle("is-small-screen",!0),document.body.classList.toggle("is-tablet",!1),document.body.classList.toggle("is-phone",!1),sidebarGutters.forEach((function(e){e.collapse(!1)})),leftSidebar&&rightSidebar&&!leftSidebar.collapsed&&rightSidebar.collapse(!0)):t(2*sidebarDefaultWidth,1*(contentTargetWidth+sidebarDefaultWidth))||t(481,768)?(deviceSize="tablet",document.body.classList.toggle("floating-sidebars",!0),document.body.classList.toggle("is-large-screen",!1),document.body.classList.toggle("is-small-screen",!1),document.body.classList.toggle("is-tablet",!0),document.body.classList.toggle("is-phone",!1),sidebarGutters.forEach((function(e){e.collapse(!1)})),leftSidebar&&rightSidebar&&!leftSidebar.collapsed&&rightSidebar.collapse(!0),leftSidebar&&!fullyInitialized&&leftSidebar.collapse(!0)):(n(2*sidebarDefaultWidth)||n(480))&&(deviceSize="phone",document.body.classList.toggle("floating-sidebars",!0),document.body.classList.toggle("is-large-screen",!1),document.body.classList.toggle("is-small-screen",!1),document.body.classList.toggle("is-tablet",!1),document.body.classList.toggle("is-phone",!0),sidebars.forEach((function(e){e.collapse(!0)})),sidebarGutters.forEach((function(e){e.collapse(!1)}))),lastScreenWidth=window.innerWidth,null!=checkStillResizingTimeout&&clearTimeout(checkStillResizingTimeout);let i=window.innerWidth;checkStillResizingTimeout=setTimeout((function(){window.innerWidth==i&&(checkStillResizingTimeout=void 0,isResizing=!1,onEndResize())}),200)}function clamp(e,t,o){return Math.min(Math.max(e,t),o)}async function delay(e){return new Promise((t=>setTimeout(t,e)))}async function waitUntil(e,t=100,o=2e3){return new Promise((n=>{let i=0,a=setTimeout((()=>{clearInterval(i),n()}),o);i=setInterval((()=>{e()&&(clearInterval(i),clearTimeout(a),n())}),t)}))}function getElBounds(e){let t=e.getBoundingClientRect(),o=t.x,n=t.y,i=t.width,a=t.height;return{x:o,y:n,width:i,height:a,minX:o,minY:n,maxX:o+i,maxY:n+a,centerX:t.x+t.width/2,centerY:t.y+t.height/2}}async function getComputedPixelValue(e){const t=document.createElement("div");document.body.appendChild(t),t.style.position="absolute",t.style.width=`var(${e})`,await new Promise((e=>setTimeout(e,10)));const o=window.getComputedStyle(t).width;return t.remove(),parseFloat(o)}function getPointerPosition(e){let t=e.touches?Array.from(e.touches):[];return{x:t.length>0?t.reduce(((e,t)=>e+t.clientX),0)/e.touches.length:e.clientX,y:t.length>0?t.reduce(((e,t)=>e+t.clientY),0)/e.touches.length:e.clientY}}function getTouchPosition(e){return{x:e.clientX,y:e.clientY}}function getAllChildrenRecursive(e){let t=[];for(let o=0;o0||navigator.msMaxTouchPoints>0}function downloadBlob(e,t="file.txt"){if(window.navigator&&window.navigator.msSaveOrOpenBlob)return window.navigator.msSaveOrOpenBlob(e);const o=window.URL.createObjectURL(e),n=document.createElement("a");n.href=o,n.download=t,n.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})),setTimeout((()=>{window.URL.revokeObjectURL(o),n.remove()}),100)}function extentionToTag(e){return["png","jpg","jpeg","svg","gif","bmp","ico"].includes(e)?"img":["mp4","mov","avi","webm","mpeg"].includes(e)?"video":["mp3","wav","ogg","aac"].includes(e)?"audio":["pdf"].includes(e)?"embed":void 0}let slideUp=(e,t=500)=>{e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.boxSizing="border-box",e.style.height=e.offsetHeight+"px",e.offsetHeight,e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,window.setTimeout((async()=>{e.style.display="none",e.style.removeProperty("height"),e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")}),t)},slideUpAll=(e,t=500)=>{e.forEach((async e=>{e&&(e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.boxSizing="border-box",e.style.height=e.offsetHeight+"px",e.offsetHeight,e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0)})),window.setTimeout((async()=>{e.forEach((async e=>{e&&(e.style.display="none",e.style.removeProperty("height"),e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property"))}))}),t)},slideDown=(e,t=500)=>{e.style.removeProperty("display");let o=window.getComputedStyle(e).display;"none"===o&&(o="block"),e.style.display=o;let n=e.offsetHeight;e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,e.offsetHeight,e.style.boxSizing="border-box",e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.height=n+"px",e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),window.setTimeout((async()=>{e.style.removeProperty("height"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")}),t)},slideDownAll=(e,t=500)=>{e.forEach((async e=>{if(!e)return;e.style.removeProperty("display");let o=window.getComputedStyle(e).display;"none"===o&&(o="block"),e.style.display=o;let n=e.offsetHeight;e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,e.offsetHeight,e.style.boxSizing="border-box",e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.height=n+"px",e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom")})),window.setTimeout((async()=>{e.forEach((async e=>{e&&(e.style.removeProperty("height"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property"))}))}),t)};var slideToggle=(e,t=500)=>"none"===window.getComputedStyle(e).display?slideDown(e,t):slideUp(e,t),slideToggleAll=(e,t=500)=>"none"===window.getComputedStyle(e[0]).display?slideDownAll(e,t):slideUpAll(e,t);function getURLExtention(e){return e.split(".").pop().split("?")[0].split("#")[0].toLowerCase().trim()}let transferDocument=document.implementation.createHTMLDocument(),loading=!1;async function loadDocument(e,t,o){if(e=decodeURI(e),loading)return void console.log("Already loading document.");loading=!0;let n=new URL(e,absoluteBasePath);if(relativePathname=getVaultRelativePath(n.href),console.log("Loading document: ",n.pathname),n.pathname==loadedURL?.pathname)return console.log("Document already loaded."),loadedURL=n,setActiveDocument(loadedURL,!1,!1),await initializePage(),void(loading=!1);loadedURL=n;let i,a=loadedURL.pathname;await showLoading(!0);try{i=await fetch(a)}catch(e){return window.location.assign(a),void(loading=!1)}if(i.ok){setActiveDocument(loadedURL,o,t);let n=getURLExtention(e);if("/"==n&&(n="html"),documentType="none",embedType="none",customType="none","html"==n){let e=(await i.text()).replaceAll("","").replaceAll("","").replaceAll("","");transferDocument.write(e),setupRootPath(transferDocument),initializeDocumentTypes(transferDocument);let t=transferDocument.querySelector(".document-container");documentContainer.innerHTML=t.innerHTML;let o=transferDocument.querySelector(".outline-tree");outlineTree&&o&&(outlineTree.innerHTML=o.innerHTML),document.title=transferDocument.title,transferDocument.close()}else if(documentType="embed",embedType=extentionToTag(n),null!=embedType){let t=document.createElement(embedType);t.controls=!0,t.src=e,t.style.maxWidth="100%","embed"==embedType&&(t.style.width="100%",t.style.height="100%"),t.style.objectFit="contain",viewContent.innerHTML="",viewContent.setAttribute("class","view-content embed"),viewContent.appendChild(t),document.querySelector(".outline-tree")&&(document.querySelector(".outline-tree").innerHTML=""),document.title=e.split("/").pop()}else{downloadBlob(await i.blob(),e.split("/").pop())}await initializePage(),initializePageEvents(documentContainer),initializePageEvents(outlineTree)}else pageNotFound(viewContent);await showLoading(!1),loading=!1}function setActiveDocument(e,t,o,n=!0){let i=getVaultRelativePath(e.href),a=decodeURI(i).split("#")[0].split("?")[0].replace('"','\\"').replace("'","\\'");"/"!=a&&""!=a||(a="index.html");let l=document.querySelector(".file-tree .tree-item.mod-active"),s=document.querySelector(`.file-tree .tree-item:has(>.tree-link[href^="${a}"])`);if(s&&!s.isEqualNode(l)&&(l?.classList.remove("mod-active"),s.classList.add("mod-active"),t&&scrollIntoView(s,{block:"center",inline:"nearest"},n)),"undefined"!=typeof graphData&&window.graphRenderer){let e=graphData?.paths.findIndex((function(e){return e.endsWith(a)}))??-1;e>=0&&(window.graphRenderer.activeNode=e)}console.log("Active document: "+o),o&&"file:"!=window.location.protocol&&(window.history.pushState({path:i},"",i),console.log("Pushed state: "+i))}function parseURLParams(){const e=loadedURL.searchParams.get("mark"),t=loadedURL.searchParams.get("query"),o=decodeURI(loadedURL.hash);if(e&&searchCurrentDocument(e),t&&search(t),o){const e=document.getElementById(o.substring(1));e?scrollIntoView(e,{behavior:"smooth",block:"start"}):console.log("Heading not found: "+o)}}async function showLoading(e){if(documentContainer.style.transitionDuration="",loadingIcon.classList.toggle("show",e),documentContainer.classList.toggle("hide",e),e){let e=getViewBounds();loadingIcon.style.left=e.centerX-loadingIcon.offsetWidth/2+"px",loadingIcon.style.top=e.centerY-loadingIcon.offsetHeight/2+"px","phone"==deviceSize&&leftSidebar.collapse(!0)}await delay(200)}function pageNotFound(e){e.innerHTML="\n\t
\n\t\t
\n\t\t\t

Page Not Found

\n\t\t
\n\t
\n\t",document.querySelector(".outline-tree")&&(document.querySelector(".outline-tree").innerHTML=""),console.log("Page not found: "+absoluteBasePath+loadedURL.pathname);let t=getURLRootPath(absoluteBasePath+loadedURL.pathname);relativeBasePath=t,document.querySelector("base").href=t,document.title="Page Not Found"}function setupRootPath(e){let t=e.getElementById("root-path");if(!t)return;let o=t.getAttribute("root-path"),n=document.createElement("base");n.href=o,console.log("Setting root path: "+o),document.querySelector("base").replaceWith(n),document.querySelector("#root-path").setAttribute("root-path",o),relativeBasePath=o,absoluteBasePath=new URL(o,window.location.href).href}function getURLPath(e=window.location.pathname){return null==absoluteBasePath&&setupRootPath(document),e.replace(absoluteBasePath,"")}function getURLRootPath(e=window.location.pathname){let t=getURLPath(e).split("/"),o="";for(let e=0;ee+t.offsetHeight),0);e.markdownPreviewSizer.style.minHeight=t+"px"}}if(i.style.height=a+"px",t||"canvas"!=documentType||e.show(!0),e.collapsed=t,n)return i.style.transitionDuration="0s",e.classList.toggle("is-collapsed",t),i.style.height="",i.style.transitionDuration="",void l();let s=getComputedStyle(i).transitionDuration;s=s.endsWith("s")?parseFloat(s):s.endsWith("ms")?parseFloat(s)/1e3:0;let r=Math.min(s*Math.sqrt(a)/16,.5);i.style.transitionDuration=`${r}s`,i.style.height=t?"0px":a+"px",e.classList.toggle("is-animating",!0),e.classList.toggle("is-collapsed",t),e.markdownPreviewSizer.closest(".markdown-embed")&&l(t?0:void 0),setTimeout((function(){i.style.transitionDuration="",t||(i.style.height=""),e.classList.toggle("is-animating",!1),l()}),1e3*r)}function toggleTreeHeaderOpen(e,t=!0){e.collapse(!e.collapsed,t)}function hideHeader(e){if(e.forceShown)return;if(e.classList.contains("is-hidden")||e.classList.contains("is-collapsed"))return;if("none"==getComputedStyle(e).display)return;let t=e.offsetHeight;e.classList.toggle("is-hidden",!0),0!=t&&(e.style.height=t+"px"),e.style.visibility="hidden"}function showHeader(e,t=!0,o=!1,n=!1){if(n&&(e.forceShown=!0),t){let t=e.parentHeader;isHeadingWrapper(t)&&t.show(!0,!1,n)}if(o){e.querySelectorAll(".heading-wrapper").forEach((function(e){e.show(!1,!0,n)}))}e.classList.contains("is-hidden")&&!e.classList.contains("is-collapsed")&&(e.classList.toggle("is-hidden",!1),e.style.height="",e.style.visibility="")}function setupTrees(e){e.querySelectorAll(".collapse-tree-button").forEach((function(e){e.treeRoot=e.closest(".tree-container"),e.icon=e.firstChild,e.icon.innerHTML="",e.setIcon=function(t){e.icon.children[0].setAttribute("d",t?collapseIconUp[0]:collapseIconDown[0]),e.icon.children[1].setAttribute("d",t?collapseIconUp[1]:collapseIconDown[1])},e.collapse=function(t){setTreeCollapsedAll(e.treeRoot.classList.contains("file-tree")?fileTreeItems:outlineTreeItems,t),e.setIcon(t),e.collapsed=t},e.toggleCollapse=function(){e.collapse(!e.collapsed)},e.toggleState=function(t){void 0===t&&(t=!e.collapsed),e.collapsed=t,e.setIcon(t)},e.addEventListener("click",(function(t){return t.preventDefault(),t.stopPropagation(),e.toggleCollapse(),!1})),(e.treeRoot.classList.contains("file-tree")?fileTreeItems:outlineTreeItems).some((e=>!e.classList.contains("is-collapsed")&&e.classList.contains("mod-collapsible")))&&e.toggleState(!1)}));let t=Array.from(e.querySelectorAll(".tree-container.file-tree .tree-item:has(.collapse-icon) > .tree-link")),o=Array.from(e.querySelectorAll(".tree-container.outline-tree .tree-item:has(.collapse-icon) > .tree-link .collapse-icon")),n=Array.from(t).concat(Array.from(o));for(let e of n){let t=e?.closest(".tree-item");t&&e&&e?.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation(),toggleTreeCollapsed(t)}))}}async function setTreeCollapsed(e,t,o=!0,n=!0){if(e.classList.contains("mod-collapsible")||(e=e.closest(".mod-collapsible")),!e||!e.classList.contains("mod-collapsible"))return;if(e.classList.contains("is-collapsed")==t)return;if(n){let t=e.parentElement.closest(".mod-collapsible");t&&await setTreeCollapsed(t,!1,o,n)}let i=e.querySelector(".tree-item-children");if(t)e.classList.add("is-collapsed"),o?slideUp(i,100):i.style.display="none";else{e.classList.remove("is-collapsed"),o?slideDown(i,100):i.style.display="";let t=e.closest(".tree-container");if(t){let e=t.querySelector(".collapse-tree-button");e&&e.toggleState(!1)}}}async function setTreeCollapsedAll(e,t,o=!0){let n=[];e.forEach((async e=>{if(!e||!e.classList.contains("mod-collapsible"))return;let o=e.querySelector(".tree-item-children");t?e.classList.add("is-collapsed"):e.classList.remove("is-collapsed"),n.push(o)})),t?o?slideUpAll(n,100):n.forEach((async e=>{e&&(e.style.display="none")})):o?slideDownAll(n,100):n.forEach((async e=>{e&&(e.style.display="")}))}function toggleTreeCollapsed(e){(e=e.closest(".tree-item"))&&setTreeCollapsed(e,!e.classList.contains("is-collapsed"))}function toggleTreeCollapsedAll(e){e&&setTreeCollapsedAll(e,!e[0].classList.contains("is-collapsed"))}function getFileTreeItemFromPath(e){return document.querySelector(`.file-tree .tree-item:has(> .tree-link[href^="${e}"])`)}async function filterFileTree(e,t,o,n=!0){n&&await setTreeCollapsedAll(fileTreeItems,!1,!1);let i=Array.from(document.querySelectorAll(".file-tree .tree-item:not(.filtered-out)"));for await(let l of i)l.classList.add("filtered-out");await removeTreeHintLabels();for(let s=0;s0){let p=d.querySelector(".tree-link").appendChild(document.createElement("div"));function a(e,t){if(""==(e=e.trim()))return;let o=document.createElement("a");o.classList.add("tree-hint-label"),o.classList.add("internal-link"),o.textContent=e,o.href=decodeURI(t).replaceAll(" ","_"),p.appendChild(o)}p.classList.add("tree-hint-container");for(let h of c)a(h,r+"#"+h);setupLinks(p)}}}}async function clearFileTreeFilter(e=!0){await removeTreeHintLabels();let t=document.querySelectorAll(".file-tree .filtered-out");for await(let e of t)e.classList.remove("filtered-out");let o=document.querySelectorAll(".file-tree .tree-link[href*='?mark=']");for await(let e of o){let t=e.href.split("?")[0];t=getVaultRelativePath(t),e.href=t}e&&await setTreeCollapsedAll(fileTreeItems,!0,!1)}async function removeTreeHintLabels(){let e=document.querySelectorAll(".tree-hint-container");for await(let t of e)t.remove()}function sortFileTreeDocuments(e){let t=Array.from(document.querySelectorAll(".file-tree .tree-item.mod-tree-file:not(.filtered-out)"));t.sort(e);for(let e=1;e=0;i--){let e=o[i];if(t.parentElement==e.parentElement){e.after(t),n=!0;break}}n||t.parentElement.prepend(t)}}function sortFileTree(e){let t=Array.from(document.querySelectorAll(".file-tree .tree-item.mod-tree-file:not(.filtered-out)"));t.sort(e);for(let e=1;e=0;i--){let e=o[i];if(t.parentElement==e.parentElement){e.after(t),n=!0;break}}n||t.parentElement.prepend(t)}}function sortFileTreeAlphabetically(e=!1){sortFileTree((function(t,o){const n=t.querySelector(".tree-item-title"),i=o.querySelector(".tree-item-title");if(!n||!i)return 0;const a=n.textContent.toLowerCase(),l=i.textContent.toLowerCase();return a.localeCompare(l,void 0,{numeric:!0})*(e?-1:1)}))}function setupLists(e){let t=Array.from(e.querySelectorAll(".list-collapse-indicator"));for(let e=0;e1)&&(1==e.button||0==e.button||t.length>0)){let n=getPointerPosition(e),i=!1,a=0,l=t.length,s=function(t){let s=t.touches??[],r=getPointerPosition(t);l!=s.length&&(n=r,l=s.length);let c=r.x-n.x,d=r.y-n.y;if((1==e.button||1==s.length)&&focusedCanvasNode){let e=Math.abs(c)>Math.abs(1.5*d),t=Math.abs(d)>Math.abs(1.5*c),n=focusedCanvasNode.querySelector(".markdown-preview-sizer");if(n){let i=n.scrollHeight>n.parentElement.clientHeight+1,a=n.scrollWidth>n.parentElement.clientWidth+1;o=!(!(e&&a||t&&i)||!(window?.navigator?.platform?.startsWith("Win")??1))}}if(0==e.button&&focusedCanvasNode&&""!=focusedCanvasNode.querySelector(".canvas-node-content").textContent.trim()&&(o=!0),o||(translateCanvas(c,d),n=r),2==s.length){let e=getPointerPosition(t,!1),o=getTouchPosition(t.touches[0]),n=getTouchPosition(t.touches[1]),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2));i||(i=!0,a=l),scaleCanvasAroundPoint(1+(l-a)/a,e.x,e.y),a=l}},r=function(e){document.body.removeEventListener("mousemove",s),document.body.removeEventListener("mouseup",r),document.body.removeEventListener("mouseenter",c),document.body.removeEventListener("touchmove",s),document.body.removeEventListener("touchend",r),document.body.removeEventListener("touchcancel",r),o=!1},c=function(e){1!=e.buttons&&4!=e.buttons&&r(e)};document.body.addEventListener("mousemove",s),document.body.addEventListener("mouseup",r),document.body.addEventListener("mouseenter",c),document.body.addEventListener("touchmove",s),document.body.addEventListener("touchend",r),document.body.addEventListener("touchcancel",r)}}let i=0,a=0;canvasWrapper.addEventListener("mousemove",(function(e){let t=getPointerPosition(e);i=t.x,a=t.y}));let l=1,s=0,r=!1;canvasWrapper.addEventListener("wheel",(function(e){if(focusedCanvasNode){let e=focusedCanvasNode.querySelector(".markdown-preview-sizer");if(e&&e.scrollHeight>e.parentElement.clientHeight)return}if(e.preventDefault(),e.stopPropagation(),r){let t=1;t-=e.deltaY/700*t,t=clamp(t,.1,10);let o=getViewBounds();scaleCanvasAroundPoint(t,o.centerX,o.centerY)}else{let t=0==s;s-=e.deltaY/200;const o=.14*l;s=clamp(s,-o,o),t&&requestAnimationFrame(m)}}));let c=0,d=0,u=0;function m(e){if(c=e-d,0==d&&(c=30),d=e,u=.05*c+.95*u,u>50)return console.log("Scrolling too slow, turning on instant scroll"),void(r=!0);let t=l;l+=s*(c/1e3)*30,l=clamp(l,.1,10);getViewBounds();scaleCanvasAroundPoint(l/t,i,a),s*=.4,Math.abs(s)<.01?(s=0,d=0):requestAnimationFrame(m)}setTimeout(fitViewToCanvas,300)}function getViewBounds(){let e=viewContent.getBoundingClientRect(),t=e.x,o=e.y,n=e.x+e.width,i=e.y+e.height;return{x:t,y:o,width:n-t,height:i-o,minX:t,minY:o,maxX:n,maxY:i,centerX:e.x+e.width/2,centerY:e.y+e.height/2}}function getNodesBounds(){let e=1/0,t=1/0,o=-1/0,n=-1/0;canvasNodes.forEach((function(i){let a=i.getBoundingClientRect();a.xo&&(o=a.x+a.width),a.y+a.height>n&&(n=a.y+a.height)}));let i=o-e,a=n-t;return{x:e,y:t,width:i,height:a,minX:e,minY:t,maxX:o,maxY:n,centerX:e+i/2,centerY:t+a/2}}function getCanvasBounds(){let e=canvas.getBoundingClientRect(),t=e.x,o=e.y,n=e.width,i=e.height;return{x:t,y:o,width:n,height:i,minX:t,minY:o,maxX:t+n,maxY:o+i,centerX:e.x+e.width/2,centerY:e.y+e.height/2}}function scaleCanvasAroundPoint(e,t,o){let n=getCanvasBounds(),i=t-n.x,a=o-n.y,l=t-(n.x+i*e),s=o-(n.y+a*e);return scaleCanvas(e),translateCanvas(l,s),{x:l,y:s}}function scaleCanvas(e){let t=Math.max(e*canvas.style.scale,.001);canvas.style.scale=t,canvasWrapper.style.setProperty("--zoom-multiplier",1/Math.sqrt(t))}function translateCanvas(e,t){let o=canvas.style.translate,n=o.split(" "),i=n.length>0?parseFloat(o.split(" ")[0].trim()):0,a=n.length>1?parseFloat(o.split(" ")[1].trim()):i;canvas.style.translate=`${i+e}px ${a+t}px`}function setViewCenter(e,t){let o=getViewBounds();translateCanvas(o.centerX-e,o.centerY-t)}function getCanvasTranslation(){let e=canvas.style.translate,t=e.split(" "),o=t.length>0?parseFloat(e.split(" ")[0].trim()):0;return{x:o,y:t.length>1?parseFloat(e.split(" ")[1].trim()):o}}function scaleCanvasBackground(e){let t=e*canvasBackgroundPattern.getAttribute("width"),o=e*canvasBackgroundPattern.getAttribute("height");canvasBackgroundPattern.setAttribute("width",t),canvasBackgroundPattern.setAttribute("height",o)}function translateCanvasBackground(e,t){canvasBackgroundPattern.setAttribute("x",e+canvasBackgroundPattern.getAttribute("x")),canvasBackgroundPattern.setAttribute("y",t+canvasBackgroundPattern.getAttribute("y"))}function fitViewToNode(e){let t=getElBounds(e),o=getViewBounds(),n=getCanvasBounds(),i=.8*Math.min(o.width/t.width,o.height/t.height),a=n.x,l=n.y,s=a+(t.centerX-a)*i,r=l+(t.centerY-l)*i,c=o.centerX-s,d=o.centerY-r;t=getElBounds(e),canvas.style.transition="scale 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1), translate 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1)",scaleCanvas(i),translateCanvas(c,d),setTimeout((function(){canvas.style.transition=""}),550)}function fitViewToCanvas(){let e=getNodesBounds(),t=getViewBounds(),o=getCanvasBounds(),n=.8*Math.min(t.width/e.width,t.height/e.height),i=o.x,a=o.y,l=i+(e.centerX-i)*n,s=a+(e.centerY-a)*n,r=t.centerX-l,c=t.centerY-s;canvas.style.transition="scale 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1), translate 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1)",scaleCanvas(n),translateCanvas(r,c),setTimeout((function(){canvas.style.transition=""}),550)}function setupCallouts(e){e.querySelectorAll(".callout.is-collapsible .callout-title").forEach((function(e){e.addEventListener("click",(function(){var t=this.parentElement;t.classList.toggle("is-collapsed"),e.querySelector(".callout-fold").classList.toggle("is-collapsed"),slideToggle(t.querySelector(".callout-content"),100)}))}))}function setupCheckboxes(e){e.querySelectorAll(".task-list-item-checkbox").forEach((function(e){e.addEventListener("click",(function(){var e=this.parentElement;e.classList.toggle("is-checked"),e.setAttribute("data-task",e.classList.contains("is-checked")?"x":" ")}))})),e.querySelectorAll('.plugin-tasks-list-item input[type="checkbox"]').forEach((function(e){e.checked=e.parentElement.classList.contains("is-checked")})),e.querySelectorAll(".kanban-plugin__item.is-complete").forEach((function(e){e.querySelector('input[type="checkbox"]').checked=!0}))}function setupCodeblocks(e){e.querySelectorAll(".copy-code-button").forEach((function(t){t.addEventListener("click",(function(){var t=this.parentElement.querySelector("code").textContent;navigator.clipboard.writeText(t),this.textContent="Copied!",setTimeout((function(){e.querySelectorAll(".copy-code-button").forEach((function(e){e.textContent="Copy"}))}),2e3)}))}))}function setupLinks(e){e.querySelectorAll(".internal-link, a.tag, .tree-link, .footnote-link").forEach((function(e){e.addEventListener("click",(function(t){let o=e.getAttribute("href");if(t.preventDefault(),t.stopPropagation(),!o)return void console.log("No target found for link");let n=relativePathname.split("#")[0].split("?")[0];(o.startsWith("#")||o.startsWith("?"))&&(o=n+o),loadDocument(o,!0,!e.classList.contains("tree-link"))}))}))}function setupSidebars(){rightSidebar&&leftSidebar&&(sidebarCollapseIcons[0].otherIcon=sidebarCollapseIcons[1],sidebarCollapseIcons[1].otherIcon=sidebarCollapseIcons[0],sidebarCollapseIcons[0].gutter=sidebarGutters[0],sidebarCollapseIcons[1].gutter=sidebarGutters[1],sidebarCollapseIcons[0].sidebar=sidebars[0],sidebarCollapseIcons[1].sidebar=sidebars[1],sidebarGutters[0].otherGutter=sidebarGutters[1],sidebarGutters[1].otherGutter=sidebarGutters[0],sidebarGutters[0].collapseIcon=sidebarCollapseIcons[0],sidebarGutters[1].collapseIcon=sidebarCollapseIcons[1],sidebars[0].otherSidebar=sidebars[1],sidebars[1].otherSidebar=sidebars[0],sidebars[0].gutter=sidebarGutters[0],sidebars[1].gutter=sidebarGutters[1],sidebars.forEach((function(e){e.collapsed=e.classList.contains("is-collapsed"),e.collapse=function(t=!0){if(!t&&this.temporarilyCollapsed&&"large-screen"==deviceSize&&this.gutter.collapse(!0),!t&&document.body.classList.contains("floating-sidebars")){document.body.addEventListener("click",(function t(o){o.target.closest(".sidebar")||(e.collapse(!0),document.body.removeEventListener("click",t))}))}"phone"==deviceSize&&(t||e.otherSidebar.fullCollapse(!0,!0),t&&e.gutter.otherGutter.collapse(!1,!0)),"tablet"==deviceSize&&(t||e.otherSidebar.collapse(!0)),this.classList.toggle("is-collapsed",t),this.collapsed=t},e.temporaryCollapse=function(e=!0){this.temporarilyCollapsed=!0,this.collapse(!0),this.gutter.collapse(!1),this.collapsed=e},e.fullCollapse=function(e=!0,t=!1){this.collapse(e),this.gutter.collapse(!0,t),this.collapsed=e},e.toggleCollapse=function(){this.collapse(!this.collapsed)},e.toggleFullCollapse=function(){this.fullCollapse(!this.collapsed)}})),sidebarGutters.forEach((function(e){e.collapsed=e.classList.contains("is-collapsed"),e.collapse=function(e,t=!1){t&&(this.classList.toggle("is-collapsed",e),this.collapsed=e)},e.toggleCollapse=function(){this.collapse(!this.collapsed)}})),sidebarCollapseIcons.forEach((function(e){e.addEventListener("click",(function(t){t.stopPropagation(),e.sidebar.toggleCollapse()}))})),isMobile()||setupSidebarResize())}function setupSidebarResize(){let e=document.querySelector(".sidebar-left .sidebar-handle"),t=document.querySelector(".sidebar-right .sidebar-handle");if(!e||!t)return;let o=null,n=15*parseFloat(getComputedStyle(e.parentElement).fontSize),i=n/4,a=localStorage.getItem("sidebar-right-width"),l=localStorage.getItem("sidebar-left-width");function s(e){if(!o)return;var t=o.classList.contains("sidebar-left")?e.clientX:window.innerWidth-e.clientX,a=`min(max(${t}px, 15em), 40vw)`;tn&&(o.style.transitionDuration="0s"))}function r(e){o=e.target.closest(".sidebar"),o.classList.add("is-resizing"),document.addEventListener("pointermove",s),document.addEventListener("pointerup",(function(){document.removeEventListener("pointermove",s);var e=getComputedStyle(o).getPropertyValue("--sidebar-width");let t=o.classList.contains("sidebar-left");localStorage.setItem(t?"sidebar-left-width":"sidebar-right-width",e),o.classList.remove("is-resizing"),o.style.removeProperty("transition-duration")}))}function c(e){let t=e.target.closest(".sidebar");if(t){t.style.removeProperty("transition-duration"),t.style.removeProperty("--sidebar-width");let e=t.classList.contains("sidebar-left");localStorage.removeItem(e?"sidebar-left-width":"sidebar-right-width")}}a&&document.querySelector(".sidebar-right").style.setProperty("--sidebar-width",a),l&&document.querySelector(".sidebar-left").style.setProperty("--sidebar-width",l),e.addEventListener("pointerdown",r),t.addEventListener("pointerdown",r),e.addEventListener("dblclick",c),t.addEventListener("dblclick",c)}function getSidebarWidthProp(){return getComputedPixelValue("--sidebar-width")}function setupThemeToggle(){function e(e,t=!1){if(themeToggle.checked=e,t){var o=document.body.style.transition;document.body.style.transition="none"}!themeToggle.classList.contains("is-checked")&&e?themeToggle.classList.add("is-checked"):themeToggle.classList.contains("is-checked")&&!e&&themeToggle.classList.remove("is-checked"),e?(document.body.classList.contains("theme-dark")&&document.body.classList.remove("theme-dark"),document.body.classList.contains("theme-light")||document.body.classList.add("theme-light")):(document.body.classList.contains("theme-light")&&document.body.classList.remove("theme-light"),document.body.classList.contains("theme-dark")||document.body.classList.add("theme-dark")),t&&setTimeout((function(){document.body.style.transition=o}),100),localStorage.setItem("theme",e?"light":"dark")}themeToggle&&(null!=localStorage.getItem("theme")&&e("light"==localStorage.getItem("theme")),document.body.classList.contains("theme-light")?e(!0):e(!1),document.querySelector(".theme-toggle-input")?.addEventListener("change",(t=>{let o=!("light"==localStorage.getItem("theme"));console.log("Theme toggle changed to: "+o),e(o)})))}let index,searchResults,flashElement=null,flashAnimation=null;function scrollIntoView(e,t,o=!0){setTreeCollapsed(e,!1,o);flashElement&&(flashElement.remove(),flashAnimation.cancel()),flashElement=document.createElement("div"),flashElement.classList.add("scroll-highlight"),e.appendChild(flashElement),t?flashElement.scrollIntoView({behavior:o?"smooth":"auto",...t}):flashElement.scrollIntoView({behavior:o?"smooth":"auto"});var n=e.style.position;e.style.position="relative",flashAnimation=flashElement.animate([{opacity:0},{opacity:.8},{opacity:.8},{opacity:.8},{opacity:.8},{opacity:.8},{opacity:0}],{duration:1500,iterations:1,delay:300}),flashAnimation.onfinish=function(){flashElement.remove(),e.style.position=n}}function setupScroll(e){if("canvas"!=documentType)return;let t=Array.from(e.querySelectorAll(".markdown-preview-view")),o=0,n=0;t.forEach((async function(e){console.log("Setting up markdown view");let t=Array.from(e.querySelectorAll(".heading-wrapper"));e.updateVisibleWindowMarkdown=function(o=!0,i=!0){let a=e.getBoundingClientRect();n=Math.min(.1*a.height,150);let l=a.top-n,s=a.bottom+n;async function r(e){let t=e?.getBoundingClientRect();if(!t)return;let n=t.tops&&t.bottom>s;n&&o?e.hide():!n&&i&&e.show()}for(let e=0;en/3&&e.updateVisibleWindowMarkdown(!1,!0),o=e.scrollTop}))})),setInterval((async function(){t.length>0&&(t[o].updateVisibleWindowMarkdown(),o=(o+1)%t.length)}),200)}function setupExcalidraw(e){e.querySelectorAll(".excalidraw-svg svg").forEach((function(e){let t=e.querySelector("rect").getAttribute("fill")>"#7F7F7F";e.classList.add(t?"light":"dark")}))}async function setupSearch(){if(isFileProtocol)return;if(searchInput=document.querySelector('input[type="search"]'),!searchInput)return;const e=await fetch("lib/search-index.json"),t=await e.text();index=MiniSearch.loadJSON(t,{fields:["title","path","tags","headers"]});document.querySelector(".search-input-clear-button").addEventListener("click",(e=>{search("")})),searchInput.addEventListener("input",(e=>{const t=e.target.value??"";startsWithAny(t,["#","tag:","title:","name:","header:","H:"])?searchInput.style.color="var(--text-accent)":searchInput.style.color="",search(t)})),searchResults=document.createElement("div"),searchResults.setAttribute("id","search-results")}async function search(e){searchInput.value=e;let t=["title","content","tags","headers","path"];if(e.startsWith("#")&&(t=["tags","headers"]),e.startsWith("tag:")&&(e=e.substring(e.indexOf(":")+1),t=["tags"]),startsWithAny(e,["title:","name:"])&&(e=e.substring(e.indexOf(":")+1),t=["title"]),startsWithAny(e,["header:","H:"])&&(e=e.substring(e.indexOf(":")+1),t=["headers"]),startsWithAny(e,["path:"])&&(e=e.substring(e.indexOf(":")+1),t=["path"]),e.length>=1){const o=index.search(e,{prefix:!0,fuzzy:.3,boost:{title:4,headers:3,tags:2,path:1},fields:t});let n=[],i=[];for(let t of o){if((t.score<.33*o[0].score||n.length>12)&&n.length>3||t.score<.1*o[0].score)break;n.push(t.path);let a=[],l=!1;for(match in t.match){if(t.match[match].includes("headers"))for(let o of t.headers)if(o.toLowerCase().includes(match.toLowerCase())&&(a.push(o),e.toLowerCase()!=match.toLowerCase())){l=!0;break}if(l)break}i.push(a)}if(document.querySelector(".file-tree"))filterFileTree(n,i,e).then((()=>sortFileTreeDocuments(((e,t)=>{if(!e||!t)return 0;let o=getVaultRelativePath(e.firstChild.href),i=getVaultRelativePath(t.firstChild.href);return n.findIndex((e=>o.startsWith(e)))-n.findIndex((e=>i.startsWith(e)))}))));else{const t=document.createElement("div");o.slice(0,10).forEach((o=>{const n=document.createElement("div");n.classList.add("search-result");const i=document.createElement("a");i.classList.add("tree-link");const a=o.path+"?mark="+encodeURIComponent(e);i.setAttribute("href",a),i.appendChild(document.createTextNode(o.title)),n.appendChild(i),t.append(n)})),searchResults.replaceChildren(t),searchInput.parentElement.after(searchResults),initializePageEvents(searchResults)}}else searchResults&&searchResults.parentElement&&searchResults.parentNode.removeChild(searchResults),clearCurrentDocumentSearch(),fileTree&&clearFileTreeFilter().then((()=>sortFileTreeAlphabetically()))}function startsWithAny(e,t){for(let o=0;o{const o=t.nodeValue,n=o.replace(new RegExp(e,"gi"),(e=>`${e}`));if(n!==o){const e=document.createElement("div");e.innerHTML=n;Array.from(e.childNodes).forEach((e=>{e.nodeType!=Node.TEXT_NODE&&e.setAttribute("class","search-mark"),t.parentNode.insertBefore(e,t)})),t.parentNode.removeChild(t)}}));let t=document.querySelector(".search-mark");setTimeout((()=>{t&&scrollIntoView(t,{behavior:"smooth",block:"start"})}),500)}function clearCurrentDocumentSearch(){document.querySelectorAll(".search-mark").forEach((e=>{e.outerHTML=e.innerHTML}))}function getTextNodes(e){const t=[],o=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1);let n;for(;n=o.nextNode();)t.push(n);return t} \ No newline at end of file diff --git a/lib/styles/global-variable-styles.css b/lib/styles/global-variable-styles.css deleted file mode 100644 index 3b84be4..0000000 --- a/lib/styles/global-variable-styles.css +++ /dev/null @@ -1 +0,0 @@ -:root body{--line-width:min(40em, calc(100vw - 2em));--line-width-adaptive:min(40em, calc(100vw - 2em));--file-line-width:min(40em, calc(100vw - 2em));--sidebar-width:min(20em, 80vw)}body{--zoom-factor:0.8333333333333334!important;--accent-h:138!important;--accent-s:77%!important;--accent-l:32%!important;--font-text-size:16px} \ No newline at end of file diff --git a/lib/styles/main-styles.css b/lib/styles/main-styles.css deleted file mode 100644 index b10711c..0000000 --- a/lib/styles/main-styles.css +++ /dev/null @@ -1 +0,0 @@ -body{--color-fade-speed:0.2s}.tree-container{position:relative;height:100%;width:auto;margin-top:3em;margin-bottom:0}.tree-container .tree-header{display:flex;flex-direction:row;align-items:center;position:absolute;top:-3em}.tree-container .tree-header .sidebar-section-header{margin-block:1em;white-space:nowrap}.tree-container:has(.tree-scroll-area:empty){display:none}body .webpage-container .tree-container .tree-scroll-area{width:100%;height:100%;max-height:100%;overflow-y:auto;border-radius:0;position:absolute;margin:0;background-color:transparent}.tree-container .tree-item{display:flex;flex-direction:column;align-items:flex-start;padding:0;padding-block:1px;overflow:hidden!important;flex:none}.tree-container .tree-item-children{padding:0;margin:0;border-left:none;width:100%}.tree-item-title>*{padding:0;margin:0;overflow:hidden;display:inline;text-overflow:ellipsis}.tree-container .tree-item-icon *{color:var(--text-muted);font-family:emoji}.tree-container .tree-item-icon :is(svg,img){-webkit-mask-image-repeat:no-repeat;-webkit-mask-image-position:center;max-width:1.3em;height:100%}.tree-container .tree-item-icon :has(svg){display:contents!important}.tree-container .tree-item-icon{min-width:1.6em;max-width:1.6em;margin-left:2px;display:flex;align-items:center;justify-content:flex-start}.tree-container .tree-item.mod-active>.tree-link>.tree-item-contents{color:var(--interactive-accent)}.tree-container .tree-link{position:relative;display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;border-radius:var(--radius-s);color:var(--nav-item-color);text-decoration-line:none;width:-webkit-fill-available;width:-moz-available;width:fill-available;margin-left:var(--tree-horizontal-spacing)}.tree-container .tree-link:active{color:var(--nav-item-color-active)}.tree-container .tree-item-contents{width:100%;height:100%;margin:0!important;padding:0!important;font-size:unset!important;padding-left:calc(var(--tree-horizontal-spacing) * 2 + var(--collapse-arrow-size))!important;border-radius:var(--radius-s);display:flex!important;flex-direction:row!important;align-items:center!important;color:var(--nav-item-color);transition:background-color .1s}.tree-container .tree-item-title{overflow:hidden;text-overflow:ellipsis!important;text-wrap:nowrap!important;white-space:nowrap!important;position:relative!important;border:none!important;width:100%;width:-webkit-fill-available;width:-moz-available;width:fill-available;background-color:transparent!important;padding-top:calc(var(--tree-vertical-spacing)/ 2)!important;padding-bottom:calc(var(--tree-vertical-spacing)/ 2)!important;margin:0!important;left:0!important;right:0!important;top:0!important;bottom:0!important}.tree-container .tree-item-title::after{right:0;position:absolute!important;margin-right:.5em!important}.tree-container .mod-tree-folder:not(:has(.mod-tree-folder)) .mod-tree-file>.tree-link>.tree-item-contents{padding-left:calc(var(--tree-horizontal-spacing) * 2)!important}.tree-container .collapse-icon{translate:calc(0px - var(--collapse-arrow-size) - var(--tree-horizontal-spacing) * 2) 0;position:absolute;height:100%;padding:var(--tree-horizontal-spacing)}.tree-container .tree-item.mod-tree-folder>.tree-link>.collapse-icon{width:100%}.collapse-icon:hover{color:var(--nav-item-color-hover)}.tree-container .clickable-icon{width:3.2em;height:2.2em}.tree-container .tree-item.is-collapsed>.tree-link>.tree-item-contents>.collapse-icon>svg{transition:transform .1s ease-in-out;transform:rotate(-90deg)}.tree-container .tree-item-contents:hover{color:var(--nav-item-color-hover)}.filtered-out{display:none!important}.tree-container>.tree-scroll-area>* .tree-item{margin-left:calc(var(--tree-horizontal-spacing) * 2 + var(--collapse-arrow-size)/ 2)}.tree-container>.tree-scroll-area>* .tree-item{border-left:var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color)}.tree-container .tree-scroll-area>*>*>.tree-item{margin-left:calc(var(--tree-horizontal-spacing) + var(--collapse-arrow-size)/ 2)}.tree-container:not(.mod-nav-indicator) .tree-scroll-area .tree-item{border-color:transparent!important}.tree-container .tree-item.mod-active{border-color:var(--interactive-accent)!important;box-shadow:2px 0 0 0 var(--interactive-accent) inset;transition:box-shadow .4s ease-in-out}.tree-container .tree-item:hover:not(.mod-active):not(.mod-collapsible):not(:has(.tree-item:hover)):not(.mod-root > * > *){border-left:var(--nav-indentation-guide-width) solid var(--nav-item-color-hover)}.tree-container .mod-active>.tree-link,.tree-container .tree-link:hover{background-color:var(--nav-item-background-hover);cursor:pointer}.webpage-container .tree-container .tree-item:not(.mod-collapsible)>.tree-item-children>.tree-item>.tree-link,.webpage-container .tree-container>.tree-scroll-area>.tree-item>.tree-link{margin-left:0!important}.tree-container.outline-tree .tree-item[data-depth='1']>.tree-link>.tree-item-contents{font-weight:900;font-size:1.1em;margin-left:0;padding-left:1em}.nav-folder.mod-root .nav-folder>.nav-folder-children{padding:0!important;margin:0!important;border:none!important}.nav-file{border-radius:0!important}.nav-folder.mod-root .nav-folder>.nav-folder-children{border-radius:var(--radius-s)!important}.webpage-container .nav-file-tag{margin-right:1em}.nav-file-title-content,.nav-folder-title-content{margin-bottom:unset!important;display:unset!important;border-radius:unset!important;cursor:unset!important;font-size:unset!important;font-weight:unset!important;line-height:unset!important;padding:unset!important}#webpage-icon :is(svg,img){width:100%;height:100%;box-shadow:none!important;border:none!important;border-radius:0!important;stroke:currentColor}#webpage-icon :has(:is(svg,img)){display:contents!important}#webpage-icon:has(:is(svg,img)){font-size:40px;width:40px;height:40px}#webpage-icon{font-size:40px;margin-bottom:8px;font-family:emoji;width:fit-content}body.show-inline-title .page-title{font-weight:var(--inline-title-weight);font-size:var(--inline-title-size);font-style:var(--inline-title-style);font-variant:var(--inline-title-variant);font-family:var(--inline-title-font);letter-spacing:-.015em;color:var(--inline-title-color)}.heading{position:relative}.heading-wrapper.is-collapsed>.heading::after{content:"..."!important;display:inline-block!important;position:absolute!important;margin:0!important;padding:0!important;margin-left:.3em!important;color:var(--text-muted)}.heading-wrapper{transition:height ease-in-out,margin-bottom ease-in-out;transition-duration:.2s;display:flex;flex-direction:column;position:relative}html>body>.webpage-container>.document-container>.markdown-preview-view>.markdown-preview-sizer>div{margin-inline:0!important;margin:0!important;padding:0!important;width:100%;max-width:100%}.markdown-rendered .heading-wrapper:has(> .heading-children > div:last-child > :is(p,pre,table,ul,ol))+.heading-wrapper>.heading:first-child{margin-top:var(--heading-spacing)}.heading-children{transition:height ease-in-out,margin-bottom ease-in-out;transition-duration:.2s;display:flow;position:relative;contain:inline-size}.heading-children.is-collapsed{padding-top:0}.heading-wrapper.is-animating>.heading-children,.heading-wrapper.is-collapsed>.heading-children{overflow:hidden;overflow:clip}.heading-wrapper>.heading>.heading-after{display:none}.heading-wrapper.is-collapsed>.heading>.heading-after{display:inline-block;margin-left:.3em;opacity:.4;font-size:1em;cursor:auto;user-select:none}.heading-wrapper.is-hidden>*{display:none}.heading-wrapper.is-hidden{visibility:hidden}.collapse-icon:not(.list-collapse-indicator) svg.svg-icon{color:var(--nav-collapse-icon-color);width:var(--collapse-arrow-size);height:var(--collapse-arrow-size);transition:transform .1s ease-in-out 0s;stroke-width:4px;min-width:10px;min-height:10px}div.is-collapsed>*>.heading-collapse-indicator.collapse-icon>svg{transition:transform .1s ease-in-out;transform:rotate(-90deg)}.heading-wrapper .heading-collapse-indicator{opacity:0;transition:opacity .15s ease-in-out;position:absolute;z-index:1;padding:0!important;padding-left:40px!important;padding-right:40px!important;left:-40px!important}.heading-wrapper .heading-collapse-indicator:hover,.heading:hover>.heading-collapse-indicator{opacity:1}.heading-wrapper-span{position:absolute;width:200vw;height:calc(100% + var(--p-spacing) * 2);top:calc(0px - var(--p-spacing));left:-100vw;z-index:-1}.markdown-embed .markdown-embed-content .markdown-preview-view .heading-wrapper-span{width:100%}.theme-toggle-container{--toggle-width:3.5em;--toggle-height:1.75em;--border-radius:calc(var(--toggle-height) / 2);--handle-width:calc(var(--toggle-height) * 0.65);--handle-radius:calc(var(--handle-width) / 2);--handle-margin:calc((var(--toggle-height) / 2.0) - var(--handle-radius));--handle-translation:calc(var(--toggle-width) - var(--handle-width) - (var(--handle-margin) * 2));display:inline-block;cursor:pointer}.clickable-icon,.sidebar-section-header{transition:color var(--color-fade-speed) ease-in-out}@keyframes toggle-slide-right{0%{width:var(--handle-width);transform:translateX(0)}50%{width:calc(var(--toggle-width) * .5)}90%{width:var(--handle-width)}100%{transform:translateX(var(--handle-translation))}}@keyframes toggle-slide-left{0%{width:var(--handle-width);transform:translateX(calc(var(--handle-translation) - ((var(--toggle-width) * .33) - var(--handle-width))))}70%{width:calc(var(--toggle-width) * .5)}100%{width:var(--handle-width);transform:translateX(0)}}@keyframes toggle-expand-right{0%{width:var(--handle-width)}100%{width:calc(var(--toggle-width) * .33)}}@keyframes toggle-expand-left{0%{width:var(--handle-width);transform:translateX(var(--handle-translation))}100%{width:calc(var(--toggle-width) * .33);transform:translateX(calc(var(--handle-translation) - ((var(--toggle-width) * .33) - var(--handle-width))))}}@keyframes toggle-contract{0%{width:calc(var(--toggle-width) * .33)}100%{width:var(--handle-width)}}.theme-toggle-input{display:none;z-index:1000}.toggle-background{position:relative;width:var(--toggle-width);height:var(--toggle-height);border-radius:var(--border-radius);background-color:var(--background-modifier-border);transition:background-color var(--color-fade-speed);z-index:1000;animation-duration:.2s}.toggle-background::before{content:"";position:absolute;left:var(--handle-margin);top:var(--handle-margin);height:var(--handle-width);width:var(--handle-width);border-radius:var(--handle-radius);background-color:var(--text-normal);box-shadow:inset 0 1px 1px rgba(0,0,0,.2);animation:toggle-slide-left ease-in-out normal both;animation-duration:inherit;z-index:1000}.theme-toggle-input:checked~.toggle-background::before{animation:toggle-slide-right ease-in-out normal both;animation-duration:inherit}.theme-toggle-input:active~.toggle-background::before{animation:toggle-expand-right ease-in-out normal both;animation-duration:inherit}.theme-toggle-input:active:checked~.toggle-background::before{animation:toggle-expand-left ease-in-out normal both;animation-duration:inherit}.toggle-background::after{content:"";position:absolute;right:var(--handle-margin);top:calc(var(--handle-margin));height:var(--handle-width);width:var(--handle-width);transition:transform .3s;background:url('data:image/svg+xml,') no-repeat center center;transform:scale(.9)}.theme-toggle-input:checked~.toggle-background::after{transform:translateX(calc(var(--handle-translation) * -1)) scale(.9);background:url('data:image/svg+xml,') no-repeat center center}.graph-view-wrapper{--graph-view-max-height:35vh}#graph-canvas{width:100%;height:100%;aspect-ratio:1;transition:opacity .2s ease-in-out}.graph-view-container.expanded{position:fixed;width:90%;height:90%;max-height:unset;right:5%;top:5%;background-color:var(--background-secondary);z-index:100}body:is(.is-phone,.is-tablet) .graph-view-container.expanded{width:95%;height:95%;right:2.5%;top:2.5%}.graph-view-container{position:relative;width:100%;aspect-ratio:1;max-height:var(--graph-view-max-height);display:flex;transition:background-color var(--color-fade-speed) ease-in-out;touch-action:none;border:1px solid var(--modal-border-color);border-radius:var(--modal-radius);overflow:hidden}.graph-icon{cursor:pointer;color:var(--text-muted)}.graph-view-container .graph-icon>svg{width:24px;height:24px;background-color:var(--color-base-00);outline-width:6px;outline-color:var(--color-base-00);outline-offset:-1px;outline-style:solid;border-radius:100px;margin:10px;transition:outline-color,background-color;transition-timing-function:ease-in-out;transition-duration:var(--color-fade-speed)}.graph-view-placeholder{padding:0;width:100%;aspect-ratio:1;max-height:var(--graph-view-max-height);position:relative;flex:none}.graph-view-placeholder:has(.expanded){border-radius:var(--modal-radius);border:1px solid var(--modal-border-color)}.scale-down{transition:transform .2s ease-in-out;transform:scale(.9)}.scale-up{transition:transform .2s ease-in-out;transform:scale(1)}.graph-expand{position:absolute;top:5px;right:5px}body :is(.canvas-node-container,.canvas-wrapper){cursor:unset!important}.canvas{translate:0 0;scale:1 1;will-change:translate,scale}.canvas-controls{display:none;cursor:default!important}.canvas-card-menu{display:none;cursor:default!important}.canvas-node-content-blocker{pointer-events:none}body.is-phone .sidebar{font-size:1.15em;--tree-vertical-spacing:0.9em;--sidebar-width:85vw!important}body.is-phone{--collapse-arrow-size:13px;--tree-vertical-spacing:0.8em;--tree-horizontal-spacing:0.5em}body.is-phone .heading-wrapper .heading-collapse-indicator{transition:transform .2s ease-in-out .2s}.loading-icon{--width:80px;--height:80px;display:inline-block;position:fixed;left:calc(50% - var(--width)/ 2);top:calc(50% - var(--height)/ 2);width:var(--width);height:var(--height);opacity:0;transition:opacity .5s ease-in-out;pointer-events:none}.loading-icon.show{opacity:1}.loading-icon div{position:absolute;top:33px;width:13px;height:13px;border-radius:50%;background:var(--interactive-accent);animation-timing-function:cubic-bezier(0,1,1,0)}.loading-icon div:first-child{left:8px;animation:lds-ellipsis1 .6s infinite}.loading-icon div:nth-child(2){left:8px;animation:lds-ellipsis2 .6s infinite}.loading-icon div:nth-child(3){left:32px;animation:lds-ellipsis2 .6s infinite}.loading-icon div:nth-child(4){left:56px;animation:lds-ellipsis3 .6s infinite}.loading-icon:not(.show) div{animation-play-state:paused}@keyframes lds-ellipsis1{0%{transform:scale(0)}100%{transform:scale(1)}}@keyframes lds-ellipsis3{0%{transform:scale(1)}100%{transform:scale(0)}}@keyframes lds-ellipsis2{0%{transform:translate(0,0)}100%{transform:translate(24px,0)}}@media print{body .webpage-container .document-container *{overflow:visible!important;overflow-y:visible!important;overflow-x:visible!important}html body.publish :is(.sidebar,script,style,include){display:none!important}:root,html body.publish>:is(.webpage-container,.document-container,.markdown-preview-view):not(script,style,include){display:contents!important}:root,html body.publish .document-container>.markdown-preview-view{background-color:transparent!important}body{display:inline!important;background:var(--background-primary)}.document-container>.markdown-preview-view>.markdown-preview-sizer{padding:0!important;margin:0!important;padding:var(--file-margins)!important;padding-bottom:0!important}html body.publish :is(.document-container,.markdown-preview-view){margin:0!important;padding:0!important}}.tree-hint-label{font-size:var(--font-smallest);color:var(--text-accent);width:100%;width:-webkit-fill-available;width:-moz-available;width:fill-available;white-space:pre-wrap;text-decoration-line:none}.tree-hint-label:hover{text-decoration-line:underline}.tree-hint-container{width:100%;padding-left:calc(var(--tree-horizontal-spacing) * 2 + var(--collapse-arrow-size));padding-bottom:calc(var(--tree-vertical-spacing)/ 2);display:flex;flex-direction:column}.tree-container .mod-tree-folder:not(:has(.mod-tree-folder)) .mod-tree-file>.tree-link>.tree-hint-container{padding-left:calc(var(--tree-horizontal-spacing) * 2)}.tree-item-contents:has(.tree-item-icon)+.tree-hint-container{margin-left:calc(1.6em + 2px)}a.tree-hint-label:hover{text-decoration-line:underline}.search-mark{margin:0!important;padding:0!important;scroll-margin:2em!important}.search-input-container:has(+ #search-results)>input[type=search]{border-bottom-left-radius:0;border-bottom-right-radius:0}input[type=search]{box-shadow:none!important;height:2.5em;font-size:1em;transition:background,background-color,border;transition-duration:var(--color-fade-speed);transition-timing-function:ease-in-out}.search-input-container{width:100%!important}.search-input-container::before{mask-image:url("data:image/svg+xml,");mask-repeat:no-repeat;top:50%;transform:translateY(-50%)}.sidebar .sidebar-handle:hover~.sidebar-content,.sidebar.is-resizing .sidebar-content{box-shadow:0 0 0 var(--divider-width-hover) var(--divider-color-hover)}.sidebar-handle{width:min(max(calc(var(--sidebar-margin)/ 2),3px),12px);height:calc(100vh - 2 * var(--radius-l));margin-top:var(--radius-l);margin-bottom:var(--radius-l);top:0;position:absolute;cursor:ew-resize;z-index:1;transition:background-color .2s ease-in-out}.sidebar-left .sidebar-handle{right:0}.sidebar-right .sidebar-handle{left:0}.nav-folder-children .nav-folder-title-content::before{margin-right:.5em}.tree-item::before{margin-left:calc(var(--tree-horizontal-spacing) - .3em)}.tree-item-contents:has(.tree-item-icon) .tree-item-title::before,.tree-item-contents:has(.tree-item-icon)::before,.tree-item:has(.tree-item-contents > .tree-item-icon)::before{display:none!important}.anp-simple-rainbow-color-toggle.anp-simple-rainbow-indentation-toggle .tree-container.file-tree .tree-item{border-color:rgba(var(--rainbow-folder-color),.5)}.anp-collapse-folders .tree-container .tree-item .collapse-icon{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M6 14l1.45-2.9A2 2 0 0 1 9.24 10H22a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M6 14l1.45-2.9A2 2 0 0 1 9.24 10H22a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2'/%3E%3C/svg%3E%0A");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;background-color:currentColor;display:flex;flex-basis:100%;height:16px;width:17px}.anp-collapse-folders .tree-container .tree-item.is-collapsed .collapse-icon{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2z'/%3E%3Cpath d='M2 10h20' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2z'/%3E%3Cpath d='M2 10h20' /%3E%3C/svg%3E%0A")}.anp-file-icons .nav-file .nav-file-title::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z'/%3E%3Cpath d='M14 2v6h6'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z'/%3E%3Cpath d='M14 2v6h6'/%3E%3C/svg%3E%0A");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;background-color:currentColor;content:"";display:flex;flex-shrink:0;height:var(--size-4-4);margin-left:calc(-1 * var(--size-4-5));opacity:var(--icon-opacity);position:absolute;width:var(--size-4-4)}.anp-collapse-folders .tree-container .tree-item .collapse-icon:hover{color:currentColor}.anp-collapse-folders .tree-container .tree-item .collapse-icon svg{display:none}.document-container .kanban-plugin{position:absolute;padding:0;margin:0;height:100%}.document-container .kanban-plugin{font-family:var(--font-text, var(--default-font));font-size:.875rem;line-height:var(--line-height-tight);width:unset;overflow-y:unset;overflow-wrap:unset;color:unset;user-select:unset;-webkit-user-select:unset}.document-container .kanban-plugin__item-button-wrapper,.kanban-plugin__item-postfix-button.clickable-icon,.kanban-plugin__lane-grip,.kanban-plugin__lane-settings-button.clickable-icon{display:none}.excalidraw-plugin rect,.excalidraw-svg rect{fill:transparent}body.theme-dark .excalidraw-plugin svg.dark,body.theme-dark .excalidraw-svg svg.dark,body.theme-light .excalidraw-plugin svg.light,body.theme-light .excalidraw-svg svg.light{filter:invert(93%) hue-rotate(180deg)}.excalidraw-plugin>svg{width:100%;height:100%}.excalidraw-plugin{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;width:100%;padding:10px}.columnParent{display:flex;padding:15px 20px;flex-wrap:wrap;gap:20px}.columnParent{white-space:normal}.columnChild{flex-grow:1;flex-basis:0px}.obsidian-banner .lock-button{display:none}.markdown-preview-view:has(.obsidian-banner-wrapper){padding-top:0!important}.view-content:has(.mm-mindmap){overflow-y:none}.view-content .mm-mindmap{transform:scale(1);translate:-4000px -4000px;top:70%;left:50%;position:absolute;overflow:hidden;width:100vw} \ No newline at end of file diff --git a/lib/styles/obsidian.css b/lib/styles/obsidian.css deleted file mode 100644 index 5273018..0000000 --- a/lib/styles/obsidian.css +++ /dev/null @@ -1 +0,0 @@ -:root{--highlight-bg-color:rgba(180, 0, 170, 1);--highlight-selected-bg-color:rgba(0, 100, 0, 1)}:root{--annotation-unfocused-field-background:url("data:image/svg+xml; charset=UTF-8,");--input-focus-border-color:Highlight;--input-focus-outline:1px solid Canvas;--input-unfocused-border-color:transparent;--input-disabled-border-color:transparent;--input-hover-border-color:black;--link-outline:none}:root{--xfa-unfocused-field-background:url("data:image/svg+xml; charset=UTF-8,");--xfa-focus-outline:auto}:root{--viewer-container-height:0;--pdfViewer-padding-bottom:0;--page-margin:1px auto -8px;--page-border:9px solid transparent;--spreadHorizontalWrapped-margin-LR:-3.5px;--loading-icon-delay:400ms}[data-main-rotation="90"]{transform:rotate(90deg) translateY(-100%)}[data-main-rotation="180"]{transform:rotate(180deg) translate(-100%,-100%)}[data-main-rotation="270"]{transform:rotate(270deg) translateX(-100%)}.hiddenCopyElement{position:absolute;top:0;left:0;width:0;height:0;display:none}.spread{margin-left:3.5px;margin-right:3.5px;text-align:center}.spread{white-space:nowrap}.spread .dummyPage,.spread .page{display:inline-block;vertical-align:middle}body{--anim-duration-none:0;--anim-duration-superfast:70ms;--anim-duration-fast:140ms;--anim-duration-moderate:300ms;--anim-duration-slow:560ms;--anim-motion-smooth:cubic-bezier(0.45, 0.05, 0.55, 0.95);--anim-motion-delay:cubic-bezier(0.65, 0.05, 0.36, 1);--anim-motion-jumpy:cubic-bezier(0.68, -0.55, 0.27, 1.55);--anim-motion-swing:cubic-bezier(0, 0.55, 0.45, 1);--blockquote-border-thickness:2px;--blockquote-border-color:var(--interactive-accent);--blockquote-font-style:normal;--blockquote-color:inherit;--blockquote-background-color:transparent;--bold-modifier:200;--bold-color:inherit;--bold-weight:calc(var(--font-weight) + var(--bold-modifier));--border-width:1px;--button-radius:var(--input-radius);--callout-border-width:0px;--callout-border-opacity:0.25;--callout-padding:var(--size-4-3) var(--size-4-3) var(--size-4-3) var(--size-4-6);--callout-radius:var(--radius-s);--callout-blend-mode:var(--highlight-mix-blend-mode);--callout-title-color:inherit;--callout-title-padding:0;--callout-title-size:inherit;--callout-title-weight:calc(var(--font-weight) + var(--bold-modifier));--callout-content-padding:0;--callout-content-background:transparent;--callout-bug:var(--color-red-rgb);--callout-default:var(--color-blue-rgb);--callout-error:var(--color-red-rgb);--callout-example:var(--color-purple-rgb);--callout-fail:var(--color-red-rgb);--callout-important:var(--color-cyan-rgb);--callout-info:var(--color-blue-rgb);--callout-question:var(--color-orange-rgb);--callout-success:var(--color-green-rgb);--callout-summary:var(--color-cyan-rgb);--callout-tip:var(--color-cyan-rgb);--callout-todo:var(--color-blue-rgb);--callout-warning:var(--color-orange-rgb);--callout-quote:158,158,158;--canvas-background:var(--background-primary);--canvas-card-label-color:var(--text-faint);--canvas-color-1:var(--color-red-rgb);--canvas-color-2:var(--color-orange-rgb);--canvas-color-3:var(--color-yellow-rgb);--canvas-color-4:var(--color-green-rgb);--canvas-color-5:var(--color-cyan-rgb);--canvas-color-6:var(--color-purple-rgb);--canvas-dot-pattern:var(--color-base-30);--caret-color:var(--text-normal);--checkbox-radius:var(--radius-s);--checkbox-size:var(--font-text-size);--checkbox-marker-color:var(--background-primary);--checkbox-color:var(--interactive-accent);--checkbox-color-hover:var(--interactive-accent-hover);--checkbox-border-color:var(--text-faint);--checkbox-border-color-hover:var(--text-muted);--checkbox-margin-inline-start:0.85em;--checklist-done-decoration:line-through;--checklist-done-color:var(--text-muted);--code-white-space:pre-wrap;--code-radius:var(--radius-s);--code-size:var(--font-smaller);--code-background:var(--background-primary-alt);--code-normal:var(--text-muted);--code-comment:var(--text-faint);--code-function:var(--color-yellow);--code-important:var(--color-orange);--code-keyword:var(--color-pink);--code-operator:var(--color-red);--code-property:var(--color-cyan);--code-punctuation:var(--text-muted);--code-string:var(--color-green);--code-tag:var(--color-red);--code-value:var(--color-purple);--collapse-icon-color:var(--text-faint);--collapse-icon-color-collapsed:var(--text-accent);--cursor:default;--cursor-link:pointer;--dialog-width:560px;--dialog-max-width:80vw;--dialog-max-height:85vh;--divider-color:var(--background-modifier-border);--divider-color-hover:var(--interactive-accent);--divider-width:1px;--divider-width-hover:3px;--divider-vertical-height:calc(100% - var(--header-height));--drag-ghost-background:rgba(0, 0, 0, 0.85);--drag-ghost-text-color:#fff;--dropdown-background:var(--interactive-normal);--dropdown-background-blend-mode:hard-light;--dropdown-background-hover:var(--interactive-hover);--dropdown-background-position:right 0.5em top 50%,0 0;--dropdown-background-size:1em auto,100%;--dropdown-padding:0 1.9em 0 0.8em;--embed-max-height:4000px;--embed-canvas-max-height:400px;--embed-background:inherit;--embed-border-start:2px solid var(--interactive-accent);--embed-border-end:none;--embed-border-top:none;--embed-border-bottom:none;--embed-padding:0 0 0 var(--size-4-6);--embed-font-style:inherit;--embed-block-shadow-hover:0 0 0 1px var(--background-modifier-border),inset 0 0 0 1px var(--background-modifier-border);--file-line-width:700px;--file-folding-offset:24px;--file-margins:var(--size-4-8);--file-header-font-size:var(--font-ui-small);--file-header-font-weight:400;--file-header-border:var(--border-width) solid transparent;--file-header-justify:center;--font-smallest:0.8em;--font-smaller:0.875em;--font-small:0.933em;--font-ui-smaller:12px;--font-ui-small:13px;--font-ui-medium:15px;--font-ui-large:20px;--font-weight:var(--font-normal);--font-thin:100;--font-extralight:200;--font-light:300;--font-normal:400;--font-medium:500;--font-semibold:600;--font-bold:700;--font-extrabold:800;--font-black:900;--footnote-size:var(--font-smaller);--graph-controls-width:240px;--graph-text:var(--text-normal);--graph-line:var(--color-base-35, var(--background-modifier-border-focus));--graph-node:var(--text-muted);--graph-node-unresolved:var(--text-faint);--graph-node-focused:var(--text-accent);--graph-node-tag:var(--color-green);--graph-node-attachment:var(--color-yellow);--heading-formatting:var(--text-faint);--heading-spacing:calc(var(--p-spacing) * 2.5);--h1-color:inherit;--h2-color:inherit;--h3-color:inherit;--h4-color:inherit;--h5-color:inherit;--h6-color:inherit;--h1-font:inherit;--h2-font:inherit;--h3-font:inherit;--h4-font:inherit;--h5-font:inherit;--h6-font:inherit;--h1-line-height:1.2;--h2-line-height:1.2;--h3-line-height:1.3;--h4-line-height:1.4;--h5-line-height:var(--line-height-normal);--h6-line-height:var(--line-height-normal);--h1-size:1.802em;--h2-size:1.602em;--h3-size:1.424em;--h4-size:1.266em;--h5-size:1.125em;--h6-size:1em;--h1-style:normal;--h2-style:normal;--h3-style:normal;--h4-style:normal;--h5-style:normal;--h6-style:normal;--h1-variant:normal;--h2-variant:normal;--h3-variant:normal;--h4-variant:normal;--h5-variant:normal;--h6-variant:normal;--h1-weight:700;--h2-weight:600;--h3-weight:600;--h4-weight:600;--h5-weight:600;--h6-weight:600;--header-height:40px;--hr-color:var(--background-modifier-border);--hr-thickness:2px;--icon-size:var(--icon-m);--icon-stroke:var(--icon-m-stroke-width);--icon-xs:14px;--icon-s:16px;--icon-m:18px;--icon-l:18px;--icon-xl:32px;--icon-xs-stroke-width:2px;--icon-s-stroke-width:2px;--icon-m-stroke-width:1.75px;--icon-l-stroke-width:1.75px;--icon-xl-stroke-width:1.25px;--icon-color:var(--text-muted);--icon-color-hover:var(--text-muted);--icon-color-active:var(--text-accent);--icon-color-focused:var(--text-normal);--icon-opacity:0.85;--icon-opacity-hover:1;--icon-opacity-active:1;--clickable-icon-radius:var(--radius-s);--indentation-guide-width:1px;--indentation-guide-width-active:1px;--indentation-guide-color:rgba(var(--mono-rgb-100), 0.12);--indentation-guide-color-active:rgba(var(--mono-rgb-100), 0.3);--indentation-guide-editing-indent:0.85em;--indentation-guide-reading-indent:-0.85em;--indentation-guide-source-indent:0.25em;--inline-title-color:var(--h1-color);--inline-title-font:var(--h1-font);--inline-title-line-height:var(--h1-line-height);--inline-title-size:var(--h1-size);--inline-title-style:var(--h1-style);--inline-title-variant:var(--h1-variant);--inline-title-weight:var(--h1-weight);--inline-title-margin-bottom:0.5em;--input-height:30px;--input-radius:5px;--input-font-weight:var(--font-normal);--input-border-width:1px;--italic-color:inherit;--italic-weight:inherit;--layer-cover:5;--layer-sidedock:10;--layer-status-bar:15;--layer-popover:30;--layer-slides:45;--layer-modal:50;--layer-notice:60;--layer-menu:65;--layer-tooltip:70;--layer-dragged-item:80;--line-height-normal:1.5;--line-height-tight:1.3;--link-color:var(--text-accent);--link-color-hover:var(--text-accent-hover);--link-decoration:underline;--link-decoration-hover:underline;--link-decoration-thickness:auto;--link-weight:var(--font-weight);--link-external-color:var(--text-accent);--link-external-color-hover:var(--text-accent-hover);--link-external-decoration:underline;--link-external-decoration-hover:underline;--link-external-filter:none;--link-unresolved-color:var(--text-accent);--link-unresolved-opacity:0.7;--link-unresolved-filter:none;--link-unresolved-decoration-style:solid;--link-unresolved-decoration-color:hsla(var(--interactive-accent-hsl), 0.3);--list-indent:2.25em;--list-indent-editing:0.75em;--list-indent-source:0;--list-spacing:0.075em;--list-marker-color:var(--text-faint);--list-marker-color-hover:var(--text-muted);--list-marker-color-collapsed:var(--text-accent);--list-bullet-border:none;--list-bullet-radius:50%;--list-bullet-size:0.3em;--list-bullet-transform:none;--list-numbered-style:decimal;--list-bullet-end-padding:1.3rem;--nav-item-size:var(--font-ui-small);--nav-item-color:var(--text-muted);--nav-item-color-hover:var(--text-normal);--nav-item-color-active:var(--text-normal);--nav-item-color-selected:var(--text-normal);--nav-item-color-highlighted:var(--text-accent);--nav-item-background-hover:var(--background-modifier-hover);--nav-item-background-active:var(--background-modifier-hover);--nav-item-background-selected:hsla(var(--color-accent-hsl), 0.15);--nav-item-padding:var(--size-4-1) var(--size-4-2) var(--size-4-1) var(--size-4-6);--nav-item-parent-padding:var(--nav-item-padding);--nav-item-children-padding-start:var(--size-2-2);--nav-item-children-margin-start:var(--size-4-3);--nav-item-weight:inherit;--nav-item-weight-hover:inherit;--nav-item-weight-active:inherit;--nav-item-white-space:pre;--nav-indentation-guide-width:var(--indentation-guide-width);--nav-indentation-guide-color:var(--indentation-guide-color);--nav-collapse-icon-color:var(--collapse-icon-color);--nav-collapse-icon-color-collapsed:var(--text-faint);--nav-heading-color:var(--text-normal);--nav-heading-color-hover:var(--text-normal);--nav-heading-color-collapsed:var(--text-faint);--nav-heading-color-collapsed-hover:var(--text-muted);--nav-heading-weight:var(--font-medium);--nav-heading-weight-hover:var(--font-medium);--metadata-background:transparent;--metadata-display-reading:block;--metadata-display-editing:block;--metadata-max-width:none;--metadata-padding:var(--size-4-2) 0;--metadata-border-color:var(--background-modifier-border);--metadata-border-radius:0;--metadata-border-width:0;--metadata-divider-color:var(--background-modifier-border);--metadata-divider-color-hover:transparent;--metadata-divider-color-focus:transparent;--metadata-divider-width:0;--metadata-gap:3px;--metadata-property-padding:0;--metadata-property-radius:6px;--metadata-property-radius-hover:6px;--metadata-property-radius-focus:6px;--metadata-property-background:transparent;--metadata-property-background-hover:transparent;--metadata-property-background-active:var(--background-modifier-hover);--metadata-label-background-hover:transparent;--metadata-label-background-active:var(--background-modifier-hover);--metadata-label-font-size:var(--font-smaller);--metadata-label-font-weight:inherit;--metadata-label-text-color:var(--text-muted);--metadata-label-text-color-hover:var(--text-muted);--metadata-label-width:9em;--metadata-input-height:calc(var(--font-text-size) * 1.75);--metadata-input-text-color:var(--text-normal);--metadata-input-font-size:var(--font-smaller);--metadata-input-background:transparent;--metadata-input-background-hover:transparent;--metadata-input-background-active:var(--background-modifier-hover);--metadata-sidebar-label-font-size:var(--font-ui-small);--metadata-sidebar-input-font-size:var(--font-ui-small);--modal-background:var(--background-primary);--modal-width:90vw;--modal-height:85vh;--modal-max-width:1100px;--modal-max-height:1000px;--modal-max-width-narrow:800px;--modal-border-width:var(--border-width);--modal-border-color:var(--color-base-40, var(--background-modifier-border-focus));--modal-radius:var(--radius-l);--modal-community-sidebar-width:280px;--pill-color:var(--text-muted);--pill-color-hover:var(--text-normal);--pill-color-remove:var(--text-faint);--pill-color-remove-hover:var(--text-accent);--pill-decoration:none;--pill-decoration-hover:none;--pill-background:transparent;--pill-background-hover:transparent;--pill-border-color:var(--background-modifier-border);--pill-border-color-hover:var(--background-modifier-border-hover);--pill-border-width:var(--border-width);--pill-padding-x:0.65em;--pill-padding-y:0.25em;--pill-radius:2em;--pill-weight:inherit;--p-spacing:1rem;--p-spacing-empty:0rem;--pdf-background:var(--background-primary);--pdf-page-background:var(--background-primary);--pdf-shadow:0 0 0 1px rgba(0, 0, 0, 0.05),0 2px 8px rgba(0, 0, 0, 0.1);--pdf-spread-shadow:0 0 0 1px rgba(0, 0, 0, 0.05);--pdf-sidebar-background:var(--background-primary);--pdf-thumbnail-shadow:0 0 0 1px rgba(0, 0, 0, 0.15),0 2px 8px rgba(0, 0, 0, 0.2);--popover-width:450px;--popover-height:400px;--popover-max-height:95vh;--popover-pdf-width:450px;--popover-pdf-height:400px;--popover-font-size:var(--font-text-size);--prompt-input-height:40px;--prompt-width:700px;--prompt-max-width:80vw;--prompt-max-height:70vh;--prompt-border-width:var(--border-width);--prompt-border-color:var(--color-base-40, var(--background-modifier-border-focus));--radius-s:4px;--radius-m:8px;--radius-l:12px;--radius-xl:16px;--ribbon-background:var(--background-secondary);--ribbon-background-collapsed:var(--background-primary);--ribbon-width:44px;--ribbon-padding:var(--size-4-2) var(--size-4-1) var(--size-4-3);--scrollbar-active-thumb-bg:rgba(var(--mono-rgb-100), 0.2);--scrollbar-bg:rgba(var(--mono-rgb-100), 0.05);--scrollbar-thumb-bg:rgba(var(--mono-rgb-100), 0.1);--search-clear-button-color:var(--text-muted);--search-clear-button-size:13px;--search-icon-color:var(--text-muted);--search-icon-size:18px;--search-result-background:var(--background-primary);--size-2-1:2px;--size-2-2:4px;--size-2-3:6px;--size-4-1:4px;--size-4-2:8px;--size-4-3:12px;--size-4-4:16px;--size-4-5:20px;--size-4-6:24px;--size-4-8:32px;--size-4-9:36px;--size-4-10:40px;--size-4-12:48px;--size-4-16:64px;--size-4-18:72px;--sidebar-markdown-font-size:calc(var(--font-text-size) * 0.9);--sidebar-tab-text-display:none;--slider-thumb-border-width:1px;--slider-thumb-border-color:var(--background-modifier-border-hover);--slider-thumb-height:18px;--slider-thumb-width:18px;--slider-thumb-y:-6px;--slider-thumb-radius:50%;--slider-s-thumb-size:15px;--slider-s-thumb-position:-5px;--slider-track-background:var(--background-modifier-border);--slider-track-height:3px;--status-bar-background:var(--background-secondary);--status-bar-border-color:var(--divider-color);--status-bar-border-width:1px 0 0 1px;--status-bar-font-size:var(--font-ui-smaller);--status-bar-text-color:var(--text-muted);--status-bar-position:fixed;--status-bar-radius:var(--radius-m) 0 0 0;--status-bar-scroll-padding:calc(var(--status-bar-font-size) + 18px);--sync-avatar-color-current-user:transparent;--sync-avatar-color-1:var(--color-red);--sync-avatar-color-2:var(--color-orange);--sync-avatar-color-3:var(--color-yellow);--sync-avatar-color-4:var(--color-green);--sync-avatar-color-5:var(--color-cyan);--sync-avatar-color-6:var(--color-blue);--sync-avatar-color-7:var(--color-purple);--sync-avatar-color-8:var(--color-pink);--swatch-radius:14px;--swatch-height:24px;--swatch-width:24px;--swatch-shadow:inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.15);--tab-background-active:var(--background-primary);--tab-text-color:var(--text-faint);--tab-text-color-active:var(--text-muted);--tab-text-color-focused:var(--text-muted);--tab-text-color-focused-active:var(--text-muted);--tab-text-color-focused-highlighted:var(--text-accent);--tab-text-color-focused-active-current:var(--text-normal);--tab-font-size:var(--font-ui-small);--tab-font-weight:inherit;--tab-container-background:var(--background-secondary);--tab-divider-color:var(--background-modifier-border-hover);--tab-outline-color:var(--divider-color);--tab-outline-width:1px;--tab-curve:6px;--tab-radius:var(--radius-s);--tab-radius-active:6px 6px 0 0;--tab-width:200px;--tab-max-width:320px;--tab-stacked-pane-width:700px;--tab-stacked-header-width:var(--header-height);--tab-stacked-font-size:var(--font-ui-small);--tab-stacked-font-weight:400;--tab-stacked-text-align:start;--tab-stacked-text-transform:rotate(0deg);--tab-stacked-text-writing-mode:vertical-lr;--tab-stacked-shadow:-8px 0 8px 0 rgba(0, 0, 0, 0.05);--table-background:transparent;--table-border-width:1px;--table-border-color:var(--background-modifier-border);--table-white-space:break-spaces;--table-header-background:var(--table-background);--table-header-background-hover:inherit;--table-header-border-width:var(--table-border-width);--table-header-border-color:var(--table-border-color);--table-header-font:inherit;--table-header-size:var(--table-text-size);--table-header-weight:calc(var(--font-weight) + var(--bold-modifier));--table-header-color:var(--text-normal);--table-line-height:var(--line-height-tight);--table-text-size:var(--font-text-size);--table-text-color:inherit;--table-column-min-width:6ch;--table-column-max-width:none;--table-column-alt-background:var(--table-background);--table-column-first-border-width:var(--table-border-width);--table-column-last-border-width:var(--table-border-width);--table-row-background-hover:var(--table-background);--table-row-alt-background:var(--table-background);--table-row-alt-background-hover:var(--table-background);--table-row-last-border-width:var(--table-border-width);--table-selection:hsla(var(--color-accent-hsl), 0.1);--table-selection-blend-mode:var(--highlight-mix-blend-mode);--table-selection-border-color:var(--interactive-accent);--table-selection-border-width:2px;--table-selection-border-radius:4px;--table-cell-vertical-alignment:top;--table-drag-handle-background:transparent;--table-drag-handle-background-active:var(--table-selection-border-color);--table-drag-handle-color:var(--text-faint);--table-drag-handle-color-active:var(--text-on-accent);--table-add-button-background:transparent;--table-add-button-border-width:var(--table-border-width);--table-add-button-border-color:var(--background-modifier-border);--tag-size:var(--font-smaller);--tag-color:var(--text-accent);--tag-color-hover:var(--text-accent);--tag-decoration:none;--tag-decoration-hover:none;--tag-background:hsla(var(--interactive-accent-hsl), 0.1);--tag-background-hover:hsla(var(--interactive-accent-hsl), 0.2);--tag-border-color:hsla(var(--interactive-accent-hsl), 0.15);--tag-border-color-hover:hsla(var(--interactive-accent-hsl), 0.15);--tag-border-width:0px;--tag-padding-x:0.65em;--tag-padding-y:0.25em;--tag-radius:2em;--tag-weight:inherit;--titlebar-background:var(--background-secondary);--titlebar-background-focused:var(--background-secondary-alt);--titlebar-border-width:0px;--titlebar-border-color:var(--background-modifier-border);--titlebar-text-color:var(--text-muted);--titlebar-text-color-focused:var(--text-normal);--titlebar-text-weight:var(--font-bold);--toggle-border-width:2px;--toggle-width:40px;--toggle-radius:18px;--toggle-thumb-color:white;--toggle-thumb-radius:18px;--toggle-thumb-height:18px;--toggle-thumb-width:18px;--toggle-s-border-width:2px;--toggle-s-width:34px;--toggle-s-thumb-height:15px;--toggle-s-thumb-width:15px;--vault-profile-font-size:var(--font-ui-small);--vault-profile-font-weight:var(--font-medium);--vault-profile-color:var(--text-normal);--vault-profile-color-hover:var(--vault-profile-color);--vault-name-font-size:var(--font-ui-small);--vault-name-font-weight:var(--font-medium);--vault-name-color:var(--text-normal);--workspace-background-translucent:rgba(var(--mono-rgb-0), 0.6);--accent-h:258;--accent-s:88%;--accent-l:66%;--background-primary:var(--color-base-00);--background-primary-alt:var(--color-base-10);--background-secondary:var(--color-base-20);--background-modifier-hover:rgba(var(--mono-rgb-100), 0.075);--background-modifier-active-hover:hsla(var(--interactive-accent-hsl), 0.15);--background-modifier-border:var(--color-base-30);--background-modifier-border-hover:var(--color-base-35);--background-modifier-border-focus:var(--color-base-40);--background-modifier-error-rgb:var(--color-red-rgb);--background-modifier-error:var(--color-red);--background-modifier-error-hover:var(--color-red);--background-modifier-success-rgb:var(--color-green-rgb);--background-modifier-success:var(--color-green);--background-modifier-message:rgba(0, 0, 0, 0.9);--background-modifier-form-field:var(--color-base-00);--text-normal:var(--color-base-100);--text-muted:var(--color-base-70);--text-faint:var(--color-base-50);--text-on-accent:white;--text-on-accent-inverted:black;--text-error:var(--color-red);--text-warning:var(--color-orange);--text-success:var(--color-green);--text-selection:hsla(var(--color-accent-hsl), 0.2);--text-highlight-bg-rgb:255,208,0;--text-highlight-bg:rgba(var(--text-highlight-bg-rgb), 0.4);--text-accent:var(--color-accent);--text-accent-hover:var(--color-accent-2);--interactive-normal:var(--color-base-00);--interactive-hover:var(--color-base-10);--interactive-accent-hsl:var(--color-accent-hsl);--interactive-accent:var(--color-accent-1);--interactive-accent-hover:var(--color-accent-2)}.theme-light{color-scheme:light;--highlight-mix-blend-mode:darken;--mono-rgb-0:255,255,255;--mono-rgb-100:0,0,0;--color-red-rgb:233,49,71;--color-red:#e93147;--color-orange-rgb:236,117,0;--color-orange:#ec7500;--color-yellow-rgb:224,172,0;--color-yellow:#e0ac00;--color-green-rgb:8,185,78;--color-green:#08b94e;--color-cyan-rgb:0,191,188;--color-cyan:#00bfbc;--color-blue-rgb:8,109,221;--color-blue:#086ddd;--color-purple-rgb:120,82,238;--color-purple:#7852ee;--color-pink-rgb:213,57,132;--color-pink:#d53984;--color-base-00:#ffffff;--color-base-05:#fcfcfc;--color-base-10:#fafafa;--color-base-20:#f6f6f6;--color-base-25:#e3e3e3;--color-base-30:#e0e0e0;--color-base-35:#d4d4d4;--color-base-40:#bdbdbd;--color-base-50:#ababab;--color-base-60:#707070;--color-base-70:#5c5c5c;--color-base-100:#222222;--color-accent-hsl:var(--accent-h),var(--accent-s),var(--accent-l);--color-accent:hsl(var(--accent-h), var(--accent-s), var(--accent-l));--color-accent-1:hsl(calc(var(--accent-h) - 1), calc(var(--accent-s) * 1.01), calc(var(--accent-l) * 1.075));--color-accent-2:hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15));--background-secondary-alt:var(--color-base-05);--background-modifier-box-shadow:rgba(0, 0, 0, 0.1);--background-modifier-cover:rgba(220, 220, 220, 0.4);--input-shadow:inset 0 0 0 1px rgba(0, 0, 0, 0.12),0 2px 3px 0 rgba(0,0,0,.05),0 1px 1.5px 0 rgba(0,0,0,.03),0 1px 2px 0 rgba(0,0,0,.04),0 0 0 0 transparent;--input-shadow-hover:inset 0 0 0 1px rgba(0, 0, 0, 0.17),0 2px 3px 0 rgba(0,0,0,.1),0 1px 1.5px 0 rgba(0,0,0,.03),0 1px 2px 0 rgba(0,0,0,.04),0 0 0 0 transparent;--shadow-s:0px 1px 2px rgba(0, 0, 0, 0.028),0px 3.4px 6.7px rgba(0, 0, 0, .042),0px 15px 30px rgba(0, 0, 0, .07);--shadow-l:0px 1.8px 7.3px rgba(0, 0, 0, 0.071),0px 6.3px 24.7px rgba(0, 0, 0, 0.112),0px 30px 90px rgba(0, 0, 0, 0.2)}.theme-dark{color-scheme:dark;--highlight-mix-blend-mode:lighten;--mono-rgb-0:0,0,0;--mono-rgb-100:255,255,255;--color-red-rgb:251,70,76;--color-red:#fb464c;--color-orange-rgb:233,151,63;--color-orange:#e9973f;--color-yellow-rgb:224,222,113;--color-yellow:#e0de71;--color-green-rgb:68,207,110;--color-green:#44cf6e;--color-cyan-rgb:83,223,221;--color-cyan:#53dfdd;--color-blue-rgb:2,122,255;--color-blue:#027aff;--color-purple-rgb:168,130,255;--color-purple:#a882ff;--color-pink-rgb:250,153,205;--color-pink:#fa99cd;--color-base-00:#1e1e1e;--color-base-05:#212121;--color-base-10:#242424;--color-base-20:#262626;--color-base-25:#2a2a2a;--color-base-30:#363636;--color-base-35:#3f3f3f;--color-base-40:#555555;--color-base-50:#666666;--color-base-60:#999999;--color-base-70:#b3b3b3;--color-base-100:#dadada;--color-accent-hsl:var(--accent-h),var(--accent-s),var(--accent-l);--color-accent:hsl(var(--accent-h), var(--accent-s), var(--accent-l));--color-accent-1:hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15));--color-accent-2:hsl(calc(var(--accent-h) - 5), calc(var(--accent-s) * 1.05), calc(var(--accent-l) * 1.29));--background-modifier-form-field:var(--color-base-25);--background-secondary-alt:var(--color-base-30);--interactive-normal:var(--color-base-30);--interactive-hover:var(--color-base-35);--text-accent:var(--color-accent-1);--interactive-accent:var(--color-accent);--interactive-accent-hover:var(--color-accent-1);--background-modifier-box-shadow:rgba(0, 0, 0, 0.3);--background-modifier-cover:rgba(10, 10, 10, 0.4);--text-selection:hsla(var(--interactive-accent-hsl), 0.25);--input-shadow:inset 0 0.5px 0.5px 0.5px rgba(255, 255, 255, 0.09),0 2px 4px 0 rgba(0,0,0,.15),0 1px 1.5px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.2),0 0 0 0 transparent;--input-shadow-hover:inset 0 0.5px 1px 0.5px rgba(255, 255, 255, 0.16),0 2px 3px 0 rgba(0,0,0,.3),0 1px 1.5px 0 rgba(0,0,0,.2),0 1px 2px 0 rgba(0,0,0,.4),0 0 0 0 transparent;--shadow-s:0px 1px 2px rgba(0, 0, 0, 0.121),0px 3.4px 6.7px rgba(0, 0, 0, 0.179),0px 15px 30px rgba(0, 0, 0, 0.3);--shadow-l:0px 1.8px 7.3px rgba(0, 0, 0, 0.071),0px 6.3px 24.7px rgba(0, 0, 0, 0.112),0px 30px 90px rgba(0, 0, 0, 0.2);--pdf-shadow:0 0 0 1px var(--background-modifier-border);--pdf-thumbnail-shadow:0 0 0 1px var(--background-modifier-border)}iframe{color-scheme:normal}@font-face{font-family:"Avenir Next";font-weight:400;font-style:normal;font-display:swap;src:url("../../lib/fonts/94f2f163d4b698242fef.otf")}@font-face{font-family:Inter;font-style:normal;font-weight:200;font-display:swap;src:url("../../lib/fonts/72505e6a122c6acd5471.woff2") format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url("../../lib/fonts/2d5198822ab091ce4305.woff2") format("woff2")}@font-face{font-family:Inter;font-weight:400;font-style:normal;font-display:swap;src:url("../../lib/fonts/c8ba52b05a9ef10f4758.woff2")}@font-face{font-family:Inter;font-weight:400;font-style:italic;font-display:swap;src:url("../../lib/fonts/cb10ffd7684cd9836a05.woff2")}@font-face{font-family:Inter;font-weight:600;font-style:normal;font-display:swap;src:url("../../lib/fonts/b5f0f109bc88052d4000.woff2")}@font-face{font-family:Inter;font-weight:800;font-style:normal;font-display:swap;src:url("../../lib/fonts/cbe0ae49c52c920fd563.woff2")}@font-face{font-family:Inter;font-weight:800;font-style:italic;font-display:swap;src:url("../../lib/fonts/535a6cf662596b3bd6a6.woff2")}@font-face{font-family:"Source Code Pro";font-weight:400;font-style:normal;font-display:swap;src:url("../../lib/fonts/70cc7ff27245e82ad414.ttf")}@font-face{font-family:"Source Code Pro";font-weight:400;font-style:italic;font-display:swap;src:url("../../lib/fonts/454577c22304619db035.ttf")}@font-face{font-family:"Source Code Pro";font-weight:700;font-style:normal;font-display:swap;src:url("../../lib/fonts/52ac8f3034507f1d9e53.ttf")}@font-face{font-family:"Source Code Pro";font-weight:700;font-style:italic;font-display:swap;src:url("../../lib/fonts/05b618077343fbbd92b7.ttf")}@font-face{font-family:"Flow Circular";font-display:swap;src:url("../../lib/fonts/4bb6ac751d1c5478ff3a.woff2")}@font-face{font-family:"??";unicode-range:U+0}body{--font-default:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Inter","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Microsoft YaHei Light",sans-serif;--font-monospace-default:ui-monospace,SFMono-Regular,"Cascadia Mono","Roboto Mono","DejaVu Sans Mono","Liberation Mono",Menlo,Monaco,"Consolas","Source Code Pro",monospace;--font-interface-override:'??';--font-interface-theme:'??';--font-interface:var(--font-interface-override),var(--font-interface-theme),var(--default-font, '??'),var(--font-default);--font-text-override:'??';--font-text-theme:'??';--font-text:var(--font-text-override),var(--font-text-theme),var(--font-interface);--font-print-override:'??';--font-print:var(--font-print-override),var(--font-text-override),var(--font-text-theme),'Arial';--font-monospace-override:'??';--font-monospace-theme:'??';--font-monospace:var(--font-monospace-override),var(--font-monospace-theme),var(--font-monospace-default);--font-text-size:16px;--font-mermaid:var(--font-text)}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%;width:100%;overscroll-behavior:none}body{text-rendering:optimizelegibility;font-family:var(--font-interface);line-height:var(--line-height-tight);font-size:var(--font-ui-medium);background-color:var(--background-primary);color:var(--text-normal);-webkit-tap-highlight-color:rgba(255,255,255,0)}.node-insert-event{animation-duration:10ms;animation-name:node-inserted}.is-flashing{transition:all .25s ease 0s;color:var(--text-normal);mix-blend-mode:var(--highlight-mix-blend-mode);border-radius:var(--radius-s);background-color:var(--text-highlight-bg)!important}body{user-select:none;caret-color:var(--caret-color)}body [contenteditable=""],body [contenteditable=true]{user-select:text}body.is-grabbing{cursor:grabbing!important}body.is-grabbing iframe:not(.is-controlled),body.is-grabbing webview{pointer-events:none}.app-container{display:flex;height:100%;width:100%;position:relative;flex-direction:column}.app-container.no-transition *{transition:none 0s ease 0s!important}.horizontal-main-container{width:100%;display:flex;overflow:hidden;flex:1 0 0px}:focus{outline:0}.is-text-garbled *{font-family:"Flow Circular",sans-serif!important;line-height:1.45em!important}.markdown-source-view.mod-cm6.is-readable-line-width .cm-line.HyperMD-table-row{max-width:100%}.markdown-source-view.mod-cm6 .cm-content>[contenteditable=false]{contain:paint!important}.markdown-source-view.mod-cm6 .cm-table-widget{white-space:normal;overflow-wrap:normal;word-break:normal}.markdown-source-view.mod-cm6 .cm-table-widget{--table-drag-handle-size:var(--size-4-4);padding:var(--table-drag-handle-size);overflow:auto hidden;margin:0 calc(-1 * var(--size-4-4))!important}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget{--table-drag-handle-size:var(--size-4-6)}.markdown-source-view.mod-cm6 .cm-table-widget.is-loading{padding:0;margin:0!important}.markdown-source-view.mod-cm6 .cm-table-widget .table-wrapper{position:relative;width:fit-content}.markdown-source-view.mod-cm6 .cm-table-widget tr{height:1px}.markdown-source-view.mod-cm6 .cm-table-widget td,.markdown-source-view.mod-cm6 .cm-table-widget th{height:inherit;min-width:var(--table-column-min-width);cursor:text;overflow:visible;padding:0;position:relative}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected .table-cell-wrapper,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected .table-cell-wrapper{user-select:none}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected::after{pointer-events:none;content:"";display:block;position:absolute;top:calc(-1 * var(--table-border-width));inset-inline-end:calc(-1 * var(--table-border-width));bottom:calc(-1 * var(--table-border-width));inset-inline-start:calc(-1 * var(--table-border-width));background-color:var(--table-selection);border:0 solid var(--table-selection-border-color);mix-blend-mode:var(--table-selection-blend-mode);z-index:1}.markdown-source-view.mod-cm6 .cm-table-widget td.top::after,.markdown-source-view.mod-cm6 .cm-table-widget th.top::after{border-top-width:var(--table-selection-border-width);top:calc(-1 * var(--table-selection-border-width))}.markdown-source-view.mod-cm6 .cm-table-widget td.bottom::after,.markdown-source-view.mod-cm6 .cm-table-widget th.bottom::after{border-bottom-width:var(--table-selection-border-width);bottom:calc(-1 * var(--table-selection-border-width))}.markdown-source-view.mod-cm6 .cm-table-widget.has-selection{--text-selection:transparent}.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-content{caret-color:transparent}.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-cursorLayer,.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-selectionLayer{display:none}.markdown-source-view.mod-cm6 .cm-table-widget.is-selected{--text-selection:transparent}.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table{position:relative}.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table::after{pointer-events:none;content:"";display:block;position:absolute;top:calc(-1 * var(--table-border-width));inset-inline-end:calc(-1 * var(--table-border-width));bottom:calc(-1 * var(--table-border-width));inset-inline-start:calc(-1 * var(--table-border-width));background-color:var(--table-selection)}.markdown-source-view.mod-cm6 .cm-table-widget .table-cell-wrapper{height:100%;padding:var(--size-2-2) var(--size-4-2)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle{--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width);position:absolute;display:flex;align-items:center;justify-content:center;cursor:grab;background-color:var(--table-drag-handle-background);color:var(--table-drag-handle-color);touch-action:none;opacity:0}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active,.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:hover,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:hover{opacity:1}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active{cursor:grabbing;background-color:var(--table-drag-handle-background-active);color:var(--table-drag-handle-color-active);box-shadow:0 0 0 var(--table-selection-border-width) var(--table-selection-border-color)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle *,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle *{pointer-events:none}.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle{top:0;inset-inline-end:100%;width:calc(var(--table-drag-handle-size) - var(--table-selection-border-width));height:100%;border-start-start-radius:var(--radius-s);border-end-start-radius:var(--radius-s)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle{inset-block-end:100%;width:100%;height:calc(var(--table-drag-handle-size) - var(--table-selection-border-width));border-start-start-radius:var(--radius-s);border-start-end-radius:var(--radius-s)}.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-col-drag-handle,.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-row-drag-handle{display:none}.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-col-drag-handle:active,.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-row-drag-handle:active{display:flex}.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target{position:absolute;border-radius:2px;background-color:var(--interactive-accent)}.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target.mod-row{height:3px;transform:translateY(-2px)}.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target.mod-col{width:3px;transform:translateX(-2px)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn{--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width);position:absolute;display:flex;align-items:center;justify-content:center;height:var(--table-drag-handle-size);width:var(--table-drag-handle-size);background-color:var(--table-add-button-background);border:var(--table-add-button-border-width) solid var(--table-add-button-border-color);color:var(--text-faint);transition:opacity 0s ease .1s;opacity:0;user-select:none}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn:hover,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn:hover{opacity:1}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle,.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle{display:none}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .mod-active-col-handle>.table-col-drag-handle,.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .mod-active-row-handle>.table-row-drag-handle{opacity:1;display:flex}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget:not(.has-focus) .table-col-btn,.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget:not(.has-focus) .table-row-btn{pointer-events:none}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget.has-focus .table-col-btn,.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget.has-focus .table-row-btn{opacity:1}.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn{top:100%;inset-inline-start:0px;width:100%;border-top:none;cursor:s-resize}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn{top:0;height:100%}.markdown-source-view.mod-cm6 .cm-table-widget .cm-editor{flex-basis:content}.markdown-source-view.mod-cm6 .cm-table-widget .cm-content,.markdown-source-view.mod-cm6 .cm-table-widget .cm-line{max-width:none}.markdown-source-view.mod-cm6 .cm-table-widget .cm-content{width:auto}.markdown-source-view.mod-cm6 .cm-table-widget .cm-content.cm-lineWrapping{overflow-wrap:normal;white-space:var(--table-white-space);word-break:normal}.markdown-source-view.mod-cm6 .cm-table-widget .cm-scroller{overflow-y:hidden;scrollbar-gutter:auto;line-height:var(--table-line-height)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn{inset-inline-start:100%;border-inline-start:none;cursor:e-resize}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.start::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.start::after{border-inline-start-width:var(--table-selection-border-width);inset-inline-start:calc(-1 * var(--table-selection-border-width))}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.end::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.end::after{border-inline-end-width:var(--table-selection-border-width);inset-inline-end:calc(-1 * var(--table-selection-border-width))}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.end::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.end::after{border-start-end-radius:var(--table-selection-border-radius)}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.end::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.end::after{border-end-end-radius:var(--table-selection-border-radius)}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.start::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.start::after{border-start-start-radius:var(--table-selection-border-radius)}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.start::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.start::after{border-end-start-radius:var(--table-selection-border-radius)}.markdown-source-view.mod-cm6 .cm-panels.cm-panels-bottom input[type=text]:focus{background-color:transparent;box-shadow:none}.empty-state{position:absolute;height:100%;width:100%;top:0;inset-inline-start:0px;display:flex;align-items:center;justify-content:center;flex-direction:column}.empty-state-container{max-width:480px;max-height:280px;margin:20px;text-align:center}.empty-state-title{margin:20px 0;font-weight:var(--h2-weight);font-size:var(--h2-size);line-height:var(--line-height-tight);position:relative}.empty-state-action-list{font-size:var(--font-text-size);line-height:var(--line-height-tight);color:var(--text-muted);margin-top:20px}.empty-state-action{cursor:var(--cursor);line-height:36px;color:var(--text-accent)}.empty-state-close-button{display:none}body{--zoom-factor:1;--titlebar-height:30px}.pane-empty{color:var(--text-faint);font-size:var(--font-ui-small);margin:var(--size-4-2) auto;padding:var(--size-4-6) var(--size-4-4);text-align:center}.pane-empty .pane-empty-actions{margin-top:var(--size-4-4)}.view-header-title::-webkit-scrollbar{display:none}.view-content{width:100%;height:calc(100% - var(--header-height))}.inline-title{font-weight:var(--inline-title-weight);font-size:var(--inline-title-size);line-height:var(--inline-title-line-height);font-style:var(--inline-title-style);font-variant:var(--inline-title-variant);font-family:var(--inline-title-font);margin-bottom:var(--inline-title-margin-bottom);letter-spacing:-.015em;color:var(--inline-title-color);white-space:pre-wrap}.inline-embed .inline-title{display:none}body:not(.show-inline-title) .inline-title:not([data-level]){display:none}::selection{background-color:var(--text-selection)}.markdown-reading-view{display:flex;flex-direction:column}.markdown-preview-view{font-size:var(--font-text-size);font-family:var(--font-text);line-height:var(--line-height-normal);width:100%;height:100%;padding:var(--file-margins);position:relative;overflow-y:auto;overflow-wrap:break-word;color:var(--text-normal);user-select:text;scrollbar-gutter:stable}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer{max-width:var(--file-line-width);margin-left:auto;margin-right:auto}.markdown-rendered.rtl{direction:rtl}body:not(.show-ribbon){--ribbon-width:0px}.side-dock-actions{flex-direction:column}.side-dock-actions .side-dock-ribbon-action{margin:0 auto}.release-notes-view{padding:var(--file-margins)}.release-notes-view .markdown-preview-view{overflow:visible}.release-notes-view .is-readable-line-width{max-width:var(--file-line-width);margin-left:auto;margin-right:auto}.inline-title,.metadata-property-key-input,.multi-select-pill-content,.nav-file-title-content,.nav-folder-title-content,.search-result-file-match,.tree-item-inner,input{unicode-bidi:plaintext}[dir=ltr],body{--direction:1}.mod-rtl,[dir=rtl]{--direction:-1}.is-rtl,.mod-rtl,.rtl{--callout-padding:var(--size-4-3) var(--size-4-6) var(--size-4-3) var(--size-4-3);--embed-padding:0 var(--size-4-6) 0 0;--nav-item-padding:var(--size-4-1) var(--size-4-6) var(--size-4-1) var(--size-4-2)}.is-rtl .metadata-container,.mod-rtl .metadata-container,.rtl .metadata-container{--direction:-1}.is-rtl .metadata-container,.is-rtl input.metadata-input-number,.is-rtl input.metadata-property-key-input,.mod-rtl .metadata-container,.mod-rtl input.metadata-input-number,.mod-rtl input.metadata-property-key-input,.rtl .metadata-container,.rtl input.metadata-input-number,.rtl input.metadata-property-key-input{text-align:right}.is-rtl input[type=date],.is-rtl input[type=datetime-local],.mod-rtl input[type=date],.mod-rtl input[type=datetime-local],.rtl input[type=date],.rtl input[type=datetime-local]{direction:rtl}.is-rtl input[type=date]::-webkit-calendar-picker-indicator,.is-rtl input[type=datetime-local]::-webkit-calendar-picker-indicator,.mod-rtl input[type=date]::-webkit-calendar-picker-indicator,.mod-rtl input[type=datetime-local]::-webkit-calendar-picker-indicator,.rtl input[type=date]::-webkit-calendar-picker-indicator,.rtl input[type=datetime-local]::-webkit-calendar-picker-indicator{right:var(--size-4-1);left:auto}.mod-rtl{--dropdown-background-position:left 0.5em top 50%,0 0;--dropdown-padding:0 0.8em 0 1.9em;--tab-stacked-text-transform:rotate(180deg)}.mod-rtl .canvas-wrapper{direction:ltr}.mod-rtl .modal,.mod-rtl .notice{direction:rtl}.mod-rtl input{text-align:right}.mod-rtl .checkbox-container,.mod-rtl .search-input-container::before{transform:scale(-1,1)}.popupWrapper{--pdf-popup-width:280px;font-size:var(--font-ui-medium);pointer-events:none;position:absolute;transform:translate(-50%,0);z-index:10000}.popupWrapper>div{margin:var(--size-4-3);background-color:var(--background-primary);border-radius:var(--radius-s);filter:drop-shadow(rgba(0, 0, 0, .2) 0px 0px 1px) drop-shadow(rgba(0, 0, 0, .3) 0px 1px 2px) drop-shadow(rgba(0, 0, 0, .3) 0px 4px 6px)}.popupWrapper>div::after{background:var(--background-primary);border-start-start-radius:2px;content:"";height:var(--size-4-3);inset-inline-start:calc(50% - 2px);position:absolute;top:-5px;transform:rotate(45deg);width:var(--size-4-3);z-index:-1}.popup{cursor:initial;display:flex;flex-direction:column;pointer-events:auto;user-select:text;white-space:normal;width:var(--pdf-popup-width);overflow-wrap:break-word}.popupContent{font-size:var(--font-ui-small);line-height:var(--line-height-tight);max-height:200px;overflow:auto;padding:var(--size-4-4)}.popupContent:empty{display:none}.popupMeta{--icon-size:var(--font-ui-small);--icon-stroke:2.5px;align-items:center;background-color:var(--background-secondary);border-top:1px solid var(--background-modifier-border);color:var(--text-muted);display:flex;font-size:var(--font-ui-smaller);gap:var(--size-4-1);justify-content:space-between;padding:var(--size-4-1) var(--size-4-2);border-bottom-left-radius:var(--radius-s);border-bottom-right-radius:var(--radius-s)}.popupContent:empty+.popupMeta{border-top:none;background-color:var(--background-primary);border-top-left-radius:var(--radius-s);border-top-right-radius:var(--radius-s)}.popupMeta .clickable-icon{margin-inline-end:calc(var(--size-4-1) * -1);margin-inline-start:calc(var(--size-2-1) * -1)}.popupDate{white-space:nowrap}.markdown-rendered video{max-width:100%;outline:0}.markdown-rendered blockquote{color:var(--blockquote-color);font-style:var(--blockquote-font-style);background-color:var(--blockquote-background-color);border-inline-start:var(--blockquote-border-thickness) solid var(--blockquote-border-color);padding-top:0;padding-bottom:0;padding-inline-start:var(--size-4-6);margin-inline:0px}.markdown-rendered blockquote>:first-child{margin-top:0}.markdown-rendered blockquote>:last-child{margin-bottom:0}.callout{--callout-color:var(--callout-default);--callout-icon:lucide-pencil}.callout[data-callout=abstract],.callout[data-callout=summary],.callout[data-callout=tldr]{--callout-color:var(--callout-summary);--callout-icon:lucide-clipboard-list}.callout[data-callout=info]{--callout-color:var(--callout-info);--callout-icon:lucide-info}.callout[data-callout=todo]{--callout-color:var(--callout-todo);--callout-icon:lucide-check-circle-2}.callout[data-callout=important]{--callout-color:var(--callout-important);--callout-icon:lucide-flame}.callout[data-callout=hint],.callout[data-callout=tip]{--callout-color:var(--callout-tip);--callout-icon:lucide-flame}.callout[data-callout=check],.callout[data-callout=done],.callout[data-callout=success]{--callout-color:var(--callout-success);--callout-icon:lucide-check}.callout[data-callout=faq],.callout[data-callout=help],.callout[data-callout=question]{--callout-color:var(--callout-question);--callout-icon:help-circle}.callout[data-callout=attention],.callout[data-callout=caution],.callout[data-callout=warning]{--callout-color:var(--callout-warning);--callout-icon:lucide-alert-triangle}.callout[data-callout=fail],.callout[data-callout=failure],.callout[data-callout=missing]{--callout-color:var(--callout-fail);--callout-icon:lucide-x}.callout[data-callout=danger],.callout[data-callout=error]{--callout-color:var(--callout-error);--callout-icon:lucide-zap}.callout[data-callout=bug]{--callout-color:var(--callout-bug);--callout-icon:lucide-bug}.callout[data-callout=example]{--callout-color:var(--callout-example);--callout-icon:lucide-list}.callout[data-callout=cite],.callout[data-callout=quote]{--callout-color:var(--callout-quote);--callout-icon:quote-glyph}.callout{overflow:hidden;border-style:solid;border-color:rgba(var(--callout-color),var(--callout-border-opacity));border-width:var(--callout-border-width);border-radius:var(--callout-radius);margin:1em 0;mix-blend-mode:var(--callout-blend-mode);background-color:rgba(var(--callout-color),.1);padding:var(--callout-padding)}.callout.is-collapsible .callout-title{cursor:var(--cursor)}.callout-title{padding:var(--callout-title-padding);display:flex;gap:var(--size-4-1);font-size:var(--callout-title-size);color:rgb(var(--callout-color));line-height:var(--line-height-tight);align-items:flex-start}.callout-content{overflow-x:auto;padding:var(--callout-content-padding);background-color:var(--callout-content-background)}.callout-content .callout{margin-top:20px}.callout-icon{flex:0 0 auto;display:flex;align-items:center}.callout-icon .svg-icon{color:rgb(var(--callout-color))}.callout-icon::after{content:"​"}.callout-title-inner{--font-weight:var(--callout-title-weight);font-weight:var(--font-weight);color:var(--callout-title-color)}.callout-fold{display:flex;align-items:center;padding-inline-end:var(--size-4-2)}.callout-fold::after{content:"​"}.callout-fold .svg-icon{transition:transform .1s ease-in-out 0s}.callout-fold.is-collapsed .svg-icon{transform:rotate(calc(var(--direction) * -1 * 90deg))}.markdown-rendered code{color:var(--code-normal);font-family:var(--font-monospace);background-color:var(--code-background);border-radius:var(--code-radius);font-size:var(--code-size);padding:.1em .25em;-webkit-box-decoration-break:clone}.cm-s-obsidian span.cm-inline-code span.cm-inline-code.hmd-hidden-token{font-size:0px}.markdown-rendered pre{position:relative;padding:var(--size-4-3) var(--size-4-4);min-height:38px;background-color:var(--code-background);border-radius:var(--code-radius);white-space:var(--code-white-space);overflow-x:auto}.markdown-rendered pre code{border:none;padding:0;background-color:transparent}.markdown-rendered pre:not(:hover)>button.copy-code-button{display:none}.markdown-rendered button.copy-code-button{margin:6px;padding:6px 8px;height:auto;background-color:transparent;box-shadow:none;color:var(--text-muted);font-size:var(--font-ui-smaller);font-family:var(--font-interface);position:absolute;top:0;inset-inline-end:0px}code[class*=language-],pre[class*=language-]{color:var(--code-normal);background:0 0;overflow-wrap:break-word;white-space:pre-wrap;word-break:normal;direction:ltr;font-family:var(--font-monospace);text-align:left;word-spacing:normal;line-height:var(--line-height-normal);hyphens:none}:not(pre)>code[class*=language-],pre[class*=language-]{background:var(--code-background)}pre[class*=language-]{overflow:hidden}code[class*=language-]{display:block;padding:1em;overflow:auto}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--code-comment)}.token.namespace{opacity:.7}.token.constant,.token.deleted,.token.symbol,.token.tag{color:var(--code-tag)}.token.punctuation{color:var(--code-punctuation)}.token.boolean,.token.number{color:var(--code-value)}.token.attr-name,.token.char,.token.inserted,.token.selector,.token.string{color:var(--code-string)}.token.operator{color:var(--code-operator)}.language-css .token.string,.style .token.string,.token.entity,.token.parameter,.token.property,.token.url,.token.variable{color:var(--code-property)}.token.atrule,.token.attr-value,.token.builtin,.token.class-name,.token.function,.token.property-access{color:var(--code-function)}.token.keyword{color:var(--code-keyword)}.token.important,.token.regex{color:var(--code-important)}.markdown-preview-view .markdown-embed .markdown-preview-view{--file-folding-offset:0px;height:100%;padding:0}.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h1,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h2,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h3,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h4,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h5,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h6{margin-top:0}.file-embed,.markdown-embed{position:relative}.file-embed-link,.markdown-embed-link{position:absolute;top:4px;inset-inline-end:4px;color:var(--icon-color);opacity:var(--icon-opacity);cursor:var(--cursor-link);padding:var(--size-2-2);border-radius:var(--radius-s);display:flex;align-items:center;--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width)}.file-embed-title{display:flex;align-items:center;justify-content:center;gap:var(--size-4-2)}.file-embed-icon{color:var(--text-muted);display:flex}.file-embed{display:flex;justify-content:center;border-radius:var(--radius-m);background-color:var(--background-primary-alt)}.file-embed.mod-empty,.file-embed.mod-generic{cursor:var(--cursor-link);padding:var(--size-4-2);color:var(--text-muted);text-align:center;font-size:var(--font-smaller)}.file-embed.mod-empty-attachment{padding:var(--size-4-2);color:var(--text-muted);text-align:center;font-size:var(--font-smaller)}.markdown-embed-content{height:100%}.embed-title{align-items:center;display:flex;gap:var(--size-4-1);font-size:var(--font-text-size);font-weight:calc(var(--font-weight) + var(--bold-modifier));text-align:start;text-overflow:ellipsis;white-space:nowrap;padding:0 0 var(--size-4-2) 0}.markdown-embed{font-style:var(--embed-font-style);background-color:var(--embed-background);border-top:var(--embed-border-top);border-inline-end:var(--embed-border-end,var(--embed-border-right));border-bottom:var(--embed-border-bottom);border-inline-start:var(--embed-border-start,var(--embed-border-left));margin:0;padding:var(--embed-padding)}.markdown-embed .markdown-preview-view{padding:0}.internal-embed:not(.image-embed){display:block}.internal-embed audio,.internal-embed img:not([width]),.internal-embed video{max-width:100%}.inline-embed .markdown-embed-content{height:fit-content;max-height:var(--embed-max-height);overflow:auto}.inline-embed .markdown-embed-content p:first-child{margin-top:0}.inline-embed .markdown-source-view.mod-cm6 .cm-editor{min-height:unset}.embed-iframe{width:100%;height:100%}iframe.external-embed{width:600px;max-width:100%;height:350px}.footnote-link{text-decoration:none}.footnotes{font-size:var(--footnote-size)}.footnote-ref{vertical-align:super}.footnote-backref{display:inline-block;margin-inline-start:var(--size-4-1);color:var(--text-faint);text-decoration:none}.markdown-rendered .frontmatter.mod-failed{position:relative}.markdown-rendered .frontmatter.mod-failed .mod-error{color:var(--text-error);font-size:var(--font-smaller)}.markdown-rendered .frontmatter.mod-failed::after{content:"";position:absolute;top:0;inset-inline-end:0px;width:100%;height:100%;background-color:var(--background-modifier-error);opacity:.3;mix-blend-mode:var(--highlight-mix-blend-mode)}.metadata-container{--input-height:var(--metadata-input-height);border-radius:var(--metadata-border-radius);background-color:var(--metadata-background);border-color:var(--metadata-border-color);border-style:solid;border-width:var(--metadata-border-width);padding:var(--metadata-padding);color:var(--text-muted);position:relative;max-width:var(--metadata-max-width);margin-block-end:var(--p-spacing);transform:translateX(calc(var(--size-4-1) * -1 * var(--direction)))}.metadata-container .metadata-add-button{padding-inline-start:var(--size-2-3);margin-top:.5em;font-size:var(--metadata-label-font-size)}.markdown-embed-content .metadata-container{display:none}.metadata-container.is-collapsed .metadata-property{display:none}.metadata-container:focus-within .metadata-property.is-selected{color:var(--nav-item-color-selected);background-color:var(--nav-item-background-selected)}.metadata-properties{display:flex;flex-direction:column;gap:var(--metadata-gap)}.metadata-properties-heading{display:inline-block;padding:var(--size-4-1);margin-bottom:var(--size-4-2);position:relative;line-height:1.2}.metadata-properties-heading::before{content:"";border-radius:var(--metadata-property-radius);position:absolute;display:inline-block;inset:0px}.metadata-properties-heading:focus::before{box-shadow:0 0 0 2px var(--background-modifier-border-focus)}.metadata-properties-heading .collapse-indicator{position:absolute;inset-inline-start:-22px;padding:0 6px}.metadata-properties-title{user-select:none;font-size:max(var(--font-ui-small), 1em);color:var(--text-normal);font-weight:var(--font-medium)}.metadata-input-text{background-color:transparent;width:100%;min-height:var(--input-height);border-width:0;resize:none;overflow-y:hidden}.metadata-input-text::-webkit-date-and-time-value{text-align:start}.metadata-input-text.mod-date{padding-inline-end:0px;width:auto}.metadata-property{position:relative;display:flex;align-items:start;padding:var(--metadata-property-padding);border-radius:var(--metadata-property-radius);overflow:hidden;background-color:var(--metadata-property-background)}.metadata-property:focus-within{background-color:var(--metadata-property-background-hover);--metadata-divider-color:var(--metadata-divider-color-focus);border-radius:var(--metadata-property-radius-focus);box-shadow:0 0 0 2px var(--background-modifier-border-focus)}.metadata-property-icon{cursor:var(--cursor);color:var(--icon-color);display:flex;align-items:center;padding:var(--size-4-1) 0;height:var(--input-height);user-select:none}.metadata-property-icon::before{content:"​";width:var(--size-4-1)}.metadata-input-number{background-color:transparent;width:100%;border-width:0}input[type=checkbox].metadata-input-checkbox{margin-inline-start:var(--size-4-2)}.metadata-property-key{display:flex;align-self:stretch;align-items:flex-start;flex-direction:row;flex-shrink:0;border-bottom:var(--metadata-divider-width) solid var(--metadata-divider-color);background-color:var(--metadata-label-background);width:var(--metadata-label-width);min-width:var(--metadata-label-width)}.metadata-property-key:focus-within{background-color:var(--metadata-label-background-active)}input.metadata-property-key-input{border:none;flex-grow:1;color:var(--metadata-label-text-color);font-size:var(--metadata-label-font-size);font-weight:var(--metadata-label-font-weight);height:var(--input-height);background-color:transparent;display:flex;align-items:center;text-overflow:ellipsis;overflow:hidden;text-align:left}input.metadata-property-key-input:active,input.metadata-property-key-input:focus{background-color:transparent}.metadata-property button{margin-top:var(--size-4-2)}.metadata-property .multi-select-container,.metadata-property input[type=date],.metadata-property input[type=datetime-local],.metadata-property input[type=number],.metadata-property input[type=text]{border-radius:0;border:none}.metadata-property .multi-select-container:active,.metadata-property .multi-select-container:focus,.metadata-property .multi-select-container:hover,.metadata-property input[type=date]:active,.metadata-property input[type=date]:focus,.metadata-property input[type=date]:hover,.metadata-property input[type=datetime-local]:active,.metadata-property input[type=datetime-local]:focus,.metadata-property input[type=datetime-local]:hover,.metadata-property input[type=number]:active,.metadata-property input[type=number]:focus,.metadata-property input[type=number]:hover,.metadata-property input[type=text]:active,.metadata-property input[type=text]:focus,.metadata-property input[type=text]:hover{box-shadow:none;border:none}.metadata-property .metadata-input-number,.metadata-property .metadata-input-text,.metadata-property .multi-select-container{background-color:transparent}.metadata-property .metadata-input-number:hover,.metadata-property .metadata-input-text:hover,.metadata-property .multi-select-container:hover{background-color:transparent}.metadata-property .metadata-input-number:active,.metadata-property .metadata-input-number:focus,.metadata-property .metadata-input-number:focus-within,.metadata-property .metadata-input-text:active,.metadata-property .metadata-input-text:focus,.metadata-property .metadata-input-text:focus-within,.metadata-property .multi-select-container:active,.metadata-property .multi-select-container:focus,.metadata-property .multi-select-container:focus-within{background-color:transparent}.metadata-property .metadata-input-text{text-overflow:ellipsis;overflow:hidden}.metadata-property .multi-select-container input{background-color:transparent}.metadata-property .multi-select-container{padding:var(--size-4-1) var(--size-4-2)}.metadata-property[data-property-key=tags]{--pill-color:var(--tag-color);--pill-color-hover:var(--tag-color-hover);--pill-color-remove:var(--tag-color);--pill-color-remove-hover:var(--tag-color-hover);--pill-decoration:var(--tag-decoration);--pill-decoration-hover:var(--tag-decoration-hover);--pill-background:var(--tag-background);--pill-background-hover:var(--tag-background-hover);--pill-border-color:var(--tag-border-color);--pill-border-color-hover:var(--tag-border-color-hover);--pill-border-width:var(--tag-border-width);--pill-padding-x:var(--tag-padding-x);--pill-padding-y:var(--tag-padding-y);--pill-radius:var(--tag-radius);--pill-weight:var(--tag-weight);--pill-focus-width:100%;--pill-focus-left-adjust:0}.metadata-property[data-property-key=tags] .multi-select-pill{cursor:var(--cursor-link)}.metadata-property:not([data-property-key=tags]){--pill-border-width:0;--pill-padding-x:0;--pill-padding-y:0;--pill-color:var(--metadata-input-text-color)}.metadata-property:not([data-property-key=tags]) .multi-select-pill{line-height:var(--line-height-tight)}.metadata-property-warning-icon{--icon-size:var(--icon-s);position:absolute;inset-inline-end:var(--size-2-1);top:var(--size-2-1);bottom:var(--size-2-1);align-items:center;display:flex;color:var(--text-warning)}.metadata-property-value{display:flex;flex:1 1 auto;gap:var(--size-2-2);align-items:center;align-self:stretch;min-height:var(--input-height);background-color:var(--metadata-input-background);border-bottom:var(--metadata-divider-width) solid var(--metadata-divider-color);overflow:hidden}.metadata-property-value.mod-external-link:not(:placeholder-shown){text-decoration-line:var(--link-decoration);text-decoration-thickness:var(--link-decoration-thickness);text-decoration-color:var(--text-faint)}.metadata-property-value .mod-unknown{color:var(--text-warning);padding:var(--size-4-1) var(--size-4-2);font-size:var(--metadata-input-font-size);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.metadata-property-value .multi-select-input{font-size:inherit}.metadata-property-value .metadata-link-inner,.metadata-property-value .multi-select-container,.metadata-property-value input{font-size:var(--metadata-input-font-size)}.metadata-property-value .multi-select-container{--background-modifier-form-field:transparent;--background-modifier-border:transparent;align-items:center}.metadata-property-value .multi-select-container .multi-select-pill.is-invalid{--pill-background:transparent;--pill-color:var(--text-error);--pill-color-remove:var(--text-error)}.metadata-property-value .external-link.multi-select-pill-content,.metadata-property-value .internal-link .multi-select-pill-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.metadata-property-value .clickable-icon{--icon-size:var(--icon-xs);--icon-stroke:var(--icon-xs-stroke-width);margin-inline:-4px 2px;padding:4px}.metadata-property-value .clickable-icon:hover{background:0 0;color:var(--text-normal);cursor:var(--cursor-link)}.metadata-property-value:focus-within{background-color:var(--metadata-input-background-active)}.metadata-input-longtext{cursor:text;white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:3;color:var(--metadata-input-text-color);font-size:var(--metadata-input-font-size);max-height:300px;overflow-y:auto;padding:var(--size-4-1) var(--size-4-2);width:100%}.metadata-input-longtext:focus{-webkit-line-clamp:unset}.metadata-input-longtext:not(:empty){display:-webkit-box}.metadata-input-longtext:empty::before{content:attr(placeholder);color:var(--text-faint)}.metadata-link{cursor:text;align-items:center;padding:var(--size-4-1) var(--size-4-2);display:flex;gap:var(--size-4-2);width:100%}.metadata-link-inner{cursor:var(--cursor-link);color:var(--link-color);text-decoration-line:var(--link-decoration);text-decoration-thickness:var(--link-decoration-thickness);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.metadata-link-flair{--icon-size:var(--icon-xs);background-color:transparent;cursor:text;margin-inline-start:auto;display:flex;align-items:center;justify-content:center;padding:var(--size-2-1);border-radius:var(--clickable-icon-radius);color:var(--icon-color);opacity:0;transition:opacity .15s ease-in-out 0s;height:auto}.markdown-preview-view .metadata-container{display:none}.markdown-preview-view.show-properties .metadata-container{display:var(--metadata-display-reading)}.markdown-preview-view.show-properties .metadata-container[data-property-count="0"]{display:none}.markdown-rendered li h1,.markdown-rendered li h2,.markdown-rendered li h3,.markdown-rendered li h4,.markdown-rendered li h5{margin-top:0;margin-bottom:0}.markdown-rendered div:has(> :is(p,pre,table,ul,ol))+div>:is(h1,h2,h3,h4,h5,h6){margin-top:var(--heading-spacing)}.markdown-rendered h1,h1{--font-weight:var(--h1-weight);font-variant:var(--h1-variant);letter-spacing:-.015em;line-height:var(--h1-line-height);font-size:var(--h1-size);color:var(--h1-color);font-weight:var(--font-weight);font-style:var(--h1-style);font-family:var(--h1-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h1 a,h1 a{--link-weight:var(--h1-weight)}.markdown-rendered h2,h2{--font-weight:var(--h2-weight);font-variant:var(--h2-variant);letter-spacing:-.015em;line-height:var(--h2-line-height);font-size:var(--h2-size);color:var(--h2-color);font-weight:var(--font-weight);font-style:var(--h2-style);font-family:var(--h2-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h2 a,h2 a{--link-weight:var(--h2-weight)}.markdown-rendered h3,h3{--font-weight:var(--h3-weight);font-variant:var(--h3-variant);letter-spacing:-.015em;line-height:var(--h3-line-height);font-size:var(--h3-size);color:var(--h3-color);font-weight:var(--font-weight);font-style:var(--h3-style);font-family:var(--h3-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h3 a,h3 a{--link-weight:var(--h3-weight)}.markdown-rendered h4,h4{--font-weight:var(--h4-weight);font-variant:var(--h4-variant);letter-spacing:.015em;line-height:var(--h4-line-height);font-size:var(--h4-size);color:var(--h4-color);font-weight:var(--font-weight);font-style:var(--h4-style);font-family:var(--h4-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h4 a,h4 a{--link-weight:var(--h4-weight)}.markdown-rendered h5,h5{--font-weight:var(--h5-weight);font-variant:var(--h5-variant);letter-spacing:.015em;font-size:var(--h5-size);line-height:var(--h5-line-height);color:var(--h5-color);font-weight:var(--font-weight);font-style:var(--h5-style);font-family:var(--h5-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h5 a,h5 a{--link-weight:var(--h5-weight)}.markdown-rendered h6,h6{--font-weight:var(--h6-weight);font-variant:var(--h6-variant);letter-spacing:.015em;font-size:var(--h6-size);line-height:var(--h6-line-height);color:var(--h6-color);font-weight:var(--font-weight);font-style:var(--h6-style);font-family:var(--h6-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h6 a,h6 a{--link-weight:var(--h6-weight)}.inline-title[data-level="1"]{--font-weight:var(--h1-weight);font-variant:var(--h1-variant);letter-spacing:-.015em;line-height:var(--h1-line-height);font-size:var(--h1-size);color:var(--h1-color);font-weight:var(--font-weight);font-style:var(--h1-style);font-family:var(--h1-font)}.inline-title[data-level="1"] a{--link-weight:var(--h1-weight)}.inline-title[data-level="2"]{--font-weight:var(--h2-weight);font-variant:var(--h2-variant);letter-spacing:-.015em;line-height:var(--h2-line-height);font-size:var(--h2-size);color:var(--h2-color);font-weight:var(--font-weight);font-style:var(--h2-style);font-family:var(--h2-font)}.inline-title[data-level="2"] a{--link-weight:var(--h2-weight)}.inline-title[data-level="3"]{--font-weight:var(--h3-weight);font-variant:var(--h3-variant);letter-spacing:-.015em;line-height:var(--h3-line-height);font-size:var(--h3-size);color:var(--h3-color);font-weight:var(--font-weight);font-style:var(--h3-style);font-family:var(--h3-font)}.inline-title[data-level="3"] a{--link-weight:var(--h3-weight)}.inline-title[data-level="4"]{--font-weight:var(--h4-weight);font-variant:var(--h4-variant);line-height:var(--h4-line-height);font-size:var(--h4-size);color:var(--h4-color);font-weight:var(--font-weight);font-style:var(--h4-style);font-family:var(--h4-font)}.inline-title[data-level="4"] a{--link-weight:var(--h4-weight)}.inline-title[data-level="5"]{--font-weight:var(--h5-weight);font-variant:var(--h5-variant);font-size:var(--h5-size);line-height:var(--h5-line-height);color:var(--h5-color);font-weight:var(--font-weight);font-style:var(--h5-style);font-family:var(--h5-font)}.inline-title[data-level="5"] a{--link-weight:var(--h5-weight)}.inline-title[data-level="6"]{--font-weight:var(--h6-weight);font-variant:var(--h6-variant);letter-spacing:.015em;font-size:var(--h6-size);line-height:var(--h6-line-height);color:var(--h6-color);font-weight:var(--font-weight);font-style:var(--h6-style);font-family:var(--h6-font)}.inline-title[data-level="6"] a{--link-weight:var(--h6-weight)}hr{border-right-width:initial;border-bottom-width:initial;border-left-width:initial;border-right-style:none;border-bottom-style:none;border-left-style:none;border-image:initial;border-color:var(--hr-color);margin:2rem 0}.markdown-rendered hr{border-right-width:initial;border-bottom-width:initial;border-left-width:initial;border-right-style:none;border-bottom-style:none;border-left-style:none;border-image:initial;border-color:var(--hr-color)}.cm-s-obsidian .hmd-fold-html-stub.omittable,.cm-s-obsidian .omittable.hmd-fold-code-stub{display:none}.cm-s-obsidian .hmd-fold-html:hover .hmd-fold-html-stub.omittable,.cm-s-obsidian .hmd-fold-html:hover .omittable.hmd-fold-code-stub{display:block;right:0;bottom:100%;margin:0;position:absolute;z-index:100}.markdown-preview-view img,.markdown-rendered img{image-rendering:-webkit-optimize-contrast}.markdown-preview-view img:not([width]),.markdown-rendered img:not([width]){max-width:100%;outline:0}.internal-query{margin:0;border-top:1px solid var(--background-modifier-border)}.internal-query .search-result-container{padding:var(--size-4-2);max-height:800px;overflow:auto;border:1px solid var(--background-modifier-border);background-color:var(--background-secondary);border-radius:var(--radius-m)}ol ol ul,ol ul,ol ul ul,ul ol ul,ul ul,ul ul ul{list-style-type:disc}ol{list-style-type:var(--list-numbered-style)}ol>li,ul>li{text-align:start}ol>li::marker,ul>li::marker{color:var(--list-marker-color)}ol>li.is-collapsed::marker,ul>li.is-collapsed::marker{color:var(--list-marker-color-collapsed)}.markdown-rendered ol,.markdown-rendered ul{padding-inline-start:0px;margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered ol ol,.markdown-rendered ol ul,.markdown-rendered ul ol,.markdown-rendered ul ul{margin-block:0px}.markdown-rendered ol li p:first-of-type,.markdown-rendered ul li p:first-of-type{margin-block-start:0px}.markdown-rendered ol li p:last-of-type,.markdown-rendered ul li p:last-of-type{margin-block-end:0px}.markdown-rendered ol>li,.markdown-rendered ul>li{margin-inline-start:var(--list-indent);padding-top:var(--list-spacing);padding-bottom:var(--list-spacing);position:relative}.markdown-preview-view ol>li,.markdown-preview-view ul>li{padding-top:var(--list-spacing);padding-bottom:var(--list-spacing)}.markdown-rendered .list-collapse-indicator{margin-inline-start:-2.65em;padding-inline-end:2em}.markdown-rendered .list-bullet{float:left;margin-inline-start:-.8em}.markdown-rendered .task-list-item>.list-bullet{display:none}.markdown-rendered ul.has-list-bullet{list-style-type:"​"}.markdown-rendered ul.has-list-bullet>li::marker{color:transparent}.list-bullet{color:transparent;position:relative;display:inline-flex;justify-content:center;align-items:center}.list-bullet::before{content:"​"}.list-bullet::after{position:absolute;content:"​";pointer-events:none;color:var(--list-marker-color);border-radius:var(--list-bullet-radius);width:var(--list-bullet-size);height:var(--list-bullet-size);border:var(--list-bullet-border);transform:var(--list-bullet-transform);background-color:var(--list-marker-color);transition:transform .15s ease 0s,box-shadow .15s ease 0s}.list-bullet::selection{background-color:transparent!important}li.is-collapsed .list-bullet::after{background-color:var(--list-marker-color-collapsed);box-shadow:0 0 0 4px var(--background-modifier-active-hover)}a{--font-weight:var(--link-weight);color:var(--link-color);font-weight:var(--link-weight);outline:0;text-decoration-line:var(--link-decoration);text-decoration-thickness:var(--link-decoration-thickness);cursor:var(--cursor-link);transition:opacity .15s ease-in-out 0s}.external-link{color:var(--link-external-color);text-decoration-line:var(--link-external-decoration);background-position:right 4px;background-repeat:no-repeat;background-image:linear-gradient(transparent,transparent),url("../../lib/media/874d8b8e340f75575caa.svg");background-size:13px;padding-inline-end:16px;cursor:var(--cursor-link);filter:var(--link-external-filter);transition:opacity .15s ease-in-out 0s}.markdown-rendered .internal-link,.metadata-container .internal-link{cursor:var(--cursor-link);text-decoration-line:var(--link-decoration);color:var(--link-color);transition:opacity .15s ease-in-out 0s}.markdown-rendered .internal-link.mobile-tap{opacity:.5}.markdown-rendered .internal-link.is-unresolved,.metadata-container .internal-link.is-unresolved{color:var(--link-unresolved-color);opacity:var(--link-unresolved-opacity);filter:var(--link-unresolved-filter);text-decoration-style:var(--link-unresolved-decoration-style);text-decoration-color:var(--link-unresolved-decoration-color)}.inline-block{display:inline-block;vertical-align:middle}.hidden-token{display:inline;letter-spacing:-1ch;font-family:monospace;color:transparent;font-size:1px!important}.cm-s-obsidian span.hmd-hidden-token.cm-formatting-code,.cm-s-obsidian span.hmd-hidden-token.cm-formatting-em,.cm-s-obsidian span.hmd-hidden-token.cm-formatting-link,.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strikethrough,.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strong{display:inline;letter-spacing:-1ch;font-family:monospace;color:transparent;font-size:1px!important}.cm-s-obsidian .cm-s-obsidian span.hmd-hidden-token.cm-formatting-task{color:transparent!important}mjx-container{outline:0}.markdown-reading-view table{margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.cm-html-embed table,.markdown-rendered table{border-collapse:collapse;line-height:var(--table-line-height)}.markdown-rendered td,.markdown-rendered th{padding:var(--size-2-2) var(--size-4-2);border:var(--table-border-width) solid var(--table-border-color);max-width:var(--table-column-max-width);min-width:var(--table-column-min-width);vertical-align:var(--table-cell-vertical-alignment)}.markdown-rendered td{font-size:var(--table-text-size);color:var(--table-text-color)}.markdown-rendered th{font-size:var(--table-header-size);font-weight:var(--table-header-weight);color:var(--table-header-color);font-family:var(--table-header-font);line-height:var(--line-height-tight)}.markdown-rendered td,.markdown-rendered th{text-align:start}.markdown-rendered td[align=left],.markdown-rendered th[align=left]{text-align:start}.markdown-rendered td[align=center],.markdown-rendered th[align=center]{text-align:center}.markdown-rendered td[align=right],.markdown-rendered th[align=right]{text-align:end}.markdown-rendered tbody>tr>td,.markdown-rendered thead>tr>th{white-space:var(--table-white-space);text-overflow:ellipsis;overflow:hidden}.markdown-rendered tbody tr{background-color:var(--table-background)}.markdown-rendered tbody tr:nth-child(odd){background-color:var(--table-row-alt-background)}.markdown-rendered tbody tr>td:nth-child(2n+2){background-color:var(--table-column-alt-background)}.markdown-rendered tbody tr:last-child>td{border-bottom-width:var(--table-row-last-border-width)}.markdown-rendered tbody tr>td:first-child{border-left-width:var(--table-column-first-border-width)}.markdown-rendered tbody tr>td:last-child{border-right-width:var(--table-column-last-border-width)}.markdown-rendered thead tr{background-color:var(--table-header-background)}.markdown-rendered thead tr>th{border-top-width:var(--table-header-border-width);border-color:var(--table-header-border-color)}.markdown-rendered thead tr>th:nth-child(2n+2){background-color:var(--table-column-alt-background)}.markdown-rendered thead tr>th:first-child{border-left-width:var(--table-column-first-border-width)}.markdown-rendered thead tr>th:last-child{border-right-width:var(--table-column-last-border-width)}.cm-s-obsidian .HyperMD-table-row{white-space:pre;word-break:normal;overflow-wrap:normal;font-size:.95em;font-family:var(--font-monospace)}.cm-s-obsidian .HyperMD-table-rtl{direction:rtl}.cm-s-obsidian .hmd-table-column,.cm-s-obsidian .hmd-table-column-content{display:inline-block}.cm-s-obsidian .hmd-table-column-left{text-align:left}.cm-s-obsidian .hmd-table-column-center{text-align:center}.cm-s-obsidian .hmd-table-column-right{text-align:right}.cm-s-obsidian .HyperMD-table-row span.cm-hmd-table-sep,.cm-s-obsidian .HyperMD-table-row-1{color:var(--text-faint)}.cm-s-obsidian .HyperMD-table-row-0{color:var(--table-header-color)}.cm-s-obsidian .hmd-fold-html table{border-collapse:collapse}.cm-s-obsidian .hmd-fold-html table td,.cm-s-obsidian .hmd-fold-html table th{padding:10px;border:1px solid #ccc}.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1{color:transparent;text-shadow:none}.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1>span{background:url("data:image/png; base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAQAAAAziH6sAAAADklEQVR42mOc+Z9x5n8ACTkDM4ikM1IAAAAASUVORK5CYII=") 0 center repeat-x}.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row span.cm-hmd-table-sep{color:transparent}.markdown-source-view.mod-cm6 .cm-line.HyperMD-table-row{min-width:max-content}.markdown-source-view.mod-cm6 .cm-table-widget table{margin-bottom:0}a.tag{background-color:var(--tag-background);border:var(--tag-border-width) solid var(--tag-border-color);border-radius:var(--tag-radius);color:var(--tag-color);font-size:var(--tag-size);font-weight:var(--tag-weight);text-decoration:var(--tag-decoration);padding:var(--tag-padding-y) var(--tag-padding-x);line-height:1}a.tag{background-color:var(--tag-background);border:var(--tag-border-width) solid var(--tag-border-color);border-radius:var(--tag-radius);color:var(--tag-color);font-size:var(--tag-size);font-weight:var(--tag-weight);text-decoration:var(--tag-decoration);padding:var(--tag-padding-y) var(--tag-padding-x);line-height:1}input[type=checkbox]{appearance:none;border-radius:var(--checkbox-radius);border:1px solid var(--checkbox-border-color);flex-shrink:0;padding:0;margin:0;margin-inline-end:6px;width:var(--checkbox-size);height:var(--checkbox-size);position:relative;transition:box-shadow .15s ease-in-out 0s}input[type=checkbox]:active,input[type=checkbox]:focus,input[type=checkbox]:hover{outline:0;border-color:var(--checkbox-border-color-hover)}input[type=checkbox]:focus-visible{box-shadow:0 0 0 2px var(--background-modifier-border-focus)}input[type=checkbox]:checked::after{content:"";top:-1px;inset-inline-start:-1px;position:absolute;width:var(--checkbox-size);height:var(--checkbox-size);display:block;background-color:var(--checkbox-marker-color);-webkit-mask-position:52% 52%;-webkit-mask-size:65%;-webkit-mask-repeat:no-repeat;-webkit-mask-image:url("data:image/svg+xml; utf8, ")}input[type=checkbox]:checked{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}input[type=checkbox][data-indeterminate=true]:not(:checked)::after{content:"";position:absolute;top:calc(var(--checkbox-size)/ 2 - 2px);width:calc(var(--checkbox-size) - 6px);left:0;right:0;margin:0 auto;height:2px;display:block;border-radius:2px;background-color:var(--text-normal)}.task-list-item-checkbox{width:var(--checkbox-size);height:var(--checkbox-size)}.markdown-preview-view .task-list-item-checkbox{position:relative;top:.2em;margin-inline-end:.6em}ul>li.task-list-item{list-style:none}ul>li.task-list-item .task-list-item-checkbox{margin-inline-start:calc(var(--checkbox-size) * -1.5)}ul>li.task-list-item[data-task="X"],ul>li.task-list-item[data-task="x"]{text-decoration:var(--checklist-done-decoration);color:var(--checklist-done-color)}.cm-s-obsidian span.hmd-hidden-token.cm-formatting-task{color:transparent!important}b,strong{font-weight:calc(var(--font-weight) + var(--bold-modifier));color:var(--bold-color)}b a,strong a{font-weight:calc(var(--link-weight) + var(--bold-modifier))}em,i{font-style:italic;color:var(--italic-color)}.markdown-rendered p{margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing);unicode-bidi:plaintext}.markdown-rendered mark{background-color:var(--text-highlight-bg);color:var(--text-normal)}.markdown-rendered mark .internal-link{color:var(--text-normal)}.outgoing-link-pane{padding-top:var(--size-4-3)}.outgoing-link-pane{overflow-y:auto;flex:1 0 0px;padding-inline-start:var(--size-4-3);padding-inline-end:var(--size-4-3);padding-bottom:var(--size-4-8)}.outgoing-link-pane .search-result-container{padding:var(--size-4-1) 1px var(--size-4-4)}.backlink-pane>.tree-item-self,.outgoing-link-pane>.tree-item-self{color:var(--nav-heading-color);padding-inline-start:var(--size-4-2)}.backlink-pane>.tree-item-self .tree-item-inner,.outgoing-link-pane>.tree-item-self .tree-item-inner{font-weight:var(--nav-heading-weight)}.backlink-pane>.tree-item-self.is-clickable.is-collapsed,.outgoing-link-pane>.tree-item-self.is-clickable.is-collapsed{color:var(--nav-heading-color-collapsed)}.backlink-pane>.tree-item-self .collapse-icon,.outgoing-link-pane>.tree-item-self .collapse-icon{display:none}.embedded-backlinks .backlink-pane .tree-item-self{font-size:max(var(--font-ui-small),var(--font-smaller));align-items:center}.embedded-backlinks .backlink-pane>.tree-item-self{font-size:max(var(--font-ui-small),1em);width:fit-content}.embedded-backlinks .backlink-pane>.tree-item-self .tree-item-inner{margin-inline-end:var(--size-2-3)}.embedded-backlinks .backlink-pane .tree-item-flair{font-size:max(var(--font-ui-small),var(--font-smallest))}.view-action.mod-bookmarked{--icon-color:var(--icon-color-active);--icon-color-hover:var(--icon-color-active)}.nav-buttons-container.has-separator{border-bottom:1px solid var(--background-modifier-border);padding-bottom:var(--size-2-3);margin-bottom:var(--size-4-2)}.nav-files-container{flex-grow:1;overflow:hidden auto;padding:var(--size-4-1) var(--size-4-3) var(--size-4-6) var(--size-4-3);scroll-padding-block:var(--size-4-2)}.nav-file-tag{background-color:var(--background-modifier-hover);border-radius:var(--radius-s);font-size:9px;font-weight:var(--font-semibold);letter-spacing:.05em;line-height:var(--line-height-normal);margin-inline-start:var(--size-2-3);padding:0 var(--size-4-1);text-transform:uppercase;align-self:center}.nav-file-icon{display:inline-flex;align-items:center;margin-inline-end:var(--size-2-3);position:relative;color:var(--icon-color);opacity:var(--icon-opacity)}.nav-files-container:not(.show-unsupported) .is-unsupported{display:none}.nav-file-title-content,.nav-folder-title-content{display:inline-block;overflow-wrap:anywhere;overflow:hidden;white-space:var(--nav-item-white-space);text-overflow:ellipsis}.nav-folder.is-being-dragged-over{border-radius:var(--radius-s);background:hsla(var(--interactive-accent-hsl),.1)}.nav-folder.is-being-dragged-over>.nav-folder-title{color:var(--nav-item-color-highlighted)}.nav-folder.is-being-dragged-over>.nav-folder-title .collapse-icon{color:var(--nav-item-color-highlighted)}.nav-folder-title{padding:var(--nav-item-parent-padding)}.nav-file-title{padding:var(--nav-item-padding)}.nav-file-title,.nav-folder-title{margin-bottom:var(--size-2-1);display:flex;border-radius:var(--radius-s);cursor:var(--cursor);color:var(--nav-item-color);font-size:var(--nav-item-size);font-weight:var(--nav-item-weight);line-height:var(--line-height-tight)}.nav-file-title.is-active,.nav-folder-title.is-active,body:not(.is-grabbing) .nav-file-title.is-active:hover,body:not(.is-grabbing) .nav-folder-title.is-active:hover{color:var(--nav-item-color-active);background-color:var(--nav-item-background-active);font-weight:var(--nav-item-weight-active)}.nav-file-title.is-selected,.nav-folder-title.is-selected,body:not(.is-grabbing) .nav-file-title.is-selected:hover,body:not(.is-grabbing) .nav-folder-title.is-selected:hover{color:var(--nav-item-color-selected);background-color:var(--nav-item-background-selected)}.nav-file-title.is-being-dragged,.nav-folder-title.is-being-dragged,body:not(.is-grabbing) .nav-file-title.is-being-dragged,body:not(.is-grabbing) .nav-folder-title.is-being-dragged{background-color:var(--interactive-accent);color:var(--text-on-accent)}.nav-file-title.is-being-dragged .nav-folder-collapse-indicator,.nav-folder-title.is-being-dragged .nav-folder-collapse-indicator,body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-folder-collapse-indicator,body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-folder-collapse-indicator{color:var(--text-on-accent)}.nav-file-title.is-being-dragged .nav-file-tag,.nav-folder-title.is-being-dragged .nav-file-tag,body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-file-tag,body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag{color:var(--text-normal)}.file-tree-item-checkbox,.file-tree-item-icon{flex-shrink:0}.file-tree-item-title{flex-grow:1;word-break:break-word}.file-tree-item-icon{--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width);margin-right:var(--size-4-1);color:var(--icon-color);position:relative;top:var(--size-2-1)}.file-tree .tree-item-inner{display:flex;align-items:center;position:relative;width:100%}.file-tree .tree-item-flair{line-height:1;padding:var(--size-2-1) var(--size-2-3);color:var(--text-on-accent)}.file-tree .is-selected{color:var(--text-normal)}.file-tree .mod-changed.is-selected{background-color:hsla(var(--interactive-accent-hsl),.2)}.file-tree .mod-changed .tree-item-flair{color:var(--text-accent-hover)}.file-tree .mod-new.is-selected{background-color:rgba(var(--background-modifier-success-rgb),.2)}.file-tree .mod-new .tree-item-flair{color:var(--text-success)}.file-tree .mod-deleted.is-selected,.file-tree .mod-to-delete.is-selected{background-color:rgba(var(--background-modifier-error-rgb),.2)}.file-tree .mod-deleted .tree-item-flair,.file-tree .mod-to-delete .tree-item-flair{color:var(--text-error)}.file-tree .mod-to-delete .tree-item-flair{display:none}.file-tree .mod-to-delete.is-selected .tree-item-flair{display:block}.file-tree .clickable-icon{display:flex;--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width)}.file-recovery-list-item-container{overflow:auto;flex:1 1 0px}.file-recovery-list{overflow:auto;padding:var(--size-4-3) var(--size-4-2);flex-grow:1;display:flex;flex-direction:column}.file-recovery-list .search-input-container{width:100%}.file-recovery-list-container{display:flex;flex-direction:column;flex-basis:250px;flex-shrink:0;border-inline-end:1px solid var(--background-modifier-border)}.graph-view.color-fill{color:var(--graph-node)}.graph-view.color-fill-focused{color:var(--graph-node-focused)}.graph-view.color-fill-tag{color:var(--graph-node-tag)}.graph-view.color-fill-attachment{color:var(--graph-node-attachment)}.graph-view.color-fill-unresolved{color:var(--graph-node-unresolved);opacity:.5}.graph-view.color-fill-1{color:var(--text-muted)}.graph-view.color-fill-2{color:var(--text-muted)}.graph-view.color-fill-3{color:var(--text-muted)}.graph-view.color-fill-4{color:var(--text-muted)}.graph-view.color-fill-5{color:var(--text-muted)}.graph-view.color-fill-6{color:var(--text-muted)}.graph-view.color-arrow{color:var(--text-normal);opacity:.5}.graph-view.color-circle{color:var(--graph-node-focused)}.graph-view.color-line{color:var(--graph-line)}.graph-view.color-text{color:var(--graph-text)}.graph-view.color-fill-highlight{color:var(--interactive-accent)}.graph-view.color-line-highlight{color:var(--interactive-accent)}.graph-controls{border-radius:var(--radius-m);position:absolute;inset-inline-end:var(--size-4-3);top:var(--size-4-3);padding:0;background-color:var(--background-primary);width:var(--graph-controls-width);overflow:auto}.graph-controls:not(.is-close){max-height:calc(100% - var(--size-4-4));border:1px solid var(--background-modifier-border);box-shadow:var(--shadow-s)}.graph-controls.is-close{min-width:inherit;width:auto;background-color:var(--background-primary);border:1px solid transparent;padding:var(--size-2-3)}.graph-controls.is-close>.graph-control-section{display:none}.graph-controls input[type=range],.graph-controls input[type=text]{width:100%;font-size:var(--font-ui-small)}.graph-controls .mod-cta{margin-top:var(--size-2-3);width:100%}.graph-controls::-webkit-scrollbar,.graph-controls::-webkit-scrollbar-thumb{display:none}.graph-color-group{--swatch-height:18px;--swatch-width:18px;position:relative;display:flex;align-items:center;padding:0 0 6px;transition:top .2s ease-in-out 0s}.graph-color-group input[type=color]{margin:0 2px 0 6px}.graph-color-group .clickable-icon{padding:var(--size-2-2)}.graph-color-button-container{text-align:center;margin-bottom:10px}.graph-color-button-container button{margin:0;width:100%}.graph-color-group.drag-ghost input[type=text]{width:100%}.graph-color-group.drag-ghost input[type=color]{margin-inline-start:6px}.graph-control-section.mod-color-groups .tree-item-children.is-grabbing .graph-color-groups-container{padding-bottom:40px}.graph-controls-button{display:none;z-index:1}.graph-controls-button.mod-close,.graph-controls-button.mod-reset{position:absolute;top:var(--size-4-2);inset-inline-end:var(--size-4-2);padding:var(--size-2-2)}.graph-controls:not(.is-close) .graph-controls-button.mod-close,.graph-controls:not(.is-close) .graph-controls-button.mod-reset{display:flex}.graph-controls-button.mod-reset{inset-inline-end:36px}.graph-controls.is-close .graph-controls-button.mod-open{display:flex}.graph-controls-button.mod-animate{margin-top:var(--size-4-2)}.graph-controls.is-close .graph-controls-button.mod-animate{display:flex}.graph-control-section{padding:var(--size-2-3) var(--size-4-3);border-bottom:1px solid var(--background-modifier-border)}.graph-control-section:last-child{border-bottom:none}.graph-control-section:last-child .tree-item-children{padding-bottom:var(--size-4-4)}.graph-control-section>.tree-item-self{padding-inline-start:var(--size-4-4)}.graph-control-section .tree-item-children{margin:0;padding:var(--size-4-1) 0;border-inline-start:none}.metadata-container{container:metadata/inline-size}.site-list-container{border-top:1px solid var(--background-modifier-border);margin-bottom:var(--size-4-4)}.site-list-container .list-item:last-child{padding-top:var(--size-4-4)}.site-list-item-name{flex-grow:1}.slug-input{text-transform:lowercase}.passwords-container{margin-bottom:var(--size-4-4)}.password-item{border-radius:var(--radius-s);padding:var(--size-4-2) var(--size-4-4);margin:var(--size-4-1) 0}.tree-item.mod-custom-nav.hidden .tree-item-self{color:var(--text-faint)}.tree-item.mod-custom-nav .tree-item-inner{display:flex;align-items:center;position:relative}.tree-list{padding:var(--size-4-4) 0}.tree-list-header{border-bottom:1px solid var(--background-modifier-border);padding:var(--size-4-2) 0;line-height:1.1;display:flex;align-items:center;justify-content:space-between}.tree-list-title{font-size:var(--font-ui-medium);font-weight:var(--font-semibold)}.tree-list-action{align-items:center;display:flex;color:var(--text-muted);font-size:var(--font-ui-small)}.search-input-container{position:relative}.search-input-container::before{top:calc((var(--input-height) - var(--search-icon-size))/ 2);inset-inline-start:var(--size-4-2);position:absolute;content:"";height:var(--search-icon-size);width:var(--search-icon-size);display:block;background-color:var(--search-icon-color);-webkit-mask-image:url("data:image/svg+xml,");-webkit-mask-repeat:no-repeat}.search-input-container input{display:block;width:100%;padding-inline-start:36px}.search-input-clear-button{position:absolute;background:0 0;border-radius:50%;color:var(--search-clear-button-color);cursor:var(--cursor);top:0;inset-inline-end:2px;bottom:0;line-height:0;height:var(--input-height);width:28px;margin:auto;padding:0;text-align:center;display:flex;justify-content:center;align-items:center;transition:color .15s ease-in-out 0s}.search-input-clear-button::after{content:"";height:var(--search-clear-button-size);width:var(--search-clear-button-size);display:block;background-color:currentcolor;-webkit-mask-image:url("data:image/svg+xml,");-webkit-mask-repeat:no-repeat}.search-input-clear-button:active,.search-input-clear-button:hover{color:var(--text-normal);transition:color .15s ease-in-out 0s}.search-input-suggest-button{position:absolute;left:0;top:0;color:var(--text-faint);cursor:var(--cursor);padding:var(--size-4-1) var(--size-4-2);opacity:0;z-index:10}.search-result-container{padding:var(--size-4-3) var(--size-4-3) var(--size-4-4);position:relative;flex:1 0 0px}.search-result-container.mod-global-search{overflow-y:auto}.search-result-container::before{content:" ";position:absolute;top:0;width:0;height:3px}.search-suggest-info-text{color:var(--text-muted);margin-inline-start:4px}.search-suggest-icon{padding:4px;border-radius:var(--radius-s)}.search-suggest-icon{align-items:center;display:flex}.search-suggest-item{padding:var(--size-4-1) var(--size-4-2);border-radius:var(--radius-s)}.search-suggest-item.mod-group{align-items:center;margin:0;color:var(--text-muted);padding:0 0 0 var(--size-4-2);cursor:default;font-weight:var(--font-semibold);font-size:var(--font-ui-smaller);border-radius:0}.search-suggest-item.mod-group:not(:first-child){border-top:1px solid var(--background-modifier-border);margin-top:6px;padding-top:6px;padding-inline:14px 6px;padding-bottom:0;margin-inline-end:-6px}.search-suggest-item.mod-group.is-selected,.search-suggest-item.mod-group:hover{background-color:initial}.search-empty-state{color:var(--text-faint);font-size:var(--font-ui-small);margin:0 0 var(--size-4-3);padding-inline-start:var(--size-4-2)}.search-result{word-break:break-word}.search-result:not(.is-collapsed) .search-result-file-title{color:var(--nav-item-color-active)}.search-result-file-matches{font-size:var(--font-ui-smaller);line-height:var(--line-height-tight);background-color:var(--search-result-background);border-radius:var(--radius-s);overflow:hidden;margin:var(--size-4-1) 0 var(--size-4-2);color:var(--text-muted);box-shadow:0 0 0 1px var(--background-modifier-border)}.search-result-file-matches:empty{display:none}.search-info-more-matches{color:var(--text-faint)}.search-result-file-match{cursor:var(--cursor);position:relative;padding:var(--size-4-2) var(--size-4-5) var(--size-4-2) var(--size-4-3);white-space:pre-wrap;width:100%;border-bottom:1px solid var(--background-modifier-border)}.search-result-file-match:last-child{border-bottom:none}.search-result-file-match:hover .search-result-file-match-replace-button{display:block}.search-result-file-match-replace-button{display:none;position:absolute;height:auto;bottom:5px;inset-inline-end:24px;padding:var(--size-4-1) var(--size-4-2);color:var(--text-muted);font-size:var(--font-ui-smaller)}.search-result-hover-button{position:absolute;display:flex;inset-inline-end:2px;border-radius:var(--radius-s);color:var(--text-faint);padding:1px 3px}.search-result-hover-button.mod-top{top:2px}.search-result-hover-button.mod-bottom{bottom:2px}.search-result-file-matched-text{color:var(--text-normal);background-color:var(--text-highlight-bg)}.search-info-container{color:var(--text-muted);padding:var(--size-4-1) var(--size-4-4) var(--size-4-2);font-size:var(--font-ui-smaller)}.search-info-children{padding-inline-start:20px;border-inline-start:1px solid var(--background-modifier-border);margin:1px 0}.copy-search-result-container{display:flex;flex-direction:column}.copy-search-result-textarea{height:300px;max-height:20vh;resize:none}.search-result-file-match-destination-file-container{display:flex;flex-wrap:wrap;margin-top:var(--size-2-3);gap:var(--size-2-1)}.search-result-file-match-destination-file{display:inline-flex;background-color:var(--interactive-normal);border-radius:var(--radius-s);box-shadow:var(--input-shadow);color:var(--text-muted);padding:var(--size-2-2) var(--size-2-3)}.search-result-file-match-destination-file-icon{--icon-size:var(--icon-xs);--icon-stroke:var(--icon-xs-stroke-width);margin-inline-end:var(--size-4-1);display:flex;color:var(--text-faint)}.search-result-file-match-destination-file-icon .svg-icon{align-self:center}.search-result-file-match-destination-file-name{white-space:pre-wrap;word-break:break-all}body:not(.is-phone) .workspace-leaf.mod-active .search-result.has-focus .tree-item-self{border-radius:var(--radius-s);box-shadow:inset 0 0 0 2px var(--background-modifier-border-focus)}.search-results-info{color:var(--text-muted);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--background-modifier-border);margin:0;min-width:0;padding:0 var(--size-4-3) var(--size-4-2);white-space:nowrap}.search-results-result-count{font-size:var(--font-ui-smaller);font-variant-numeric:tabular-nums}.search-row{display:flex;margin:var(--size-4-3) var(--size-4-3) var(--size-4-2);gap:var(--size-4-1)}.search-params{margin:var(--size-4-1) var(--size-4-4)}.search-params input[type=range],.search-params input[type=text]{width:100%;font-size:var(--font-ui-small)}.search-params .mod-cta{margin-top:var(--size-2-3);width:100%}.search-params::-webkit-scrollbar,.search-params::-webkit-scrollbar-thumb{display:none}.global-search-input-container{flex-grow:1}.more-options-icon{--icon-size:10px;background-color:var(--icon-color);border-radius:50%;color:var(--background-secondary);display:flex;margin-inline-start:var(--size-2-3);opacity:var(--icon-opacity);padding:.5px}.clickable-icon:hover .more-options-icon{background-color:var(--icon-color-hover);opacity:var(--icon-opacity-hover)}.slides-container{position:fixed;top:0;inset-inline-start:0px;height:100vh;width:100vw;transition:-webkit-transform .8s ease 0s;background-color:#191919;z-index:var(--layer-slides);border:none}.slides-container li .collapse-indicator{display:none}.slides-close-btn{display:inline-block;position:absolute;top:var(--size-4-2);inset-inline-end:var(--size-4-2);color:var(--text-faint);cursor:var(--cursor);z-index:1}.reveal input[type=checkbox]{width:24px;height:24px}.reveal .footnote-item,.reveal .task-list-item{list-style:none}.reveal .task-list-item{margin-inline-start:-1.5em}.sync-history-list-item-header .tree-item-flair{padding:var(--size-4-1)}.mod-selectable{cursor:var(--cursor);padding:var(--size-4-2) var(--size-4-4);border-radius:var(--radius-m)}.sync-file-tree-container{max-height:calc(min(90vh,var(--modal-max-height)) - 250px);overflow:auto}.recent-changes-container{padding:var(--size-4-3) var(--size-4-3) var(--size-4-8);overflow:hidden auto}.recent-changes-container .nav-folder-title{font-weight:var(--nav-heading-weight);color:var(--nav-heading-color)}.recent-changes-container .nav-folder-title:hover{font-weight:var(--nav-heading-weight)!important}.recent-changes-container .nav-folder-title .collapse-icon{display:none}.recent-changes-container .tree-item.nav-folder.is-collapsed .nav-folder-title{color:var(--nav-heading-color-collapsed)}.recent-changes-container .nav-folder-children{margin-bottom:var(--size-4-4)}.recent-changes-container .nav-file-title,.recent-changes-container .nav-folder-title{padding-inline-start:var(--size-4-2)}.recent-changes-container .tree-item-children{border-inline-start:unset;padding-inline-start:0px;margin-inline-start:0}.tag-pane-tag.is-active{background-color:var(--interactive-accent);color:var(--text-on-accent)}.tag-pane-tag.is-active .tag-pane-tag-count{background-color:var(--background-modifier-hover);color:var(--text-normal)}.tag-container{font-size:var(--font-ui-small);padding:var(--size-4-3) var(--size-4-3) var(--size-4-8);overflow:auto}.tree-item-children .tag-pane-tag .tag-pane-tag-parent{display:none}body:not(.is-phone) .workspace-leaf.mod-active .tree-item.has-focus>.tag-pane-tag{border-radius:var(--radius-s);box-shadow:0 0 0 2px var(--background-modifier-border-focus)}.mod-canvas-color-1{--canvas-color:var(--canvas-color-1)}.mod-canvas-color-2{--canvas-color:var(--canvas-color-2)}.mod-canvas-color-3{--canvas-color:var(--canvas-color-3)}.mod-canvas-color-4{--canvas-color:var(--canvas-color-4)}.mod-canvas-color-5{--canvas-color:var(--canvas-color-5)}.mod-canvas-color-6{--canvas-color:var(--canvas-color-6)}body{--canvas-color:192,192,192}body.theme-dark{--canvas-color:126,126,126}.canvas-wrapper{position:absolute;width:100%;height:100%;left:0;top:0;--resizer-size:20px;--shadow-stationary:0px 0.5px 1px 0.5px rgba(0, 0, 0, 0.1);--shadow-drag:0px 2px 10px rgba(0, 0, 0, 0.1);--shadow-border-accent:0 0 0 2px var(--color-accent);--zoom-multiplier:1;background-color:var(--canvas-background);overflow:hidden;contain:strict;touch-action:none;user-select:none}.canvas-wrapper.is-dragging{cursor:grabbing}.canvas-wrapper.is-dragging iframe:not(.is-controlled),.canvas-wrapper.is-dragging webview{pointer-events:none}.canvas-wrapper.is-screenshotting{z-index:999999}.canvas-wrapper.is-screenshotting .canvas-controls{display:none!important}.canvas-wrapper.is-screenshotting *{pointer-events:none!important}.canvas-mover{position:absolute;width:100%;height:100%;left:0;top:0;cursor:grab}.canvas-mover:active{cursor:grabbing}.canvas-background{position:absolute;width:100%;height:100%;left:0;top:0;pointer-events:none}.canvas-background circle{fill:var(--canvas-dot-pattern)}.canvas{position:absolute;width:100%;height:100%;left:0;top:0;transform-origin:0px 0px;pointer-events:none}.canvas>*{pointer-events:initial}.canvas-selection{pointer-events:none;position:absolute;background-color:hsla(var(--color-accent-hsl),.1);border:2px solid var(--color-accent);z-index:-1}.canvas-selection.mod-group-selection{border-width:3px;border-radius:3px;background-color:hsla(var(--color-accent-hsl),.03);border-color:hsla(var(--color-accent-hsl),.3);pointer-events:initial}.canvas-wrapper:not(.mod-readonly) .canvas-selection.mod-group-selection{cursor:grab}.canvas-wrapper:not(.mod-readonly) .canvas-selection.mod-group-selection:active{cursor:grabbing}.canvas-selection.mod-node-highlight{border-radius:var(--radius-m)}.canvas-controls{display:flex;position:absolute;z-index:var(--layer-cover);font-size:var(--font-ui-medium)}.canvas-controls{right:var(--size-4-2);top:var(--size-4-2);gap:var(--size-4-2);display:flex;flex-direction:column}.canvas-control-group{border-radius:var(--radius-s);background-color:var(--background-primary);border:1px solid var(--background-modifier-border);box-shadow:var(--input-shadow);display:flex;flex-direction:column;overflow:hidden}.canvas-control-item{border-radius:0;box-shadow:none;height:auto;display:flex;line-height:1;font-size:inherit;align-items:center;justify-content:center;cursor:var(--cursor);padding:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border);color:var(--text-muted);background-color:var(--interactive-normal);--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width)}.canvas-control-item:last-child{border-bottom:none}.canvas-control-item.is-active{color:var(--color-accent)}.canvas-control-item.is-disabled svg{color:var(--text-faint)}.canvas-control-item svg{pointer-events:none}.canvas-node-container{background-color:var(--background-primary);border-radius:var(--radius-m);border:2px solid rgb(var(--canvas-color));contain:strict;display:flex;flex-direction:column;overflow:hidden;position:absolute;left:0;top:0;width:100%;height:100%;box-shadow:var(--shadow-stationary)}.canvas-node-label{position:absolute;left:0;top:calc(-1 * var(--size-4-1) * var(--zoom-multiplier));transform:translate(0,-100%) scale(var(--zoom-multiplier));transform-origin:left bottom;max-width:calc(100% / var(--zoom-multiplier));overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--canvas-card-label-color);--icon-size:1em}body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-node-label{transition:transform .5s cubic-bezier(.16, 1, .3, 1) 0s}.canvas-node-label svg{position:relative;top:2px;margin-right:var(--size-4-1)}.canvas-node-label.mod-hover-label{opacity:0}.canvas-wrapper.mod-zoomed-out .canvas-node-label{display:none}.canvas-node-placeholder{display:flex;align-items:center;justify-content:center;text-align:center;width:100%;height:100%;overflow:hidden;overflow-wrap:anywhere;padding:var(--size-4-6);font-size:32px;font-weight:var(--font-semibold)}.canvas-node-placeholder::after{border-radius:var(--radius-s);content:" ";display:block;position:absolute;top:var(--size-4-4);right:var(--size-4-4);bottom:var(--size-4-4);left:var(--size-4-4);background-color:rgba(var(--canvas-color),.1)}.canvas-icon-placeholder{display:flex;width:40%;height:40%}.canvas-icon-placeholder svg{opacity:.3;color:rgb(var(--canvas-color));width:100%;height:100%}.canvas-node-interaction-layer{position:absolute;width:0;height:0;pointer-events:none}.canvas-node-interaction-layer>*{pointer-events:initial}.canvas-node{--shadow-border-themed-inset:inset 0 0 0 1px rgb(var(--canvas-color));--shadow-border-themed:0 0 0 2px rgb(var(--canvas-color));position:absolute;width:0;height:0}.canvas-node.is-dragging{pointer-events:none}.canvas-node.is-dragging .canvas-node-container{box-shadow:var(--shadow-drag)}.canvas-node.is-focused,.canvas-node.is-selected{touch-action:initial}.canvas-node.is-focused .canvas-node-label,.canvas-node.is-selected .canvas-node-label{color:var(--text-muted)}.canvas-node.is-focused .canvas-node-container,.canvas-node.is-selected .canvas-node-container{border-color:var(--color-accent);box-shadow:var(--shadow-stationary),var(--shadow-border-accent)}.canvas-node.is-focused.is-dragging .canvas-node-container,.canvas-node.is-selected.is-dragging .canvas-node-container{box-shadow:var(--shadow-drag),var(--shadow-border-accent)}.canvas-node.is-themed .canvas-node-container{border-color:rgba(var(--canvas-color),.7);box-shadow:inset 0 0 0 1px rgba(var(--canvas-color),.7),var(--shadow-stationary)}.canvas-node.is-focused.is-themed .canvas-node-container,.canvas-node.is-selected.is-themed .canvas-node-container{border-color:rgb(var(--canvas-color));box-shadow:var(--shadow-border-themed-inset),var(--shadow-border-themed)}.canvas-node.is-focused.is-themed.is-dragging .canvas-node-container,.canvas-node.is-selected.is-themed.is-dragging .canvas-node-container{box-shadow:var(--shadow-border-themed-inset),var(--shadow-border-themed)}.canvas-node.is-dummy{cursor:grabbing}.canvas-node.is-dummy .canvas-node-container{border:4px solid var(--color-accent);box-shadow:rgba(0,0,0,.15) 0 2px 10px;background-color:hsla(var(--color-accent-hsl),.2)}.canvas-node.is-focused:not(.is-dragging) .canvas-node-content-blocker{display:none}.canvas-node-content-blocker{position:absolute;width:100%;height:100%;left:0;top:0;z-index:var(--layer-cover)}.canvas-node-group:not(.is-focused):not(.is-selected){pointer-events:none}.canvas-node-group .canvas-node-resizer{pointer-events:initial}.canvas-node-group .canvas-node-container{background-color:transparent}.canvas-node-group .canvas-node-content{background-color:rgba(var(--canvas-color),.07)}.canvas-group-label{position:absolute;left:0;top:calc(-1 * var(--size-4-1) * var(--zoom-multiplier));transform:translate(0,-100%) scale(var(--zoom-multiplier));transform-origin:left bottom;max-width:calc(100% / var(--zoom-multiplier));overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:initial;font-size:1.5em;padding:var(--size-4-1) var(--size-4-2);border-radius:var(--radius-s);color:var(--text-muted);background-color:rgba(var(--canvas-color),.1);line-height:1}body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-group-label{transition:transform .5s cubic-bezier(.16, 1, .3, 1) 0s}.canvas-wrapper:not(.mod-readonly) .canvas-group-label{cursor:grab}.canvas-wrapper:not(.mod-readonly) .canvas-group-label:active{cursor:grabbing}.canvas-group-label[contenteditable=true]{cursor:text;background-color:var(--background-primary);box-shadow:0 0 0 2px rgb(var(--canvas-color));color:var(--text-normal);text-overflow:initial}.canvas-node-group.is-themed .canvas-group-label:not([contenteditable=true]){background-color:rgb(var(--canvas-color))}.canvas-node-group.is-themed .canvas-group-label:not([contenteditable=true]).mod-foreground-light{color:var(--text-on-accent)}.canvas-node-group.is-themed .canvas-group-label:not([contenteditable=true]).mod-foreground-dark{color:var(--text-on-accent-inverted)}.canvas-node-content{backface-visibility:hidden;width:100%;height:100%;overflow:hidden;position:relative}.canvas-node-content.markdown-embed{border:none;padding:0}.canvas-node-content.markdown-embed .inline-title{cursor:text}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view{padding:0 var(--size-4-6);display:flex;flex-direction:column}.canvas-wrapper:not(.mod-readonly) .canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view{user-select:none}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view::after,.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view::before{content:" ";display:block;min-height:min(calc(var(--canvas-node-height) * .1 - 3px),var(--size-4-6));max-height:var(--size-4-4);flex:1 1 0px}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view>.markdown-preview-sizer{flex:1 0 0px}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view .callout{mix-blend-mode:normal}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view .markdown-preview-pusher+div>:first-child{margin-top:0}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view .markdown-preview-sizer>div:last-child>:last-child{margin-bottom:0}.is-focused .canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view{transform:translateZ(0)}.canvas-node.is-themed .canvas-node-content{background-color:rgba(var(--canvas-color),.07)}.canvas-node-content.media-embed{justify-content:center;align-items:center;display:flex}.canvas-node-content.media-embed audio,.canvas-node-content.media-embed img,.canvas-node-content.media-embed video{flex-shrink:0;flex-grow:1}.canvas-node-content.media-embed audio,.canvas-node-content.media-embed img:not([width]),.canvas-node-content.media-embed video{max-width:100%}.canvas-node-resizer{position:absolute;height:calc(var(--resizer-size) * var(--zoom-multiplier));width:calc(var(--resizer-size) * var(--zoom-multiplier))}.is-selected .canvas-node-resizer{pointer-events:none}.canvas-wrapper.mod-readonly .canvas-node-resizer{display:none}.canvas-node-resizer[data-resize=top]{left:0;right:0;width:auto;top:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:ns-resize}.canvas-node-resizer[data-resize=bottom]{left:0;right:0;width:auto;bottom:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:ns-resize}.canvas-node-resizer[data-resize=left]{top:0;bottom:0;height:auto;left:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:ew-resize}.canvas-node-resizer[data-resize=right]{top:0;bottom:0;height:auto;right:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:ew-resize}.canvas-node-resizer[data-resize=topright]{right:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);top:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:nesw-resize}.canvas-node-resizer[data-resize=bottomright]{right:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);bottom:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:nwse-resize}.canvas-node-resizer[data-resize=topleft]{left:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);top:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:nwse-resize}.canvas-node-resizer[data-resize=bottomleft]{left:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);bottom:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:nesw-resize}.canvas-node-connection-point{width:calc(var(--resizer-size) * var(--zoom-multiplier));height:calc(var(--resizer-size) * var(--zoom-multiplier));position:absolute;pointer-events:all;cursor:pointer}.canvas-node-connection-point[data-side=top]{top:1px;left:calc(50% - var(--resizer-size) * var(--zoom-multiplier)/ 2)}.canvas-node-connection-point[data-side=right]{right:1px;top:calc(50% - var(--resizer-size) * var(--zoom-multiplier)/ 2)}.canvas-node-connection-point[data-side=bottom]{bottom:1px;left:calc(50% - var(--resizer-size) * var(--zoom-multiplier)/ 2)}.canvas-node-connection-point[data-side=left]{left:1px;top:calc(50% - var(--resizer-size) * var(--zoom-multiplier)/ 2)}.canvas-node-connection-point::after{content:" ";background-color:var(--color-accent);border-radius:50%;border:3px solid var(--background-modifier-border);box-sizing:border-box;display:block;height:calc(var(--resizer-size) * var(--zoom-multiplier));opacity:0;position:relative;width:calc(var(--resizer-size) * var(--zoom-multiplier));left:0;top:0}.canvas-node-resizer:hover .canvas-node-connection-point::after{opacity:1}.canvas-snaps{position:absolute;width:100%;height:100%;left:0;top:0;overflow:visible;pointer-events:none;opacity:.6}.canvas-snaps line{stroke-width:1px;stroke:var(--color-accent)}.canvas-snaps circle{fill:var(--color-accent)}.canvas-edges{position:absolute;width:100%;height:100%;left:0;top:0;overflow:visible;pointer-events:none}.canvas-edges>*{pointer-events:initial}.canvas-edges path.canvas-display-path{pointer-events:none;stroke-width:calc(3px * var(--zoom-multiplier));stroke:rgb(var(--canvas-color));fill:none;transition:stroke-width .1s ease-out 0s}.canvas-edges path.canvas-interaction-path{pointer-events:stroke;stroke-width:calc(24px * var(--zoom-multiplier));stroke-linecap:round;stroke:transparent;fill:none;transition:stroke .1s ease-out 0s}.canvas-wrapper:not(.mod-readonly) .canvas-edges path.canvas-interaction-path{cursor:grab}.canvas-wrapper:not(.mod-readonly) .canvas-edges path.canvas-interaction-path:active{cursor:grabbing}.canvas-edges polygon.canvas-path-end{pointer-events:none;stroke:rgb(var(--canvas-color));fill:rgb(var(--canvas-color));stroke-linecap:round;stroke-linejoin:round;stroke-width:1px;transform-box:fill-box;transform:scale(var(--zoom-multiplier));transform-origin:center top}.canvas-edges g.is-focused path.canvas-display-path,.canvas:not(.is-connecting) .canvas-edges g:hover path.canvas-display-path{stroke-width:calc(5.5px * var(--zoom-multiplier))}.canvas-edges g.is-focused path.canvas-interaction-path,.canvas:not(.is-connecting) .canvas-edges g:hover path.canvas-interaction-path{stroke:rgba(var(--canvas-color),0.1)}.canvas-path-label-wrapper{position:absolute;width:fit-content;height:fit-content}.canvas-path-label{font-size:calc(var(--font-ui-large) * var(--zoom-multiplier));background-color:var(--background-primary);border-radius:var(--radius-s);padding:calc(var(--size-2-3) * var(--zoom-multiplier));line-height:var(--line-height-tight);white-space:pre-wrap;transform:translate(-50%,-50%);text-align:center;max-width:calc(17em * var(--zoom-multiplier))}.canvas-color-picker-item{cursor:var(--cursor);width:24px;height:24px;margin:2px;border-radius:12px;border:2px solid var(--background-primary);background-color:rgb(var(--canvas-color))}.canvas-color-picker-item.is-active{box-shadow:0 0 0 2px rgb(var(--canvas-color))}.canvas-color-picker-item input[type=color]{margin:-4px 0 0 -2px;--swatch-width:20px;--swatch-height:20px;opacity:0}.canvas-color-picker-item.canvas-color-picker-custom:not(.is-active){background:conic-gradient(var(--color-red),var(--color-yellow),var(--color-green),var(--color-blue),var(--color-purple),var(--color-red))}.canvas-empty-embed-container{align-items:center;display:flex;flex-direction:column;gap:var(--size-4-6);justify-content:center;height:100%;padding:var(--size-4-3);text-align:center}.canvas-empty-embed-action-list{display:flex;flex-direction:column;gap:var(--size-4-3)}.canvas-empty-embed-action-list button{font-size:var(--font-text-size);padding:var(--size-4-5) var(--size-4-9)}.canvas-help{display:flex;flex-direction:column;gap:var(--size-4-3)}.canvas-instruction{display:flex;justify-content:space-between}.canvas-instruction-desc{display:flex;gap:var(--size-4-1)}.canvas-minimap{width:100%;height:100%;padding:var(--size-4-1)}.inline-embed>.canvas-minimap{max-height:var(--embed-canvas-max-height)}.canvas-minimap rect{stroke-width:5px;stroke:var(--background-modifier-border);fill:var(--background-modifier-border);fill-opacity:0.65}.canvas-minimap rect.is-themed{stroke:rgb(var(--canvas-color));fill:rgb(var(--canvas-color));fill-opacity:0.5}.canvas-minimap path{stroke:rgb(192,192,192);fill:none}.canvas-minimap path.is-themed{stroke:rgb(var(--canvas-color))}.canvas-cursor{position:absolute;width:1px;height:1px;border:5px solid var(--color-accent);border-radius:5px;pointer-events:none}.canvas-watermark *{font-family:var(--font-default)!important}.browser-favicon-container{display:flex;align-items:center}.browser-favicon-container>*{height:var(--icon-size);max-width:var(--icon-size)}.view-action.mod-browser{--icon-color:var(--icon-color-active);--icon-color-hover:var(--icon-color-active)}.browser-container{height:100%;display:flex;flex-direction:column}.browser-address{width:100%;display:flex;margin:0 2px}.browser-address input{flex-grow:1;min-width:50px}.browser-address-container{padding:0 var(--size-4-2)}.browser-address-container::after{background:0 0!important}.view-content.browser-content{padding:0}.browser-content{border-top:1px solid var(--divider-color);height:100%;display:flex;flex-direction:column}.browser-content webview{flex-grow:1;width:100%}.browser-content .reader-mode-content{overflow-y:auto}.browser-content .reader-mode-content.is-readable-line-width .markdown-preview-sizer{max-width:var(--file-line-width);margin-left:auto;margin-right:auto}.browser-content .markdown-preview-view .external-link{background-image:none;padding-right:0}.browser-content .error-notice{max-width:var(--file-line-width);margin:25% auto 0;padding:var(--file-margins)}.browser-history-view-item{text-wrap:nowrap;overflow:hidden}textarea.browser-adblock-lists{flex-grow:1}.starter{user-select:none;padding-top:0!important}.starter-screen{display:flex;flex-direction:column;background-color:var(--background-primary);width:100%;height:100%}.starter-screen-inner{flex-grow:1;display:flex;height:calc(100% - 24px)}.splash{align-items:center;background-color:var(--background-primary);display:flex;flex-direction:column;justify-content:center;flex:1 1 auto;text-align:center;padding:36px 0 0}.splash-brand{flex:0 0 content;padding:20px 0}.splash-brand-logo-text{margin-top:20px;color:#fff}.splash-brand-version{color:var(--text-muted);margin-top:8px;font-size:var(--font-ui-small)}.help-options-container{flex:1 0 0px;overflow:auto;width:100%;max-width:82%;text-align:start;padding:var(--size-4-6) 0}.help-options-container::-webkit-scrollbar{display:none}.open-vault-options-container::-webkit-scrollbar{display:none}.open-vault-options input[type=text]{width:150px}.open-vault-options.mod-login input[type=text]{width:250px}.quick-start-container{margin-bottom:10px}.quick-start-container button{font-size:var(--font-ui-medium);padding:8px 60px}.open-folder-input[type=text]{font-size:var(--font-ui-small);width:200px;height:28px}.browse-folder-button{margin-left:10px}.open-folder-button{margin-top:14px;padding:6px 36px}.starter .notice{top:38px}.recent-vaults-list-item-name[contenteditable]{cursor:text;border-color:var(--interactive-accent);background-color:var(--background-modifier-hover);font-size:.9em;padding:0 var(--size-4-1)}:root{--safe-area-inset-top:env(safe-area-inset-top);--safe-area-inset-bottom:env(safe-area-inset-bottom);--safe-area-inset-left:env(safe-area-inset-left);--safe-area-inset-right:env(safe-area-inset-right)}body.hide-cursor{caret-color:transparent!important}.is-tablet{--nav-item-padding:var(--size-2-3) var(--size-4-2) var(--size-2-3) var(--size-4-6);--tab-font-size:var(--font-ui-smaller);--system-status-background:var(--titlebar-background)}.is-tablet.theme-dark{--titlebar-background:var(--background-primary);--titlebar-background-focused:var(--background-primary);--interactive-normal:var(--background-modifier-border);--interactive-hover:var(----background-modifier-border-hover);--modal-background:var(--background-secondary)}.is-mobile .tree-item .tree-item-self{padding-inline-end:var(--size-4-2)}.is-mobile input[type=text]{width:100%}.is-mobile .markdown-rendered pre:not(:hover)>button.copy-code-button{display:block}.is-mobile .markdown-rendered button.copy-code-button{width:auto}.is-mobile .markdown-rendered .heading-collapse-indicator{margin-inline-start:-20px}.is-tablet button:not(.clickable-icon){padding:var(--size-4-1) var(--size-4-5)}.mod-fade{--scroll-fade-offset-right:0;--scroll-fade-offset-left:0}.mod-fade:not(.mod-at-start)::before{content:" ";position:absolute;top:0;z-index:1;left:var(--scroll-fade-offset-left);width:30px;height:100%;background:linear-gradient(to right,var(--background-primary),transparent)}.mod-fade:not(.mod-at-end)::after{content:" ";position:absolute;top:0;right:var(--scroll-fade-offset-right);width:30px;height:100%;background:linear-gradient(to right,transparent,var(--background-primary))}.is-tablet .mod-left-split-toggle{display:none}.is-tablet .horizontal-tab-nav-item,.is-tablet .vertical-tab-nav-item{padding:var(--size-4-2) var(--size-4-3)}.is-tablet .modal.mod-settings .vertical-tab-header{max-width:none}.is-tablet.theme-dark .community-item,.is-tablet.theme-dark .vertical-tab-content{background-color:var(--background-secondary)}body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner{padding-left:var(--ribbon-width)}.workspace-drawer .nav-buttons-container::-webkit-scrollbar,.workspace-drawer .nav-buttons-container::-webkit-scrollbar-thumb,.workspace-drawer .workspace-drawer-actions::-webkit-scrollbar,.workspace-drawer .workspace-drawer-actions::-webkit-scrollbar-thumb{visibility:hidden}.workspace-drawer-ribbon::-webkit-scrollbar,.workspace-drawer-ribbon::-webkit-scrollbar-thumb{visibility:hidden;width:0}body.is-tablet .sidebar-toggle-button{--icon-color:var(--interactive-accent);--icon-color-hover:var(--interactive-accent);--icon-color-active:var(--interactive-accent-hover);--icon-color-focus:var(--interactive-accent-hover);--icon-size:var(--icon-l);--icon-stroke:var(--icon-l-stroke-width)}body.is-tablet .sidebar-toggle-button.mod-left{padding-left:var(--size-4-2)}body.is-tablet .mobile-navbar{display:none}.is-mobile .prompt-input[type=text]{padding:var(--size-4-4)}.is-phone .prompt-input[type=text]{border:none}.pull-action{position:absolute;background-color:var(--background-secondary);z-index:var(--layer-popover);color:var(--text-muted);font-size:90%;transition:background-color 150ms ease-in-out 0s}.pull-action.mod-activated{background-color:var(--interactive-accent);color:var(--text-on-accent)}.pull-down-action{top:0;left:0;right:0;width:96%;max-width:500px;margin:var(--safe-area-inset-top) auto 0 auto;padding:var(--size-4-3) var(--size-4-4);text-align:center;border-radius:40px}.pull-out-action{top:50%;padding:var(--size-4-3) var(--size-4-4);border-radius:40px;margin:0 var(--size-4-4)}.is-tablet{--toolbar-option-width:50px}.is-tablet.is-ios .mobile-toolbar{padding-bottom:var(--safe-area-inset-bottom)}.mobile-toolbar-options-list::-webkit-scrollbar{width:0!important;height:0!important}.is-tablet.theme-dark .suggestion-container{background-color:var(--background-secondary)}.is-mobile .file-tree .tree-item-self{font-size:var(--font-ui-small)}.markdown-preview-view .heading-collapse-indicator{margin-left:calc(0px - var(--collapse-arrow-size) - 10px)!important;padding:0 0!important}.node-insert-event{animation-duration:unset!important;animation-name:none!important}hr{border:none;border-top:var(--hr-thickness) solid;border-color:var(--hr-color)}.cm-fold-indicator.is-collapsed .collapse-indicator,.cm-gutterElement .is-collapsed .collapse-indicator,.cm-gutterElement:hover .collapse-indicator,.cm-line:hover .cm-fold-indicator .collapse-indicator,.collapse-indicator:hover,.fold-gutter.is-collapsed,.fold-gutter:hover,.is-collapsed .collapse-indicator,.metadata-properties-heading:hover .collapse-indicator,h1:hover .collapse-indicator,h2:hover .collapse-indicator,h3:hover .collapse-indicator,h4:hover .collapse-indicator,h5:hover .collapse-indicator,h6:hover .collapse-indicator{opacity:1;transition:opacity .15s ease-in-out}.collapse-indicator,.fold-gutter{opacity:0;transition:opacity .15s ease-in-out}@media print{html body>:not(.print){display:unset!important}.collapse-indicator{display:none!important}.is-collapsed>element>.collapse-indicator{display:unset!important}}.mod-header .metadata-container{display:none!important}.markdown-embed .heading-collapse-indicator{translate:-1em 0}.markdown-embed.internal-embed.inline-embed .markdown-embed-content,.markdown-embed.internal-embed.inline-embed .markdown-embed-content .markdown-preview-view{overflow:visible!important}.markdown-embed-link{display:none!important}.canvas-wrapper:not(.mod-readonly) .canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view{user-select:text!important}.canvas-card-menu{display:none;cursor:default!important}.canvas-controls{display:none;cursor:default!important}.canvas-background{pointer-events:visible!important;cursor:grab!important}.canvas-background:active{cursor:grabbing!important}.canvas-node-connection-point{display:none;cursor:default!important}.canvas-node-content{backface-visibility:visible!important}.canvas-menu-container{display:none}.canvas-node-content-blocker{cursor:pointer!important}.canvas-wrapper{position:relative;cursor:default!important}.canvas-node-resizer{cursor:default!important}.canvas-node-container{cursor:default!important}.markdown-rendered pre:not(:hover)>button.copy-code-button{display:unset;opacity:0}.markdown-rendered pre:hover>button.copy-code-button{opacity:1}.markdown-rendered pre button.copy-code-button{transition:opacity .2s ease-in-out,width .3s ease-in-out,background-color .2s ease-in-out;text-overflow:clip}.markdown-rendered pre>button.copy-code-button:hover{background-color:var(--interactive-normal)}.markdown-rendered pre>button.copy-code-button:active{background-color:var(--interactive-hover);box-shadow:var(--input-shadow);transition:none}.webpage-container .is-collapsed .collapse-indicator svg.svg-icon,.webpage-container .is-collapsed .list-collapse-indicator svg.svg-icon{color:var(--collapse-icon-color-collapsed)} \ No newline at end of file diff --git a/lib/styles/supported-plugins.css b/lib/styles/supported-plugins.css deleted file mode 100644 index 62d1804..0000000 --- a/lib/styles/supported-plugins.css +++ /dev/null @@ -1 +0,0 @@ -.reminder-calendar.svelte-18sic8s.svelte-18sic8s{padding:.5rem}.reminder-calendar.svelte-18sic8s .year-month.svelte-18sic8s{font-size:1rem;font-weight:700;text-align:center}.reminder-calendar.svelte-18sic8s .month-nav.svelte-18sic8s{color:var(--text-muted);margin-left:1rem;margin-right:1rem;cursor:pointer}.reminder-calendar.svelte-18sic8s .month.svelte-18sic8s{color:var(--text-muted)}.reminder-calendar.svelte-18sic8s .year.svelte-18sic8s{color:var(--text-accent)}.reminder-calendar.svelte-18sic8s th.svelte-18sic8s{font-size:.7rem;color:var(--text-muted)}.reminder-calendar.svelte-18sic8s .calendar-date.svelte-18sic8s{text-align:center;min-width:2rem;max-width:2rem}.reminder-calendar.svelte-18sic8s .calendar-date.svelte-18sic8s:hover{background-color:var(--background-secondary-alt)}.reminder-calendar.svelte-18sic8s .is-selected.svelte-18sic8s{background-color:var(--text-accent)!important;color:var(--text-normal)!important}.reminder-calendar.svelte-18sic8s .is-holiday.svelte-18sic8s,.reminder-calendar.svelte-18sic8s .is-past.svelte-18sic8s,.reminder-calendar.svelte-18sic8s .other-month.svelte-18sic8s{color:var(--text-faint)}.reminder-group.svelte-gzdxib{margin-bottom:1rem;font-size:13px;color:var(--text-muted)}.reminder-list-item.svelte-gzdxib{list-style:none;line-height:14px;padding:3px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:break-all;width:100%}.reminder-list-item.svelte-gzdxib:hover{color:var(--text-normal);background-color:var(--background-secondary-alt)}.reminder-time.svelte-gzdxib{font-size:14px;font-family:monospace,serif}.reminder-file.svelte-gzdxib{color:var(--text-faint)}.no-reminders.svelte-gzdxib{font-style:italic}.dtchooser.svelte-fjfxbq{background-color:var(--background-primary-alt);z-index:2147483647}.dtchooser-divider.svelte-fjfxbq{margin:.5rem}.reminder-list-container.svelte-fjfxbq{padding:.5rem;max-width:16rem}.icon.svelte-1gcidq0{vertical-align:middle}main.svelte-yfmg28{padding:1em;margin:0 auto}.reminder-actions.svelte-yfmg28{margin-top:1rem;display:flex;gap:.5rem}.reminder-file.svelte-yfmg28{color:var(--text-muted);cursor:pointer}.reminder-file.svelte-yfmg28:hover{color:var(--text-normal);text-decoration:underline}.later-select.svelte-yfmg28{font-size:14px}.group-name.svelte-2zqui4{font-size:14px;color:var(--text-muted);border-bottom:1px solid var(--text-muted);margin-bottom:.5rem}.group-name-overdue.svelte-2zqui4{color:var(--text-accent)} \ No newline at end of file diff --git a/maintenance/configFiles.md b/maintenance/configFiles.md new file mode 100755 index 0000000..1650bea --- /dev/null +++ b/maintenance/configFiles.md @@ -0,0 +1,23 @@ +--- +title: Configuration Files +layout: default +parent: Maintenance Resources +nav_order: 3 +--- +## Prusa +[Prusa MK3S Slicer Profile](slicer_profiles/prusa.fff) + +## Voron +### Eve +[Slicer Profile](slicer_profiles/eve.fff) + +[Klipper Config](klipper/eve/printer.cfg) + +[Klipper LED Config](klipper/eve/stealthburner_leds.cfg) + +### Wall-E +[Slicer Profile](slicer_profiles/walle.fff) + +[Klipper Config](klipper/walle/printer.cfg) + +[Klipper LED Config](klipper/walle/stealthburner_leds.cfg) diff --git a/maintenance/klipper/eve/printer.cfg b/maintenance/klipper/eve/printer.cfg new file mode 100755 index 0000000..f331d83 --- /dev/null +++ b/maintenance/klipper/eve/printer.cfg @@ -0,0 +1,708 @@ +# This file contains common pin mappings for the BigTreeTech Octopus V1. +# To use this config, the firmware should be compiled for the STM32F446 with a "32KiB bootloader" +# Enable "extra low-level configuration options" and select the "12MHz crystal" as clock reference + +# after running "make", copy the generated "klipper/out/klipper.bin" file to a +# file named "firmware.bin" on an SD card and then restart the OctoPus with that SD card. + +# See docs/Config_Reference.md for a description of parameters. + +## Voron Design VORON2 250/300/350mm BigTreeTech OctoPus V1 TMC2209 UART config + +## *** THINGS TO CHANGE/CHECK: *** +## MCU paths [mcu] section +## Thermistor types [extruder] and [heater_bed] sections - See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types +## Z Endstop Switch location [safe_z_home] section +## Homing end position [gcode_macro G32] section +## Z Endstop Switch offset for Z0 [stepper_z] section +## Probe points [quad_gantry_level] section +## Min & Max gantry corner postions [quad_gantry_level] section +## PID tune [extruder] and [heater_bed] sections +## Probe pin [probe] section +## Fine tune E steps [extruder] section + +[mcu] +## Obtain definition by "ls -l /dev/serial/by-id/" then unplug to verify +##-------------------------------------------------------------------- +serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_1F003D000150335331383520-if00 +restart_method: command +##-------------------------------------------------------------------- + +[mcu rpi] +serial: /tmp/klipper_host_mcu + +[adxl345] +cs_pin: rpi:None + +[resonance_tester] +accel_chip: adxl345 +probe_points: + 175, 175, 20 # an example + +[printer] +kinematics: corexy +max_velocity: 300 +max_accel: 3000 #Max 4000 +max_z_velocity: 15 #Max 15 for 12V TMC Drivers, can increase for 24V +max_z_accel: 350 +square_corner_velocity: 5.0 + +##################################################################### +# X/Y Stepper Settings +##################################################################### + +## B Stepper - Left +## Connected to MOTOR_0 +## Endstop connected to DIAG_0 +[stepper_x] +step_pin: PF13 +dir_pin: PF12 +enable_pin: !PF14 +rotation_distance: 40 +microsteps: 32 +full_steps_per_rotation:400 #set to 200 for 1.8 degree stepper +endstop_pin: PG6 +position_min: 0 +##-------------------------------------------------------------------- + +## Uncomment for 350mm build +position_endstop: 350 +position_max: 350 + +##-------------------------------------------------------------------- +homing_speed: 25 #Max 100 +homing_retract_dist: 5 +homing_positive_dir: true + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_x] +uart_pin: PC4 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + +## A Stepper - Right +## Connected to MOTOR_1 +## Endstop connected to DIAG_1 +[stepper_y] +step_pin: PG0 +dir_pin: PG1 +enable_pin: !PF15 +rotation_distance: 40 +microsteps: 32 +full_steps_per_rotation:400 #set to 200 for 1.8 degree stepper +endstop_pin: PG9 +position_min: 0 +##-------------------------------------------------------------------- + +## Uncomment for 350mm build +position_endstop: 350 +position_max: 350 + +##-------------------------------------------------------------------- +homing_speed: 25 #Max 100 +homing_retract_dist: 5 +homing_positive_dir: true + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_y] +uart_pin: PD11 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + +##################################################################### +# Z Stepper Settings +##################################################################### + +## Z0 Stepper - Front Left +## Connected to MOTOR_2 +## Endstop connected to DIAG_2 +[stepper_z] +step_pin: PF11 +dir_pin: PG3 +enable_pin: !PG5 +rotation_distance: 40 +gear_ratio: 80:16 +microsteps: 32 +# KR tap endstop_pin: PG10 +endstop_pin: probe:z_virtual_endstop +## Z-position of nozzle (in mm) to z-endstop trigger point relative to print surface (Z0) +## (+) value = endstop above Z0, (-) value = endstop below +## Increasing position_endstop brings nozzle closer to the bed +## After you run Z_ENDSTOP_CALIBRATE, position_endstop will be stored at the very end of your config +# KR tap position_endstop: -0.5 +##-------------------------------------------------------------------- + +## Uncomment below for 250mm build +#position_max: 210 + +## Uncomment below for 300mm build +#position_max: 260 + +## Uncomment below for 350mm build +position_max: 310 + +##-------------------------------------------------------------------- +position_min: -5 +homing_speed: 8 +second_homing_speed: 3 +homing_retract_dist: 3 + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_z] +uart_pin: PC6 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 999999 + +## Z1 Stepper - Rear Left +## Connected to MOTOR_3 +[stepper_z1] +step_pin: PG4 +dir_pin: !PC1 +enable_pin: !PA0 +rotation_distance: 40 +gear_ratio: 80:16 +microsteps: 32 + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_z1] +uart_pin: PC7 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 999999 + +## Z2 Stepper - Rear Right +## Connected to MOTOR_4 +[stepper_z2] +step_pin: PF9 +dir_pin: PF10 +enable_pin: !PG2 +rotation_distance: 40 +gear_ratio: 80:16 +microsteps: 32 + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_z2] +uart_pin: PF2 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 999999 + +## Z3 Stepper - Front Right +## Connected to MOTOR_5 +[stepper_z3] +step_pin: PC13 +dir_pin: !PF0 +enable_pin: !PF1 +rotation_distance: 40 +gear_ratio: 80:16 +microsteps: 32 + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_z3] +uart_pin: PE4 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 999999 + + +##################################################################### +# Extruder +##################################################################### + +## Connected to MOTOR_6 +## Heater - HE0 +## Thermistor - T0 +[extruder] +step_pin: PE2 +dir_pin: !PE3 +enable_pin: !PD4 +## Update value below when you perform extruder calibration +## If you ask for 100mm of filament, but in reality it is 98mm: +## rotation_distance = * / 100 +## 22.6789511 is a good starting point +# KRLGX rotation_distance: 22.6789511 #Bondtech 5mm Drive Gears +## Update Gear Ratio depending on your Extruder Type +## Use 50:10 for Stealthburner/Clockwork 2 +## Use 50:17 for Afterburner/Clockwork (BMG Gear Ratio) +## Use 80:20 for M4, M3.1 +# KRLGX gear_ratio: 50:17 #BMG Gear Ratio +# KRLGX microsteps: 32 +# KRLGX full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree + +### KR LGX +rotation_distance: 8 +microsteps: 16 +full_steps_per_rotation: 200 + +nozzle_diameter: 0.400 +filament_diameter: 1.75 +heater_pin: PA2 +## Check what thermistor type you have. See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types. +## Use "Generic 3950" for NTC 100k 3950 thermistors +sensor_type: ATC Semitec 104NT-4-R025H42G +sensor_pin: PF4 +min_temp: 10 +max_temp: 270 +max_power: 1.0 +min_extrude_temp: 170 +#control = pid +#pid_kp = 26.213 +#pid_ki = 1.304 +#pid_kd = 131.721 +## Try to keep pressure_advance below 1.0 +#pressure_advance: 0.05 +## Default is 0.040, leave stock +#pressure_advance_smooth_time: 0.040 + +## E0 on MOTOR6 +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 extruder] +uart_pin: PE1 +interpolate: false +run_current: 0.5 +sense_resistor: 0.110 +stealthchop_threshold: 0 + + +##################################################################### +# Bed Heater +##################################################################### + + +## SSR Pin - HE1 +## Thermistor - TB +[heater_bed] +heater_pin: PA1 +## Validate the following thermistor type to make sure it is correct +## Keenovo branded bed heaters should use Generic 3950 +## LDO branded bed heaters will have the sensor type labelled on the heater +## Check what thermistor type you have. See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types. +## Use "Generic 3950" for Keenovo heaters +sensor_type: ATC Semitec 104NT-4-R025H42G +sensor_pin: PF3 +## Adjust Max Power so your heater doesn't warp your bed. Rule of thumb is 0.4 watts / cm^2 . +max_power: 0.6 +min_temp: 0 +max_temp: 120 +#control: pid +#pid_kp: 58.437 +#pid_ki: 2.347 +#pid_kd: 363.769 + +##################################################################### +# Probe +##################################################################### + +## KR tap kit + +[probe] +pin: PG15 +x_offset: 0 +# KR tap y_offset: 25.0 +y_offset: 0 +#z_offset: 0 +speed: 10.0 +samples: 5 +samples_result: median +sample_retract_dist: 3.0 +samples_tolerance: 0.006 +samples_tolerance_retries: 10 + +activate_gcode: + {% set PROBE_TEMP = 150 %} + {% set MAX_TEMP = PROBE_TEMP + 5 %} + {% set ACTUAL_TEMP = printer.extruder.temperature %} + {% set TARGET_TEMP = printer.extruder.target %} + + {% if TARGET_TEMP > PROBE_TEMP %} + { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } + M109 S{ PROBE_TEMP } + {% else %} + # Temperature target is already low enough, but nozzle may still be too hot. + {% if ACTUAL_TEMP > MAX_TEMP %} + { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } + TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } + {% endif %} + {% endif %} + +##################################################################### +# Fan Control +##################################################################### + +## Print Cooling Fan - FAN0 +[fan] +pin: PA8 +kick_start_time: 0.5 +## Depending on your fan, you may need to increase this value +## if your fan will not start. Can change cycle_time (increase) +## if your fan is not able to slow down effectively +off_below: 0.10 + + +## Hotend Fan - FAN1 +[heater_fan hotend_fan] +pin: PE5 +max_power: 1.0 +kick_start_time: 0.5 +heater: extruder +heater_temp: 50.0 +## If you are experiencing back flow, you can reduce fan_speed +#fan_speed: 1.0 + +## Controller fan - FAN2 +[controller_fan controller_fan] +pin: PD12 +kick_start_time: 0.5 +heater: heater_bed +fan_speed: 0.5 + +## Exhaust fan - FAN3 +#[heater_fan exhaust_fan] +#pin: PD13 +#max_power: 1.0 +#shutdown_speed: 0.0 +#kick_start_time: 5.0 +#heater: heater_bed +#heater_temp: 60 +#fan_speed: 1.0 + +##################################################################### +# LED Control +##################################################################### + +[output_pin caselight] +## Chamber Lighting - CNC_FAN5 +pin: PD15 +pwm:true +shutdown_value: 0 +value:0 #0.5 +# KR value:0 +cycle_time: 0.01 + +##################################################################### +# Additional Sensors +##################################################################### + +[thermistor CMFB103F3950FANT] +temperature1: 0.0 +resistance1: 32116.0 +temperature2: 40.0 +resistance2: 5309.0 +temperature3: 80.0 +resistance3: 1228.0 + +[temperature_sensor chamber_temp] +## Chamber Temperature - T1 +sensor_type: CMFB103F3950FANT +sensor_pin: PF5 +min_temp: 0 +max_temp: 100 +gcode_id: chamber_th + +##################################################################### +# Homing and Gantry Adjustment Routines +##################################################################### + +[idle_timeout] +timeout: 1800 + +[safe_z_home] +## XY Location of the Z Endstop Switch +## Update -10,-10 to the XY coordinates of your endstop pin +## (such as 157,305) after going through Z Endstop Pin +## Location Definition step. +# KR tap home_xy_position:234,350 +home_xy_position: 175,175 +#home_xy_position:-10,-10 +speed:100 +z_hop:10 +z_hop_speed:10 + + +## Use QUAD_GANTRY_LEVEL to level a gantry. +## Min & Max gantry corners - measure from nozzle at MIN (0,0) and +## MAX (250, 250), (300,300), or (350,350) depending on your printer size +## to respective belt positions +[quad_gantry_level] + +#-------------------------------------------------------------------- +## Gantry Corners for 250mm Build +## Uncomment for 250mm build +#gantry_corners: +# -60,-10 +# 310, 320 +## Probe points +#points: +# 50,25 +# 50,175 +# 200,175 +# 200,25 + +## Gantry Corners for 300mm Build +## Uncomment for 300mm build +#gantry_corners: +# -60,-10 +# 360,370 +## Probe points +#points: +# 50,25 +# 50,225 +# 250,225 +# 250,25 + +## Gantry Corners for 350mm Build +## Uncomment for 350mm build +gantry_corners: + -60,-10 + 410,420 +# Probe points +points: + 50,25 + 50,275 + 300,275 + 300,25 + +#-------------------------------------------------------------------- +speed: 100 +horizontal_move_z: 10 +retries: 10 +retry_tolerance: 0.02 +max_adjust: 20 + + +[bed_mesh] +speed: 300 +horizontal_move_z: 15 +## Uncomment for 350mm build +mesh_min: 40, 40 +mesh_max: 310,310 +##-------------------------------------------------------------------- +fade_start: 0.6 +fade_end: 10.0 +probe_count: 7,7 +algorithm: bicubic +relative_reference_index: 24 # (probe_count-1)/2 (center point) + + +######################################## +# EXP1 / EXP2 (display) pins +######################################## + +[board_pins] +aliases: + # EXP1 header + EXP1_1=PE8, EXP1_2=PE7, + EXP1_3=PE9, EXP1_4=PE10, + EXP1_5=PE12, EXP1_6=PE13, # Slot in the socket on this side + EXP1_7=PE14, EXP1_8=PE15, + EXP1_9=, EXP1_10=<5V>, + + # EXP2 header + EXP2_1=PA6, EXP2_2=PA5, + EXP2_3=PB1, EXP2_4=PA4, + EXP2_5=PB2, EXP2_6=PA7, # Slot in the socket on this side + EXP2_7=PC15, EXP2_8=, + EXP2_9=, EXP2_10=<5V> + +##################################################################### +# Displays +##################################################################### + +[display] +# mini12864 LCD Display +lcd_type: uc1701 +cs_pin: EXP1_3 +a0_pin: EXP1_4 +rst_pin: EXP1_5 +encoder_pins: ^EXP2_5, ^EXP2_3 +click_pin: ^!EXP1_2 +contrast: 63 +spi_software_miso_pin: EXP2_1 +spi_software_mosi_pin: EXP2_6 +spi_software_sclk_pin: EXP2_2 + +[neopixel btt_mini12864] +# To control Neopixel RGB in mini12864 display +pin: EXP1_6 +chain_count: 3 +initial_RED: 0.1 +initial_GREEN: 0.5 +initial_BLUE: 0.0 +color_order: RGB + +## Set RGB values on boot up for each Neopixel. +## Index 1 = display, Index 2 and 3 = Knob +[delayed_gcode setdisplayneopixel] +initial_duration: 1 +gcode: + SET_LED LED=btt_mini12864 RED=1 GREEN=1 BLUE=1 INDEX=1 TRANSMIT=0 + SET_LED LED=btt_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=2 TRANSMIT=0 + SET_LED LED=btt_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=3 + +#-------------------------------------------------------------------- + + +##################################################################### +# Macros +##################################################################### + +[gcode_macro QUAD_GANTRY_LEVEL] +rename_existing: QUAD_GANTRY_LEVEL_BASE +gcode: + STATUS_LEVELING + QUAD_GANTRY_LEVEL_BASE {rawparams} + STATUS_READY + +[gcode_macro G32] +gcode: + + SAVE_GCODE_STATE NAME=STATE_G32 + BED_MESH_CLEAR + STATUS_HOMING + G90 + G28 + G0 x175 y175 z100 f3000 + G0 z10 f3000 + STATUS_LEVELING + QUAD_GANTRY_LEVEL + STATUS_MESHING + BED_MESH_CALIBRATE PROFILE=now + #BED_MESH_PROFILE LOAD=default + STATUS_HOMING + G28 + ## Uncomment for for your size printer: + #-------------------------------------------------------------------- + ## Uncomment for 250mm build + #G0 X125 Y125 Z30 F3600 + + ## Uncomment for 300 build + #G0 X150 Y150 Z30 F3600 + + ## Uncomment for 350mm build + G0 X175 Y175 Z30 F3600 + + + RESTORE_GCODE_STATE NAME=STATE_G32 + +[gcode_macro WIPE_NOZZLE] +gcode: + #-------------------------------------------------------------------- + ## Draw Line // KR + G0 X4 Y4 F10000 # Moves to starting point + G0 Z0.4 # Raises Z to 0.4 + G91 # Incremental positioning + G1 X200 E20 F1000 # Purge line + G90 # Absolute position + + +# Turn off case lights +[gcode_macro CASELIGHTS_OFF] +gcode: + set_pin pin=caselight value=0 + +# Turn on case lights +[gcode_macro CASELIGHTS_ON] +gcode: + set_pin pin=caselight value=0.5 + +# Use PRINT_START for the slicer starting script - please customise for your slicer of choice +[gcode_macro PRINT_START] +gcode: + {% set temp_bed = params.BED|int %} + {% set temp_hotend = params.HOTEND|int %} + + CASELIGHTS_ON + M190 S{temp_bed} + M109 S130 + G4 P300000 ; wait 5 minutes (30k ms) for bed to settle + + G32 ; home all axes + M109 S{temp_hotend} + STATUS_BUSY + WIPE_NOZZLE + G90 ; absolute positioning + G1 Z20 F3000 ; move nozzle away from bed + + +# Use PRINT_END for the slicer ending script - please customise for your slicer of choice +[gcode_macro PRINT_END] +gcode: + # safe anti-stringing move coords + {% set th = printer.toolhead %} + {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} + {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} + {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} + + SAVE_GCODE_STATE NAME=STATE_PRINT_END + + M400 ; wait for buffer to clear + G92 E0 ; zero the extruder + G1 E-5.0 F1800 ; retract filament + + TURN_OFF_HEATERS + + G90 ; absolute positioning + G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 ; move nozzle to remove stringing + G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 ; park nozzle at rear + M107 ; turn off fan + + BED_MESH_CLEAR + CASELIGHTS_OFF + STATUS_OFF + RESTORE_GCODE_STATE NAME=STATE_PRINT_END + +[include stealthburner_leds.cfg] + +#*# <---------------------- SAVE_CONFIG ----------------------> +#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. +#*# +#*# [heater_bed] +#*# control = pid +#*# pid_kp = 43.554 +#*# pid_ki = 1.262 +#*# pid_kd = 375.651 +#*# +#*# [extruder] +#*# control = pid +#*# pid_kp = 29.711 +#*# pid_ki = 1.737 +#*# pid_kd = 127.014 +#*# +#*# [bed_mesh default] +#*# version = 1 +#*# points = +#*# 0.186250, 0.173750, 0.148750, 0.143750, 0.192500, 0.218750, 0.221250 +#*# 0.107500, 0.096250, 0.080000, 0.097500, 0.158750, 0.185000, 0.211250 +#*# 0.040000, 0.027500, 0.017500, 0.032500, 0.106250, 0.162500, 0.207500 +#*# -0.045000, -0.048750, -0.046250, 0.000000, 0.077500, 0.117500, 0.186250 +#*# -0.138750, -0.132500, -0.127500, -0.047500, 0.018750, 0.096250, 0.188750 +#*# -0.197500, -0.193750, -0.157500, -0.101250, 0.007500, 0.093750, 0.177500 +#*# -0.298750, -0.238750, -0.207500, -0.122500, -0.002500, 0.102500, 0.170000 +#*# tension = 0.2 +#*# min_x = 40.0 +#*# algo = bicubic +#*# y_count = 7 +#*# mesh_y_pps = 2 +#*# min_y = 40.0 +#*# x_count = 7 +#*# max_y = 310.0 +#*# mesh_x_pps = 2 +#*# max_x = 310.0 +#*# +#*# [input_shaper] +#*# shaper_type_x = mzv +#*# shaper_freq_x = 44.6 +#*# shaper_type_y = mzv +#*# shaper_freq_y = 46.4 +#*# +#*# [probe] +#*# z_offset = -1.100 diff --git a/maintenance/klipper/eve/stealthburner_leds.cfg b/maintenance/klipper/eve/stealthburner_leds.cfg new file mode 100755 index 0000000..cf002de --- /dev/null +++ b/maintenance/klipper/eve/stealthburner_leds.cfg @@ -0,0 +1,254 @@ +# Macros for setting the status leds on the Voron StealthBurner toolhead (or for any neopixel-type leds). +# +# You will need to configure a neopixel (or other addressable led, such as dotstar). See +# https://www.klipper3d.org/Config_Reference.html#neopixel for configuration details. + + +##################################### +# INSTRUCTIONS # +##################################### +# How to use all this stuff: +# +# 1. Copy this .cfg file into your Klipper config directory and then add [include stealthburner_leds.cfg] +# to the top of your printer.cfg in order to register the LEDs and macros with Klipper. +# 2. Define your LEDs by editing [neopixel sb_leds] below and entering the data pin from your control board +# as well as the color order. +# +# Note: RGB and RGBW are different and must be defined explicitly. RGB and RGBW are also not able to +# be mix-and-matched in the same chain. A separate data line would be needed for proper functioning. +# +# RGBW LEDs will have a visible yellow-ish phosphor section to the chip. If your LEDs do not have +# this yellow portion, you have RGB LEDs. +# +# 3. Save your config and restart Klipper. +# +# Note: We set RED and BLUE to 1.0 to make it easier for users and supporters to detect +# misconfigurations or miswiring. The default color format is for Neopixels with a dedicated +# white LED. On startup, all three SB LEDs should light up. +# +# If you get random colors across your LEDs, change the color_order to GRB and restart. Then +# omit the W for each suggested color_order in the next paragraph. +# +# If you get MAGENTA, your color order is correct. If you get CYAN, you need to use RGBW. If +# you get YELLOW, you need to use BRGW (note that BRG is only supported in the latest Klipper +# version). +# +# 4. Once you have confirmed that the LEDs are set up correctly, you must now decide where you want +# these macros called up...which means adding them to your existing gcode macros. NOTHING will happen +# unless you add the STATUS_????? macros to your existing gcode macros. +# +# Example: add STATUS_LEVELING to the beginning of your QGL gcode macro, and then add STATUS_READY +# to the end of it to set the logo LED and nozzle LEDs back to the `ready` state. +# +# Example: add STATUS_CLEANING to the beginning of your nozzle-cleaning macro, and then STATUS_READY +# to the end of it to return the LEDs back to `ready` state. +# +# 5. Feel free to change colors of each macro, create new ones if you have a need to. The macros provided below +# are just an example of what is possible. If you want to try some more complex animations, you will most +# likely have to use WLED with Moonraker and a small micro-controller +# +##################################### +# END INSTRUCTRUCTIONS # +##################################### + + +[neopixel sb_leds] +pin: PB6 +# The pin connected to the neopixel. This parameter must be provided. +chain_count: 3 +# The number of Neopixel chips that are "daisy chained" to the +# provided pin. The default is 1 (which indicates only a single +# Neopixel is connected to the pin). +color_order: GRBW +# Set the pixel order required by the LED hardware. Options are GRB, +# RGB, GRBW, or RGBW. The default is GRB. +initial_RED: 1.0 +initial_GREEN: 0.0 +initial_BLUE: 1.0 +initial_WHITE: 0.0 +# Sets the initial LED color of the Neopixel. Each value should be +# between 0.0 and 1.0. The WHITE option is only available on RGBW +# LEDs. The default for each color is 0.# + +# Most configuration for the macros can be done by modifying the variables in the _sb_vars macro +# at the start of this file. + +########## +# MACROS # +########## + +# The following status macros are available (these go inside of your macros): +# +# STATUS_READY +# STATUS_OFF +# STATUS_BUSY +# STATUS_HEATING +# STATUS_LEVELING +# STATUS_HOMING +# STATUS_CLEANING +# STATUS_MESHING +# STATUS_CALIBRATING_Z +# +# With additional macros for basic control: +# +# SET_NOZZLE_LEDS_ON +# SET_LOGO_LEDS_OFF +# SET_NOZZLE_LEDS_OFF +# +# Contributed by Voron discord users wile.e, Tetsunosuke, and etherwalker + + +[gcode_macro _sb_vars] +# User settings for the StealthBurner status leds. You can change the status colors and led +# configurations for the logo and nozzle here. +variable_colors: { + 'logo': { # Colors for logo states + 'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'cleaning': {'r': 0.0, 'g': 0.02, 'b': 0.5, 'w': 0.0}, + 'calibrating_z': {'r': 0.8, 'g': 0., 'b': 0.35, 'w': 0.0}, + 'heating': {'r': 0.3, 'g': 0.18, 'b': 0.0, 'w': 0.0}, + 'homing': {'r': 0.0, 'g': 0.6, 'b': 0.2, 'w': 0.0}, + 'leveling': {'r': 0.5, 'g': 0.1, 'b': 0.4, 'w': 0.0}, + 'meshing': {'r': 0.2, 'g': 1.0, 'b': 0.0, 'w': 0.0}, + 'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'printing': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'standby': {'r': 0.01, 'g': 0.01, 'b': 0.01, 'w': 0.1}, + }, + 'nozzle': { # Colors for nozzle states + 'heating': {'r': 0.8, 'g': 0.35, 'b': 0.0, 'w':0.0}, + 'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'on': {'r': 0.8, 'g': 0.8, 'b': 0.8, 'w':1.0}, + 'standby': {'r': 0.6, 'g': 0.0, 'b': 0.0, 'w':0.0}, + }, + 'thermal': { + 'hot': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'cold': {'r': 0.3, 'g': 0.0, 'b': 0.3, 'w': 0.0} + } + } +variable_logo_led_name: "sb_leds" +# The name of the addressable LED chain that contains the logo LED(s) +variable_logo_idx: "1" +# A comma-separated list of indexes LEDs in the logo +variable_nozzle_led_name: "sb_leds" +# The name of the addressable LED chain that contains the nozzle LED(s). This will +# typically be the same LED chain as the logo. +variable_nozzle_idx: "2,3" +# A comma-separated list of indexes of LEDs in the nozzle +gcode: + # This section is required. Do Not Delete. + + +[gcode_macro _set_sb_leds] +gcode: + {% set red = params.RED|default(0)|float %} + {% set green = params.GREEN|default(0)|float %} + {% set blue = params.BLUE|default(0)|float %} + {% set white = params.WHITE|default(0)|float %} + {% set led = params.LED|string %} + {% set idx = (params.IDX|string).split(',') %} + {% set transmit_last = params.TRANSMIT|default(1) %} + + {% for led_index in idx %} + {% set transmit=transmit_last if loop.last else 0 %} + set_led led={led} red={red} green={green} blue={blue} white={white} index={led_index} transmit={transmit} + {% endfor %} + +[gcode_macro _set_sb_leds_by_name] +gcode: + {% set leds_name = params.LEDS %} + {% set color_name = params.COLOR %} + {% set color = printer["gcode_macro _sb_vars"].colors[leds_name][color_name] %} + {% set led = printer["gcode_macro _sb_vars"][leds_name + "_led_name"] %} + {% set idx = printer["gcode_macro _sb_vars"][leds_name + "_idx"] %} + {% set transmit = params.TRANSMIT|default(1) %} + + _set_sb_leds led={led} red={color.r} green={color.g} blue={color.b} white={color.w} idx="{idx}" transmit={transmit} + +[gcode_macro _set_logo_leds] +gcode: + {% set red = params.RED|default(0)|float %} + {% set green = params.GREEN|default(0)|float %} + {% set blue = params.BLUE|default(0)|float %} + {% set white = params.WHITE|default(0)|float %} + {% set led = printer["gcode_macro _sb_vars"].logo_led_name %} + {% set idx = printer["gcode_macro _sb_vars"].logo_idx %} + {% set transmit=params.TRANSMIT|default(1) %} + + _set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit} + +[gcode_macro _set_nozzle_leds] +gcode: + {% set red = params.RED|default(0)|float %} + {% set green = params.GREEN|default(0)|float %} + {% set blue = params.BLUE|default(0)|float %} + {% set white = params.WHITE|default(0)|float %} + {% set led = printer["gcode_macro _sb_vars"].nozzle_led_name %} + {% set idx = printer["gcode_macro _sb_vars"].nozzle_idx %} + {% set transmit=params.TRANSMIT|default(1) %} + + _set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit} + +[gcode_macro set_logo_leds_off] +gcode: + {% set transmit=params.TRANSMIT|default(1) %} + _set_logo_leds red=0 blue=0 green=0 white=0 transmit={transmit} + +[gcode_macro set_nozzle_leds_on] +gcode: + {% set transmit=params.TRANSMIT|default(1) %} + _set_sb_leds_by_name leds="nozzle" color="on" transmit={transmit} + +[gcode_macro set_nozzle_leds_off] +gcode: + {% set transmit=params.TRANSMIT|default(1) %} + _set_sb_leds_by_name leds="nozzle" color="off" transmit={transmit} + +[gcode_macro status_off] +gcode: + set_logo_leds_off transmit=0 + set_nozzle_leds_off + +[gcode_macro status_ready] +gcode: + _set_sb_leds_by_name leds="logo" color="standby" transmit=0 + _set_sb_leds_by_name leds="nozzle" color="standby" transmit=1 + +[gcode_macro status_busy] +gcode: + _set_sb_leds_by_name leds="logo" color="busy" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_heating] +gcode: + _set_sb_leds_by_name leds="logo" color="heating" transmit=0 + _set_sb_leds_by_name leds="nozzle" color="heating" transmit=1 + +[gcode_macro status_leveling] +gcode: + _set_sb_leds_by_name leds="logo" color="leveling" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_homing] +gcode: + _set_sb_leds_by_name leds="logo" color="homing" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_cleaning] +gcode: + _set_sb_leds_by_name leds="logo" color="cleaning" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_meshing] +gcode: + _set_sb_leds_by_name leds="logo" color="meshing" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_calibrating_z] +gcode: + _set_sb_leds_by_name leds="logo" color="calibrating_z" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_printing] +gcode: + _set_sb_leds_by_name leds="logo" color="printing" transmit=0 + set_nozzle_leds_on diff --git a/maintenance/klipper/sfs.cfg b/maintenance/klipper/sfs.cfg new file mode 100755 index 0000000..6dbb59e --- /dev/null +++ b/maintenance/klipper/sfs.cfg @@ -0,0 +1,126 @@ +[filament_switch_sensor switch_sensor] +# change the pin number +switch_pin: gpio_xx +pause_on_runout: False +runout_gcode: + PAUSE # [pause_resume] is required in printer.cfg + M117 Filament switch runout +insert_gcode: + M117 Filament switch inserted + +[filament_motion_sensor encoder_sensor] +# change the pin number +switch_pin: gpio_xx +detection_length: 2.88 +extruder: extruder +pause_on_runout: False +runout_gcode: + PAUSE # [pause_resume] is required in printer.cfg + M117 Filament encoder runout +insert_gcode: + M117 Filament encoder inserted + + + + + + # Filament Switch Sensor Configuration +[filament_switch_sensor switch_sensor] +switch_pin: gpio_xx +pause_on_runout: False +runout_gcode: + PAUSE # This will trigger the pause macro defined below + M117 Filament switch runout +insert_gcode: + M117 Filament switch inserted + +# Filament Motion Sensor Configuration +[filament_motion_sensor encoder_sensor] +switch_pin: gpio_xx +detection_length: 2.88 +extruder: extruder +pause_on_runout: False +runout_gcode: + PAUSE # This will trigger the pause macro defined below + M117 Filament encoder runout +insert_gcode: + M117 Filament encoder inserted + +# Enables pause/resume functionality +[gcode_macro pause] +description: Pauses the current print. + Usage: PAUSE [X=] [Y=] [Z=] [E=] [B=] +rename_existing: _KM_PAUSE_BASE +gcode: + {% set km = printer["gcode_macro _km_globals"] %} + # Retract length (negative) + {% set E = (params.E|default(5))|float %} + + {% if printer.pause_resume.is_paused %} + { action_respond_info("Print already paused") } + {% elif printer.idle_timeout.state | string == "Printing" or + (printer.virtual_sdcard|default({})).is_active|default(False) %} + _KM_PRINT_STATUS ACTION=CHANGE STATUS=pausing RESET_STACK=1 + {% set position = printer.gcode_move.gcode_position %} + SET_GCODE_VARIABLE MACRO=resume VARIABLE=saved_x VALUE="{position.x}" + SET_GCODE_VARIABLE MACRO=resume VARIABLE=saved_y VALUE="{position.y}" + SET_GCODE_VARIABLE MACRO=resume VARIABLE=saved_z VALUE="{position.z}" + SET_GCODE_VARIABLE MACRO=resume VARIABLE=saved_e VALUE="{E}" + SAVE_GCODE_STATE NAME=_KM_PAUSE_OVERRIDE_STATE + _KM_PAUSE_BASE + M83 + {% if printer.extruder.can_extrude %} + G1 E{'%.4f' % -E} F{km.load_speed} + {% endif %} + # Move up by 10mm after pausing to avoid damaging the print + # relative + G91 + G0 Z10 F{km.travel_speed_z} + # abs + G90 + _KM_BEEP_IF_AVAILABLE BEEPS={params.B|default(10)} + {% else %} + { action_respond_info("Print not in progress") } + {% endif %} + +[gcode_macro resume] +description: Resumes the currently paused print. + Usage: RESUME [E] +rename_existing: _KM_RESUME_BASE +variable_saved_extruder_temp: 0 +variable_saved_x: 0.0 +variable_saved_y: 0.0 +variable_saved_z: 0.0 +variable_saved_e: 0.0 +gcode: + {% if printer.pause_resume.is_paused %} + {% set km = printer["gcode_macro _km_globals"] %} + # Warm the extruder back up if needed. + {% set extruder = printer[printer.toolhead.extruder] %} + {% if extruder.target <= printer.configfile.settings[ + printer.toolhead.extruder].min_temp + | float + 0.5 %} + M109 S{saved_extruder_temp} + {% endif %} + + # If there's no saved_e assume we're completing a filament change and + # retract enough to avoid drooling on the model. + {% if 'E' not in params and not saved_e %} + {% set saved_e = 5.0 %} + G1 E{'%.4f' % -saved_e } F{km.load_speed} + {% endif %} + + SET_GCODE_VARIABLE MACRO=resume VARIABLE=saved_extruder_temp VALUE="{0}" + G90 + # Move back to last position before unretracting. + G0 X{saved_x} Y{saved_y} F{km.travel_speed_xy} + G0 Z{saved_z} F{km.travel_speed_z} + G91 + # Unretract + G1 E{'%.4f' % (params.E|default(saved_e))} F{km.load_speed} + RESTORE_GCODE_STATE NAME=_KM_PAUSE_OVERRIDE_STATE MOVE=1 + _KM_RESUME_BASE + {% else %} + { action_respond_info("Printer is not paused.") } + {% endif %} + _KM_PRINT_STATUS ACTION=CHANGE STATUS=printing RESET_STACK=1 diff --git a/maintenance/klipper/walle/printer.cfg b/maintenance/klipper/walle/printer.cfg new file mode 100755 index 0000000..81c4840 --- /dev/null +++ b/maintenance/klipper/walle/printer.cfg @@ -0,0 +1,681 @@ +# This file contains common pin mappings for the BigTreeTech Octopus V1. +# To use this config, the firmware should be compiled for the STM32F446 with a "32KiB bootloader" +# Enable "extra low-level configuration options" and select the "12MHz crystal" as clock reference + +# after running "make", copy the generated "klipper/out/klipper.bin" file to a +# file named "firmware.bin" on an SD card and then restart the OctoPus with that SD card. + +# See docs/Config_Reference.md for a description of parameters. + +## Voron Design VORON2 250/300/350mm BigTreeTech OctoPus V1 TMC2209 UART config + +## *** THINGS TO CHANGE/CHECK: *** +## MCU paths [mcu] section +## Thermistor types [extruder] and [heater_bed] sections - See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types +## Z Endstop Switch location [safe_z_home] section +## Homing end position [gcode_macro G32] section +## Z Endstop Switch offset for Z0 [stepper_z] section +## Probe points [quad_gantry_level] section +## Min & Max gantry corner postions [quad_gantry_level] section +## PID tune [extruder] and [heater_bed] sections +## Probe pin [probe] section +## Fine tune E steps [extruder] section + +[mcu] +## Obtain definition by "ls -l /dev/serial/by-id/" then unplug to verify +##-------------------------------------------------------------------- +serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_230022000150335331383520-if00 +restart_method: command +##-------------------------------------------------------------------- + +[mcu rpi] +serial: /tmp/klipper_host_mcu + +[adxl345] +cs_pin: rpi:None + +[resonance_tester] +accel_chip: adxl345 +probe_points: + 175, 175, 20 # an example + +[printer] +kinematics: corexy +max_velocity: 300 +max_accel: 3000 #Max 4000 +max_z_velocity: 15 #Max 15 for 12V TMC Drivers, can increase for 24V +max_z_accel: 350 +square_corner_velocity: 5.0 + +##################################################################### +# X/Y Stepper Settings +##################################################################### + +## B Stepper - Left +## Connected to MOTOR_0 +## Endstop connected to DIAG_0 +[stepper_x] +step_pin: PF13 +dir_pin: PF12 +enable_pin: !PF14 +rotation_distance: 40 +microsteps: 32 +full_steps_per_rotation:400 #set to 200 for 1.8 degree stepper +endstop_pin: PG6 +position_min: 0 +##-------------------------------------------------------------------- + +## Uncomment for 350mm build +position_endstop: 343 # KR 6/4/24 was 350 +position_max: 343 # KR 6/5/25 was 350 + +##-------------------------------------------------------------------- +homing_speed: 25 #Max 100 +homing_retract_dist: 5 +homing_positive_dir: true + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_x] +uart_pin: PC4 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + +## A Stepper - Right +## Connected to MOTOR_1 +## Endstop connected to DIAG_1 +[stepper_y] +step_pin: PG0 +dir_pin: PG1 +enable_pin: !PF15 +rotation_distance: 40 +microsteps: 32 +full_steps_per_rotation:400 #set to 200 for 1.8 degree stepper +endstop_pin: PG9 +position_min: 0 +##-------------------------------------------------------------------- + +## Uncomment for 350mm build +position_endstop: 350 +position_max: 350 + +##-------------------------------------------------------------------- +homing_speed: 25 #Max 100 +homing_retract_dist: 5 +homing_positive_dir: true + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_y] +uart_pin: PD11 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + +##################################################################### +# Z Stepper Settings +##################################################################### + +## Z0 Stepper - Front Left +## Connected to MOTOR_2 +## Endstop connected to DIAG_2 +[stepper_z] +step_pin: PF11 +dir_pin: PG3 +enable_pin: !PG5 +rotation_distance: 40 +gear_ratio: 80:16 +microsteps: 32 +# KR tap endstop_pin: PG10 +endstop_pin: probe:z_virtual_endstop +## Z-position of nozzle (in mm) to z-endstop trigger point relative to print surface (Z0) +## (+) value = endstop above Z0, (-) value = endstop below +## Increasing position_endstop brings nozzle closer to the bed +## After you run Z_ENDSTOP_CALIBRATE, position_endstop will be stored at the very end of your config +# KR tap position_endstop: -0.5 +##-------------------------------------------------------------------- + +## Uncomment below for 250mm build +#position_max: 210 + +## Uncomment below for 300mm build +#position_max: 260 + +## Uncomment below for 350mm build +position_max: 310 + +##-------------------------------------------------------------------- +position_min: -5 +homing_speed: 8 +second_homing_speed: 3 +homing_retract_dist: 3 + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_z] +uart_pin: PC6 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 999999 + +## Z1 Stepper - Rear Left +## Connected to MOTOR_3 +[stepper_z1] +step_pin: PG4 +dir_pin: !PC1 +enable_pin: !PA0 +rotation_distance: 40 +gear_ratio: 80:16 +microsteps: 32 + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_z1] +uart_pin: PC7 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 999999 + +## Z2 Stepper - Rear Right +## Connected to MOTOR_4 +[stepper_z2] +step_pin: PF9 +dir_pin: PF10 +enable_pin: !PG2 +rotation_distance: 40 +gear_ratio: 80:16 +microsteps: 32 + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_z2] +uart_pin: PF2 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 999999 + +## Z3 Stepper - Front Right +## Connected to MOTOR_5 +[stepper_z3] +step_pin: PC13 +dir_pin: !PF0 +enable_pin: !PF1 +rotation_distance: 40 +gear_ratio: 80:16 +microsteps: 32 + +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 stepper_z3] +uart_pin: PE4 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 999999 + + +##################################################################### +# Extruder +##################################################################### + +## Connected to MOTOR_6 +## Heater - HE0 +## Thermistor - T0 +[extruder] +step_pin: PE2 +dir_pin: !PE3 +enable_pin: !PD4 +## Update value below when you perform extruder calibration +## If you ask for 100mm of filament, but in reality it is 98mm: +## rotation_distance = * / 100 +## 22.6789511 is a good starting point +# KRLGX rotation_distance: 22.6789511 #Bondtech 5mm Drive Gears +## Update Gear Ratio depending on your Extruder Type +## Use 50:10 for Stealthburner/Clockwork 2 +## Use 50:17 for Afterburner/Clockwork (BMG Gear Ratio) +## Use 80:20 for M4, M3.1 +# KRLGX gear_ratio: 50:17 #BMG Gear Ratio +# KRLGX microsteps: 32 +# KRLGX full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree + +### KR LGX +rotation_distance: 8 +microsteps: 16 +full_steps_per_rotation: 200 + +nozzle_diameter: 0.600 +filament_diameter: 1.75 +heater_pin: PA2 +## Check what thermistor type you have. See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types. +## Use "Generic 3950" for NTC 100k 3950 thermistors +sensor_type: ATC Semitec 104NT-4-R025H42G +sensor_pin: PF4 +min_temp: 10 +max_temp: 270 +max_power: 1.0 +min_extrude_temp: 170 +#control = pid +#pid_kp = 26.213 +#pid_ki = 1.304 +#pid_kd = 131.721 +## Try to keep pressure_advance below 1.0 +#pressure_advance: 0.05 +## Default is 0.040, leave stock +#pressure_advance_smooth_time: 0.040 + +## E0 on MOTOR6 +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 extruder] +uart_pin: PE1 +interpolate: false +run_current: 0.5 +sense_resistor: 0.110 +stealthchop_threshold: 0 + + +##################################################################### +# Bed Heater +##################################################################### + + +## SSR Pin - HE1 +## Thermistor - TB +[heater_bed] +heater_pin: PA1 +## Validate the following thermistor type to make sure it is correct +## Keenovo branded bed heaters should use Generic 3950 +## LDO branded bed heaters will have the sensor type labelled on the heater +## Check what thermistor type you have. See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types. +## Use "Generic 3950" for Keenovo heaters +sensor_type: ATC Semitec 104NT-4-R025H42G +sensor_pin: PF3 +## Adjust Max Power so your heater doesn't warp your bed. Rule of thumb is 0.4 watts / cm^2 . +max_power: 0.6 +min_temp: 0 +max_temp: 120 +#control = pid +#pid_kp = 42.785 +#pid_ki = 1.110 +#pid_kd = 412.342 + +##################################################################### +# Probe +##################################################################### + +## KR tap kit + +[probe] +pin: PG15 +x_offset: 0 +# KR tap y_offset: 25.0 +y_offset: 0 +#z_offset: 0 +speed: 10.0 +samples: 5 +samples_result: median +sample_retract_dist: 3.0 +samples_tolerance: 0.006 +samples_tolerance_retries: 10 + +activate_gcode: + {% set PROBE_TEMP = 150 %} + {% set MAX_TEMP = PROBE_TEMP + 5 %} + {% set ACTUAL_TEMP = printer.extruder.temperature %} + {% set TARGET_TEMP = printer.extruder.target %} + + {% if TARGET_TEMP > PROBE_TEMP %} + { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } + M109 S{ PROBE_TEMP } + {% else %} + # Temperature target is already low enough, but nozzle may still be too hot. + {% if ACTUAL_TEMP > MAX_TEMP %} + { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } + TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } + {% endif %} + {% endif %} + +##################################################################### +# Fan Control +##################################################################### + +## Print Cooling Fan - FAN0 +[fan] +pin: PA8 +kick_start_time: 0.5 +## Depending on your fan, you may need to increase this value +## if your fan will not start. Can change cycle_time (increase) +## if your fan is not able to slow down effectively +off_below: 0.10 + + +## Hotend Fan - FAN1 +[heater_fan hotend_fan] +pin: PE5 +max_power: 1.0 +kick_start_time: 0.5 +heater: extruder +heater_temp: 50.0 +## If you are experiencing back flow, you can reduce fan_speed +#fan_speed: 1.0 + +## Controller fan - FAN2 +[controller_fan controller_fan] +pin: PD12 +kick_start_time: 0.5 +heater: heater_bed +fan_speed: 0.5 + +## Exhaust fan - FAN3 +#[heater_fan exhaust_fan] +#pin: PD13 +#max_power: 1.0 +#shutdown_speed: 0.0 +#kick_start_time: 5.0 +#heater: heater_bed +#heater_temp: 60 +#fan_speed: 1.0 + +##################################################################### +# LED Control +##################################################################### + +[output_pin caselight] +## Chamber Lighting - CNC_FAN5 +pin: PD15 +pwm:true +shutdown_value: 0 +value:0 #0.5 +# KR value:0 +cycle_time: 0.01 + +##################################################################### +# Additional Sensors +##################################################################### + +[thermistor CMFB103F3950FANT] +temperature1: 0.0 +resistance1: 32116.0 +temperature2: 40.0 +resistance2: 5309.0 +temperature3: 80.0 +resistance3: 1228.0 + +[temperature_sensor chamber_temp] +## Chamber Temperature - T1 +sensor_type: CMFB103F3950FANT +sensor_pin: PF5 +min_temp: 0 +max_temp: 100 +gcode_id: chamber_th + +##################################################################### +# Homing and Gantry Adjustment Routines +##################################################################### + +[idle_timeout] +timeout: 1800 + +[safe_z_home] +## XY Location of the Z Endstop Switch +## Update -10,-10 to the XY coordinates of your endstop pin +## (such as 157,305) after going through Z Endstop Pin +## Location Definition step. +# KR tap home_xy_position:234,350 +home_xy_position: 175,175 +#home_xy_position:-10,-10 +speed:100 +z_hop:10 +z_hop_speed:10 + + +## Use QUAD_GANTRY_LEVEL to level a gantry. +## Min & Max gantry corners - measure from nozzle at MIN (0,0) and +## MAX (250, 250), (300,300), or (350,350) depending on your printer size +## to respective belt positions +[quad_gantry_level] + +#-------------------------------------------------------------------- +## Gantry Corners for 250mm Build +## Uncomment for 250mm build +#gantry_corners: +# -60,-10 +# 310, 320 +## Probe points +#points: +# 50,25 +# 50,175 +# 200,175 +# 200,25 + +## Gantry Corners for 300mm Build +## Uncomment for 300mm build +#gantry_corners: +# -60,-10 +# 360,370 +## Probe points +#points: +# 50,25 +# 50,225 +# 250,225 +# 250,25 + +## Gantry Corners for 350mm Build +## Uncomment for 350mm build +gantry_corners: + -60,-10 + 410,420 +# Probe points +points: + 50,25 + 50,275 + 300,275 + 300,25 + +#-------------------------------------------------------------------- +speed: 100 +horizontal_move_z: 10 +retries: 10 +retry_tolerance: 0.02 # KR was 0.0075 +max_adjust: 20 + + +[bed_mesh] +speed: 300 +horizontal_move_z: 15 +## Uncomment for 350mm build +mesh_min: 40, 40 +mesh_max: 310,310 +##-------------------------------------------------------------------- +fade_start: 0.6 +fade_end: 10.0 +probe_count: 7,7 +algorithm: bicubic +relative_reference_index: 24 # (probe_count-1)/2 (center point) + + +######################################## +# EXP1 / EXP2 (display) pins +######################################## + +[board_pins] +aliases: + # EXP1 header + EXP1_1=PE8, EXP1_2=PE7, + EXP1_3=PE9, EXP1_4=PE10, + EXP1_5=PE12, EXP1_6=PE13, # Slot in the socket on this side + EXP1_7=PE14, EXP1_8=PE15, + EXP1_9=, EXP1_10=<5V>, + + # EXP2 header + EXP2_1=PA6, EXP2_2=PA5, + EXP2_3=PB1, EXP2_4=PA4, + EXP2_5=PB2, EXP2_6=PA7, # Slot in the socket on this side + EXP2_7=PC15, EXP2_8=, + EXP2_9=, EXP2_10=<5V> + +##################################################################### +# Displays +##################################################################### + +[display] +# mini12864 LCD Display +lcd_type: uc1701 +cs_pin: EXP1_3 +a0_pin: EXP1_4 +rst_pin: EXP1_5 +encoder_pins: ^EXP2_5, ^EXP2_3 +click_pin: ^!EXP1_2 +contrast: 63 +spi_software_miso_pin: EXP2_1 +spi_software_mosi_pin: EXP2_6 +spi_software_sclk_pin: EXP2_2 + +[neopixel btt_mini12864] +# To control Neopixel RGB in mini12864 display +pin: EXP1_6 +chain_count: 3 +initial_RED: 0.1 +initial_GREEN: 0.5 +initial_BLUE: 0.0 +color_order: RGB + +## Set RGB values on boot up for each Neopixel. +## Index 1 = display, Index 2 and 3 = Knob +[delayed_gcode setdisplayneopixel] +initial_duration: 1 +gcode: + SET_LED LED=btt_mini12864 RED=1 GREEN=1 BLUE=1 INDEX=1 TRANSMIT=0 + SET_LED LED=btt_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=2 TRANSMIT=0 + SET_LED LED=btt_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=3 + +#-------------------------------------------------------------------- + + +##################################################################### +# Macros +##################################################################### + +[gcode_macro QUAD_GANTRY_LEVEL] +rename_existing: QUAD_GANTRY_LEVEL_BASE +gcode: + STATUS_LEVELING + QUAD_GANTRY_LEVEL_BASE {rawparams} + STATUS_READY + +[gcode_macro G32] +gcode: + + SAVE_GCODE_STATE NAME=STATE_G32 + BED_MESH_CLEAR + STATUS_HOMING + G90 + G28 + G0 x175 y175 z100 f3000 + G0 z10 f3000 + STATUS_LEVELING + QUAD_GANTRY_LEVEL + STATUS_MESHING + BED_MESH_CALIBRATE PROFILE=now + #BED_MESH_PROFILE LOAD=default + STATUS_HOMING + G28 + ## Uncomment for for your size printer: + #-------------------------------------------------------------------- + ## Uncomment for 250mm build + #G0 X125 Y125 Z30 F3600 + + ## Uncomment for 300 build + #G0 X150 Y150 Z30 F3600 + + ## Uncomment for 350mm build + G0 X175 Y175 Z30 F3600 + + + RESTORE_GCODE_STATE NAME=STATE_G32 + +[gcode_macro WIPE_NOZZLE] +gcode: + #-------------------------------------------------------------------- + ## Draw Line // KR + G0 X4 Y4 F10000 # Moves to starting point + G0 Z0.4 # Raises Z to 0.4 + G91 # Incremental positioning + G1 X200 E20 F1000 # Purge line + G90 # Absolute position + + +# Turn off case lights +[gcode_macro CASELIGHTS_OFF] +gcode: + set_pin pin=caselight value=0 + +# Turn on case lights +[gcode_macro CASELIGHTS_ON] +gcode: + set_pin pin=caselight value=0.5 + +# Use PRINT_START for the slicer starting script - please customise for your slicer of choice +[gcode_macro PRINT_START] +gcode: + {% set temp_bed = params.BED|int %} + {% set temp_hotend = params.HOTEND|int %} + + CASELIGHTS_ON + M190 S{temp_bed} + M109 S130 + G4 P300000 ; wait 5 minutes (30k ms) for bed to settle + + G32 ; home all axes + M109 S{temp_hotend} + STATUS_BUSY + WIPE_NOZZLE + G90 ; absolute positioning + G1 Z20 F3000 ; move nozzle away from bed + + +# Use PRINT_END for the slicer ending script - please customise for your slicer of choice +[gcode_macro PRINT_END] +gcode: + # safe anti-stringing move coords + {% set th = printer.toolhead %} + {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} + {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} + {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} + + SAVE_GCODE_STATE NAME=STATE_PRINT_END + + M400 ; wait for buffer to clear + G92 E0 ; zero the extruder + G1 E-5.0 F1800 ; retract filament + + TURN_OFF_HEATERS + + G90 ; absolute positioning + G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 ; move nozzle to remove stringing + G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 ; park nozzle at rear + M107 ; turn off fan + + BED_MESH_CLEAR + CASELIGHTS_OFF + STATUS_OFF + RESTORE_GCODE_STATE NAME=STATE_PRINT_END + +[include stealthburner_leds.cfg] + +#*# <---------------------- SAVE_CONFIG ----------------------> +#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. +#*# +#*# [extruder] +#*# control = pid +#*# pid_kp = 31.397 +#*# pid_ki = 3.548 +#*# pid_kd = 69.465 +#*# +#*# [probe] +#*# z_offset = -0.535 +#*# +#*# [heater_bed] +#*# control = pid +#*# pid_kp = 42.110 +#*# pid_ki = 1.084 +#*# pid_kd = 408.992 diff --git a/maintenance/klipper/walle/stealthburner_leds.cfg b/maintenance/klipper/walle/stealthburner_leds.cfg new file mode 100755 index 0000000..e0b2e4d --- /dev/null +++ b/maintenance/klipper/walle/stealthburner_leds.cfg @@ -0,0 +1,254 @@ +# Macros for setting the status leds on the Voron StealthBurner toolhead (or for any neopixel-type leds). +# +# You will need to configure a neopixel (or other addressable led, such as dotstar). See +# https://www.klipper3d.org/Config_Reference.html#neopixel for configuration details. + + +##################################### +# INSTRUCTIONS # +##################################### +# How to use all this stuff: +# +# 1. Copy this .cfg file into your Klipper config directory and then add [include stealthburner_leds.cfg] +# to the top of your printer.cfg in order to register the LEDs and macros with Klipper. +# 2. Define your LEDs by editing [neopixel sb_leds] below and entering the data pin from your control board +# as well as the color order. +# +# Note: RGB and RGBW are different and must be defined explicitly. RGB and RGBW are also not able to +# be mix-and-matched in the same chain. A separate data line would be needed for proper functioning. +# +# RGBW LEDs will have a visible yellow-ish phosphor section to the chip. If your LEDs do not have +# this yellow portion, you have RGB LEDs. +# +# 3. Save your config and restart Klipper. +# +# Note: We set RED and BLUE to 1.0 to make it easier for users and supporters to detect +# misconfigurations or miswiring. The default color format is for Neopixels with a dedicated +# white LED. On startup, all three SB LEDs should light up. +# +# If you get random colors across your LEDs, change the color_order to GRB and restart. Then +# omit the W for each suggested color_order in the next paragraph. +# +# If you get MAGENTA, your color order is correct. If you get CYAN, you need to use RGBW. If +# you get YELLOW, you need to use BRGW (note that BRG is only supported in the latest Klipper +# version). +# +# 4. Once you have confirmed that the LEDs are set up correctly, you must now decide where you want +# these macros called up...which means adding them to your existing gcode macros. NOTHING will happen +# unless you add the STATUS_????? macros to your existing gcode macros. +# +# Example: add STATUS_LEVELING to the beginning of your QGL gcode macro, and then add STATUS_READY +# to the end of it to set the logo LED and nozzle LEDs back to the `ready` state. +# +# Example: add STATUS_CLEANING to the beginning of your nozzle-cleaning macro, and then STATUS_READY +# to the end of it to return the LEDs back to `ready` state. +# +# 5. Feel free to change colors of each macro, create new ones if you have a need to. The macros provided below +# are just an example of what is possible. If you want to try some more complex animations, you will most +# likely have to use WLED with Moonraker and a small micro-controller +# +##################################### +# END INSTRUCTRUCTIONS # +##################################### + + +[neopixel sb_leds] +pin: PB0 +# The pin connected to the neopixel. This parameter must be provided. +chain_count: 3 +# The number of Neopixel chips that are "daisy chained" to the +# provided pin. The default is 1 (which indicates only a single +# Neopixel is connected to the pin). +color_order: GRBW +# Set the pixel order required by the LED hardware. Options are GRB, +# RGB, GRBW, or RGBW. The default is GRB. +initial_RED: 1.0 +initial_GREEN: 0.0 +initial_BLUE: 1.0 +initial_WHITE: 0.0 +# Sets the initial LED color of the Neopixel. Each value should be +# between 0.0 and 1.0. The WHITE option is only available on RGBW +# LEDs. The default for each color is 0.# + +# Most configuration for the macros can be done by modifying the variables in the _sb_vars macro +# at the start of this file. + +########## +# MACROS # +########## + +# The following status macros are available (these go inside of your macros): +# +# STATUS_READY +# STATUS_OFF +# STATUS_BUSY +# STATUS_HEATING +# STATUS_LEVELING +# STATUS_HOMING +# STATUS_CLEANING +# STATUS_MESHING +# STATUS_CALIBRATING_Z +# +# With additional macros for basic control: +# +# SET_NOZZLE_LEDS_ON +# SET_LOGO_LEDS_OFF +# SET_NOZZLE_LEDS_OFF +# +# Contributed by Voron discord users wile.e, Tetsunosuke, and etherwalker + + +[gcode_macro _sb_vars] +# User settings for the StealthBurner status leds. You can change the status colors and led +# configurations for the logo and nozzle here. +variable_colors: { + 'logo': { # Colors for logo states + 'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'cleaning': {'r': 0.0, 'g': 0.02, 'b': 0.5, 'w': 0.0}, + 'calibrating_z': {'r': 0.8, 'g': 0., 'b': 0.35, 'w': 0.0}, + 'heating': {'r': 0.3, 'g': 0.18, 'b': 0.0, 'w': 0.0}, + 'homing': {'r': 0.0, 'g': 0.6, 'b': 0.2, 'w': 0.0}, + 'leveling': {'r': 0.5, 'g': 0.1, 'b': 0.4, 'w': 0.0}, + 'meshing': {'r': 0.2, 'g': 1.0, 'b': 0.0, 'w': 0.0}, + 'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'printing': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'standby': {'r': 0.01, 'g': 0.01, 'b': 0.01, 'w': 0.1}, + }, + 'nozzle': { # Colors for nozzle states + 'heating': {'r': 0.8, 'g': 0.35, 'b': 0.0, 'w':0.0}, + 'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'on': {'r': 0.8, 'g': 0.8, 'b': 0.8, 'w':1.0}, + 'standby': {'r': 0.6, 'g': 0.0, 'b': 0.0, 'w':0.0}, + }, + 'thermal': { + 'hot': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'cold': {'r': 0.3, 'g': 0.0, 'b': 0.3, 'w': 0.0} + } + } +variable_logo_led_name: "sb_leds" +# The name of the addressable LED chain that contains the logo LED(s) +variable_logo_idx: "1" +# A comma-separated list of indexes LEDs in the logo +variable_nozzle_led_name: "sb_leds" +# The name of the addressable LED chain that contains the nozzle LED(s). This will +# typically be the same LED chain as the logo. +variable_nozzle_idx: "2,3" +# A comma-separated list of indexes of LEDs in the nozzle +gcode: + # This section is required. Do Not Delete. + + +[gcode_macro _set_sb_leds] +gcode: + {% set red = params.RED|default(0)|float %} + {% set green = params.GREEN|default(0)|float %} + {% set blue = params.BLUE|default(0)|float %} + {% set white = params.WHITE|default(0)|float %} + {% set led = params.LED|string %} + {% set idx = (params.IDX|string).split(',') %} + {% set transmit_last = params.TRANSMIT|default(1) %} + + {% for led_index in idx %} + {% set transmit=transmit_last if loop.last else 0 %} + set_led led={led} red={red} green={green} blue={blue} white={white} index={led_index} transmit={transmit} + {% endfor %} + +[gcode_macro _set_sb_leds_by_name] +gcode: + {% set leds_name = params.LEDS %} + {% set color_name = params.COLOR %} + {% set color = printer["gcode_macro _sb_vars"].colors[leds_name][color_name] %} + {% set led = printer["gcode_macro _sb_vars"][leds_name + "_led_name"] %} + {% set idx = printer["gcode_macro _sb_vars"][leds_name + "_idx"] %} + {% set transmit = params.TRANSMIT|default(1) %} + + _set_sb_leds led={led} red={color.r} green={color.g} blue={color.b} white={color.w} idx="{idx}" transmit={transmit} + +[gcode_macro _set_logo_leds] +gcode: + {% set red = params.RED|default(0)|float %} + {% set green = params.GREEN|default(0)|float %} + {% set blue = params.BLUE|default(0)|float %} + {% set white = params.WHITE|default(0)|float %} + {% set led = printer["gcode_macro _sb_vars"].logo_led_name %} + {% set idx = printer["gcode_macro _sb_vars"].logo_idx %} + {% set transmit=params.TRANSMIT|default(1) %} + + _set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit} + +[gcode_macro _set_nozzle_leds] +gcode: + {% set red = params.RED|default(0)|float %} + {% set green = params.GREEN|default(0)|float %} + {% set blue = params.BLUE|default(0)|float %} + {% set white = params.WHITE|default(0)|float %} + {% set led = printer["gcode_macro _sb_vars"].nozzle_led_name %} + {% set idx = printer["gcode_macro _sb_vars"].nozzle_idx %} + {% set transmit=params.TRANSMIT|default(1) %} + + _set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit} + +[gcode_macro set_logo_leds_off] +gcode: + {% set transmit=params.TRANSMIT|default(1) %} + _set_logo_leds red=0 blue=0 green=0 white=0 transmit={transmit} + +[gcode_macro set_nozzle_leds_on] +gcode: + {% set transmit=params.TRANSMIT|default(1) %} + _set_sb_leds_by_name leds="nozzle" color="on" transmit={transmit} + +[gcode_macro set_nozzle_leds_off] +gcode: + {% set transmit=params.TRANSMIT|default(1) %} + _set_sb_leds_by_name leds="nozzle" color="off" transmit={transmit} + +[gcode_macro status_off] +gcode: + set_logo_leds_off transmit=0 + set_nozzle_leds_off + +[gcode_macro status_ready] +gcode: + _set_sb_leds_by_name leds="logo" color="standby" transmit=0 + _set_sb_leds_by_name leds="nozzle" color="standby" transmit=1 + +[gcode_macro status_busy] +gcode: + _set_sb_leds_by_name leds="logo" color="busy" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_heating] +gcode: + _set_sb_leds_by_name leds="logo" color="heating" transmit=0 + _set_sb_leds_by_name leds="nozzle" color="heating" transmit=1 + +[gcode_macro status_leveling] +gcode: + _set_sb_leds_by_name leds="logo" color="leveling" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_homing] +gcode: + _set_sb_leds_by_name leds="logo" color="homing" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_cleaning] +gcode: + _set_sb_leds_by_name leds="logo" color="cleaning" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_meshing] +gcode: + _set_sb_leds_by_name leds="logo" color="meshing" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_calibrating_z] +gcode: + _set_sb_leds_by_name leds="logo" color="calibrating_z" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_printing] +gcode: + _set_sb_leds_by_name leds="logo" color="printing" transmit=0 + set_nozzle_leds_on diff --git a/maintenance/prusa.md b/maintenance/prusa.md new file mode 100755 index 0000000..9642392 --- /dev/null +++ b/maintenance/prusa.md @@ -0,0 +1,32 @@ +--- +title: Prusa MK3S +layout: default +parent: Maintenance Resources +nav_order: 1 +--- +# Prusa MK3S +![Prusa MK3S](../attachments/prusa_mk3s.png) +## Documentation +[Prusa MK3S Documentation](https://help.prusa3d.com/tag/mk3s) + +## Cold Pull Procedure +[Cold Pull Procedure](https://help.prusa3d.com/article/cold-pull-mk3s-mk2-5s_2075) + +## First Layer Calibration +![First Layer Calibration](../attachments/first_layer_calibration.png) + +[First Layer Calibration](https://help.prusa3d.com/article/first-layer-calibration-i3_112364) + +## Nozzle Replacement +![Nozzle Replacement](../attachments/nozzle_replacement.png) +[Prusa Nozzle Change Procedure](https://help.prusa3d.com/article/changing-or-replacing-the-nozzle-mk2-5s-mk3s-mk3s-mk3-5_2069) + +## STLs + +### [Fan Shroud](../attachments/fan-shroud.stl) +![Fan Shroud](../attachments/prusa_fan_shroud.png) + +### [Prusa Calibration Cube](../attachments/cube_prusa_v1.stl) +![Prusa Calibration Cube](../attachments/prusa_calibration_cube.png) + + diff --git a/maintenance/resources.md b/maintenance/resources.md new file mode 100755 index 0000000..5293a0c --- /dev/null +++ b/maintenance/resources.md @@ -0,0 +1,13 @@ +--- +title: Maintenance Resources +layout: default +parent: Index +--- +# Maintenance Resources + +## Print Quality Troubleshooting Guide +![Troubleshooting Guide](../attachments/visual_troubleshooting.png) +[Print Quality Troubleshooting Guide](https://www.simplify3d.com/resources/print-quality-troubleshooting/) +## Hot End Components +![Hot End Components](../attachments/e3d_v6_hotend.png) +[Anatomy of a Hotend](https://e3d-online.com/blogs/news/anatomy-of-a-hotend) diff --git a/maintenance/slicer_profiles/eve.fff b/maintenance/slicer_profiles/eve.fff new file mode 100755 index 0000000..3b47592 --- /dev/null +++ b/maintenance/slicer_profiles/eve.fff @@ -0,0 +1,262 @@ + + + Default + PLA + Medium + + + 0 + 0.4 + 1 + 0.48 + 1 + 1 + 0.6 + 0 + 0.2 + 1800 + 0 + 0.2 + 0 + 5 + + 0 + 0.3 + 3 + 3 + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 90 + 100 + 0.15 + 0 + 0 + 3 + 2 + 3 + 0.14 + 100 + 0.3 + 0 + 0 + 1 + 2 + 4 + 0 + 999 + 12 + 7 + 1 + 0 + 999 + 2 + 1 + 1 + 30 + 1 + 0 + Rectilinear + Rectilinear + 20 + 50 + 100 + 5 + 1 + 45,-45 + 0 + 45,-45 + 1 + 0 + 20 + 0 + 0 + 0 + 0 + 70 + 1 + 0.3 + 1 + 1 + 0 + 4 + 45 + 0 + + 0 + 0 + 1 + + + + + 0 + 1 + 1 + + + + + + + 0 + 1 + 5 + 20 + 0 + 45 + 100 + 0 + 100 + 1 + 0 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0.1 + 1 + 0 + 345 + 345 + 305 + 0 + 0 + 0 + -1 + -1 + -1 + 1 + -1 + 1 + 0,0|0,0|0,0|0,0|0,0|0,0 + 1 + RepRap (Marlin/Repetier/Sprinter) + r2 + 115200 + 0 + + PRINT_START HOTEND=[extruder0_temperature] BED=[bed0_temperature] + + + + PRINT_END + gcode + 0 + Random Song + + 3600 + 0.5 + 0.7 + 0.6 + 9000 + 1200 + 50 + 0 + 1 + 1 + 0 + 0 + 0 + 1.75|1.75|1.75|1.75|1.75|1.75 + 46|46|46|46|46|46 + 1.25|1.25|1.25|1.25|1.25|1.25 + 0 + 0 + 0 + 0 + 0 + 20 + 1 + 0 + 1 + 1 + 0 + 3 + 0 + 1 + 0 + 3 + 12 + -0.5 + 600 + 0 + 2 + 10 + 1 + 50 + 200 + 0.2 + 0 + + + 0 + 0 + 1 + + + + 70 + 1 + + + + + + + 225 + 100 + 1 + + + + + + 195 + 80 + 1 + + + + + + + 220 + 80 + 1 + + + + + + 0.3 + 3 + 3 + 1 + 15 + 25 + + + 0.3 + 3 + 3 + 1 + 20 + 20 + + + 0.1 + 4 + 4 + 2 + 30 + 40 + + diff --git a/maintenance/slicer_profiles/prusa.fff b/maintenance/slicer_profiles/prusa.fff new file mode 100755 index 0000000..a176745 --- /dev/null +++ b/maintenance/slicer_profiles/prusa.fff @@ -0,0 +1,262 @@ + + + Prusa Research Original Prusa i3 MK3(2) + PLA + Fast + + + 0 + 0.4 + 0 + 0.6 + 1 + 1 + 1 + 0 + 0 + 2400 + 1 + 0.2 + 1 + 2 + + 0 + 0.2 + 3 + 2 + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 150 + 100 + 0.25 + 0 + 0 + 1 + 1 + 2 + 0.21 + 100 + 0.3 + 1 + 0 + 1 + 1 + 1 + 0 + 999 + 12 + 7 + 1 + 0 + 999 + 2 + 1 + 1 + 30 + 1 + 0 + Rectilinear + Rectilinear + 20 + 30 + 100 + 8 + 1 + 45,-45 + 0 + 45,-45 + 1 + 0 + 20 + 0 + 0 + 0 + 0 + 100 + 1 + 0.3 + 1 + 1 + 0 + 2 + 35 + 0 + + 0 + 0 + 1 + + + + + 0 + 1 + 1 + + + + + + + 0 + 1 + 15 + 20 + 0 + 45 + 100 + 1 + 100 + 1 + 0 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 250 + 210 + 210 + 0 + 0 + 0 + -1 + -1 + -1 + 1 + -1 + 1 + 0,0|0,0|0,0|0,0|0,0|0,0 + 1 + RepRap (Marlin/Repetier/Sprinter) + r2 + 115200 + 1 + + M104 S160 T0,M109 S160 T0,M115 U3.0.7 ; use the latest firmware version,G28 W ; home all axes without mesh bed leveling,G80 ; run mesh bed leveling routine,M104 S[extruder0_temperature] T0,M109 S[extruder0_temperature] T0,G1 Y-3.0 F1000.0 ; prepare to prime,G92 E0 ; reset extrusion distance,G1 X60.0 E9.0 F1000.0 ; priming,G1 X100.0 E12.5 F1000.0 ; priming + + + + G4 ; wait,M106 S0 ; turn off cooling fan,M104 S0 ; turn off extruder,M140 S0 ; turn off bed,G1 X0 Y200 ; part removal,M84 ; disable motors + gcode + 0 + Random Song + + 3600 + 0.5 + 0.8 + 0.8 + 12000 + 1000 + 50 + 0 + 1 + 1 + 0 + 0 + 0 + 1.75|1.75|1.75|1.75|1.75|1.75 + 46|46|46|46|46|46 + 1.25|1.25|1.25|1.25|1.25|1.25 + 0 + 0 + 0 + 0 + 0 + 20 + 1 + 0 + 1 + 1 + 0 + 3 + 1 + 1 + 0 + 3 + 12 + -0.5 + 600 + 0 + 2 + 25 + 1 + 20 + 200 + 0.2 + 0 + + + 0 + 0 + 1 + + + + 60 + 1 + + + + + + + 255 + 100 + 1 + + + + + + 230 + 85 + 1 + + + + + + + 220 + 80 + 1 + + + + + + 0.2 + 3 + 2 + 1 + 20 + 20 + + + 0.3 + 2 + 2 + 1 + 10 + 15 + + + 0.1 + 4 + 4 + 2 + 20 + 40 + + diff --git a/maintenance/slicer_profiles/walle.fff b/maintenance/slicer_profiles/walle.fff new file mode 100755 index 0000000..91a80bd --- /dev/null +++ b/maintenance/slicer_profiles/walle.fff @@ -0,0 +1,262 @@ + + + Default + PLA + Medium + + + 0 + 0.6 + 1 + 0.72 + 1 + 1 + 0.6 + 0 + 0.2 + 1800 + 0 + 0.2 + 0 + 5 + + 0 + 0.3 + 3 + 3 + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 90 + 100 + 0.15 + 0 + 0 + 3 + 2 + 3 + 0.14 + 100 + 0.3 + 1 + 0 + 1 + 2 + 4 + 0 + 999 + 12 + 7 + 1 + 0 + 999 + 2 + 1 + 1 + 30 + 1 + 0 + Rectilinear + Rectilinear + 20 + 50 + 100 + 5 + 1 + 45,-45 + 0 + 45,-45 + 1 + 0 + 20 + 0 + 0 + 0 + 0 + 70 + 1 + 0.3 + 1 + 1 + 0 + 4 + 45 + 0 + + 0 + 0 + 1 + + + + + 0 + 1 + 1 + + + + + + + 0 + 1 + 5 + 20 + 0 + 45 + 100 + 0 + 100 + 1 + 0 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0.1 + 1 + 0 + 345 + 345 + 305 + 0 + 0 + 0 + -1 + -1 + -1 + 1 + -1 + 1 + 0,0|0,0|0,0|0,0|0,0|0,0 + 1 + RepRap (Marlin/Repetier/Sprinter) + r2 + 115200 + 0 + + PRINT_START HOTEND=[extruder0_temperature] BED=[bed0_temperature] + + + + PRINT_END + gcode + 0 + Random Song + + 3600 + 0.5 + 0.7 + 0.6 + 9000 + 1200 + 50 + 0 + 1 + 1 + 0 + 0 + 0 + 1.75|1.75|1.75|1.75|1.75|1.75 + 46|46|46|46|46|46 + 1.25|1.25|1.25|1.25|1.25|1.25 + 0 + 0 + 0 + 0 + 0 + 20 + 1 + 0 + 1 + 1 + 0 + 3 + 0 + 1 + 0 + 3 + 12 + -0.5 + 600 + 0 + 2 + 10 + 1 + 50 + 200 + 0.2 + 0 + + + 0 + 0 + 1 + + + + 70 + 1 + + + + + + + 225 + 100 + 1 + + + + + + 195 + 80 + 1 + + + + + + + 220 + 80 + 1 + + + + + + 0.3 + 3 + 3 + 1 + 15 + 25 + + + 0.3 + 3 + 3 + 1 + 20 + 20 + + + 0.1 + 4 + 4 + 2 + 30 + 40 + + diff --git a/maintenance/voron.md b/maintenance/voron.md new file mode 100755 index 0000000..c43413a --- /dev/null +++ b/maintenance/voron.md @@ -0,0 +1,17 @@ +--- +title: Voron 2.4 +layout: default +parent: Maintenance Resources +nav_order: 2 +--- +## LDO Voron 2.4 R2 Rev A +![LDO Voron 2.4 R2 Rev A](../attachments/voron_v2.4.png) +### [Setting Belt Tension](https://docs.vorondesign.com/tuning/secondary_printer_tuning.html#belt-tension) +### STLs + +#### Test Grid +![Voron Test Grid](../attachments/voron_test_grid.png) +[Voron Test Grid](../attachments/voron_test_grid_v2.stl) +#### Calibration Cube +![Voron Calibration Cube](../attachments/voron_calibration_cube.png) +[Calibration Cube](../attachments/voron_design_cube_v7.stl) diff --git a/public/cnc/cnc-project-showcase.html b/public/cnc/cnc-project-showcase.html old mode 100644 new mode 100755 index 25cff49..429dc3b --- a/public/cnc/cnc-project-showcase.html +++ b/public/cnc/cnc-project-showcase.html @@ -1,17 +1,8 @@ - - CNC Project Showcase - - - - - - - - - - - -

CNC Project Showcase

Summer 2024

MDF Wing Forms

Dual Layer
-PXL_20240729_190949474.jpg
-Single Layer
-PXL_20240722_170217056.jpg

Plywood Camp Sign

PXL_20240702_180558808.jpgPXL_20240715_142834985 1.jpg

Foam Topo Map

Pasted image 20240702142641.png

Wood Air Foil Form

Pasted image 20240620173103.png

Aluminum Faceplate

PXL_20240606_214558811.jpg

Spring 2024

Foam Topo Map

Pasted image 20240507155313.png

MDF Template for Ceramic Tile

Pasted image 20240507155955.png

Plywood Flat Pack Desk

Pasted image 20240507155011.png

Cherry Speaker Cabinets

PXL_20240408_194056440.jpg

Brass Retirement Engraving

Pasted image 20240507160846.png

MDF Marvel Aztec Calendar

Pasted image 20240507160937.png

\ No newline at end of file + + + + Old Page + + + + diff --git a/public/cnc/laguna-cnc-operation-instructions.html b/public/cnc/laguna-cnc-operation-instructions.html old mode 100644 new mode 100755 index fdd78e5..f953b4f --- a/public/cnc/laguna-cnc-operation-instructions.html +++ b/public/cnc/laguna-cnc-operation-instructions.html @@ -1,430 +1,8 @@ - - Laguna CNC Operation Instructions - - - - - - - - - - - -

Laguna CNC Operation Instructions

Hardware

Body

Pasted image 20240425125434.png

Tool Head

Pasted image 20240425152111.png

Tool Holder Assembly

Pasted image 20240425152207.png

Tool Rack

PXL_20240319_145331118.jpg

    -
  • Tool rack has space for up to 8 tools, numbered 1-8 (left to right as viewed from front)
  • -

Pressure Regulator

Pasted image 20240425144427.png

Air Inlet

Pasted image 20240425143741.png

Control Box

Pasted image 20240425164514.png

    -
  • Vacuum Table - Vacuum Pump 1
  • -
  • Position Rods - Helps with stock alignment
  • -
  • E-Stops - Main panel & remote
  • -
  • Remote - Used to manually position tool head during setup, also has an E-stop
  • -
  • Lubricant pump - keeps rails lubricated, activate a few seconds, then manually jog toolhead with remote
  • -

File Formats

    -
  • Preferred file formats include: F3D, F3Z, STEP, SVG, DXF, PRT -
      -
    • Always verify model dimensions, imported vector files files are not always the correct scale
    • -
    • "Inspect" tool is useful for verifying a known dimension
    • -
    -
  • -
  • Can accept OBJ and STL files if necessary
  • -
  • Do NOT accept generated gcode (.PRG, .NC) files, tool paths must be validated before cutting
  • -

Basic Operations

    -
  • Autodesk Fusion 360 is used for the computer aided manufacturing (CAM) operations
  • -
  • The CAM work consists of the following stages: -
      -
    • Create Setup - defines the stock/material that the model will be created from
    • -
    • Generate Tool Paths - dictates how/where a specific bit/mill moves, multiple tool paths are routinely used to manufacture parts.
    • -
    • Simulation - provides a virtual "mock up" of the tool paths without running the CNC
    • -
    • Post Processing - converts tool paths to CNC specific gcode
    • -
    • Run - gcode is executing on the physical CNC
    • -
    -
  • -

Pasted image 20240423163839.png

Creating Setup
    -
  • Switch from "Design" to "Manufacturing" workspace in Fusion (top left corner)
  • -
  • Setup > New Setup
  • -
  • On "Setup" tab, set "Stock Point" to the BOTTOM corner of the stock -
      -
    • Previous instructions used top of stock & update bit length, this approach is not compatible with multi bit operations
    • -
    -
  • -
  • Still in "Setup" tab, select the model body/bodies to be machined
    -Pasted image 20240313132650.png
  • -
  • In the "Stock" tab", select "Fixed Size Box" (preferred) or "Relative Size Box" (advanced)
  • -
  • Set stock dimensions to actual measured values -
      -
    • Use calipers to measure stock thicknesses, inaccurate values can result in broken bits
    • -
    • X,Y dimensions are important but not as critical as material thickness (Z).
    • -
    -
  • -
  • If the model orientation doesn't fit within the specified stock, use a "Manufacturing Model" to rotate or re-arrange parts to fit. - -
  • -
Generate Tool Paths
    -
  • Tool paths should be generated immediately prior to cutting to ensure bit numbers have not changed. -
      -
    • If a tool path takes a long time to generate and/or must be generated in advance, make sure to verify each tool number in the operation vs the tools installed in the machine before starting a cut.
    • -
    -
  • -
  • Utilize template & bit library via Fusion 360 teams (requires invite to proto team) as much as possible - -
  • -
  • Check template library for preset operations, for example 2D contour cut in plywood. -
      -
    • Make sure to select "Cloud" templates for most up to date feeds & speeds
    • -
    • These templates represent previous successful operations and should be utilized whenever possible.
    • -
    • Some operations have several bit size options, in general select the largest bit that meets detail requirements of the design.
    • -
    • Settings can be adjusted to meet project specific needs, if they differ significantly from the template settings, consider creating a new template.
    • -
    • Make sure to clear any "Selected geometries" in templates (if applicable) and update with geometries from current document
    • -
    • Templates use the following naming convention -
        -
      • Machine Name, Material, Operation Type, Bit Size
      • -
      -
    • -
    -
  • -
  • Note, tool numbers in templates are NOT automatically updated and need to be verified against latest installed tools
  • -

####### Toolpaths from Template

Pasted image 20240325143617.png

    -
  • When selecting a contour cut, pay attention to which side of the cut line the bit is on (indicated w/ a red arrow). Clicking on the red arrow will change where the bit cuts relative to the indicated contour line.
    -Pasted image 20240321100934.png
  • -
Toolpaths from Scratch
2D Adaptive
    -
  • Critical parameters -
      -
    • Tool Tab -
        -
      • Feed per tooth -
          -
        • Indicates how much material is each revolution by each cutting edge when the machine is performing a normal cut, typical values range from (0.002 to 0.01")
        • -
        -
      • -
      • Plunge Feed per Revolution -
          -
        • Same as feed per tooth but specific to vertical cutting/drilling, end mills have different geometry than drill bits and are not as efficient cutting straight down into material. Typical values are ~50% of the feed per tooth value (0.001 to 0.005")
        • -
        -
      • -
      -
    • -
    • Pasted image 20240627150629.png
    • -
    • Passes Tab -
        -
      • Optimal Load -
          -
        • Indicates the maximum amount of tool engagement, as a rule of thumb this value should be approximately 25% of the tool diameter -
            -
          • For example, a good starting point for a 3/8" endmill is 0.09375" (0.375 * 0.25)
          • -
          -
        • -
        • This value can be increased or decrease when machining harder/softer materials (lower for hard materials, higher for soft materials)
        • -
        -
      • -
      • Maximum Roughing Stepdown
      • -
      -
    • -
    • Pasted image 20240627150658.png
    • -
    -
  • -
Simulation
    -
  • All generated tool paths should be simulated prior to post processing
  • -
  • Individual or multiple tool paths can be simulated by selecting desired operations (or setup for all), then selecting "Simulate"
    -Pasted image 20240325132025.png
  • -
  • Use the play/pause buttons at the bottom of the screen to preview the operations.
  • -
  • Watch for any errors/warnings in simulation timeline (indicated by vertical red lines)
  • -
  • Do NOT post process any operation that has simulation errors, it could result in damage to equipment and/or stock.
  • -
  • Hovering over errors will give a description of issue that must be addressed in the tool path settings.
    -Pasted image 20240325131546.png
  • -
Post Processing
    -
  • Post processing creates the gcode file for a specific CNC
  • -
  • For setups with multiple operations, can either generate a single file or multiple files
  • -
  • If a single file is used with multiple bits, the Laguna automatic tool change (ATC) system will swap bits when each operation is complete. -
      -
    • As previously noted, for the ATC system to work properly and avoid damage to equipment/stock, setup origin must be located at the bottom of the stock and all bits must be zero'd to the spoilboard using the "Automatic Touch Off" buttom on the Laguna Control Screen.
    • -
    -
  • -
  • Consider using multiple individual files when
    -- Individual operations are estimated to take a long time (estimated machining times are shown in the bottom right corner of the screen)
    -- Manual tool changes are required
    -- Parts need to be inspected after an operation before proceeding
    -Pasted image 20240325133105.png
  • -
  • The "Post Processing" screen allows the output files to be named (if not already configured via the Setup > Post Processing tab) and specifies an output directory for the gcode file (.PRG)
  • -
  • Make sure the "Laguna CNC / laguna" post processor is selected, if not use the navigator to find it via Fusion's cloud library.
  • -
  • The units should be set to "Document unit" to ensure tool paths are scaled correctly.
  • -
  • Select "Post" to generate the gcode
  • -
  • Copy the output file to a USB drive for use in the CNC Control System
    -Pasted image 20240325134011.png
  • -

Worked Examples

Flat Packing a Design

CAM

Procedures

Startup Procedure

    -
  • Turn on air pressure using wall mounted valve
  • -
  • Verify pressure on regulator is approximately 0.45 MPa
  • -
  • Turn on power using the power switch on the control box
  • -
  • Switch key to "ON" (clockwise)
  • -
  • Press green power button
  • -
  • Wait for system to boot
  • -

Shutdown Procedure

    -
  • Park any installed tooling (Home screen > Park)
  • -
  • Press green power button
  • -
  • Switch key to 'OFF' position (counter-clockwise)
  • -
  • Turn on main power
  • -
  • Turn off air
  • -

Running Program

    -
  • -

    Insert USB device into the control panel

    -
  • -
  • -

    Copy project file from USB

    -
      -
    • From the control screen -
        -
      • Setup > Program Manager
      • -
      • Select "USB" tab on left
      • -
      • Select desired file (.PRG extension) -
          -
        • Can sort by name, date, size
        • -
        -
      • -
      • With file selected, press "Copy"
      • -
      • Select "Programs" tab on left
      • -
      • Select "Paste"
      • -
      -
    • -
    -
  • -
  • -

    Verify GCode
    -- From control screen
    -- Setup > Verify G-Code
    -- If program not already select use drop down to select
    -- Select "Load"
    -- Select "Check Code"
    -- Wait for check to complete, indicated by a blue check mark or a reported error
    -- Checkmark does NOT stay on screen, must watch for it
    -PXL_20240319_172848682.jpg

    -
  • -
  • -

    Load a tool into the toolhead (if not already loaded)

    -
      -
    • Option 1 - Auto Touchoff (Recommended) -
        -
      • Setup > CNC Tool Data
      • -
      • Select tool number from dropdown
      • -
      • Select "Execute Automatic Touch On/Off"
      • -
      -
    • -
    • Option 2 - MDI Command (Advanced) -
        -
      • Setup > CNC Settings
      • -
      • MDI Command -
          -
        • "M06 T<tool number>" e.g. M06 T2 // load tool #2
        • -
        -
      • -
      -
    • -
    -
  • -
  • -

    Position the toolhead at the X,Y origin of the stock
    -- Use the handheld remote to manually jog the toolhead
    -- Press and hold the "Enable Switch" on the remote to allow motion
    -- Will automatically open the "JOG" screen
    -- Select movement axis using left dial (X,Y,Z,4)
    -- Mill does not currently have a 4th axis
    -- Select the movement multiplier using the right dial (1x,10x,100x)
    -- Avoid using the 100x multiplier when moving the Z axis, it could result in bit breakage
    -- With bit position over the X,Y origin of the stock, press "Teach ZPO"
    -- The dust boot can be raised on the Laguna control screen to provide a clear view of bit during alignment
    -- DO NOT PRESS "Teach Tool Length", tools should only be zero'd using the auto touch off system
    -- Verify X,Y origin was set correctly
    -- With "Zero Point Offset" selected from the drop down (not Machine Coordinates or Relative Coordinates), verify X Axis and Y Axis read <= 0.001 in
    -PXL_20240319_173002852 1.jpg

    -
  • -
  • -

    Run through the Laguna Pre-Cut Checklist

    -
  • -
  • -

    From main screen press "Run"

    -
  • -
  • -

    Pause Operation (Optional)
    -- To pause operation, press "Hold" from main screen
    -- Spindle remains on by default when paused
    -- Spindle can be stopped (optional) via
    -- Main > Settings
    -- Set "Spindle Override" to 0%
    -PXL_20240319_173301916.jpg

    -
  • -
  • -

    Resume Operation (Optional)

    -
      -
    • If spindle was turned off, (0%), set "Spindle Override" to 100% -
        -
      • DO NOT resume cut operation with spindle at 0%, this could damage bits or the machine
      • -
      -
    • -
    • From "Main" tab, press "Run"
    • -
    -
  • -
  • -

    Emergency Stop (Optional, hopefully)

    -
      -
    • The emergency stop buttons on the Control Box or Remote can be pressed at any time to immediately stop all machining.
    • -
    • Program stopped via E-Stop cannot be resumed (i.e. E-Stop is not a pause)
    • -
    -
  • -

Advanced Operation

Work Holding

    -
  • Proper work holding is critically important, particularly for small pieces. It is very easy for a piece to come lose and come into contact with the mill bit, causing damage to the work piece and potentially damage the bit.
  • -
  • There are many options for work holding including available and should be utilized on a per job basis. - -
  • -
  • When utilizing work holding that could interfere with the mill bit, caution must be taken to ensure the clamps/fixtures will not collide with the tool head.
  • -
  • Soft materials such as foam blocks can be used to mock up actual clamps for verification. -
      -
    • We won't actually be cutting material at this point, we will only "cut air".
    • -
    • We will run the operations and observe whether any part of the tool head contacts the foam blocks.
    • -
    • If the operation completes issue, we will install clamps in the EXACT space where the foam was located.
    • -
    -
  • -

PXL_20240320_165610904.jpg
-PXL_20240320_170425712.jpg

Feeds & Speeds

    -
  • Many tool manufacturers provide feed & speed recommendations for their tools. These settings provide a good starting point and should be utilized when dialing in settings for new materials. It is important to note the RPM ratings on bits and not to exceed these values when setting up operations.
  • -
  • Most of the tools used in the Laguna CNC are from Amana Tools. Amana has a Fusion 360 library of their bit offerings, including all the relevant numbers and measurements which describe the tools geometry (number of cutting flutes, length of flutes, bit diameter, etc).
  • -

Adding / Swapping Bits in Tool Change Rack

PXL_20240321_172025118.jpg

    -
  • Choose collet corresponding to bit shank diameter -
      -
    • Collet size engraved on front face
    • -
    • 1/8", 1/4", 3/8", 1/2" imperial sizes available
    • -
    • 4mm, 6mm, 8mm metric sizes available
    • -
    -
  • -
  • Tighten bit in collet by hand (clockwise) -
      -
    • All cutting flutes should be below collet
    • -
    • The bit shank should be inserted a minimum of 2/3 (100% ideal) of the collet length -
        -
      • For example, a 1.5" length collet requires at least 1" of bit shank inserted, however ideal insert length is 1.5"
      • -
      -
    • -
    -
  • -
  • Finish tightening bit in collet using "ER 32" wrench & CNC tool mount bracket
    -PXL_20240319_144259489.jpg
    -PXL_20240319_171946523.jpg
  • -
  • Press & hold green button on side of spindle
  • -
  • PXL_20240319_172014827.jpg
  • -
  • Position tool holder under spindle head
  • -
  • Release green button
  • -
    -
  • On the CNC screen, update the "current tool" number to reflect which tool position the new bit will be physically located in
  • -
  • Park tool
  • -
  • Execute "Automatic Touchoff"
  • -
  • Update Fusion cloud tool library to reflect new tool numbering
  • -

General Tips

    -
  • It's often a good idea to "cut air" prior to cutting the actual material. This is accomplished by intentionally setting the material thickness in your Fusion360 setup to a value 2-3x larger than the actual material thickness. When the operation is run on the CNC, the bit should remain in the air rather than touching the material or spoilboard. By observing the "fake" cut (with the e-stop in hand), you visually verify the toolpaths are what you expect. This method can catch potential tool plunges or unit issue (mm vs inches).
  • -
  • The Laguna control panel has a "axis limit" setting which could be helpful in single bit operations. This could be set to the tool offset length, ensuring the gcode can't move the bit below the top of the spoilboard. The "check gcode" tool will throw a warning if the operation attempts to go below this limit. -
      -
    • Note - for this to work, the tool must be loaded already as retrieving the bit from the tool holder requires more Z travel.
    • -
    -
  • -
  • Verify all tool lengths are approx. -10 inches, anything significantly less (0-3 inches) could indicate a bit has been previously zero'd on top of stock.
  • -

Maintenance

Lubricate Linear Rails

    -
  • Check the oil level on the back of the spindle head, top off as needed
  • -
  • On Laguna control console, press the "Lubricant Pump" button
  • -
  • Release the button after a few seconds
  • -
  • After a few seconds, use the remote to manually jog the spindle through the full X,Y,Z range of motion to distribute the oil
  • -
  • Repeat this operation for every 15 hours of use or after the machine has been sitting idle for an extended period of time
  • -

Spoil Board Leveling

    -
  • Minimum spoil board thickness is 0.5"
  • -
  • Be mindful of the position rods when leveling -
      -
    • Rods should be in the down position when cutting
    • -
    • Cutting depth should be at least 1/8" above position rods in stowed position
    • -
    -
  • -
  • In Fusion 360 -
      -
    • Create extruded rectangle corresponding to spoil board size - -
    • -
    • Use 'Flycut Template'
    • -
    • Make sure the stock thickness in setup is identical to model thickness -
        -
      • Model should not be centered within larger stock (e.g. 0.6" model in 1" stock)
      • -
      -
    • -
    • Make sure origin is located at bottom of model
    • -
    -
  • -
  • On Laguna Control Screen -
      -
    • Setup > CNC Positions
    • -
    • Set 'Z-Spoil' to 0.0
    • -
    -
  • -
  • Set X,Y zero point on corner of stock
  • -
  • Run program, should remove less than 1/8" of material
  • -
  • Run the program
  • -
  • After cut finishes, set 'Z-Spoil' to the stock thickness specified in Fusion -
      -
    • VERY IMPORTANT, DO NOT SKIP
    • -
    -
  • -

References

Pre-Cut Checklist

Project Showcase

\ No newline at end of file + + + + Old Page + + + + diff --git a/public/cnc/laguna-pre-cut-checklist.html b/public/cnc/laguna-pre-cut-checklist.html old mode 100644 new mode 100755 index c083edb..4c5579a --- a/public/cnc/laguna-pre-cut-checklist.html +++ b/public/cnc/laguna-pre-cut-checklist.html @@ -1,37 +1,8 @@ - - Laguna Pre-Cut Checklist - - - - - - - - - - - -

Laguna Pre-Cut Checklist

Fusion 360

    -
  • Origin located at BOTTOM of stock
  • -
  • Tool numbers up to date w/ installed bits
  • -
  • Contour cuts on correct side of cutting line (inside, outside)
  • -
  • Feed per tooth < 0.01 // in general, soft materials such as foam can exceed this threshold
  • -
  • Optimal Load <= Tool Diameter x 0.25 // 2D & 3D adaptive tool paths
  • -
  • Simulation free of errors & warnings
  • -
  • Laguna specific post processor used (output file has .PRG extension)
  • -
  • Post processor uses "DOCUMENT UNITS" setting
  • -

Laguna Control

    -
  • X/Y zero point established
  • -
  • All bits zero'd via auto touchoff
  • -
  • Gcode verified
  • -
  • CNC bed clear except stock
  • -
  • At least one other staff member in Proto Studio (in case of emergency)
  • -
  • Door to fabrication room closed
  • -
  • Everyone has appropriate PPE (glasses, headphones, mask)
  • -
  • Everyone located at a safe distance from CNC
  • -
  • Vacuum pump on
  • -
  • Stock secure to bed via vacuum pressure, double sided tape, tabs or fixture
  • -
  • Position rods lowered
  • -
  • Dust collection on
  • -
  • CNC operator within reach of an e-stop
  • -
\ No newline at end of file + + + + Old Page + + + + diff --git a/public/demoboard/prototyping-studio-demo-board.html b/public/demoboard/prototyping-studio-demo-board.html old mode 100644 new mode 100755 index 710d549..b54c897 --- a/public/demoboard/prototyping-studio-demo-board.html +++ b/public/demoboard/prototyping-studio-demo-board.html @@ -1,29 +1,8 @@ - - Prototyping Studio Demo Board - - - - - - - - - - - -

Prototyping Studio Demo Board

PXL_20240822_144006532.png

Nodes

\ No newline at end of file + + + + Old Page + + + + diff --git a/public/index.html b/public/index.html old mode 100644 new mode 100755 index 1df1087..fde9129 --- a/public/index.html +++ b/public/index.html @@ -1,16 +1,8 @@ - - Index - - - - - - - - - - - -
\ No newline at end of file + + + + Old Page + + + + diff --git a/public/maintenance/prototyping-studio-maintenance-resources.html b/public/maintenance/prototyping-studio-maintenance-resources.html old mode 100644 new mode 100755 index 56d86e8..e0da74f --- a/public/maintenance/prototyping-studio-maintenance-resources.html +++ b/public/maintenance/prototyping-studio-maintenance-resources.html @@ -1,26 +1,8 @@ - - Prototyping Studio Maintenance Resources - - - - - - - - - - - -

Prototyping Studio Maintenance Resources

Hot End Components

Configuration File Repository

\ No newline at end of file + + + + Old Page + + + +