diff --git a/app/collections.hoon b/app/collections.hoon index 4bbeb6b35..658ba0713 100644 --- a/app/collections.hoon +++ b/app/collections.hoon @@ -1,8 +1,20 @@ -:: /app/collections/hoon :: +:::: /app/collections/hoon + :: /? 309 /- hall /+ collections +:: +:: cols: +:: +:: run collections-item renderer on children of /web/collections +:: combine with a bunted config in a +collection structure defined in /lib/collections +:: because the top level collection has no config file +:: +:: whenever any of the clay files that compose this renderer change, this app will +:: recompile and the +prep arm will fire. we then check which files changed and notify +:: the corresponding hall circle of that change +:: /= cols /^ collection:collections /; |= a=(map knot item:collections) @@ -26,13 +38,24 @@ == -- :: -:::: - :: +:: state: +:: +:: stores the collection built by above by :cols so that we can compare old and new +:: versions whenever the rendered data changes +:: |_ [bol=bowl:gall state=collection] :: +:: +this: app core subject +:: ++ this . :: -:::: +:: +prep: +:: +:: on initial boot, create top level hall circle for collections, called %c +:: +:: on subsequent compiles, call +ta-update:ta on the old collection data, +:: then update state to store the new collection data +:: ++ prep |= old=(unit *) ^- (quip move _this) @@ -47,7 +70,7 @@ (ta-update:ta u.old-col) [mow this(state cols)] :: -:: mack: acknowledgement for permissions +:: +mack: recieve acknowledgement for permissions changes, print error if it failed :: ++ mack |= [wir=wire err=(unit tang)] @@ -55,12 +78,20 @@ ?~ err [~ this] (mean u.err) -:::::: -:: utilities :: -++ base-spur `spur`/web/collections -++ base-beam `beam`[byk.bol (flop base-spur)] -++ base-path `path`(en-beam:format base-beam) +:: +coup: recieve acknowledgement for poke, print error if it failed +:: +++ coup + |= [wir=wire err=(unit tang)] + ^- (quip move _this) + ?~ err + [~ this] + (mean u.err) +:: +:: +path-to-circle: +:: +:: takes a clay path and returns a hall circle +:: for a path /foo/bar it returns a circle with a :name %c-foo-bar :: ++ path-to-circle |= pax=path @@ -81,6 +112,8 @@ ((hard @tas) seg) [our.bol nam] :: +:: +allowed-by: checks if ship :who is allowed by the permission rules in :dic +:: ++ allowed-by |= [who=@p dic=dict:clay] ^- ? @@ -97,6 +130,8 @@ !in-list in-list :: +:: +collection-notify: XX +:: ++ collection-notify |= [pax=path conf=config] ^- json @@ -108,6 +143,8 @@ ['type' [%s type.conf]] == :: +:: +item-notify: XX +:: ++ item-notify |= [pax=path raw=raw-item] ^- json @@ -124,6 +161,8 @@ ['content' [%s data.raw]] == :: +:: +front-to-wain: XX +:: ++ front-to-wain |= a=(map knot cord) ^- wain @@ -140,6 +179,8 @@ [' ==' ~] == :: +:: +update-umd-front: XX +:: ++ update-umd-front |= [fro=(map knot cord) umd=@t] ^- @t @@ -152,34 +193,17 @@ %+ weld (front-to-wain fro) (to-wain:format (crip (slag u.id tum))) :: +:: +poke-collections-action: :: -:: -++ coup - |= [wir=wire err=(unit tang)] - ^- (quip move _this) - ?~ err - [~ this] - (mean u.err) -++ poke-noun - |= a=* - ^- (quip move _this) -:: =/ pax ((hard path) a) - =/ act=action:collections - :* our.bol %home - :~ [%post /web/collections ~.test 'test' & '# title\0a\0abody'] - == - == - =/ mow=move - [ost.bol %poke /poke-act [our.bol %collections] %collections-action act] - [[mow]~ this] +:: the main interface for creating and deleting collections and collections items :: ++ poke-collections-action |= act=action:collections ^- (quip move _this) ?: =(who.act our.bol) ta-done:(ta-act:ta act) - :: :: forward poke if its not meant for us + :: :_ this :_ ~ :* ost.bol %poke @@ -188,32 +212,53 @@ %collections-action act == :: -:::::: -:::::: +:: +poke-noun +:: +:: utility for setting whether or not to display the onboarding page +:: +++ poke-noun + |= onb=? + ^- (quip move _this) + =< ta-done + (ta-write:ta /web/landscape/onboard/atom [%atom !>(onb)]) +:: +:: +ta: main event core for collections :: ++ ta |_ moves=(list move) :: - :: core control + :: +ta-this: ta core subject :: ++ ta-this . + :: + :: +ta-done: flop :moves for finalization, since moves are to the head of the list + :: ++ ta-done [(flop moves) this] + :: + :: +ta-emit: add a +move to :moves + :: ++ ta-emit |= mov=move %_ ta-this moves [mov moves] == + :: + :: +ta-emil: add a list of +move to :moves + :: ++ ta-emil |= mos=(list move) %_ ta-this moves (welp (flop mos) moves) == :: - :: interface + :: +ta-act: process collection-action :: ++ ta-act |= act=action:collections ^+ ta-this + :: + :: iterate through list of +sub-action of +action + :: |- ?~ acts.act ta-this =* a i.acts.act @@ -332,15 +377,14 @@ == $(acts.act t.acts.act) :: - :: clay updates + :: +ta-update: + :: + :: :: ++ ta-update |= old=collection ^+ ta-this -:: ~& old+old -:: ~& new+cols ?: =(old cols) -:: ~& %no-update ta-this (ta-update-collection old cols /web/collections) :: @@ -364,10 +408,10 @@ $(items t.items) :: %both - =. ta-this - (ta-hall-json parent-path 'new collection' (collection-notify pax meta.col.new)) - =. ta-this - (ta-hall-json parent-path 'new item' (item-notify pax raw.new)) +:: =. ta-this +:: (ta-hall-json parent-path 'new collection' (collection-notify pax meta.col.new)) +:: =. ta-this +:: (ta-hall-json parent-path 'new item' (item-notify pax raw.new)) =. ta-this (ta-hall-create-circle pax description.meta.col.new) =/ items=(list [nom=@ta =item]) ~(tap by data.col.new) =. ta-this @@ -414,10 +458,10 @@ $(items t.items) :: %both - =. ta-this - (ta-hall-json parent 'deleted collection' (collection-notify pax meta.col.old)) - =. ta-this - (ta-hall-json parent 'deleted item' (item-notify pax raw.old)) +:: =. ta-this +:: (ta-hall-json parent 'deleted collection' (collection-notify pax meta.col.old)) +:: =. ta-this +:: (ta-hall-json parent 'deleted item' (item-notify pax raw.old)) =. ta-this (ta-flush-permissions pax) =. ta-this (ta-flush-permissions (weld pax /collections-config)) =/ items=(list [nom=@ta =item]) ~(tap by data.col.old) @@ -643,14 +687,12 @@ :: ++ ta-set-permissions |= [pax=path r=rule:clay w=rule:clay] -:: =. pax (weld base-spur pax) ^+ ta-this %+ ta-emit ost.bol [%perm (weld /perms pax) our.bol q.byk.bol pax [%rw `r `w]] :: ++ ta-flush-permissions |= pax=path -:: =. pax (weld base-spur pax) ^+ ta-this %+ ta-emit ost.bol [%perm (weld /perms pax) our.bol q.byk.bol pax [%rw ~ ~]] @@ -698,6 +740,7 @@ :: ++ ta-hall-json |= [pax=path header=@t jon=json] + ~& notify+[pax header] ^+ ta-this =/ circ=circle:hall (path-to-circle pax) %- ta-hall-action diff --git a/app/hall.hoon b/app/hall.hoon index 24ebfe639..2feae3ea8 100644 --- a/app/hall.hoon +++ b/app/hall.hoon @@ -11,15 +11,14 @@ /- hall-sur=hall :: structures /+ hall-lib=hall, hall-legacy :: libraries /= seed /~ !>(.) - - -:: TODO: Figure out why this doesn't work: -:: -:: /= filter-gram -:: /^ $-({telegram:hall bowl:gall} telegram:hall) -:: /| /: /%/filter /!noun/ -:: /~ |=({t/telegram:hall bowl:gall} t) -:: == +/= filter-gram + /^ $-({telegram:hall bowl:gall} telegram:hall) + /| /: /%/filter /!noun/ + /~ |=({t/telegram:hall bowl:gall} t) + == +/= custom-rules + /^ (map knot $-({ship ?($r %w) bowl:gall} ?)) + /: /%/rules /_ /!noun/ :: :::: =, hall-sur @@ -1623,6 +1622,10 @@ $village (~(has in sis.con.shape) her) :: whitelist $journal (~(has in sis.con.shape) her) :: author whitelist $mailbox !(~(has in sis.con.shape) her) :: author blacklist + $custom :: custom rule + =/ rul/$-({ship ?($r $w) bowl:gall} ?) + (fall (~(get by custom-rules) nom) |=(* |)) + (rul her %w bol) == :: ++ so-visible @@ -1635,6 +1638,10 @@ $village (~(has in sis.con.shape) her) :: whitelist $journal & :: all $mailbox (team:title our.bol her) :: our team + $custom :: custom rule + =/ rul/$-({ship ?($r $w) bowl:gall} ?) + (fall (~(get by custom-rules) nom) |=(* |)) + (rul her %r bol) == -- -- diff --git a/lib/hall-json.hoon b/lib/hall-json.hoon index 81f2c5911..553b4a7e2 100644 --- a/lib/hall-json.hoon +++ b/lib/hall-json.hoon @@ -498,7 +498,7 @@ :: ++ secu ::: security ^- $-(json (unit security)) - (su (perk %channel %village %journal %mailbox ~)) + (su (perk %channel %village %journal %mailbox %custom ~)) :: ++ crow ::: crowd ^- $-(json (unit crowd)) diff --git a/lib/nutalk.hoon b/lib/landscape.hoon similarity index 94% rename from lib/nutalk.hoon rename to lib/landscape.hoon index 50fbccbac..f9e2220be 100644 --- a/lib/nutalk.hoon +++ b/lib/landscape.hoon @@ -3,7 +3,7 @@ ;html :: ;head - ;title: Nutalk + ;title: Landscape ;meta(charset "utf-8"); ;meta =name "viewport" diff --git a/ren/collections.hoon b/ren/collections.hoon index a74619787..33db5a66c 100644 --- a/ren/collections.hoon +++ b/ren/collections.hoon @@ -1,4 +1,17 @@ +:: +:::: /ren/collections/hoon + :: +/? 309 /+ collections +:: +:: collections: +:: +:: get collection-config file at rendered path, +:: and all collections-item files the subpath. +:: outputs a +collection defined in /lib/collections/hoon +:: +:: recursive renderer, see its counterpart in /ren/collections/item/hoon +:: /= collection /^ collection:collections /; |= [a=config:collections b=(map knot item:collections) ~] diff --git a/ren/collections/elem.hoon b/ren/collections/elem.hoon index f75f62e7f..2ec19ffd6 100644 --- a/ren/collections/elem.hoon +++ b/ren/collections/elem.hoon @@ -7,7 +7,7 @@ /= itm /% /collections-web-item/ :: :: -/= collection-post +/= collection-post :: /^ $-(raw-item:collections manx) /: /===/web/landscape/collections/post /% /!noun/ ::/= collection-details @@ -22,37 +22,43 @@ ^- manx =/ sho (fall (~(get by qix.gas) %show) %default) ;div.container - ;+ (meta-to-elem itm sho) - ;+ - ?- -.itm - :: - %collection - ?+ sho !! - %default (collection-to-elem col.itm) - %post (collection-post ~ (flop s.bem.gas)) - %edit !! + ;div.row + ;div.col-sm-10.col-sm-offset-2 + ;div.collection-index.mt-12 + ;+ (meta-to-elem itm sho) + ;+ + ?- -.itm + :: + %collection + ?+ sho !! + %default (collection-to-elem col.itm) + %post (collection-post ~ (flop s.bem.gas)) + %edit !! + == + :: + %raw + ?+ sho !! + %default (raw-to-elem raw.itm) + %post !! + %edit (collection-post `raw.itm (flop s.bem.gas)) + == + :: + %both + ?+ sho !! + %default (both-to-elem col.itm raw.itm) + %post !! + %edit (collection-post `raw.itm (flop s.bem.gas)) + == + :: == - :: - %raw - ?+ sho !! - %default (raw-to-elem raw.itm) - %post !! - %edit (collection-post `raw.itm (flop s.bem.gas)) - == - :: - %both - ?+ sho !! - %default (both-to-elem col.itm raw.itm) - %post !! - %edit (collection-post `raw.itm (flop s.bem.gas)) - == - :: - == + == + == + == == ++ collection-to-elem |= col=collection:collections ^- manx - ;ul + ;ul.vanilla ;* %+ turn ~(tap by data.col) |= [nom=knot ite=item:collections] ^- manx diff --git a/ren/collections/item.hoon b/ren/collections/item.hoon index e3f81367c..fe9155089 100644 --- a/ren/collections/item.hoon +++ b/ren/collections/item.hoon @@ -1,6 +1,23 @@ +:: +:::: /ren/collections/item/hoon + :: +/? 309 /+ collections +:: +:: item: +:: +:: render a collection-item at this path +:: outputs a +item defined in /lib/collections/hoon +:: +:: recursive renderer, see its counterpart in /ren/collections/hoon +:: /= item /^ item:collections + :: + :: run a gate which checks if the output of the renderers below are null or not, + :: crash in the case that both are null + :: tag them with %collection, %raw, or %both for the 3 remaining permissible cases, + :: /; |= $: raw=?(~ raw-item:collections) col=?(~ collection:collections) ~ @@ -13,20 +30,26 @@ [%raw raw] [%both col raw] :: + :: run a pair of renderers + :: + :: 1. get a .umd file together with its frontmatter, or else return ~ + :: + :: 2. run the collections renderer, if it fails return ~ + :: (it fails if .collections-config file does not exist at this path) + :: /. :: - /| /; |= [a=(map knot cord) b=@t ~] - [%umd a b] - /. /front/ - /umd/ - == - :: - /~ ~ - == + /| /; |= [a=(map knot cord) b=@t ~] + [%umd a b] + /. /front/ + /umd/ + == + /~ ~ + == :: - /| /collections/ - /~ ~ - == + /| /collections/ + /~ ~ + == :: == :: diff --git a/ren/urb.hoon b/ren/urb.hoon index 5ba7e546d..790e6ad8b 100644 --- a/ren/urb.hoon +++ b/ren/urb.hoon @@ -1,15 +1,14 @@ :: -:::: /hoon/elem/urb/ren +:::: /hoon/urb/ren :: /? 309 -:: nutalk ::FIXME write ren/urb/nutalk /= inner - /^ manx - /, :: /web/pages/nutalk /# /!htm/ - /web/pages /!hymn/ - :: put collections through the same .htm - :: routing structure as nutalk -:: /web/collections /# /htm/ ::a lot of stuff in here isn't .hoon files - / /!hymn/ :: /tree-elem/ + /^ manx + /, /web/landscape /!hymn/ + /web/collections /collections-elem/ + / + /| /!hymn/ +:: /&hymn&/elem/ == + == inner diff --git a/ren/x-urb/wrap.hoon b/ren/x-urb/wrap.hoon index 066683951..52e06c46f 100644 --- a/ren/x-urb/wrap.hoon +++ b/ren/x-urb/wrap.hoon @@ -3,20 +3,8 @@ :::: /hoon/wrap/urb/ren :: /? 309 -/+ nutalk +/+ landscape /= wrapped /^ $-(inr=manx out=manx) - /~ nutalk -:: /, /web/pages/nutalk /~ nutalk -:: /web/pages /~ urb-split -:: :: put collections through the same .htm -:: :: routing structure as nutalk -:: /web/collections /~ nutalk -:: :: -:: / -:: :: /urb-tree/ -:: /~ -:: |= [@ manx] ^- urb -:: ~|(%tree-unimplemented !!) -:: == + /~ landscape wrapped diff --git a/sur/hall.hoon b/sur/hall.hoon index bdfba04d5..7935cca86 100644 --- a/sur/hall.hoon +++ b/sur/hall.hoon @@ -203,6 +203,7 @@ $village :: whitelist $journal :: pub r, whitelist w $mailbox :: our r, blacklist w + $custom :: according to custom-rule == :: :: participant metadata. :: ++ crowd {loc/group rem/(map circle group)} :: our & srcs presences diff --git a/web/landscape.hoon b/web/landscape.hoon index c8c3019ba..5d7c5a789 100644 --- a/web/landscape.hoon +++ b/web/landscape.hoon @@ -1,2 +1,6 @@ ^- manx -;div(urb-component "InboxPage"); + +;div + ;div(urb-component "InboxPage"); + ;input(type "hidden", name "urb-metadata", urb-structure-type "inbox"); +== diff --git a/web/landscape/css/index.css b/web/landscape/css/index.css index 7de19351e..cacea693a 100644 --- a/web/landscape/css/index.css +++ b/web/landscape/css/index.css @@ -1,2 +1,2 @@ @charset "UTF-8"; -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}[class*=col-]{width:100%;margin-bottom:1rem}.container{margin:0 auto;padding:0 2rem;max-width:960px}.row{display:flex;margin-right:-.5rem;margin-left:-.5rem}.flex,.row{flex-wrap:wrap}.align-vertical{align-items:center}.justify-center{justify-content:center}@media only screen and (min-width:0){.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-offset-0,.col-sm-offset-1,.col-sm-offset-2,.col-sm-offset-3,.col-sm-offset-4,.col-sm-offset-5,.col-sm-offset-6,.col-sm-offset-7,.col-sm-offset-8,.col-sm-offset-9,.col-sm-offset-10,.col-sm-offset-11,.col-sm-offset-12{box-sizing:border-box;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-sm{flex-grow:1;flex-basis:0;max-width:100%}.col-sm-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-sm-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-sm-3{flex-basis:25%;max-width:25%}.col-sm-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-sm-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-sm-6{flex-basis:50%;max-width:50%}.col-sm-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-sm-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-sm-9{flex-basis:75%;max-width:75%}.col-sm-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-sm-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-sm-12{flex-basis:100%;max-width:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}}@media only screen and (min-width:480px){.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-offset-0,.col-md-offset-1,.col-md-offset-2,.col-md-offset-3,.col-md-offset-4,.col-md-offset-5,.col-md-offset-6,.col-md-offset-7,.col-md-offset-8,.col-md-offset-9,.col-md-offset-10,.col-md-offset-11,.col-md-offset-12{box-sizing:border-box;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-md{flex-grow:1;flex-basis:0;max-width:100%}.col-md-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-md-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-md-3{flex-basis:25%;max-width:25%}.col-md-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-md-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-md-6{flex-basis:50%;max-width:50%}.col-md-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-md-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-md-9{flex-basis:75%;max-width:75%}.col-md-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-md-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-md-12{flex-basis:100%;max-width:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}}@media only screen and (min-width:960px){.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-offset-0,.col-lg-offset-1,.col-lg-offset-2,.col-lg-offset-3,.col-lg-offset-4,.col-lg-offset-5,.col-lg-offset-6,.col-lg-offset-7,.col-lg-offset-8,.col-lg-offset-9,.col-lg-offset-10,.col-lg-offset-11,.col-lg-offset-12{box-sizing:border-box;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-lg{flex-grow:1;flex-basis:0;max-width:100%}.col-lg-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-lg-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-lg-3{flex-basis:25%;max-width:25%}.col-lg-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-lg-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-lg-6{flex-basis:50%;max-width:50%}.col-lg-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-lg-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-lg-9{flex-basis:75%;max-width:75%}.col-lg-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-lg-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-lg-12{flex-basis:100%;max-width:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Thin.ttf) format("truetype");font-weight:100}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-ExtraLight.ttf) format("truetype");font-weight:200}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Light.ttf) format("truetype");font-weight:300}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Regular.ttf) format("truetype");font-weight:400}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Medium.ttf) format("truetype");font-weight:500}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-SemiBold.ttf) format("truetype");font-weight:600}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Bold.ttf) format("truetype");font-weight:700}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-ExtraBold.ttf) format("truetype");font-weight:800}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Black.ttf) format("truetype");font-weight:900}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-extralight.woff);font-weight:200}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-light.woff);font-weight:300}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-regular.woff);font-weight:400}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-medium.woff);font-weight:500}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-bold.woff);font-weight:600}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-black.woff);font-weight:700}*{font-smoothing:antialiased;-webkit-font-smoothing:antialiased}body{font-family:-apple-system,BlinkMacSystemFont,Roboto,Helvetica,Arial,sans-serif;font-size:4rem;line-height:6rem;color:#373a3c}a{color:#000}p{margin:0 0 2rem}.text-heading,h1,h2,h3,h4,h5{margin:0;font-family:Work Sans;color:#373a3c}.h1,h1{font-size:12rem;line-height:16rem;margin:4rem 0}.h1,.h2,h1,h2{font-weight:600}.h2,h2{font-size:9rem;line-height:13rem;margin:3rem 0}.h3,h3{font-size:6rem;font-weight:600;line-height:8rem;margin:2rem 0}.h4,h4{font-weight:600}.h4,.h5,h4,h5{font-size:5rem;line-height:7rem;margin:1rem 0}.h5,h5{font-weight:500}.text-sm,caption{font-size:3rem;line-height:5rem}.text-md{font-size:4rem;line-height:6rem}.text-lg{font-size:5rem;line-height:7rem}code,pre{background-color:#f1f1f1;padding:1rem}.text-code,.text-mono,code,pre{font-family:Source Code Pro,Roboto mono,Courier New,monospace}.text-code{color:#000}.code-block,.text-code{background-color:#f1f1f1}.code-block{padding:5rem;white-space:pre-wrap}.code-block .text-code{font-weight:200}.underline,u{text-decoration:underline}.strikethrough,s{text-decoration:line-through}.italic,em{font-style:italic}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.text-300{font-weight:300}.text-400{font-weight:400}.text-500{font-weight:500}.text-600{font-weight:600}.text-700,b{font-weight:700}.text-800{font-weight:800}.h-font{font-family:Work Sans}.blue{color:#4330fc}.green{color:#6fdc74}.red{color:#ee3124}.gray-lighter{color:#f1f1f1}.gray-light{color:#d4d4d4}.gray{color:#5b5b5b}.gray-dark{color:#373a3c}.blue-hl{background-color:#4330fc;color:#fff}.green-hl{background-color:#6fdc74;color:#fff}.red-hl{background-color:#ee3124;color:#fff}.gray-lighter-hl{background-color:#f1f1f1;color:#fff}.gray-light-hl{background-color:#d4d4d4;color:#fff}.gray-hl{background-color:#5b5b5b;color:#fff}.gray-dark-hl{background-color:#373a3c;color:#fff}.black-hl{background-color:#000;color:#fff}.center{text-align:center}.right{text-align:right}.justify{text-align:justify}button{border:none;outline:none}.btn,button{font-family:Work Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:500;font-size:4rem;line-height:4rem;padding:3rem 6rem;color:#000;background-color:#d4d4d4;margin:0 0 6px}.btn-sm{font-size:3rem;line-height:3rem;padding:2rem 4rem}.btn-primary{background-color:#4330fc;color:#fff}.btn-secondary{background-color:#6fdc74}.btn-tetiary{background-color:#5b5b5b;color:#fff}.btn-warning{background-color:#ee3124;color:#fff}.btn-group .btn{display:inline-block}.btn-group .btn:not(.active){background-color:#d4d4d4;color:#000}label{display:block;font-weight:700}input[type=text],textarea{border:2px solid #000;padding:12px;width:100%}.error-label{display:none;color:#f44;font-size:2.33rem;line-height:3rem;margin-top:1rem}.input-group{margin:0 0 2rem}.input-group.error input[type=text],.input-group.error textarea{border:.5rem solid #f44}.input-group.error .error-label{display:block}.checkbox-group input,.checkbox-group label,.radio-group input,.radio-group label{font-weight:400;display:inline-block}.select-dropdown{display:flex;border:2px solid #000;overflow:hidden;background-color:#fff}.select-dropdown select{padding:5px 8px;width:130%;border:none;box-shadow:none;background:transparent;background-image:none;-webkit-appearance:none}.select-dropdown select:focus{outline:none}.select-dropdown .triangle-down{border-width:2rem 1rem 0;position:relative;top:14px;right:8px}.icon-arrow-right:before{content:"→"}.icon-arrow-left:before{content:"←"}.icon-arrow-up:before{content:"↑"}.icon-arrow-down:before{content:"↓"}.icon-cross:before{content:"×"}.icon-ellipsis:before{content:"...";position:relative;bottom:6px}.selected:before{content:"∙"}.icon{margin-right:.6rem}.icon.prev{width:1px;height:1px;border:12.0006px solid transparent;border-right:18px solid #000;border-left:0 solid transparent}.icon.next{border:12.0006px solid transparent;border-left:18px solid #000;border-right:0 solid transparent;margin-right:0}.icon.next,.icon.up{width:1px;height:1px}.icon.up{border:12.0006px solid transparent;border-bottom:18px solid #000;border-top:0 solid transparent}.circle{display:inline-block;padding:2rem;border-radius:50%;border:2px solid #000;text-align:center}.circle-sm{padding:1rem}.circle-lg{padding:4rem}.circle-fill{background-color:#000}.circle-red{background-color:#ee3124;border-color:#ee3124}.circle-blue{background-color:#4330fc;border-color:#4330fc}.circle-blue-light{background-color:#a4d8e8;border-color:#a4d8e8}.circle-yellow{background-color:#ffc440;border-color:#ffc440}.circle-green{background-color:#6fdc74;border-color:#6fdc74}.circle-gray{background-color:#5b5b5b;border-color:#5b5b5b}.circle-gray-light{background-color:#d4d4d4;border-color:#d4d4d4}.circle-gray-lighter{background-color:#f1f1f1;border-color:#f1f1f1}.circle-gray-dark{background-color:#373a3c;border-color:#373a3c}.circle-pill{border-radius:9999px;width:10rem}.circle-pill.circle-lg{width:20rem}.square{display:inline-block;padding:2rem;border:2px solid #000;text-align:center}.square-sm{padding:1rem}.square-lg{padding:4rem}.square-fill{background-color:#000}.square-red{background-color:red;border-color:red}.square-rect{width:10rem}.square-rect.square-lg{width:20rem}.triangle-base{display:inline-block;width:0;height:0}.triangle-up{border-bottom:4rem solid #000}.triangle-down,.triangle-up{border-left:2rem solid transparent;border-right:2rem solid transparent}.triangle-down{border-top:4rem solid #000}.triangle-right{border-left:4rem solid #000}.triangle-left,.triangle-right{border-top:2rem solid transparent;border-bottom:2rem solid transparent}.triangle-left{border-right:4rem solid #000}.urbit-logo{width:72px;height:72px;border-radius:50%;border:5px solid #fff;background-color:transparent}.urbit-logo,.urbit-logo:before{display:inline-block;vertical-align:middle}.urbit-logo:before{content:"~";color:#fff;font-size:72px;line-height:54px;text-align:center;width:2rem;font-family:Work Sans;font-weight:600;margin-right:30px;margin-top:3px}.urbit-logo-solid{border-color:#000}.urbit-logo-solid:before{color:#000}section{margin:0 0 2rem;border:none}blockquote{border-left:6px solid #000;margin:24px 0;padding-left:18px}hr{margin:4rem 0;width:100%;height:1rem;border:0;background-color:#373a3c}ul{padding-left:4rem;list-style:disc outside}ul li{margin-bottom:2rem;padding-left:2rem}ol ul,ul ol,ul ul{margin:2rem}ol ul li,ul ol li,ul ul li{margin-bottom:1rem}ul.list-reset{list-style:none}ol,ul.list-reset,ul.list-reset li{padding-left:0}ol{list-style:none}ol>li{counter-increment:a;margin-left:0;margin-bottom:1rem}ol>li:before{content:counter(a);font-weight:700;vertical-align:center;display:inline-block;width:6rem;text-align:left}.w-0{width:0!important}.h-0{height:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mr-0{margin-right:0!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.pr-0{padding-right:0!important}.w-1{width:1rem!important}.h-1{height:1rem!important}.m-1{margin:1rem!important}.mt-1{margin-top:1rem!important}.mb-1{margin-bottom:1rem!important}.ml-1{margin-left:1rem!important}.mr-1{margin-right:1rem!important}.p-1{padding:1rem!important}.pt-1{padding-top:1rem!important}.pb-1{padding-bottom:1rem!important}.pl-1{padding-left:1rem!important}.pr-1{padding-right:1rem!important}.w-2{width:2rem!important}.h-2{height:2rem!important}.m-2{margin:2rem!important}.mt-2{margin-top:2rem!important}.mb-2{margin-bottom:2rem!important}.ml-2{margin-left:2rem!important}.mr-2{margin-right:2rem!important}.p-2{padding:2rem!important}.pt-2{padding-top:2rem!important}.pb-2{padding-bottom:2rem!important}.pl-2{padding-left:2rem!important}.pr-2{padding-right:2rem!important}.w-3{width:3rem!important}.h-3{height:3rem!important}.m-3{margin:3rem!important}.mt-3{margin-top:3rem!important}.mb-3{margin-bottom:3rem!important}.ml-3{margin-left:3rem!important}.mr-3{margin-right:3rem!important}.p-3{padding:3rem!important}.pt-3{padding-top:3rem!important}.pb-3{padding-bottom:3rem!important}.pl-3{padding-left:3rem!important}.pr-3{padding-right:3rem!important}.w-4{width:4rem!important}.h-4{height:4rem!important}.m-4{margin:4rem!important}.mt-4{margin-top:4rem!important}.mb-4{margin-bottom:4rem!important}.ml-4{margin-left:4rem!important}.mr-4{margin-right:4rem!important}.p-4{padding:4rem!important}.pt-4{padding-top:4rem!important}.pb-4{padding-bottom:4rem!important}.pl-4{padding-left:4rem!important}.pr-4{padding-right:4rem!important}.w-5{width:5rem!important}.h-5{height:5rem!important}.m-5{margin:5rem!important}.mt-5{margin-top:5rem!important}.mb-5{margin-bottom:5rem!important}.ml-5{margin-left:5rem!important}.mr-5{margin-right:5rem!important}.p-5{padding:5rem!important}.pt-5{padding-top:5rem!important}.pb-5{padding-bottom:5rem!important}.pl-5{padding-left:5rem!important}.pr-5{padding-right:5rem!important}.w-6{width:6rem!important}.h-6{height:6rem!important}.m-6{margin:6rem!important}.mt-6{margin-top:6rem!important}.mb-6{margin-bottom:6rem!important}.ml-6{margin-left:6rem!important}.mr-6{margin-right:6rem!important}.p-6{padding:6rem!important}.pt-6{padding-top:6rem!important}.pb-6{padding-bottom:6rem!important}.pl-6{padding-left:6rem!important}.pr-6{padding-right:6rem!important}.w-7{width:7rem!important}.h-7{height:7rem!important}.m-7{margin:7rem!important}.mt-7{margin-top:7rem!important}.mb-7{margin-bottom:7rem!important}.ml-7{margin-left:7rem!important}.mr-7{margin-right:7rem!important}.p-7{padding:7rem!important}.pt-7{padding-top:7rem!important}.pb-7{padding-bottom:7rem!important}.pl-7{padding-left:7rem!important}.pr-7{padding-right:7rem!important}.w-8{width:8rem!important}.h-8{height:8rem!important}.m-8{margin:8rem!important}.mt-8{margin-top:8rem!important}.mb-8{margin-bottom:8rem!important}.ml-8{margin-left:8rem!important}.mr-8{margin-right:8rem!important}.p-8{padding:8rem!important}.pt-8{padding-top:8rem!important}.pb-8{padding-bottom:8rem!important}.pl-8{padding-left:8rem!important}.pr-8{padding-right:8rem!important}.w-9{width:9rem!important}.h-9{height:9rem!important}.m-9{margin:9rem!important}.mt-9{margin-top:9rem!important}.mb-9{margin-bottom:9rem!important}.ml-9{margin-left:9rem!important}.mr-9{margin-right:9rem!important}.p-9{padding:9rem!important}.pt-9{padding-top:9rem!important}.pb-9{padding-bottom:9rem!important}.pl-9{padding-left:9rem!important}.pr-9{padding-right:9rem!important}.w-10{width:10rem!important}.h-10{height:10rem!important}.m-10{margin:10rem!important}.mt-10{margin-top:10rem!important}.mb-10{margin-bottom:10rem!important}.ml-10{margin-left:10rem!important}.mr-10{margin-right:10rem!important}.p-10{padding:10rem!important}.pt-10{padding-top:10rem!important}.pb-10{padding-bottom:10rem!important}.pl-10{padding-left:10rem!important}.pr-10{padding-right:10rem!important}.w-11{width:11rem!important}.h-11{height:11rem!important}.m-11{margin:11rem!important}.mt-11{margin-top:11rem!important}.mb-11{margin-bottom:11rem!important}.ml-11{margin-left:11rem!important}.mr-11{margin-right:11rem!important}.p-11{padding:11rem!important}.pt-11{padding-top:11rem!important}.pb-11{padding-bottom:11rem!important}.pl-11{padding-left:11rem!important}.pr-11{padding-right:11rem!important}.w-12{width:12rem!important}.h-12{height:12rem!important}.m-12{margin:12rem!important}.mt-12{margin-top:12rem!important}.mb-12{margin-bottom:12rem!important}.ml-12{margin-left:12rem!important}.mr-12{margin-right:12rem!important}.p-12{padding:12rem!important}.pt-12{padding-top:12rem!important}.pb-12{padding-bottom:12rem!important}.pl-12{padding-left:12rem!important}.pr-12{padding-right:12rem!important}.w-13{width:13rem!important}.h-13{height:13rem!important}.m-13{margin:13rem!important}.mt-13{margin-top:13rem!important}.mb-13{margin-bottom:13rem!important}.ml-13{margin-left:13rem!important}.mr-13{margin-right:13rem!important}.p-13{padding:13rem!important}.pt-13{padding-top:13rem!important}.pb-13{padding-bottom:13rem!important}.pl-13{padding-left:13rem!important}.pr-13{padding-right:13rem!important}.w-14{width:14rem!important}.h-14{height:14rem!important}.m-14{margin:14rem!important}.mt-14{margin-top:14rem!important}.mb-14{margin-bottom:14rem!important}.ml-14{margin-left:14rem!important}.mr-14{margin-right:14rem!important}.p-14{padding:14rem!important}.pt-14{padding-top:14rem!important}.pb-14{padding-bottom:14rem!important}.pl-14{padding-left:14rem!important}.pr-14{padding-right:14rem!important}.w-15{width:15rem!important}.h-15{height:15rem!important}.m-15{margin:15rem!important}.mt-15{margin-top:15rem!important}.mb-15{margin-bottom:15rem!important}.ml-15{margin-left:15rem!important}.mr-15{margin-right:15rem!important}.p-15{padding:15rem!important}.pt-15{padding-top:15rem!important}.pb-15{padding-bottom:15rem!important}.pl-15{padding-left:15rem!important}.pr-15{padding-right:15rem!important}.w-16{width:16rem!important}.h-16{height:16rem!important}.m-16{margin:16rem!important}.mt-16{margin-top:16rem!important}.mb-16{margin-bottom:16rem!important}.ml-16{margin-left:16rem!important}.mr-16{margin-right:16rem!important}.p-16{padding:16rem!important}.pt-16{padding-top:16rem!important}.pb-16{padding-bottom:16rem!important}.pl-16{padding-left:16rem!important}.pr-16{padding-right:16rem!important}.w-17{width:17rem!important}.h-17{height:17rem!important}.m-17{margin:17rem!important}.mt-17{margin-top:17rem!important}.mb-17{margin-bottom:17rem!important}.ml-17{margin-left:17rem!important}.mr-17{margin-right:17rem!important}.p-17{padding:17rem!important}.pt-17{padding-top:17rem!important}.pb-17{padding-bottom:17rem!important}.pl-17{padding-left:17rem!important}.pr-17{padding-right:17rem!important}.w-18{width:18rem!important}.h-18{height:18rem!important}.m-18{margin:18rem!important}.mt-18{margin-top:18rem!important}.mb-18{margin-bottom:18rem!important}.ml-18{margin-left:18rem!important}.mr-18{margin-right:18rem!important}.p-18{padding:18rem!important}.pt-18{padding-top:18rem!important}.pb-18{padding-bottom:18rem!important}.pl-18{padding-left:18rem!important}.pr-18{padding-right:18rem!important}.w-19{width:19rem!important}.h-19{height:19rem!important}.m-19{margin:19rem!important}.mt-19{margin-top:19rem!important}.mb-19{margin-bottom:19rem!important}.ml-19{margin-left:19rem!important}.mr-19{margin-right:19rem!important}.p-19{padding:19rem!important}.pt-19{padding-top:19rem!important}.pb-19{padding-bottom:19rem!important}.pl-19{padding-left:19rem!important}.pr-19{padding-right:19rem!important}.w-20{width:20rem!important}.h-20{height:20rem!important}.m-20{margin:20rem!important}.mt-20{margin-top:20rem!important}.mb-20{margin-bottom:20rem!important}.ml-20{margin-left:20rem!important}.mr-20{margin-right:20rem!important}.p-20{padding:20rem!important}.pt-20{padding-top:20rem!important}.pb-20{padding-bottom:20rem!important}.pl-20{padding-left:20rem!important}.pr-20{padding-right:20rem!important}.w-21{width:21rem!important}.h-21{height:21rem!important}.m-21{margin:21rem!important}.mt-21{margin-top:21rem!important}.mb-21{margin-bottom:21rem!important}.ml-21{margin-left:21rem!important}.mr-21{margin-right:21rem!important}.p-21{padding:21rem!important}.pt-21{padding-top:21rem!important}.pb-21{padding-bottom:21rem!important}.pl-21{padding-left:21rem!important}.pr-21{padding-right:21rem!important}.w-22{width:22rem!important}.h-22{height:22rem!important}.m-22{margin:22rem!important}.mt-22{margin-top:22rem!important}.mb-22{margin-bottom:22rem!important}.ml-22{margin-left:22rem!important}.mr-22{margin-right:22rem!important}.p-22{padding:22rem!important}.pt-22{padding-top:22rem!important}.pb-22{padding-bottom:22rem!important}.pl-22{padding-left:22rem!important}.pr-22{padding-right:22rem!important}.w-23{width:23rem!important}.h-23{height:23rem!important}.m-23{margin:23rem!important}.mt-23{margin-top:23rem!important}.mb-23{margin-bottom:23rem!important}.ml-23{margin-left:23rem!important}.mr-23{margin-right:23rem!important}.p-23{padding:23rem!important}.pt-23{padding-top:23rem!important}.pb-23{padding-bottom:23rem!important}.pl-23{padding-left:23rem!important}.pr-23{padding-right:23rem!important}.w-24{width:24rem!important}.h-24{height:24rem!important}.m-24{margin:24rem!important}.mt-24{margin-top:24rem!important}.mb-24{margin-bottom:24rem!important}.ml-24{margin-left:24rem!important}.mr-24{margin-right:24rem!important}.p-24{padding:24rem!important}.pt-24{padding-top:24rem!important}.pb-24{padding-bottom:24rem!important}.pl-24{padding-left:24rem!important}.pr-24{padding-right:24rem!important}.w-25{width:25rem!important}.h-25{height:25rem!important}.m-25{margin:25rem!important}.mt-25{margin-top:25rem!important}.mb-25{margin-bottom:25rem!important}.ml-25{margin-left:25rem!important}.mr-25{margin-right:25rem!important}.p-25{padding:25rem!important}.pt-25{padding-top:25rem!important}.pb-25{padding-bottom:25rem!important}.pl-25{padding-left:25rem!important}.pr-25{padding-right:25rem!important}.w-26{width:26rem!important}.h-26{height:26rem!important}.m-26{margin:26rem!important}.mt-26{margin-top:26rem!important}.mb-26{margin-bottom:26rem!important}.ml-26{margin-left:26rem!important}.mr-26{margin-right:26rem!important}.p-26{padding:26rem!important}.pt-26{padding-top:26rem!important}.pb-26{padding-bottom:26rem!important}.pl-26{padding-left:26rem!important}.pr-26{padding-right:26rem!important}.w-27{width:27rem!important}.h-27{height:27rem!important}.m-27{margin:27rem!important}.mt-27{margin-top:27rem!important}.mb-27{margin-bottom:27rem!important}.ml-27{margin-left:27rem!important}.mr-27{margin-right:27rem!important}.p-27{padding:27rem!important}.pt-27{padding-top:27rem!important}.pb-27{padding-bottom:27rem!important}.pl-27{padding-left:27rem!important}.pr-27{padding-right:27rem!important}.w-28{width:28rem!important}.h-28{height:28rem!important}.m-28{margin:28rem!important}.mt-28{margin-top:28rem!important}.mb-28{margin-bottom:28rem!important}.ml-28{margin-left:28rem!important}.mr-28{margin-right:28rem!important}.p-28{padding:28rem!important}.pt-28{padding-top:28rem!important}.pb-28{padding-bottom:28rem!important}.pl-28{padding-left:28rem!important}.pr-28{padding-right:28rem!important}.w-29{width:29rem!important}.h-29{height:29rem!important}.m-29{margin:29rem!important}.mt-29{margin-top:29rem!important}.mb-29{margin-bottom:29rem!important}.ml-29{margin-left:29rem!important}.mr-29{margin-right:29rem!important}.p-29{padding:29rem!important}.pt-29{padding-top:29rem!important}.pb-29{padding-bottom:29rem!important}.pl-29{padding-left:29rem!important}.pr-29{padding-right:29rem!important}.w-30{width:30rem!important}.h-30{height:30rem!important}.m-30{margin:30rem!important}.mt-30{margin-top:30rem!important}.mb-30{margin-bottom:30rem!important}.ml-30{margin-left:30rem!important}.mr-30{margin-right:30rem!important}.p-30{padding:30rem!important}.pt-30{padding-top:30rem!important}.pb-30{padding-bottom:30rem!important}.pl-30{padding-left:30rem!important}.pr-30{padding-right:30rem!important}.w-31{width:31rem!important}.h-31{height:31rem!important}.m-31{margin:31rem!important}.mt-31{margin-top:31rem!important}.mb-31{margin-bottom:31rem!important}.ml-31{margin-left:31rem!important}.mr-31{margin-right:31rem!important}.p-31{padding:31rem!important}.pt-31{padding-top:31rem!important}.pb-31{padding-bottom:31rem!important}.pl-31{padding-left:31rem!important}.pr-31{padding-right:31rem!important}.w-32{width:32rem!important}.h-32{height:32rem!important}.m-32{margin:32rem!important}.mt-32{margin-top:32rem!important}.mb-32{margin-bottom:32rem!important}.ml-32{margin-left:32rem!important}.mr-32{margin-right:32rem!important}.p-32{padding:32rem!important}.pt-32{padding-top:32rem!important}.pb-32{padding-bottom:32rem!important}.pl-32{padding-left:32rem!important}.pr-32{padding-right:32rem!important}.w-33{width:33rem!important}.h-33{height:33rem!important}.m-33{margin:33rem!important}.mt-33{margin-top:33rem!important}.mb-33{margin-bottom:33rem!important}.ml-33{margin-left:33rem!important}.mr-33{margin-right:33rem!important}.p-33{padding:33rem!important}.pt-33{padding-top:33rem!important}.pb-33{padding-bottom:33rem!important}.pl-33{padding-left:33rem!important}.pr-33{padding-right:33rem!important}.w-34{width:34rem!important}.h-34{height:34rem!important}.m-34{margin:34rem!important}.mt-34{margin-top:34rem!important}.mb-34{margin-bottom:34rem!important}.ml-34{margin-left:34rem!important}.mr-34{margin-right:34rem!important}.p-34{padding:34rem!important}.pt-34{padding-top:34rem!important}.pb-34{padding-bottom:34rem!important}.pl-34{padding-left:34rem!important}.pr-34{padding-right:34rem!important}.w-35{width:35rem!important}.h-35{height:35rem!important}.m-35{margin:35rem!important}.mt-35{margin-top:35rem!important}.mb-35{margin-bottom:35rem!important}.ml-35{margin-left:35rem!important}.mr-35{margin-right:35rem!important}.p-35{padding:35rem!important}.pt-35{padding-top:35rem!important}.pb-35{padding-bottom:35rem!important}.pl-35{padding-left:35rem!important}.pr-35{padding-right:35rem!important}.w-36{width:36rem!important}.h-36{height:36rem!important}.m-36{margin:36rem!important}.mt-36{margin-top:36rem!important}.mb-36{margin-bottom:36rem!important}.ml-36{margin-left:36rem!important}.mr-36{margin-right:36rem!important}.p-36{padding:36rem!important}.pt-36{padding-top:36rem!important}.pb-36{padding-bottom:36rem!important}.pl-36{padding-left:36rem!important}.pr-36{padding-right:36rem!important}.w-37{width:37rem!important}.h-37{height:37rem!important}.m-37{margin:37rem!important}.mt-37{margin-top:37rem!important}.mb-37{margin-bottom:37rem!important}.ml-37{margin-left:37rem!important}.mr-37{margin-right:37rem!important}.p-37{padding:37rem!important}.pt-37{padding-top:37rem!important}.pb-37{padding-bottom:37rem!important}.pl-37{padding-left:37rem!important}.pr-37{padding-right:37rem!important}.w-38{width:38rem!important}.h-38{height:38rem!important}.m-38{margin:38rem!important}.mt-38{margin-top:38rem!important}.mb-38{margin-bottom:38rem!important}.ml-38{margin-left:38rem!important}.mr-38{margin-right:38rem!important}.p-38{padding:38rem!important}.pt-38{padding-top:38rem!important}.pb-38{padding-bottom:38rem!important}.pl-38{padding-left:38rem!important}.pr-38{padding-right:38rem!important}.w-39{width:39rem!important}.h-39{height:39rem!important}.m-39{margin:39rem!important}.mt-39{margin-top:39rem!important}.mb-39{margin-bottom:39rem!important}.ml-39{margin-left:39rem!important}.mr-39{margin-right:39rem!important}.p-39{padding:39rem!important}.pt-39{padding-top:39rem!important}.pb-39{padding-bottom:39rem!important}.pl-39{padding-left:39rem!important}.pr-39{padding-right:39rem!important}.w-40{width:40rem!important}.h-40{height:40rem!important}.m-40{margin:40rem!important}.mt-40{margin-top:40rem!important}.mb-40{margin-bottom:40rem!important}.ml-40{margin-left:40rem!important}.mr-40{margin-right:40rem!important}.p-40{padding:40rem!important}.pt-40{padding-top:40rem!important}.pb-40{padding-bottom:40rem!important}.pl-40{padding-left:40rem!important}.pr-40{padding-right:40rem!important}.w-41{width:41rem!important}.h-41{height:41rem!important}.m-41{margin:41rem!important}.mt-41{margin-top:41rem!important}.mb-41{margin-bottom:41rem!important}.ml-41{margin-left:41rem!important}.mr-41{margin-right:41rem!important}.p-41{padding:41rem!important}.pt-41{padding-top:41rem!important}.pb-41{padding-bottom:41rem!important}.pl-41{padding-left:41rem!important}.pr-41{padding-right:41rem!important}.w-42{width:42rem!important}.h-42{height:42rem!important}.m-42{margin:42rem!important}.mt-42{margin-top:42rem!important}.mb-42{margin-bottom:42rem!important}.ml-42{margin-left:42rem!important}.mr-42{margin-right:42rem!important}.p-42{padding:42rem!important}.pt-42{padding-top:42rem!important}.pb-42{padding-bottom:42rem!important}.pl-42{padding-left:42rem!important}.pr-42{padding-right:42rem!important}.w-43{width:43rem!important}.h-43{height:43rem!important}.m-43{margin:43rem!important}.mt-43{margin-top:43rem!important}.mb-43{margin-bottom:43rem!important}.ml-43{margin-left:43rem!important}.mr-43{margin-right:43rem!important}.p-43{padding:43rem!important}.pt-43{padding-top:43rem!important}.pb-43{padding-bottom:43rem!important}.pl-43{padding-left:43rem!important}.pr-43{padding-right:43rem!important}.w-44{width:44rem!important}.h-44{height:44rem!important}.m-44{margin:44rem!important}.mt-44{margin-top:44rem!important}.mb-44{margin-bottom:44rem!important}.ml-44{margin-left:44rem!important}.mr-44{margin-right:44rem!important}.p-44{padding:44rem!important}.pt-44{padding-top:44rem!important}.pb-44{padding-bottom:44rem!important}.pl-44{padding-left:44rem!important}.pr-44{padding-right:44rem!important}.w-45{width:45rem!important}.h-45{height:45rem!important}.m-45{margin:45rem!important}.mt-45{margin-top:45rem!important}.mb-45{margin-bottom:45rem!important}.ml-45{margin-left:45rem!important}.mr-45{margin-right:45rem!important}.p-45{padding:45rem!important}.pt-45{padding-top:45rem!important}.pb-45{padding-bottom:45rem!important}.pl-45{padding-left:45rem!important}.pr-45{padding-right:45rem!important}.w-46{width:46rem!important}.h-46{height:46rem!important}.m-46{margin:46rem!important}.mt-46{margin-top:46rem!important}.mb-46{margin-bottom:46rem!important}.ml-46{margin-left:46rem!important}.mr-46{margin-right:46rem!important}.p-46{padding:46rem!important}.pt-46{padding-top:46rem!important}.pb-46{padding-bottom:46rem!important}.pl-46{padding-left:46rem!important}.pr-46{padding-right:46rem!important}.w-47{width:47rem!important}.h-47{height:47rem!important}.m-47{margin:47rem!important}.mt-47{margin-top:47rem!important}.mb-47{margin-bottom:47rem!important}.ml-47{margin-left:47rem!important}.mr-47{margin-right:47rem!important}.p-47{padding:47rem!important}.pt-47{padding-top:47rem!important}.pb-47{padding-bottom:47rem!important}.pl-47{padding-left:47rem!important}.pr-47{padding-right:47rem!important}.w-48{width:48rem!important}.h-48{height:48rem!important}.m-48{margin:48rem!important}.mt-48{margin-top:48rem!important}.mb-48{margin-bottom:48rem!important}.ml-48{margin-left:48rem!important}.mr-48{margin-right:48rem!important}.p-48{padding:48rem!important}.pt-48{padding-top:48rem!important}.pb-48{padding-bottom:48rem!important}.pl-48{padding-left:48rem!important}.pr-48{padding-right:48rem!important}.w-49{width:49rem!important}.h-49{height:49rem!important}.m-49{margin:49rem!important}.mt-49{margin-top:49rem!important}.mb-49{margin-bottom:49rem!important}.ml-49{margin-left:49rem!important}.mr-49{margin-right:49rem!important}.p-49{padding:49rem!important}.pt-49{padding-top:49rem!important}.pb-49{padding-bottom:49rem!important}.pl-49{padding-left:49rem!important}.pr-49{padding-right:49rem!important}.w-50{width:50rem!important}.h-50{height:50rem!important}.m-50{margin:50rem!important}.mt-50{margin-top:50rem!important}.mb-50{margin-bottom:50rem!important}.ml-50{margin-left:50rem!important}.mr-50{margin-right:50rem!important}.p-50{padding:50rem!important}.pt-50{padding-top:50rem!important}.pb-50{padding-bottom:50rem!important}.pl-50{padding-left:50rem!important}.pr-50{padding-right:50rem!important}.w-51{width:51rem!important}.h-51{height:51rem!important}.m-51{margin:51rem!important}.mt-51{margin-top:51rem!important}.mb-51{margin-bottom:51rem!important}.ml-51{margin-left:51rem!important}.mr-51{margin-right:51rem!important}.p-51{padding:51rem!important}.pt-51{padding-top:51rem!important}.pb-51{padding-bottom:51rem!important}.pl-51{padding-left:51rem!important}.pr-51{padding-right:51rem!important}.w-52{width:52rem!important}.h-52{height:52rem!important}.m-52{margin:52rem!important}.mt-52{margin-top:52rem!important}.mb-52{margin-bottom:52rem!important}.ml-52{margin-left:52rem!important}.mr-52{margin-right:52rem!important}.p-52{padding:52rem!important}.pt-52{padding-top:52rem!important}.pb-52{padding-bottom:52rem!important}.pl-52{padding-left:52rem!important}.pr-52{padding-right:52rem!important}.w-53{width:53rem!important}.h-53{height:53rem!important}.m-53{margin:53rem!important}.mt-53{margin-top:53rem!important}.mb-53{margin-bottom:53rem!important}.ml-53{margin-left:53rem!important}.mr-53{margin-right:53rem!important}.p-53{padding:53rem!important}.pt-53{padding-top:53rem!important}.pb-53{padding-bottom:53rem!important}.pl-53{padding-left:53rem!important}.pr-53{padding-right:53rem!important}.w-54{width:54rem!important}.h-54{height:54rem!important}.m-54{margin:54rem!important}.mt-54{margin-top:54rem!important}.mb-54{margin-bottom:54rem!important}.ml-54{margin-left:54rem!important}.mr-54{margin-right:54rem!important}.p-54{padding:54rem!important}.pt-54{padding-top:54rem!important}.pb-54{padding-bottom:54rem!important}.pl-54{padding-left:54rem!important}.pr-54{padding-right:54rem!important}.w-55{width:55rem!important}.h-55{height:55rem!important}.m-55{margin:55rem!important}.mt-55{margin-top:55rem!important}.mb-55{margin-bottom:55rem!important}.ml-55{margin-left:55rem!important}.mr-55{margin-right:55rem!important}.p-55{padding:55rem!important}.pt-55{padding-top:55rem!important}.pb-55{padding-bottom:55rem!important}.pl-55{padding-left:55rem!important}.pr-55{padding-right:55rem!important}.w-56{width:56rem!important}.h-56{height:56rem!important}.m-56{margin:56rem!important}.mt-56{margin-top:56rem!important}.mb-56{margin-bottom:56rem!important}.ml-56{margin-left:56rem!important}.mr-56{margin-right:56rem!important}.p-56{padding:56rem!important}.pt-56{padding-top:56rem!important}.pb-56{padding-bottom:56rem!important}.pl-56{padding-left:56rem!important}.pr-56{padding-right:56rem!important}.w-57{width:57rem!important}.h-57{height:57rem!important}.m-57{margin:57rem!important}.mt-57{margin-top:57rem!important}.mb-57{margin-bottom:57rem!important}.ml-57{margin-left:57rem!important}.mr-57{margin-right:57rem!important}.p-57{padding:57rem!important}.pt-57{padding-top:57rem!important}.pb-57{padding-bottom:57rem!important}.pl-57{padding-left:57rem!important}.pr-57{padding-right:57rem!important}.w-58{width:58rem!important}.h-58{height:58rem!important}.m-58{margin:58rem!important}.mt-58{margin-top:58rem!important}.mb-58{margin-bottom:58rem!important}.ml-58{margin-left:58rem!important}.mr-58{margin-right:58rem!important}.p-58{padding:58rem!important}.pt-58{padding-top:58rem!important}.pb-58{padding-bottom:58rem!important}.pl-58{padding-left:58rem!important}.pr-58{padding-right:58rem!important}.w-59{width:59rem!important}.h-59{height:59rem!important}.m-59{margin:59rem!important}.mt-59{margin-top:59rem!important}.mb-59{margin-bottom:59rem!important}.ml-59{margin-left:59rem!important}.mr-59{margin-right:59rem!important}.p-59{padding:59rem!important}.pt-59{padding-top:59rem!important}.pb-59{padding-bottom:59rem!important}.pl-59{padding-left:59rem!important}.pr-59{padding-right:59rem!important}.w-60{width:60rem!important}.h-60{height:60rem!important}.m-60{margin:60rem!important}.mt-60{margin-top:60rem!important}.mb-60{margin-bottom:60rem!important}.ml-60{margin-left:60rem!important}.mr-60{margin-right:60rem!important}.p-60{padding:60rem!important}.pt-60{padding-top:60rem!important}.pb-60{padding-bottom:60rem!important}.pl-60{padding-left:60rem!important}.pr-60{padding-right:60rem!important}.w-61{width:61rem!important}.h-61{height:61rem!important}.m-61{margin:61rem!important}.mt-61{margin-top:61rem!important}.mb-61{margin-bottom:61rem!important}.ml-61{margin-left:61rem!important}.mr-61{margin-right:61rem!important}.p-61{padding:61rem!important}.pt-61{padding-top:61rem!important}.pb-61{padding-bottom:61rem!important}.pl-61{padding-left:61rem!important}.pr-61{padding-right:61rem!important}.w-62{width:62rem!important}.h-62{height:62rem!important}.m-62{margin:62rem!important}.mt-62{margin-top:62rem!important}.mb-62{margin-bottom:62rem!important}.ml-62{margin-left:62rem!important}.mr-62{margin-right:62rem!important}.p-62{padding:62rem!important}.pt-62{padding-top:62rem!important}.pb-62{padding-bottom:62rem!important}.pl-62{padding-left:62rem!important}.pr-62{padding-right:62rem!important}.w-63{width:63rem!important}.h-63{height:63rem!important}.m-63{margin:63rem!important}.mt-63{margin-top:63rem!important}.mb-63{margin-bottom:63rem!important}.ml-63{margin-left:63rem!important}.mr-63{margin-right:63rem!important}.p-63{padding:63rem!important}.pt-63{padding-top:63rem!important}.pb-63{padding-bottom:63rem!important}.pl-63{padding-left:63rem!important}.pr-63{padding-right:63rem!important}.w-64{width:64rem!important}.h-64{height:64rem!important}.m-64{margin:64rem!important}.mt-64{margin-top:64rem!important}.mb-64{margin-bottom:64rem!important}.ml-64{margin-left:64rem!important}.mr-64{margin-right:64rem!important}.p-64{padding:64rem!important}.pt-64{padding-top:64rem!important}.pb-64{padding-bottom:64rem!important}.pl-64{padding-left:64rem!important}.pr-64{padding-right:64rem!important}.w-65{width:65rem!important}.h-65{height:65rem!important}.m-65{margin:65rem!important}.mt-65{margin-top:65rem!important}.mb-65{margin-bottom:65rem!important}.ml-65{margin-left:65rem!important}.mr-65{margin-right:65rem!important}.p-65{padding:65rem!important}.pt-65{padding-top:65rem!important}.pb-65{padding-bottom:65rem!important}.pl-65{padding-left:65rem!important}.pr-65{padding-right:65rem!important}.w-66{width:66rem!important}.h-66{height:66rem!important}.m-66{margin:66rem!important}.mt-66{margin-top:66rem!important}.mb-66{margin-bottom:66rem!important}.ml-66{margin-left:66rem!important}.mr-66{margin-right:66rem!important}.p-66{padding:66rem!important}.pt-66{padding-top:66rem!important}.pb-66{padding-bottom:66rem!important}.pl-66{padding-left:66rem!important}.pr-66{padding-right:66rem!important}.w-67{width:67rem!important}.h-67{height:67rem!important}.m-67{margin:67rem!important}.mt-67{margin-top:67rem!important}.mb-67{margin-bottom:67rem!important}.ml-67{margin-left:67rem!important}.mr-67{margin-right:67rem!important}.p-67{padding:67rem!important}.pt-67{padding-top:67rem!important}.pb-67{padding-bottom:67rem!important}.pl-67{padding-left:67rem!important}.pr-67{padding-right:67rem!important}.w-68{width:68rem!important}.h-68{height:68rem!important}.m-68{margin:68rem!important}.mt-68{margin-top:68rem!important}.mb-68{margin-bottom:68rem!important}.ml-68{margin-left:68rem!important}.mr-68{margin-right:68rem!important}.p-68{padding:68rem!important}.pt-68{padding-top:68rem!important}.pb-68{padding-bottom:68rem!important}.pl-68{padding-left:68rem!important}.pr-68{padding-right:68rem!important}.w-69{width:69rem!important}.h-69{height:69rem!important}.m-69{margin:69rem!important}.mt-69{margin-top:69rem!important}.mb-69{margin-bottom:69rem!important}.ml-69{margin-left:69rem!important}.mr-69{margin-right:69rem!important}.p-69{padding:69rem!important}.pt-69{padding-top:69rem!important}.pb-69{padding-bottom:69rem!important}.pl-69{padding-left:69rem!important}.pr-69{padding-right:69rem!important}.w-70{width:70rem!important}.h-70{height:70rem!important}.m-70{margin:70rem!important}.mt-70{margin-top:70rem!important}.mb-70{margin-bottom:70rem!important}.ml-70{margin-left:70rem!important}.mr-70{margin-right:70rem!important}.p-70{padding:70rem!important}.pt-70{padding-top:70rem!important}.pb-70{padding-bottom:70rem!important}.pl-70{padding-left:70rem!important}.pr-70{padding-right:70rem!important}.w-71{width:71rem!important}.h-71{height:71rem!important}.m-71{margin:71rem!important}.mt-71{margin-top:71rem!important}.mb-71{margin-bottom:71rem!important}.ml-71{margin-left:71rem!important}.mr-71{margin-right:71rem!important}.p-71{padding:71rem!important}.pt-71{padding-top:71rem!important}.pb-71{padding-bottom:71rem!important}.pl-71{padding-left:71rem!important}.pr-71{padding-right:71rem!important}.w-72{width:72rem!important}.h-72{height:72rem!important}.m-72{margin:72rem!important}.mt-72{margin-top:72rem!important}.mb-72{margin-bottom:72rem!important}.ml-72{margin-left:72rem!important}.mr-72{margin-right:72rem!important}.p-72{padding:72rem!important}.pt-72{padding-top:72rem!important}.pb-72{padding-bottom:72rem!important}.pl-72{padding-left:72rem!important}.pr-72{padding-right:72rem!important}.w-73{width:73rem!important}.h-73{height:73rem!important}.m-73{margin:73rem!important}.mt-73{margin-top:73rem!important}.mb-73{margin-bottom:73rem!important}.ml-73{margin-left:73rem!important}.mr-73{margin-right:73rem!important}.p-73{padding:73rem!important}.pt-73{padding-top:73rem!important}.pb-73{padding-bottom:73rem!important}.pl-73{padding-left:73rem!important}.pr-73{padding-right:73rem!important}.w-74{width:74rem!important}.h-74{height:74rem!important}.m-74{margin:74rem!important}.mt-74{margin-top:74rem!important}.mb-74{margin-bottom:74rem!important}.ml-74{margin-left:74rem!important}.mr-74{margin-right:74rem!important}.p-74{padding:74rem!important}.pt-74{padding-top:74rem!important}.pb-74{padding-bottom:74rem!important}.pl-74{padding-left:74rem!important}.pr-74{padding-right:74rem!important}.w-75{width:75rem!important}.h-75{height:75rem!important}.m-75{margin:75rem!important}.mt-75{margin-top:75rem!important}.mb-75{margin-bottom:75rem!important}.ml-75{margin-left:75rem!important}.mr-75{margin-right:75rem!important}.p-75{padding:75rem!important}.pt-75{padding-top:75rem!important}.pb-75{padding-bottom:75rem!important}.pl-75{padding-left:75rem!important}.pr-75{padding-right:75rem!important}.w-76{width:76rem!important}.h-76{height:76rem!important}.m-76{margin:76rem!important}.mt-76{margin-top:76rem!important}.mb-76{margin-bottom:76rem!important}.ml-76{margin-left:76rem!important}.mr-76{margin-right:76rem!important}.p-76{padding:76rem!important}.pt-76{padding-top:76rem!important}.pb-76{padding-bottom:76rem!important}.pl-76{padding-left:76rem!important}.pr-76{padding-right:76rem!important}.w-77{width:77rem!important}.h-77{height:77rem!important}.m-77{margin:77rem!important}.mt-77{margin-top:77rem!important}.mb-77{margin-bottom:77rem!important}.ml-77{margin-left:77rem!important}.mr-77{margin-right:77rem!important}.p-77{padding:77rem!important}.pt-77{padding-top:77rem!important}.pb-77{padding-bottom:77rem!important}.pl-77{padding-left:77rem!important}.pr-77{padding-right:77rem!important}.w-78{width:78rem!important}.h-78{height:78rem!important}.m-78{margin:78rem!important}.mt-78{margin-top:78rem!important}.mb-78{margin-bottom:78rem!important}.ml-78{margin-left:78rem!important}.mr-78{margin-right:78rem!important}.p-78{padding:78rem!important}.pt-78{padding-top:78rem!important}.pb-78{padding-bottom:78rem!important}.pl-78{padding-left:78rem!important}.pr-78{padding-right:78rem!important}.w-79{width:79rem!important}.h-79{height:79rem!important}.m-79{margin:79rem!important}.mt-79{margin-top:79rem!important}.mb-79{margin-bottom:79rem!important}.ml-79{margin-left:79rem!important}.mr-79{margin-right:79rem!important}.p-79{padding:79rem!important}.pt-79{padding-top:79rem!important}.pb-79{padding-bottom:79rem!important}.pl-79{padding-left:79rem!important}.pr-79{padding-right:79rem!important}.w-80{width:80rem!important}.h-80{height:80rem!important}.m-80{margin:80rem!important}.mt-80{margin-top:80rem!important}.mb-80{margin-bottom:80rem!important}.ml-80{margin-left:80rem!important}.mr-80{margin-right:80rem!important}.p-80{padding:80rem!important}.pt-80{padding-top:80rem!important}.pb-80{padding-bottom:80rem!important}.pl-80{padding-left:80rem!important}.pr-80{padding-right:80rem!important}.w-81{width:81rem!important}.h-81{height:81rem!important}.m-81{margin:81rem!important}.mt-81{margin-top:81rem!important}.mb-81{margin-bottom:81rem!important}.ml-81{margin-left:81rem!important}.mr-81{margin-right:81rem!important}.p-81{padding:81rem!important}.pt-81{padding-top:81rem!important}.pb-81{padding-bottom:81rem!important}.pl-81{padding-left:81rem!important}.pr-81{padding-right:81rem!important}.w-82{width:82rem!important}.h-82{height:82rem!important}.m-82{margin:82rem!important}.mt-82{margin-top:82rem!important}.mb-82{margin-bottom:82rem!important}.ml-82{margin-left:82rem!important}.mr-82{margin-right:82rem!important}.p-82{padding:82rem!important}.pt-82{padding-top:82rem!important}.pb-82{padding-bottom:82rem!important}.pl-82{padding-left:82rem!important}.pr-82{padding-right:82rem!important}.w-83{width:83rem!important}.h-83{height:83rem!important}.m-83{margin:83rem!important}.mt-83{margin-top:83rem!important}.mb-83{margin-bottom:83rem!important}.ml-83{margin-left:83rem!important}.mr-83{margin-right:83rem!important}.p-83{padding:83rem!important}.pt-83{padding-top:83rem!important}.pb-83{padding-bottom:83rem!important}.pl-83{padding-left:83rem!important}.pr-83{padding-right:83rem!important}.w-84{width:84rem!important}.h-84{height:84rem!important}.m-84{margin:84rem!important}.mt-84{margin-top:84rem!important}.mb-84{margin-bottom:84rem!important}.ml-84{margin-left:84rem!important}.mr-84{margin-right:84rem!important}.p-84{padding:84rem!important}.pt-84{padding-top:84rem!important}.pb-84{padding-bottom:84rem!important}.pl-84{padding-left:84rem!important}.pr-84{padding-right:84rem!important}.w-85{width:85rem!important}.h-85{height:85rem!important}.m-85{margin:85rem!important}.mt-85{margin-top:85rem!important}.mb-85{margin-bottom:85rem!important}.ml-85{margin-left:85rem!important}.mr-85{margin-right:85rem!important}.p-85{padding:85rem!important}.pt-85{padding-top:85rem!important}.pb-85{padding-bottom:85rem!important}.pl-85{padding-left:85rem!important}.pr-85{padding-right:85rem!important}.w-86{width:86rem!important}.h-86{height:86rem!important}.m-86{margin:86rem!important}.mt-86{margin-top:86rem!important}.mb-86{margin-bottom:86rem!important}.ml-86{margin-left:86rem!important}.mr-86{margin-right:86rem!important}.p-86{padding:86rem!important}.pt-86{padding-top:86rem!important}.pb-86{padding-bottom:86rem!important}.pl-86{padding-left:86rem!important}.pr-86{padding-right:86rem!important}.w-87{width:87rem!important}.h-87{height:87rem!important}.m-87{margin:87rem!important}.mt-87{margin-top:87rem!important}.mb-87{margin-bottom:87rem!important}.ml-87{margin-left:87rem!important}.mr-87{margin-right:87rem!important}.p-87{padding:87rem!important}.pt-87{padding-top:87rem!important}.pb-87{padding-bottom:87rem!important}.pl-87{padding-left:87rem!important}.pr-87{padding-right:87rem!important}.w-88{width:88rem!important}.h-88{height:88rem!important}.m-88{margin:88rem!important}.mt-88{margin-top:88rem!important}.mb-88{margin-bottom:88rem!important}.ml-88{margin-left:88rem!important}.mr-88{margin-right:88rem!important}.p-88{padding:88rem!important}.pt-88{padding-top:88rem!important}.pb-88{padding-bottom:88rem!important}.pl-88{padding-left:88rem!important}.pr-88{padding-right:88rem!important}.w-89{width:89rem!important}.h-89{height:89rem!important}.m-89{margin:89rem!important}.mt-89{margin-top:89rem!important}.mb-89{margin-bottom:89rem!important}.ml-89{margin-left:89rem!important}.mr-89{margin-right:89rem!important}.p-89{padding:89rem!important}.pt-89{padding-top:89rem!important}.pb-89{padding-bottom:89rem!important}.pl-89{padding-left:89rem!important}.pr-89{padding-right:89rem!important}.w-90{width:90rem!important}.h-90{height:90rem!important}.m-90{margin:90rem!important}.mt-90{margin-top:90rem!important}.mb-90{margin-bottom:90rem!important}.ml-90{margin-left:90rem!important}.mr-90{margin-right:90rem!important}.p-90{padding:90rem!important}.pt-90{padding-top:90rem!important}.pb-90{padding-bottom:90rem!important}.pl-90{padding-left:90rem!important}.pr-90{padding-right:90rem!important}.w-91{width:91rem!important}.h-91{height:91rem!important}.m-91{margin:91rem!important}.mt-91{margin-top:91rem!important}.mb-91{margin-bottom:91rem!important}.ml-91{margin-left:91rem!important}.mr-91{margin-right:91rem!important}.p-91{padding:91rem!important}.pt-91{padding-top:91rem!important}.pb-91{padding-bottom:91rem!important}.pl-91{padding-left:91rem!important}.pr-91{padding-right:91rem!important}.w-92{width:92rem!important}.h-92{height:92rem!important}.m-92{margin:92rem!important}.mt-92{margin-top:92rem!important}.mb-92{margin-bottom:92rem!important}.ml-92{margin-left:92rem!important}.mr-92{margin-right:92rem!important}.p-92{padding:92rem!important}.pt-92{padding-top:92rem!important}.pb-92{padding-bottom:92rem!important}.pl-92{padding-left:92rem!important}.pr-92{padding-right:92rem!important}.w-93{width:93rem!important}.h-93{height:93rem!important}.m-93{margin:93rem!important}.mt-93{margin-top:93rem!important}.mb-93{margin-bottom:93rem!important}.ml-93{margin-left:93rem!important}.mr-93{margin-right:93rem!important}.p-93{padding:93rem!important}.pt-93{padding-top:93rem!important}.pb-93{padding-bottom:93rem!important}.pl-93{padding-left:93rem!important}.pr-93{padding-right:93rem!important}.w-94{width:94rem!important}.h-94{height:94rem!important}.m-94{margin:94rem!important}.mt-94{margin-top:94rem!important}.mb-94{margin-bottom:94rem!important}.ml-94{margin-left:94rem!important}.mr-94{margin-right:94rem!important}.p-94{padding:94rem!important}.pt-94{padding-top:94rem!important}.pb-94{padding-bottom:94rem!important}.pl-94{padding-left:94rem!important}.pr-94{padding-right:94rem!important}.w-95{width:95rem!important}.h-95{height:95rem!important}.m-95{margin:95rem!important}.mt-95{margin-top:95rem!important}.mb-95{margin-bottom:95rem!important}.ml-95{margin-left:95rem!important}.mr-95{margin-right:95rem!important}.p-95{padding:95rem!important}.pt-95{padding-top:95rem!important}.pb-95{padding-bottom:95rem!important}.pl-95{padding-left:95rem!important}.pr-95{padding-right:95rem!important}.w-96{width:96rem!important}.h-96{height:96rem!important}.m-96{margin:96rem!important}.mt-96{margin-top:96rem!important}.mb-96{margin-bottom:96rem!important}.ml-96{margin-left:96rem!important}.mr-96{margin-right:96rem!important}.p-96{padding:96rem!important}.pt-96{padding-top:96rem!important}.pb-96{padding-bottom:96rem!important}.pl-96{padding-left:96rem!important}.pr-96{padding-right:96rem!important}.w-97{width:97rem!important}.h-97{height:97rem!important}.m-97{margin:97rem!important}.mt-97{margin-top:97rem!important}.mb-97{margin-bottom:97rem!important}.ml-97{margin-left:97rem!important}.mr-97{margin-right:97rem!important}.p-97{padding:97rem!important}.pt-97{padding-top:97rem!important}.pb-97{padding-bottom:97rem!important}.pl-97{padding-left:97rem!important}.pr-97{padding-right:97rem!important}.w-98{width:98rem!important}.h-98{height:98rem!important}.m-98{margin:98rem!important}.mt-98{margin-top:98rem!important}.mb-98{margin-bottom:98rem!important}.ml-98{margin-left:98rem!important}.mr-98{margin-right:98rem!important}.p-98{padding:98rem!important}.pt-98{padding-top:98rem!important}.pb-98{padding-bottom:98rem!important}.pl-98{padding-left:98rem!important}.pr-98{padding-right:98rem!important}.w-99{width:99rem!important}.h-99{height:99rem!important}.m-99{margin:99rem!important}.mt-99{margin-top:99rem!important}.mb-99{margin-bottom:99rem!important}.ml-99{margin-left:99rem!important}.mr-99{margin-right:99rem!important}.p-99{padding:99rem!important}.pt-99{padding-top:99rem!important}.pb-99{padding-bottom:99rem!important}.pl-99{padding-left:99rem!important}.pr-99{padding-right:99rem!important}*{box-sizing:border-box}html{font-size:4px}body{overflow:overlay}.body-text,body,p{font-size:14px;line-height:24px;font-family:San Francisco Text,arial}ul.vanilla{list-style-type:none;padding:0;margin:0}ul.vanilla li{padding:0}a{cursor:pointer}a.vanilla{text-decoration:none}a.hoverline:hover{text-decoration:underline}form{margin:0}.panini{border-top:4px solid #000;border-bottom:4px solid #000;height:16px;width:20px}.liang{border-radius:100%;width:9rem;height:9rem;border:3rem solid #9b9b9b}.cross{position:relative;display:inline-block;width:18px;height:18px}.cross:after,.cross:before{position:absolute;top:5px;width:20px;height:20px;border-top:4px solid #000;border-color:inherit;content:""}.cross:before{left:-8px;transform:rotate(45deg)}.cross:after{left:6px;transform:rotate(-45deg)}.circle{padding:0;border-width:8px;height:30px;width:30px;position:relative;top:3px}.icon-text{position:relative;width:16px;height:16px;border:5px solid #ffbf21}.icon-text-topic{position:absolute;top:3px;left:3px;width:9px;height:9px;clip-path:polygon(50% 2.4%,0 38.8%,19.1% 97.6%,80.9% 97.6%,100% 38.8%);background-color:#fff}.icon-dm{height:12px;width:12px;background-color:#fd5331}.icon-chat{width:16px;height:16px;border-radius:16px;border:5px solid #4330fc}.icon-inbox{width:15px;height:12px;border-radius:12px;background-color:#000}.text-gray{color:#9b9b9b}.text-black{color:#000!important}.red,.red *{color:#ee3124}.timestamp{font-size:9px;font-family:Source Code Pro,Roboto mono,Courier New,monospace;font-weight:300}.flex{display:flex}.inline-block{display:inline-block}.space-between{justify-content:space-between}.align-center{align-items:center}.pointer{cursor:pointer}.hide{display:none}.relative{position:relative}.inline{display:inline}.block{display:block}input[type=text],label,textarea{font-size:14px;line-height:24px;border:none;outline:none;padding:0;font-family:San Francisco Text,arial}.select-dropdown[disabled],button[disabled],input[disabled],label[disabled],select[disabled],textarea[disabled]{opacity:.4;border-color:#aaa}input.input-sm{font-size:3rem;padding:6px;border-width:1px}label{margin-bottom:2rem}.input-group{padding:10px}.input-group label{font-size:14px;font-weight:600}.btn{margin-bottom:0}.btn-spinner{position:relative;display:inline-block;width:10px;height:10px}.btn-spinner:after{position:absolute;width:8px;height:8px;bottom:0;content:"◠";animation:a linear 1s infinite;font-size:10px;line-height:10px}.btn-spinner-lg{font-size:32px;font-weight:700;color:#4330fc}.btn-text{padding:0;background-color:inherit}@keyframes a{to{transform:rotate(1turn)}}body{padding-bottom:40px}.header-container{padding-top:3rem;padding-bottom:2rem}.header-title,.header-title *{text-decoration:none;font-weight:600;margin:0;font-size:24px;line-height:48px}.header-title-mono,.header-title-mono *{font-weight:500;font-family:Source Code Pro,Roboto mono,Courier New,monospace}.header-link{font-size:3rem;line-height:3rem;font-weight:500;font-family:Work Sans,Helvetica Neue,Helvetica,Arial,sans-serif;text-decoration:none;text-transform:capitalize}.header-link-breadcrumb,.header-link-breadcrumb *{line-height:6rem;text-transform:none;text-decoration:none;font-weight:400;font-family:Source Code Pro,Roboto mono,Courier New,monospace}.header-breadcrumbs{height:24px;margin-bottom:0}.header-mainrow{position:relative}.page-status{left:0;top:94px;background-color:#999}.page-status,.page-status:after{position:absolute;border-radius:100%;height:18px;width:18px}.page-status:after{content:"";background-color:#ccc;clip:rect(0,18px,18px,9px);animation:a 2s linear infinite}.page-status-primary{background-color:#4330fc}.page-status-primary:after{background-color:#d8d5fe}.page-status-secondary{background-color:#6fdc74}.page-status-secondary:after{background-color:#e2f8e3}.page-status-tertiary{background-color:#ee3124;cursor:pointer}.page-status-tertiary:after{background-color:#fbd5d3;cursor:pointer}.page-status-tertiary:before{position:absolute;top:24px;color:red;content:"retry";font-family:Source Code Pro;text-decoration:underline;cursor:pointer}.page-status-quaternary{background-color:#fd7a31}.page-status-quaternary:after{background-color:#febc98}.sidebar{position:absolute;right:24rem;top:48rem}.flex-1st{flex-basis:106px}.flex-2nd{flex-basis:52px}.flex-3rd{flex-basis:0;flex-grow:1}.chat-container .col-sm-2{flex-basis:43rem;max-width:43rem}.chat-input-field[type=text]{border:none;padding:0;line-height:6rem}.chat-input-field:placeholder{color:#b0b0b0}.chat-sep{text-align:center;font-weight:600;margin:4rem}.chat-msg-pending,.chat-msg-pending *{color:#aaa}.chat-msg-app,.chat-msg-app *{color:#9b9b9b}.cir-status{width:2rem;height:2rem;border-radius:100%;display:inline-block;position:relative;bottom:1px}.cir-green{background-color:#8eee9c}.cir-black,.cir-grey{background-color:#b0b0b0}.cir-red{background-color:#f44}.chat-scrollpane-view{display:flex;flex-direction:column}.chat-scrollpane img{width:100%}.chat-scrollpane-view>*{flex-shrink:0}.chat-scrollpane-view>:first-child{margin-top:auto!important}.scrollpane{height:600px;overflow-y:scroll;overflow-x:hidden;display:flex;flex-direction:column}.scrollpane>*{flex-shrink:0}.scrollpane>:first-child{margin-top:auto!important}.page-notes-edit textarea{border:none;height:800px}.page-notes-index h1{margin-top:0}.notes-actions .btn-secondary{margin-right:10rem}.note-timestamp{position:absolute;left:-16rem;top:3rem}.notes-blurbs{margin-top:8rem}.notes-blurbs li{display:flex;position:relative;margin:4rem 0}textarea.collection-post-edit{height:80%;border:1px solid #d0d0d0;background:#fff;resize:none;padding:13rem 21rem}textarea.comment-edit{border:none;resize:none;padding:0}.create-comment .usership{color:#000}div.coll-title,div.mod{font-size:6rem}.collection-index li.forum .meta-cont>div{float:left}.collection-index li.notes .da{position:absolute;margin-left:-12rem;margin-top:1rem}.collection-index .note-uuid{font-weight:inherit}.collection-index img{width:100%}.collection-index ul{list-style-type:none}.post img{width:100%}.post #edit{display:none}.collection-date{font-family:Source Code Pro,Roboto mono,Courier New,monospace;font-weight:300;font-size:3rem;line-height:3rem}.collection-title{position:relative}.collection-edit:before,.collection-post:before,.collection-title:before{content:"";background-color:#0a7960;border-radius:1px;width:2rem;height:2rem;position:absolute}.collection-post:before{margin-top:35px;margin-left:-11rem}.collection-title:before{margin-top:22px;margin-left:-10rem}.collection-edit:before{margin-left:-11rem}.collection-post h3{font-weight:500;line-height:9rem}.collection-post-page{padding-top:12rem}.collection-comment{margin-bottom:11rem;position:relative}.collection-comment-avatar{position:absolute;left:-12rem;top:7px;width:32px;height:32px}.collection-comment-author{font-size:14px;line-height:24px;text-decoration:none;font-weight:700}.collection-post-actions{justify-content:flex-end;display:flex;align-items:center}.form-mve .input-group-focused,.form-mve .input-group-focused input,.form-mve .input-group-focused textarea{background-color:#f6f6f6}.form-mve .input-group-error-message{display:none}.form-mve .input-group-error *{color:#ee3124}.form-mve .input-group-error input::placeholder{color:#ee3124;opacity:.3}.form-mve .input-group-error .input-group-error-message{display:block}.form-mve .btn-text{padding-left:3rem;padding-right:3rem}.form-mve .btn-text:focus span:first-child{text-decoration:underline}.command-row{height:50px;display:flex;align-items:center;position:relative;margin-top:9rem;margin-bottom:3rem}.command-row .cross{flex-basis:146px;flex-shrink:0}.command-input-placeholder-wrapper,input.command-menu-input{position:relative;border:none;outline:none;height:50px;width:100%;font-size:20px;line-height:50px;font-family:Source Code Pro,Roboto mono,Courier New,monospace}input.command-menu-input{background-color:transparent;z-index:2;padding:0 3rem;font-weight:500}input.command-menu-input[disabled]{opacity:1}.command-input-placeholder-wrapper{background-color:#f6f6f6}.command-input-placeholder-wrapper[disabled]{background-color:transparent}.command-input-placeholder-wrapper:after{content:attr(data-placeholder);position:absolute;top:0;left:0;right:0;z-index:1;white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden;padding:0 3rem;color:#9b9b9b;font-weight:400}.command-options{margin-left:146px;margin-top:30px}.command-item{padding:3rem;cursor:pointer}.command-item-selected{background-color:#f6f6f6}.command-help a{display:block}.profile-shipname{display:flex;align-items:center;font-size:28px;font-weight:600;height:64px;font-family:Source Code Pro,Roboto mono,Courier New,monospace}.profile-message-btn{background:#fff;display:inline-block}.inbox-page .icon{position:relative;left:10px;top:5px}.inbox-page .timestamp{position:relative;left:6px}.inbox-page img{width:100%}.inbox-page .invite .btn{float:right}.inbox-page .collection-preview h1:first-child{display:none}.inbox-link{font-weight:500;color:#777}.inbox-link-active{color:#000} \ No newline at end of file +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}[class*=col-]{width:100%;margin-bottom:1rem}.container{margin:0 auto;padding:0 2rem;max-width:960px}.row{display:flex;margin-right:-.5rem;margin-left:-.5rem}.flex,.row{flex-wrap:wrap}.align-vertical{align-items:center}.justify-center{justify-content:center}@media only screen and (min-width:0){.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-offset-0,.col-sm-offset-1,.col-sm-offset-2,.col-sm-offset-3,.col-sm-offset-4,.col-sm-offset-5,.col-sm-offset-6,.col-sm-offset-7,.col-sm-offset-8,.col-sm-offset-9,.col-sm-offset-10,.col-sm-offset-11,.col-sm-offset-12{box-sizing:border-box;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-sm{flex-grow:1;flex-basis:0;max-width:100%}.col-sm-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-sm-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-sm-3{flex-basis:25%;max-width:25%}.col-sm-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-sm-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-sm-6{flex-basis:50%;max-width:50%}.col-sm-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-sm-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-sm-9{flex-basis:75%;max-width:75%}.col-sm-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-sm-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-sm-12{flex-basis:100%;max-width:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}}@media only screen and (min-width:480px){.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-offset-0,.col-md-offset-1,.col-md-offset-2,.col-md-offset-3,.col-md-offset-4,.col-md-offset-5,.col-md-offset-6,.col-md-offset-7,.col-md-offset-8,.col-md-offset-9,.col-md-offset-10,.col-md-offset-11,.col-md-offset-12{box-sizing:border-box;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-md{flex-grow:1;flex-basis:0;max-width:100%}.col-md-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-md-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-md-3{flex-basis:25%;max-width:25%}.col-md-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-md-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-md-6{flex-basis:50%;max-width:50%}.col-md-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-md-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-md-9{flex-basis:75%;max-width:75%}.col-md-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-md-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-md-12{flex-basis:100%;max-width:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}}@media only screen and (min-width:960px){.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-offset-0,.col-lg-offset-1,.col-lg-offset-2,.col-lg-offset-3,.col-lg-offset-4,.col-lg-offset-5,.col-lg-offset-6,.col-lg-offset-7,.col-lg-offset-8,.col-lg-offset-9,.col-lg-offset-10,.col-lg-offset-11,.col-lg-offset-12{box-sizing:border-box;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-lg{flex-grow:1;flex-basis:0;max-width:100%}.col-lg-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-lg-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-lg-3{flex-basis:25%;max-width:25%}.col-lg-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-lg-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-lg-6{flex-basis:50%;max-width:50%}.col-lg-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-lg-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-lg-9{flex-basis:75%;max-width:75%}.col-lg-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-lg-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-lg-12{flex-basis:100%;max-width:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Thin.ttf) format("truetype");font-weight:100}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-ExtraLight.ttf) format("truetype");font-weight:200}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Light.ttf) format("truetype");font-weight:300}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Regular.ttf) format("truetype");font-weight:400}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Medium.ttf) format("truetype");font-weight:500}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-SemiBold.ttf) format("truetype");font-weight:600}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Bold.ttf) format("truetype");font-weight:700}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-ExtraBold.ttf) format("truetype");font-weight:800}@font-face{font-family:Work Sans;src:url(https://storage.googleapis.com/media.urbit.org/fonts/WorkSans-Black.ttf) format("truetype");font-weight:900}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-extralight.woff);font-weight:200}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-light.woff);font-weight:300}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-regular.woff);font-weight:400}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-medium.woff);font-weight:500}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-bold.woff);font-weight:600}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-black.woff);font-weight:700}*{font-smoothing:antialiased;-webkit-font-smoothing:antialiased}body{font-family:-apple-system,BlinkMacSystemFont,Roboto,Helvetica,Arial,sans-serif;font-size:4rem;line-height:6rem;color:#373a3c}a{color:#000}p{margin:0 0 2rem}.text-heading,h1,h2,h3,h4,h5{margin:0;font-family:Work Sans;color:#373a3c}.h1,h1{font-size:12rem;line-height:16rem;margin:4rem 0}.h1,.h2,h1,h2{font-weight:600}.h2,h2{font-size:9rem;line-height:13rem;margin:3rem 0}.h3,h3{font-size:6rem;font-weight:600;line-height:8rem;margin:2rem 0}.h4,h4{font-weight:600}.h4,.h5,h4,h5{font-size:5rem;line-height:7rem;margin:1rem 0}.h5,h5{font-weight:500}.text-sm,caption{font-size:3rem;line-height:5rem}.text-md{font-size:4rem;line-height:6rem}.text-lg{font-size:5rem;line-height:7rem}code,pre{background-color:#f1f1f1;padding:1rem}.text-code,.text-mono,code,pre{font-family:Source Code Pro,Roboto mono,Courier New,monospace}.text-code{color:#000}.code-block,.text-code{background-color:#f1f1f1}.code-block{padding:5rem;white-space:pre-wrap}.code-block .text-code{font-weight:200}.underline,u{text-decoration:underline}.strikethrough,s{text-decoration:line-through}.italic,em{font-style:italic}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.text-300{font-weight:300}.text-400{font-weight:400}.text-500{font-weight:500}.text-600{font-weight:600}.text-700,b{font-weight:700}.text-800{font-weight:800}.h-font{font-family:Work Sans}.blue{color:#4330fc}.green{color:#6fdc74}.red{color:#ee3124}.gray-lighter{color:#f1f1f1}.gray-light{color:#d4d4d4}.gray{color:#5b5b5b}.gray-dark{color:#373a3c}.blue-hl{background-color:#4330fc;color:#fff}.green-hl{background-color:#6fdc74;color:#fff}.red-hl{background-color:#ee3124;color:#fff}.gray-lighter-hl{background-color:#f1f1f1;color:#fff}.gray-light-hl{background-color:#d4d4d4;color:#fff}.gray-hl{background-color:#5b5b5b;color:#fff}.gray-dark-hl{background-color:#373a3c;color:#fff}.black-hl{background-color:#000;color:#fff}.center{text-align:center}.right{text-align:right}.justify{text-align:justify}button{border:none;outline:none}.btn,button{font-family:Work Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:500;font-size:4rem;line-height:4rem;padding:3rem 6rem;color:#000;background-color:#d4d4d4;margin:0 0 6px}.btn-sm{font-size:3rem;line-height:3rem;padding:2rem 4rem}.btn-primary{background-color:#4330fc;color:#fff}.btn-secondary{background-color:#6fdc74}.btn-tetiary{background-color:#5b5b5b;color:#fff}.btn-warning{background-color:#ee3124;color:#fff}.btn-group .btn{display:inline-block}.btn-group .btn:not(.active){background-color:#d4d4d4;color:#000}label{display:block;font-weight:700}input[type=text],textarea{border:2px solid #000;padding:12px;width:100%}.error-label{display:none;color:#f44;font-size:2.33rem;line-height:3rem;margin-top:1rem}.input-group{margin:0 0 2rem}.input-group.error input[type=text],.input-group.error textarea{border:.5rem solid #f44}.input-group.error .error-label{display:block}.checkbox-group input,.checkbox-group label,.radio-group input,.radio-group label{font-weight:400;display:inline-block}.select-dropdown{display:flex;border:2px solid #000;overflow:hidden;background-color:#fff}.select-dropdown select{padding:5px 8px;width:130%;border:none;box-shadow:none;background:transparent;background-image:none;-webkit-appearance:none}.select-dropdown select:focus{outline:none}.select-dropdown .triangle-down{border-width:2rem 1rem 0;position:relative;top:14px;right:8px}.icon-arrow-right:before{content:"→"}.icon-arrow-left:before{content:"←"}.icon-arrow-up:before{content:"↑"}.icon-arrow-down:before{content:"↓"}.icon-cross:before{content:"×"}.icon-ellipsis:before{content:"...";position:relative;bottom:6px}.selected:before{content:"∙"}.icon{margin-right:.6rem}.icon.prev{width:1px;height:1px;border:12.0006px solid transparent;border-right:18px solid #000;border-left:0 solid transparent}.icon.next{border:12.0006px solid transparent;border-left:18px solid #000;border-right:0 solid transparent;margin-right:0}.icon.next,.icon.up{width:1px;height:1px}.icon.up{border:12.0006px solid transparent;border-bottom:18px solid #000;border-top:0 solid transparent}.circle{display:inline-block;padding:2rem;border-radius:50%;border:2px solid #000;text-align:center}.circle-sm{padding:1rem}.circle-lg{padding:4rem}.circle-fill{background-color:#000}.circle-red{background-color:#ee3124;border-color:#ee3124}.circle-blue{background-color:#4330fc;border-color:#4330fc}.circle-blue-light{background-color:#a4d8e8;border-color:#a4d8e8}.circle-yellow{background-color:#ffc440;border-color:#ffc440}.circle-green{background-color:#6fdc74;border-color:#6fdc74}.circle-gray{background-color:#5b5b5b;border-color:#5b5b5b}.circle-gray-light{background-color:#d4d4d4;border-color:#d4d4d4}.circle-gray-lighter{background-color:#f1f1f1;border-color:#f1f1f1}.circle-gray-dark{background-color:#373a3c;border-color:#373a3c}.circle-pill{border-radius:9999px;width:10rem}.circle-pill.circle-lg{width:20rem}.square{display:inline-block;padding:2rem;border:2px solid #000;text-align:center}.square-sm{padding:1rem}.square-lg{padding:4rem}.square-fill{background-color:#000}.square-red{background-color:red;border-color:red}.square-rect{width:10rem}.square-rect.square-lg{width:20rem}.triangle-base{display:inline-block;width:0;height:0}.triangle-up{border-bottom:4rem solid #000}.triangle-down,.triangle-up{border-left:2rem solid transparent;border-right:2rem solid transparent}.triangle-down{border-top:4rem solid #000}.triangle-right{border-left:4rem solid #000}.triangle-left,.triangle-right{border-top:2rem solid transparent;border-bottom:2rem solid transparent}.triangle-left{border-right:4rem solid #000}.urbit-logo{width:72px;height:72px;border-radius:50%;border:5px solid #fff;background-color:transparent}.urbit-logo,.urbit-logo:before{display:inline-block;vertical-align:middle}.urbit-logo:before{content:"~";color:#fff;font-size:72px;line-height:54px;text-align:center;width:2rem;font-family:Work Sans;font-weight:600;margin-right:30px;margin-top:3px}.urbit-logo-solid{border-color:#000}.urbit-logo-solid:before{color:#000}section{margin:0 0 2rem;border:none}blockquote{border-left:6px solid #000;margin:24px 0;padding-left:18px}hr{margin:4rem 0;width:100%;height:1rem;border:0;background-color:#373a3c}ul{padding-left:4rem;list-style:disc outside}ul li{margin-bottom:2rem;padding-left:2rem}ol ul,ul ol,ul ul{margin:2rem}ol ul li,ul ol li,ul ul li{margin-bottom:1rem}ul.list-reset{list-style:none}ol,ul.list-reset,ul.list-reset li{padding-left:0}ol{list-style:none}ol>li{counter-increment:a;margin-left:0;margin-bottom:1rem}ol>li:before{content:counter(a);font-weight:700;vertical-align:center;display:inline-block;width:6rem;text-align:left}.w-0{width:0!important}.h-0{height:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mr-0{margin-right:0!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.pr-0{padding-right:0!important}.w-1{width:1rem!important}.h-1{height:1rem!important}.m-1{margin:1rem!important}.mt-1{margin-top:1rem!important}.mb-1{margin-bottom:1rem!important}.ml-1{margin-left:1rem!important}.mr-1{margin-right:1rem!important}.p-1{padding:1rem!important}.pt-1{padding-top:1rem!important}.pb-1{padding-bottom:1rem!important}.pl-1{padding-left:1rem!important}.pr-1{padding-right:1rem!important}.w-2{width:2rem!important}.h-2{height:2rem!important}.m-2{margin:2rem!important}.mt-2{margin-top:2rem!important}.mb-2{margin-bottom:2rem!important}.ml-2{margin-left:2rem!important}.mr-2{margin-right:2rem!important}.p-2{padding:2rem!important}.pt-2{padding-top:2rem!important}.pb-2{padding-bottom:2rem!important}.pl-2{padding-left:2rem!important}.pr-2{padding-right:2rem!important}.w-3{width:3rem!important}.h-3{height:3rem!important}.m-3{margin:3rem!important}.mt-3{margin-top:3rem!important}.mb-3{margin-bottom:3rem!important}.ml-3{margin-left:3rem!important}.mr-3{margin-right:3rem!important}.p-3{padding:3rem!important}.pt-3{padding-top:3rem!important}.pb-3{padding-bottom:3rem!important}.pl-3{padding-left:3rem!important}.pr-3{padding-right:3rem!important}.w-4{width:4rem!important}.h-4{height:4rem!important}.m-4{margin:4rem!important}.mt-4{margin-top:4rem!important}.mb-4{margin-bottom:4rem!important}.ml-4{margin-left:4rem!important}.mr-4{margin-right:4rem!important}.p-4{padding:4rem!important}.pt-4{padding-top:4rem!important}.pb-4{padding-bottom:4rem!important}.pl-4{padding-left:4rem!important}.pr-4{padding-right:4rem!important}.w-5{width:5rem!important}.h-5{height:5rem!important}.m-5{margin:5rem!important}.mt-5{margin-top:5rem!important}.mb-5{margin-bottom:5rem!important}.ml-5{margin-left:5rem!important}.mr-5{margin-right:5rem!important}.p-5{padding:5rem!important}.pt-5{padding-top:5rem!important}.pb-5{padding-bottom:5rem!important}.pl-5{padding-left:5rem!important}.pr-5{padding-right:5rem!important}.w-6{width:6rem!important}.h-6{height:6rem!important}.m-6{margin:6rem!important}.mt-6{margin-top:6rem!important}.mb-6{margin-bottom:6rem!important}.ml-6{margin-left:6rem!important}.mr-6{margin-right:6rem!important}.p-6{padding:6rem!important}.pt-6{padding-top:6rem!important}.pb-6{padding-bottom:6rem!important}.pl-6{padding-left:6rem!important}.pr-6{padding-right:6rem!important}.w-7{width:7rem!important}.h-7{height:7rem!important}.m-7{margin:7rem!important}.mt-7{margin-top:7rem!important}.mb-7{margin-bottom:7rem!important}.ml-7{margin-left:7rem!important}.mr-7{margin-right:7rem!important}.p-7{padding:7rem!important}.pt-7{padding-top:7rem!important}.pb-7{padding-bottom:7rem!important}.pl-7{padding-left:7rem!important}.pr-7{padding-right:7rem!important}.w-8{width:8rem!important}.h-8{height:8rem!important}.m-8{margin:8rem!important}.mt-8{margin-top:8rem!important}.mb-8{margin-bottom:8rem!important}.ml-8{margin-left:8rem!important}.mr-8{margin-right:8rem!important}.p-8{padding:8rem!important}.pt-8{padding-top:8rem!important}.pb-8{padding-bottom:8rem!important}.pl-8{padding-left:8rem!important}.pr-8{padding-right:8rem!important}.w-9{width:9rem!important}.h-9{height:9rem!important}.m-9{margin:9rem!important}.mt-9{margin-top:9rem!important}.mb-9{margin-bottom:9rem!important}.ml-9{margin-left:9rem!important}.mr-9{margin-right:9rem!important}.p-9{padding:9rem!important}.pt-9{padding-top:9rem!important}.pb-9{padding-bottom:9rem!important}.pl-9{padding-left:9rem!important}.pr-9{padding-right:9rem!important}.w-10{width:10rem!important}.h-10{height:10rem!important}.m-10{margin:10rem!important}.mt-10{margin-top:10rem!important}.mb-10{margin-bottom:10rem!important}.ml-10{margin-left:10rem!important}.mr-10{margin-right:10rem!important}.p-10{padding:10rem!important}.pt-10{padding-top:10rem!important}.pb-10{padding-bottom:10rem!important}.pl-10{padding-left:10rem!important}.pr-10{padding-right:10rem!important}.w-11{width:11rem!important}.h-11{height:11rem!important}.m-11{margin:11rem!important}.mt-11{margin-top:11rem!important}.mb-11{margin-bottom:11rem!important}.ml-11{margin-left:11rem!important}.mr-11{margin-right:11rem!important}.p-11{padding:11rem!important}.pt-11{padding-top:11rem!important}.pb-11{padding-bottom:11rem!important}.pl-11{padding-left:11rem!important}.pr-11{padding-right:11rem!important}.w-12{width:12rem!important}.h-12{height:12rem!important}.m-12{margin:12rem!important}.mt-12{margin-top:12rem!important}.mb-12{margin-bottom:12rem!important}.ml-12{margin-left:12rem!important}.mr-12{margin-right:12rem!important}.p-12{padding:12rem!important}.pt-12{padding-top:12rem!important}.pb-12{padding-bottom:12rem!important}.pl-12{padding-left:12rem!important}.pr-12{padding-right:12rem!important}.w-13{width:13rem!important}.h-13{height:13rem!important}.m-13{margin:13rem!important}.mt-13{margin-top:13rem!important}.mb-13{margin-bottom:13rem!important}.ml-13{margin-left:13rem!important}.mr-13{margin-right:13rem!important}.p-13{padding:13rem!important}.pt-13{padding-top:13rem!important}.pb-13{padding-bottom:13rem!important}.pl-13{padding-left:13rem!important}.pr-13{padding-right:13rem!important}.w-14{width:14rem!important}.h-14{height:14rem!important}.m-14{margin:14rem!important}.mt-14{margin-top:14rem!important}.mb-14{margin-bottom:14rem!important}.ml-14{margin-left:14rem!important}.mr-14{margin-right:14rem!important}.p-14{padding:14rem!important}.pt-14{padding-top:14rem!important}.pb-14{padding-bottom:14rem!important}.pl-14{padding-left:14rem!important}.pr-14{padding-right:14rem!important}.w-15{width:15rem!important}.h-15{height:15rem!important}.m-15{margin:15rem!important}.mt-15{margin-top:15rem!important}.mb-15{margin-bottom:15rem!important}.ml-15{margin-left:15rem!important}.mr-15{margin-right:15rem!important}.p-15{padding:15rem!important}.pt-15{padding-top:15rem!important}.pb-15{padding-bottom:15rem!important}.pl-15{padding-left:15rem!important}.pr-15{padding-right:15rem!important}.w-16{width:16rem!important}.h-16{height:16rem!important}.m-16{margin:16rem!important}.mt-16{margin-top:16rem!important}.mb-16{margin-bottom:16rem!important}.ml-16{margin-left:16rem!important}.mr-16{margin-right:16rem!important}.p-16{padding:16rem!important}.pt-16{padding-top:16rem!important}.pb-16{padding-bottom:16rem!important}.pl-16{padding-left:16rem!important}.pr-16{padding-right:16rem!important}.w-17{width:17rem!important}.h-17{height:17rem!important}.m-17{margin:17rem!important}.mt-17{margin-top:17rem!important}.mb-17{margin-bottom:17rem!important}.ml-17{margin-left:17rem!important}.mr-17{margin-right:17rem!important}.p-17{padding:17rem!important}.pt-17{padding-top:17rem!important}.pb-17{padding-bottom:17rem!important}.pl-17{padding-left:17rem!important}.pr-17{padding-right:17rem!important}.w-18{width:18rem!important}.h-18{height:18rem!important}.m-18{margin:18rem!important}.mt-18{margin-top:18rem!important}.mb-18{margin-bottom:18rem!important}.ml-18{margin-left:18rem!important}.mr-18{margin-right:18rem!important}.p-18{padding:18rem!important}.pt-18{padding-top:18rem!important}.pb-18{padding-bottom:18rem!important}.pl-18{padding-left:18rem!important}.pr-18{padding-right:18rem!important}.w-19{width:19rem!important}.h-19{height:19rem!important}.m-19{margin:19rem!important}.mt-19{margin-top:19rem!important}.mb-19{margin-bottom:19rem!important}.ml-19{margin-left:19rem!important}.mr-19{margin-right:19rem!important}.p-19{padding:19rem!important}.pt-19{padding-top:19rem!important}.pb-19{padding-bottom:19rem!important}.pl-19{padding-left:19rem!important}.pr-19{padding-right:19rem!important}.w-20{width:20rem!important}.h-20{height:20rem!important}.m-20{margin:20rem!important}.mt-20{margin-top:20rem!important}.mb-20{margin-bottom:20rem!important}.ml-20{margin-left:20rem!important}.mr-20{margin-right:20rem!important}.p-20{padding:20rem!important}.pt-20{padding-top:20rem!important}.pb-20{padding-bottom:20rem!important}.pl-20{padding-left:20rem!important}.pr-20{padding-right:20rem!important}.w-21{width:21rem!important}.h-21{height:21rem!important}.m-21{margin:21rem!important}.mt-21{margin-top:21rem!important}.mb-21{margin-bottom:21rem!important}.ml-21{margin-left:21rem!important}.mr-21{margin-right:21rem!important}.p-21{padding:21rem!important}.pt-21{padding-top:21rem!important}.pb-21{padding-bottom:21rem!important}.pl-21{padding-left:21rem!important}.pr-21{padding-right:21rem!important}.w-22{width:22rem!important}.h-22{height:22rem!important}.m-22{margin:22rem!important}.mt-22{margin-top:22rem!important}.mb-22{margin-bottom:22rem!important}.ml-22{margin-left:22rem!important}.mr-22{margin-right:22rem!important}.p-22{padding:22rem!important}.pt-22{padding-top:22rem!important}.pb-22{padding-bottom:22rem!important}.pl-22{padding-left:22rem!important}.pr-22{padding-right:22rem!important}.w-23{width:23rem!important}.h-23{height:23rem!important}.m-23{margin:23rem!important}.mt-23{margin-top:23rem!important}.mb-23{margin-bottom:23rem!important}.ml-23{margin-left:23rem!important}.mr-23{margin-right:23rem!important}.p-23{padding:23rem!important}.pt-23{padding-top:23rem!important}.pb-23{padding-bottom:23rem!important}.pl-23{padding-left:23rem!important}.pr-23{padding-right:23rem!important}.w-24{width:24rem!important}.h-24{height:24rem!important}.m-24{margin:24rem!important}.mt-24{margin-top:24rem!important}.mb-24{margin-bottom:24rem!important}.ml-24{margin-left:24rem!important}.mr-24{margin-right:24rem!important}.p-24{padding:24rem!important}.pt-24{padding-top:24rem!important}.pb-24{padding-bottom:24rem!important}.pl-24{padding-left:24rem!important}.pr-24{padding-right:24rem!important}.w-25{width:25rem!important}.h-25{height:25rem!important}.m-25{margin:25rem!important}.mt-25{margin-top:25rem!important}.mb-25{margin-bottom:25rem!important}.ml-25{margin-left:25rem!important}.mr-25{margin-right:25rem!important}.p-25{padding:25rem!important}.pt-25{padding-top:25rem!important}.pb-25{padding-bottom:25rem!important}.pl-25{padding-left:25rem!important}.pr-25{padding-right:25rem!important}.w-26{width:26rem!important}.h-26{height:26rem!important}.m-26{margin:26rem!important}.mt-26{margin-top:26rem!important}.mb-26{margin-bottom:26rem!important}.ml-26{margin-left:26rem!important}.mr-26{margin-right:26rem!important}.p-26{padding:26rem!important}.pt-26{padding-top:26rem!important}.pb-26{padding-bottom:26rem!important}.pl-26{padding-left:26rem!important}.pr-26{padding-right:26rem!important}.w-27{width:27rem!important}.h-27{height:27rem!important}.m-27{margin:27rem!important}.mt-27{margin-top:27rem!important}.mb-27{margin-bottom:27rem!important}.ml-27{margin-left:27rem!important}.mr-27{margin-right:27rem!important}.p-27{padding:27rem!important}.pt-27{padding-top:27rem!important}.pb-27{padding-bottom:27rem!important}.pl-27{padding-left:27rem!important}.pr-27{padding-right:27rem!important}.w-28{width:28rem!important}.h-28{height:28rem!important}.m-28{margin:28rem!important}.mt-28{margin-top:28rem!important}.mb-28{margin-bottom:28rem!important}.ml-28{margin-left:28rem!important}.mr-28{margin-right:28rem!important}.p-28{padding:28rem!important}.pt-28{padding-top:28rem!important}.pb-28{padding-bottom:28rem!important}.pl-28{padding-left:28rem!important}.pr-28{padding-right:28rem!important}.w-29{width:29rem!important}.h-29{height:29rem!important}.m-29{margin:29rem!important}.mt-29{margin-top:29rem!important}.mb-29{margin-bottom:29rem!important}.ml-29{margin-left:29rem!important}.mr-29{margin-right:29rem!important}.p-29{padding:29rem!important}.pt-29{padding-top:29rem!important}.pb-29{padding-bottom:29rem!important}.pl-29{padding-left:29rem!important}.pr-29{padding-right:29rem!important}.w-30{width:30rem!important}.h-30{height:30rem!important}.m-30{margin:30rem!important}.mt-30{margin-top:30rem!important}.mb-30{margin-bottom:30rem!important}.ml-30{margin-left:30rem!important}.mr-30{margin-right:30rem!important}.p-30{padding:30rem!important}.pt-30{padding-top:30rem!important}.pb-30{padding-bottom:30rem!important}.pl-30{padding-left:30rem!important}.pr-30{padding-right:30rem!important}.w-31{width:31rem!important}.h-31{height:31rem!important}.m-31{margin:31rem!important}.mt-31{margin-top:31rem!important}.mb-31{margin-bottom:31rem!important}.ml-31{margin-left:31rem!important}.mr-31{margin-right:31rem!important}.p-31{padding:31rem!important}.pt-31{padding-top:31rem!important}.pb-31{padding-bottom:31rem!important}.pl-31{padding-left:31rem!important}.pr-31{padding-right:31rem!important}.w-32{width:32rem!important}.h-32{height:32rem!important}.m-32{margin:32rem!important}.mt-32{margin-top:32rem!important}.mb-32{margin-bottom:32rem!important}.ml-32{margin-left:32rem!important}.mr-32{margin-right:32rem!important}.p-32{padding:32rem!important}.pt-32{padding-top:32rem!important}.pb-32{padding-bottom:32rem!important}.pl-32{padding-left:32rem!important}.pr-32{padding-right:32rem!important}.w-33{width:33rem!important}.h-33{height:33rem!important}.m-33{margin:33rem!important}.mt-33{margin-top:33rem!important}.mb-33{margin-bottom:33rem!important}.ml-33{margin-left:33rem!important}.mr-33{margin-right:33rem!important}.p-33{padding:33rem!important}.pt-33{padding-top:33rem!important}.pb-33{padding-bottom:33rem!important}.pl-33{padding-left:33rem!important}.pr-33{padding-right:33rem!important}.w-34{width:34rem!important}.h-34{height:34rem!important}.m-34{margin:34rem!important}.mt-34{margin-top:34rem!important}.mb-34{margin-bottom:34rem!important}.ml-34{margin-left:34rem!important}.mr-34{margin-right:34rem!important}.p-34{padding:34rem!important}.pt-34{padding-top:34rem!important}.pb-34{padding-bottom:34rem!important}.pl-34{padding-left:34rem!important}.pr-34{padding-right:34rem!important}.w-35{width:35rem!important}.h-35{height:35rem!important}.m-35{margin:35rem!important}.mt-35{margin-top:35rem!important}.mb-35{margin-bottom:35rem!important}.ml-35{margin-left:35rem!important}.mr-35{margin-right:35rem!important}.p-35{padding:35rem!important}.pt-35{padding-top:35rem!important}.pb-35{padding-bottom:35rem!important}.pl-35{padding-left:35rem!important}.pr-35{padding-right:35rem!important}.w-36{width:36rem!important}.h-36{height:36rem!important}.m-36{margin:36rem!important}.mt-36{margin-top:36rem!important}.mb-36{margin-bottom:36rem!important}.ml-36{margin-left:36rem!important}.mr-36{margin-right:36rem!important}.p-36{padding:36rem!important}.pt-36{padding-top:36rem!important}.pb-36{padding-bottom:36rem!important}.pl-36{padding-left:36rem!important}.pr-36{padding-right:36rem!important}.w-37{width:37rem!important}.h-37{height:37rem!important}.m-37{margin:37rem!important}.mt-37{margin-top:37rem!important}.mb-37{margin-bottom:37rem!important}.ml-37{margin-left:37rem!important}.mr-37{margin-right:37rem!important}.p-37{padding:37rem!important}.pt-37{padding-top:37rem!important}.pb-37{padding-bottom:37rem!important}.pl-37{padding-left:37rem!important}.pr-37{padding-right:37rem!important}.w-38{width:38rem!important}.h-38{height:38rem!important}.m-38{margin:38rem!important}.mt-38{margin-top:38rem!important}.mb-38{margin-bottom:38rem!important}.ml-38{margin-left:38rem!important}.mr-38{margin-right:38rem!important}.p-38{padding:38rem!important}.pt-38{padding-top:38rem!important}.pb-38{padding-bottom:38rem!important}.pl-38{padding-left:38rem!important}.pr-38{padding-right:38rem!important}.w-39{width:39rem!important}.h-39{height:39rem!important}.m-39{margin:39rem!important}.mt-39{margin-top:39rem!important}.mb-39{margin-bottom:39rem!important}.ml-39{margin-left:39rem!important}.mr-39{margin-right:39rem!important}.p-39{padding:39rem!important}.pt-39{padding-top:39rem!important}.pb-39{padding-bottom:39rem!important}.pl-39{padding-left:39rem!important}.pr-39{padding-right:39rem!important}.w-40{width:40rem!important}.h-40{height:40rem!important}.m-40{margin:40rem!important}.mt-40{margin-top:40rem!important}.mb-40{margin-bottom:40rem!important}.ml-40{margin-left:40rem!important}.mr-40{margin-right:40rem!important}.p-40{padding:40rem!important}.pt-40{padding-top:40rem!important}.pb-40{padding-bottom:40rem!important}.pl-40{padding-left:40rem!important}.pr-40{padding-right:40rem!important}.w-41{width:41rem!important}.h-41{height:41rem!important}.m-41{margin:41rem!important}.mt-41{margin-top:41rem!important}.mb-41{margin-bottom:41rem!important}.ml-41{margin-left:41rem!important}.mr-41{margin-right:41rem!important}.p-41{padding:41rem!important}.pt-41{padding-top:41rem!important}.pb-41{padding-bottom:41rem!important}.pl-41{padding-left:41rem!important}.pr-41{padding-right:41rem!important}.w-42{width:42rem!important}.h-42{height:42rem!important}.m-42{margin:42rem!important}.mt-42{margin-top:42rem!important}.mb-42{margin-bottom:42rem!important}.ml-42{margin-left:42rem!important}.mr-42{margin-right:42rem!important}.p-42{padding:42rem!important}.pt-42{padding-top:42rem!important}.pb-42{padding-bottom:42rem!important}.pl-42{padding-left:42rem!important}.pr-42{padding-right:42rem!important}.w-43{width:43rem!important}.h-43{height:43rem!important}.m-43{margin:43rem!important}.mt-43{margin-top:43rem!important}.mb-43{margin-bottom:43rem!important}.ml-43{margin-left:43rem!important}.mr-43{margin-right:43rem!important}.p-43{padding:43rem!important}.pt-43{padding-top:43rem!important}.pb-43{padding-bottom:43rem!important}.pl-43{padding-left:43rem!important}.pr-43{padding-right:43rem!important}.w-44{width:44rem!important}.h-44{height:44rem!important}.m-44{margin:44rem!important}.mt-44{margin-top:44rem!important}.mb-44{margin-bottom:44rem!important}.ml-44{margin-left:44rem!important}.mr-44{margin-right:44rem!important}.p-44{padding:44rem!important}.pt-44{padding-top:44rem!important}.pb-44{padding-bottom:44rem!important}.pl-44{padding-left:44rem!important}.pr-44{padding-right:44rem!important}.w-45{width:45rem!important}.h-45{height:45rem!important}.m-45{margin:45rem!important}.mt-45{margin-top:45rem!important}.mb-45{margin-bottom:45rem!important}.ml-45{margin-left:45rem!important}.mr-45{margin-right:45rem!important}.p-45{padding:45rem!important}.pt-45{padding-top:45rem!important}.pb-45{padding-bottom:45rem!important}.pl-45{padding-left:45rem!important}.pr-45{padding-right:45rem!important}.w-46{width:46rem!important}.h-46{height:46rem!important}.m-46{margin:46rem!important}.mt-46{margin-top:46rem!important}.mb-46{margin-bottom:46rem!important}.ml-46{margin-left:46rem!important}.mr-46{margin-right:46rem!important}.p-46{padding:46rem!important}.pt-46{padding-top:46rem!important}.pb-46{padding-bottom:46rem!important}.pl-46{padding-left:46rem!important}.pr-46{padding-right:46rem!important}.w-47{width:47rem!important}.h-47{height:47rem!important}.m-47{margin:47rem!important}.mt-47{margin-top:47rem!important}.mb-47{margin-bottom:47rem!important}.ml-47{margin-left:47rem!important}.mr-47{margin-right:47rem!important}.p-47{padding:47rem!important}.pt-47{padding-top:47rem!important}.pb-47{padding-bottom:47rem!important}.pl-47{padding-left:47rem!important}.pr-47{padding-right:47rem!important}.w-48{width:48rem!important}.h-48{height:48rem!important}.m-48{margin:48rem!important}.mt-48{margin-top:48rem!important}.mb-48{margin-bottom:48rem!important}.ml-48{margin-left:48rem!important}.mr-48{margin-right:48rem!important}.p-48{padding:48rem!important}.pt-48{padding-top:48rem!important}.pb-48{padding-bottom:48rem!important}.pl-48{padding-left:48rem!important}.pr-48{padding-right:48rem!important}.w-49{width:49rem!important}.h-49{height:49rem!important}.m-49{margin:49rem!important}.mt-49{margin-top:49rem!important}.mb-49{margin-bottom:49rem!important}.ml-49{margin-left:49rem!important}.mr-49{margin-right:49rem!important}.p-49{padding:49rem!important}.pt-49{padding-top:49rem!important}.pb-49{padding-bottom:49rem!important}.pl-49{padding-left:49rem!important}.pr-49{padding-right:49rem!important}.w-50{width:50rem!important}.h-50{height:50rem!important}.m-50{margin:50rem!important}.mt-50{margin-top:50rem!important}.mb-50{margin-bottom:50rem!important}.ml-50{margin-left:50rem!important}.mr-50{margin-right:50rem!important}.p-50{padding:50rem!important}.pt-50{padding-top:50rem!important}.pb-50{padding-bottom:50rem!important}.pl-50{padding-left:50rem!important}.pr-50{padding-right:50rem!important}.w-51{width:51rem!important}.h-51{height:51rem!important}.m-51{margin:51rem!important}.mt-51{margin-top:51rem!important}.mb-51{margin-bottom:51rem!important}.ml-51{margin-left:51rem!important}.mr-51{margin-right:51rem!important}.p-51{padding:51rem!important}.pt-51{padding-top:51rem!important}.pb-51{padding-bottom:51rem!important}.pl-51{padding-left:51rem!important}.pr-51{padding-right:51rem!important}.w-52{width:52rem!important}.h-52{height:52rem!important}.m-52{margin:52rem!important}.mt-52{margin-top:52rem!important}.mb-52{margin-bottom:52rem!important}.ml-52{margin-left:52rem!important}.mr-52{margin-right:52rem!important}.p-52{padding:52rem!important}.pt-52{padding-top:52rem!important}.pb-52{padding-bottom:52rem!important}.pl-52{padding-left:52rem!important}.pr-52{padding-right:52rem!important}.w-53{width:53rem!important}.h-53{height:53rem!important}.m-53{margin:53rem!important}.mt-53{margin-top:53rem!important}.mb-53{margin-bottom:53rem!important}.ml-53{margin-left:53rem!important}.mr-53{margin-right:53rem!important}.p-53{padding:53rem!important}.pt-53{padding-top:53rem!important}.pb-53{padding-bottom:53rem!important}.pl-53{padding-left:53rem!important}.pr-53{padding-right:53rem!important}.w-54{width:54rem!important}.h-54{height:54rem!important}.m-54{margin:54rem!important}.mt-54{margin-top:54rem!important}.mb-54{margin-bottom:54rem!important}.ml-54{margin-left:54rem!important}.mr-54{margin-right:54rem!important}.p-54{padding:54rem!important}.pt-54{padding-top:54rem!important}.pb-54{padding-bottom:54rem!important}.pl-54{padding-left:54rem!important}.pr-54{padding-right:54rem!important}.w-55{width:55rem!important}.h-55{height:55rem!important}.m-55{margin:55rem!important}.mt-55{margin-top:55rem!important}.mb-55{margin-bottom:55rem!important}.ml-55{margin-left:55rem!important}.mr-55{margin-right:55rem!important}.p-55{padding:55rem!important}.pt-55{padding-top:55rem!important}.pb-55{padding-bottom:55rem!important}.pl-55{padding-left:55rem!important}.pr-55{padding-right:55rem!important}.w-56{width:56rem!important}.h-56{height:56rem!important}.m-56{margin:56rem!important}.mt-56{margin-top:56rem!important}.mb-56{margin-bottom:56rem!important}.ml-56{margin-left:56rem!important}.mr-56{margin-right:56rem!important}.p-56{padding:56rem!important}.pt-56{padding-top:56rem!important}.pb-56{padding-bottom:56rem!important}.pl-56{padding-left:56rem!important}.pr-56{padding-right:56rem!important}.w-57{width:57rem!important}.h-57{height:57rem!important}.m-57{margin:57rem!important}.mt-57{margin-top:57rem!important}.mb-57{margin-bottom:57rem!important}.ml-57{margin-left:57rem!important}.mr-57{margin-right:57rem!important}.p-57{padding:57rem!important}.pt-57{padding-top:57rem!important}.pb-57{padding-bottom:57rem!important}.pl-57{padding-left:57rem!important}.pr-57{padding-right:57rem!important}.w-58{width:58rem!important}.h-58{height:58rem!important}.m-58{margin:58rem!important}.mt-58{margin-top:58rem!important}.mb-58{margin-bottom:58rem!important}.ml-58{margin-left:58rem!important}.mr-58{margin-right:58rem!important}.p-58{padding:58rem!important}.pt-58{padding-top:58rem!important}.pb-58{padding-bottom:58rem!important}.pl-58{padding-left:58rem!important}.pr-58{padding-right:58rem!important}.w-59{width:59rem!important}.h-59{height:59rem!important}.m-59{margin:59rem!important}.mt-59{margin-top:59rem!important}.mb-59{margin-bottom:59rem!important}.ml-59{margin-left:59rem!important}.mr-59{margin-right:59rem!important}.p-59{padding:59rem!important}.pt-59{padding-top:59rem!important}.pb-59{padding-bottom:59rem!important}.pl-59{padding-left:59rem!important}.pr-59{padding-right:59rem!important}.w-60{width:60rem!important}.h-60{height:60rem!important}.m-60{margin:60rem!important}.mt-60{margin-top:60rem!important}.mb-60{margin-bottom:60rem!important}.ml-60{margin-left:60rem!important}.mr-60{margin-right:60rem!important}.p-60{padding:60rem!important}.pt-60{padding-top:60rem!important}.pb-60{padding-bottom:60rem!important}.pl-60{padding-left:60rem!important}.pr-60{padding-right:60rem!important}.w-61{width:61rem!important}.h-61{height:61rem!important}.m-61{margin:61rem!important}.mt-61{margin-top:61rem!important}.mb-61{margin-bottom:61rem!important}.ml-61{margin-left:61rem!important}.mr-61{margin-right:61rem!important}.p-61{padding:61rem!important}.pt-61{padding-top:61rem!important}.pb-61{padding-bottom:61rem!important}.pl-61{padding-left:61rem!important}.pr-61{padding-right:61rem!important}.w-62{width:62rem!important}.h-62{height:62rem!important}.m-62{margin:62rem!important}.mt-62{margin-top:62rem!important}.mb-62{margin-bottom:62rem!important}.ml-62{margin-left:62rem!important}.mr-62{margin-right:62rem!important}.p-62{padding:62rem!important}.pt-62{padding-top:62rem!important}.pb-62{padding-bottom:62rem!important}.pl-62{padding-left:62rem!important}.pr-62{padding-right:62rem!important}.w-63{width:63rem!important}.h-63{height:63rem!important}.m-63{margin:63rem!important}.mt-63{margin-top:63rem!important}.mb-63{margin-bottom:63rem!important}.ml-63{margin-left:63rem!important}.mr-63{margin-right:63rem!important}.p-63{padding:63rem!important}.pt-63{padding-top:63rem!important}.pb-63{padding-bottom:63rem!important}.pl-63{padding-left:63rem!important}.pr-63{padding-right:63rem!important}.w-64{width:64rem!important}.h-64{height:64rem!important}.m-64{margin:64rem!important}.mt-64{margin-top:64rem!important}.mb-64{margin-bottom:64rem!important}.ml-64{margin-left:64rem!important}.mr-64{margin-right:64rem!important}.p-64{padding:64rem!important}.pt-64{padding-top:64rem!important}.pb-64{padding-bottom:64rem!important}.pl-64{padding-left:64rem!important}.pr-64{padding-right:64rem!important}.w-65{width:65rem!important}.h-65{height:65rem!important}.m-65{margin:65rem!important}.mt-65{margin-top:65rem!important}.mb-65{margin-bottom:65rem!important}.ml-65{margin-left:65rem!important}.mr-65{margin-right:65rem!important}.p-65{padding:65rem!important}.pt-65{padding-top:65rem!important}.pb-65{padding-bottom:65rem!important}.pl-65{padding-left:65rem!important}.pr-65{padding-right:65rem!important}.w-66{width:66rem!important}.h-66{height:66rem!important}.m-66{margin:66rem!important}.mt-66{margin-top:66rem!important}.mb-66{margin-bottom:66rem!important}.ml-66{margin-left:66rem!important}.mr-66{margin-right:66rem!important}.p-66{padding:66rem!important}.pt-66{padding-top:66rem!important}.pb-66{padding-bottom:66rem!important}.pl-66{padding-left:66rem!important}.pr-66{padding-right:66rem!important}.w-67{width:67rem!important}.h-67{height:67rem!important}.m-67{margin:67rem!important}.mt-67{margin-top:67rem!important}.mb-67{margin-bottom:67rem!important}.ml-67{margin-left:67rem!important}.mr-67{margin-right:67rem!important}.p-67{padding:67rem!important}.pt-67{padding-top:67rem!important}.pb-67{padding-bottom:67rem!important}.pl-67{padding-left:67rem!important}.pr-67{padding-right:67rem!important}.w-68{width:68rem!important}.h-68{height:68rem!important}.m-68{margin:68rem!important}.mt-68{margin-top:68rem!important}.mb-68{margin-bottom:68rem!important}.ml-68{margin-left:68rem!important}.mr-68{margin-right:68rem!important}.p-68{padding:68rem!important}.pt-68{padding-top:68rem!important}.pb-68{padding-bottom:68rem!important}.pl-68{padding-left:68rem!important}.pr-68{padding-right:68rem!important}.w-69{width:69rem!important}.h-69{height:69rem!important}.m-69{margin:69rem!important}.mt-69{margin-top:69rem!important}.mb-69{margin-bottom:69rem!important}.ml-69{margin-left:69rem!important}.mr-69{margin-right:69rem!important}.p-69{padding:69rem!important}.pt-69{padding-top:69rem!important}.pb-69{padding-bottom:69rem!important}.pl-69{padding-left:69rem!important}.pr-69{padding-right:69rem!important}.w-70{width:70rem!important}.h-70{height:70rem!important}.m-70{margin:70rem!important}.mt-70{margin-top:70rem!important}.mb-70{margin-bottom:70rem!important}.ml-70{margin-left:70rem!important}.mr-70{margin-right:70rem!important}.p-70{padding:70rem!important}.pt-70{padding-top:70rem!important}.pb-70{padding-bottom:70rem!important}.pl-70{padding-left:70rem!important}.pr-70{padding-right:70rem!important}.w-71{width:71rem!important}.h-71{height:71rem!important}.m-71{margin:71rem!important}.mt-71{margin-top:71rem!important}.mb-71{margin-bottom:71rem!important}.ml-71{margin-left:71rem!important}.mr-71{margin-right:71rem!important}.p-71{padding:71rem!important}.pt-71{padding-top:71rem!important}.pb-71{padding-bottom:71rem!important}.pl-71{padding-left:71rem!important}.pr-71{padding-right:71rem!important}.w-72{width:72rem!important}.h-72{height:72rem!important}.m-72{margin:72rem!important}.mt-72{margin-top:72rem!important}.mb-72{margin-bottom:72rem!important}.ml-72{margin-left:72rem!important}.mr-72{margin-right:72rem!important}.p-72{padding:72rem!important}.pt-72{padding-top:72rem!important}.pb-72{padding-bottom:72rem!important}.pl-72{padding-left:72rem!important}.pr-72{padding-right:72rem!important}.w-73{width:73rem!important}.h-73{height:73rem!important}.m-73{margin:73rem!important}.mt-73{margin-top:73rem!important}.mb-73{margin-bottom:73rem!important}.ml-73{margin-left:73rem!important}.mr-73{margin-right:73rem!important}.p-73{padding:73rem!important}.pt-73{padding-top:73rem!important}.pb-73{padding-bottom:73rem!important}.pl-73{padding-left:73rem!important}.pr-73{padding-right:73rem!important}.w-74{width:74rem!important}.h-74{height:74rem!important}.m-74{margin:74rem!important}.mt-74{margin-top:74rem!important}.mb-74{margin-bottom:74rem!important}.ml-74{margin-left:74rem!important}.mr-74{margin-right:74rem!important}.p-74{padding:74rem!important}.pt-74{padding-top:74rem!important}.pb-74{padding-bottom:74rem!important}.pl-74{padding-left:74rem!important}.pr-74{padding-right:74rem!important}.w-75{width:75rem!important}.h-75{height:75rem!important}.m-75{margin:75rem!important}.mt-75{margin-top:75rem!important}.mb-75{margin-bottom:75rem!important}.ml-75{margin-left:75rem!important}.mr-75{margin-right:75rem!important}.p-75{padding:75rem!important}.pt-75{padding-top:75rem!important}.pb-75{padding-bottom:75rem!important}.pl-75{padding-left:75rem!important}.pr-75{padding-right:75rem!important}.w-76{width:76rem!important}.h-76{height:76rem!important}.m-76{margin:76rem!important}.mt-76{margin-top:76rem!important}.mb-76{margin-bottom:76rem!important}.ml-76{margin-left:76rem!important}.mr-76{margin-right:76rem!important}.p-76{padding:76rem!important}.pt-76{padding-top:76rem!important}.pb-76{padding-bottom:76rem!important}.pl-76{padding-left:76rem!important}.pr-76{padding-right:76rem!important}.w-77{width:77rem!important}.h-77{height:77rem!important}.m-77{margin:77rem!important}.mt-77{margin-top:77rem!important}.mb-77{margin-bottom:77rem!important}.ml-77{margin-left:77rem!important}.mr-77{margin-right:77rem!important}.p-77{padding:77rem!important}.pt-77{padding-top:77rem!important}.pb-77{padding-bottom:77rem!important}.pl-77{padding-left:77rem!important}.pr-77{padding-right:77rem!important}.w-78{width:78rem!important}.h-78{height:78rem!important}.m-78{margin:78rem!important}.mt-78{margin-top:78rem!important}.mb-78{margin-bottom:78rem!important}.ml-78{margin-left:78rem!important}.mr-78{margin-right:78rem!important}.p-78{padding:78rem!important}.pt-78{padding-top:78rem!important}.pb-78{padding-bottom:78rem!important}.pl-78{padding-left:78rem!important}.pr-78{padding-right:78rem!important}.w-79{width:79rem!important}.h-79{height:79rem!important}.m-79{margin:79rem!important}.mt-79{margin-top:79rem!important}.mb-79{margin-bottom:79rem!important}.ml-79{margin-left:79rem!important}.mr-79{margin-right:79rem!important}.p-79{padding:79rem!important}.pt-79{padding-top:79rem!important}.pb-79{padding-bottom:79rem!important}.pl-79{padding-left:79rem!important}.pr-79{padding-right:79rem!important}.w-80{width:80rem!important}.h-80{height:80rem!important}.m-80{margin:80rem!important}.mt-80{margin-top:80rem!important}.mb-80{margin-bottom:80rem!important}.ml-80{margin-left:80rem!important}.mr-80{margin-right:80rem!important}.p-80{padding:80rem!important}.pt-80{padding-top:80rem!important}.pb-80{padding-bottom:80rem!important}.pl-80{padding-left:80rem!important}.pr-80{padding-right:80rem!important}.w-81{width:81rem!important}.h-81{height:81rem!important}.m-81{margin:81rem!important}.mt-81{margin-top:81rem!important}.mb-81{margin-bottom:81rem!important}.ml-81{margin-left:81rem!important}.mr-81{margin-right:81rem!important}.p-81{padding:81rem!important}.pt-81{padding-top:81rem!important}.pb-81{padding-bottom:81rem!important}.pl-81{padding-left:81rem!important}.pr-81{padding-right:81rem!important}.w-82{width:82rem!important}.h-82{height:82rem!important}.m-82{margin:82rem!important}.mt-82{margin-top:82rem!important}.mb-82{margin-bottom:82rem!important}.ml-82{margin-left:82rem!important}.mr-82{margin-right:82rem!important}.p-82{padding:82rem!important}.pt-82{padding-top:82rem!important}.pb-82{padding-bottom:82rem!important}.pl-82{padding-left:82rem!important}.pr-82{padding-right:82rem!important}.w-83{width:83rem!important}.h-83{height:83rem!important}.m-83{margin:83rem!important}.mt-83{margin-top:83rem!important}.mb-83{margin-bottom:83rem!important}.ml-83{margin-left:83rem!important}.mr-83{margin-right:83rem!important}.p-83{padding:83rem!important}.pt-83{padding-top:83rem!important}.pb-83{padding-bottom:83rem!important}.pl-83{padding-left:83rem!important}.pr-83{padding-right:83rem!important}.w-84{width:84rem!important}.h-84{height:84rem!important}.m-84{margin:84rem!important}.mt-84{margin-top:84rem!important}.mb-84{margin-bottom:84rem!important}.ml-84{margin-left:84rem!important}.mr-84{margin-right:84rem!important}.p-84{padding:84rem!important}.pt-84{padding-top:84rem!important}.pb-84{padding-bottom:84rem!important}.pl-84{padding-left:84rem!important}.pr-84{padding-right:84rem!important}.w-85{width:85rem!important}.h-85{height:85rem!important}.m-85{margin:85rem!important}.mt-85{margin-top:85rem!important}.mb-85{margin-bottom:85rem!important}.ml-85{margin-left:85rem!important}.mr-85{margin-right:85rem!important}.p-85{padding:85rem!important}.pt-85{padding-top:85rem!important}.pb-85{padding-bottom:85rem!important}.pl-85{padding-left:85rem!important}.pr-85{padding-right:85rem!important}.w-86{width:86rem!important}.h-86{height:86rem!important}.m-86{margin:86rem!important}.mt-86{margin-top:86rem!important}.mb-86{margin-bottom:86rem!important}.ml-86{margin-left:86rem!important}.mr-86{margin-right:86rem!important}.p-86{padding:86rem!important}.pt-86{padding-top:86rem!important}.pb-86{padding-bottom:86rem!important}.pl-86{padding-left:86rem!important}.pr-86{padding-right:86rem!important}.w-87{width:87rem!important}.h-87{height:87rem!important}.m-87{margin:87rem!important}.mt-87{margin-top:87rem!important}.mb-87{margin-bottom:87rem!important}.ml-87{margin-left:87rem!important}.mr-87{margin-right:87rem!important}.p-87{padding:87rem!important}.pt-87{padding-top:87rem!important}.pb-87{padding-bottom:87rem!important}.pl-87{padding-left:87rem!important}.pr-87{padding-right:87rem!important}.w-88{width:88rem!important}.h-88{height:88rem!important}.m-88{margin:88rem!important}.mt-88{margin-top:88rem!important}.mb-88{margin-bottom:88rem!important}.ml-88{margin-left:88rem!important}.mr-88{margin-right:88rem!important}.p-88{padding:88rem!important}.pt-88{padding-top:88rem!important}.pb-88{padding-bottom:88rem!important}.pl-88{padding-left:88rem!important}.pr-88{padding-right:88rem!important}.w-89{width:89rem!important}.h-89{height:89rem!important}.m-89{margin:89rem!important}.mt-89{margin-top:89rem!important}.mb-89{margin-bottom:89rem!important}.ml-89{margin-left:89rem!important}.mr-89{margin-right:89rem!important}.p-89{padding:89rem!important}.pt-89{padding-top:89rem!important}.pb-89{padding-bottom:89rem!important}.pl-89{padding-left:89rem!important}.pr-89{padding-right:89rem!important}.w-90{width:90rem!important}.h-90{height:90rem!important}.m-90{margin:90rem!important}.mt-90{margin-top:90rem!important}.mb-90{margin-bottom:90rem!important}.ml-90{margin-left:90rem!important}.mr-90{margin-right:90rem!important}.p-90{padding:90rem!important}.pt-90{padding-top:90rem!important}.pb-90{padding-bottom:90rem!important}.pl-90{padding-left:90rem!important}.pr-90{padding-right:90rem!important}.w-91{width:91rem!important}.h-91{height:91rem!important}.m-91{margin:91rem!important}.mt-91{margin-top:91rem!important}.mb-91{margin-bottom:91rem!important}.ml-91{margin-left:91rem!important}.mr-91{margin-right:91rem!important}.p-91{padding:91rem!important}.pt-91{padding-top:91rem!important}.pb-91{padding-bottom:91rem!important}.pl-91{padding-left:91rem!important}.pr-91{padding-right:91rem!important}.w-92{width:92rem!important}.h-92{height:92rem!important}.m-92{margin:92rem!important}.mt-92{margin-top:92rem!important}.mb-92{margin-bottom:92rem!important}.ml-92{margin-left:92rem!important}.mr-92{margin-right:92rem!important}.p-92{padding:92rem!important}.pt-92{padding-top:92rem!important}.pb-92{padding-bottom:92rem!important}.pl-92{padding-left:92rem!important}.pr-92{padding-right:92rem!important}.w-93{width:93rem!important}.h-93{height:93rem!important}.m-93{margin:93rem!important}.mt-93{margin-top:93rem!important}.mb-93{margin-bottom:93rem!important}.ml-93{margin-left:93rem!important}.mr-93{margin-right:93rem!important}.p-93{padding:93rem!important}.pt-93{padding-top:93rem!important}.pb-93{padding-bottom:93rem!important}.pl-93{padding-left:93rem!important}.pr-93{padding-right:93rem!important}.w-94{width:94rem!important}.h-94{height:94rem!important}.m-94{margin:94rem!important}.mt-94{margin-top:94rem!important}.mb-94{margin-bottom:94rem!important}.ml-94{margin-left:94rem!important}.mr-94{margin-right:94rem!important}.p-94{padding:94rem!important}.pt-94{padding-top:94rem!important}.pb-94{padding-bottom:94rem!important}.pl-94{padding-left:94rem!important}.pr-94{padding-right:94rem!important}.w-95{width:95rem!important}.h-95{height:95rem!important}.m-95{margin:95rem!important}.mt-95{margin-top:95rem!important}.mb-95{margin-bottom:95rem!important}.ml-95{margin-left:95rem!important}.mr-95{margin-right:95rem!important}.p-95{padding:95rem!important}.pt-95{padding-top:95rem!important}.pb-95{padding-bottom:95rem!important}.pl-95{padding-left:95rem!important}.pr-95{padding-right:95rem!important}.w-96{width:96rem!important}.h-96{height:96rem!important}.m-96{margin:96rem!important}.mt-96{margin-top:96rem!important}.mb-96{margin-bottom:96rem!important}.ml-96{margin-left:96rem!important}.mr-96{margin-right:96rem!important}.p-96{padding:96rem!important}.pt-96{padding-top:96rem!important}.pb-96{padding-bottom:96rem!important}.pl-96{padding-left:96rem!important}.pr-96{padding-right:96rem!important}.w-97{width:97rem!important}.h-97{height:97rem!important}.m-97{margin:97rem!important}.mt-97{margin-top:97rem!important}.mb-97{margin-bottom:97rem!important}.ml-97{margin-left:97rem!important}.mr-97{margin-right:97rem!important}.p-97{padding:97rem!important}.pt-97{padding-top:97rem!important}.pb-97{padding-bottom:97rem!important}.pl-97{padding-left:97rem!important}.pr-97{padding-right:97rem!important}.w-98{width:98rem!important}.h-98{height:98rem!important}.m-98{margin:98rem!important}.mt-98{margin-top:98rem!important}.mb-98{margin-bottom:98rem!important}.ml-98{margin-left:98rem!important}.mr-98{margin-right:98rem!important}.p-98{padding:98rem!important}.pt-98{padding-top:98rem!important}.pb-98{padding-bottom:98rem!important}.pl-98{padding-left:98rem!important}.pr-98{padding-right:98rem!important}.w-99{width:99rem!important}.h-99{height:99rem!important}.m-99{margin:99rem!important}.mt-99{margin-top:99rem!important}.mb-99{margin-bottom:99rem!important}.ml-99{margin-left:99rem!important}.mr-99{margin-right:99rem!important}.p-99{padding:99rem!important}.pt-99{padding-top:99rem!important}.pb-99{padding-bottom:99rem!important}.pl-99{padding-left:99rem!important}.pr-99{padding-right:99rem!important}*{box-sizing:border-box}html{font-size:4px}.text-body,body,p{font-size:14px;line-height:24px}body{overflow:overlay;font-family:Work Sans,Helvetica Neue,Helvetica,Arial,sans-serif}.text-body,p{font-family:San Francisco Text,Helvetica Neue,Helvetica,Arial,sans-serif}ul.vanilla{list-style-type:none;padding:0;margin:0}ul.vanilla li{padding:0}a{cursor:pointer}a.vanilla{text-decoration:none}a.hoverline:hover{text-decoration:underline}form{margin:0}b{font-weight:600}.panini{border-top:4px solid #000;border-bottom:4px solid #000;height:16px;width:20px}.liang{border-radius:100%;width:9rem;height:9rem;border:3rem solid #9b9b9b}.cross{position:relative;display:inline-block;width:18px;height:18px}.cross:after,.cross:before{position:absolute;top:5px;width:20px;height:20px;border-top:4px solid #000;border-color:inherit;content:""}.cross:before{left:-8px;transform:rotate(45deg)}.cross:after{left:6px;transform:rotate(-45deg)}.circle{padding:0;border-width:8px;height:30px;width:30px;position:relative;top:3px}.icon-text{position:relative;width:16px;height:16px;border:5px solid #ffbf21}.icon-text-topic{position:absolute;top:3px;left:3px;width:9px;height:9px;clip-path:polygon(50% 2.4%,0 38.8%,19.1% 97.6%,80.9% 97.6%,100% 38.8%);background-color:#fff}.icon-dm{height:12px;width:12px;background-color:#fd5331}.icon-chat{width:16px;height:16px;border-radius:16px;border:5px solid #4330fc}.icon-inbox{width:15px;height:12px;border-radius:12px;background-color:#000}.text-gray{color:#9b9b9b}.text-black{color:#000!important}.red,.red *{color:#ee3124}.timestamp{font-size:9px;font-family:Source Code Pro,Roboto mono,Courier New,monospace;font-weight:300}.flex{display:flex}.inline-block{display:inline-block}.space-between{justify-content:space-between}.align-center{align-items:center}.pointer{cursor:pointer}.hide{display:none}.relative{position:relative}.inline{display:inline}.block{display:block}input[type=text],label,textarea{font-size:14px;line-height:24px;border:none;outline:none;padding:0;font-family:San Francisco Text,arial}.select-dropdown[disabled],button[disabled],input[disabled],label[disabled],select[disabled],textarea[disabled]{opacity:.4;border-color:#aaa}input.input-sm{font-size:3rem;padding:6px;border-width:1px}label{margin-bottom:2rem}.input-group{padding:10px}.input-group label{font-size:14px;font-weight:600}.btn{margin-bottom:0}.btn-spinner{position:relative;display:inline-block;width:10px;height:10px}.btn-spinner:after{position:absolute;width:8px;height:8px;bottom:0;content:"◠";animation:a linear 1s infinite;font-size:10px;line-height:10px}.btn-spinner-lg{font-size:32px;font-weight:700;color:#4330fc}.btn-text{padding:0;background-color:inherit}@keyframes a{to{transform:rotate(1turn)}}body{padding-bottom:40px}.header-container{padding-top:3rem;padding-bottom:2rem}.header-title,.header-title *{text-decoration:none;font-weight:600;margin:0;font-size:24px;line-height:48px}.header-title-mono,.header-title-mono *{font-weight:500;font-family:Source Code Pro,Roboto mono,Courier New,monospace}.header-link{font-size:3rem;line-height:3rem;font-weight:500;font-family:Work Sans,Helvetica Neue,Helvetica,Arial,sans-serif;text-decoration:none;text-transform:capitalize}.header-link-breadcrumb,.header-link-breadcrumb *{line-height:6rem;text-transform:none;text-decoration:none;font-weight:400;font-family:Source Code Pro,Roboto mono,Courier New,monospace}.header-breadcrumbs{height:24px;margin-bottom:0}.header-mainrow{position:relative}.page-status{left:0;top:94px;background-color:#999}.page-status,.page-status:after{position:absolute;border-radius:100%;height:18px;width:18px}.page-status:after{content:"";background-color:#ccc;clip:rect(0,18px,18px,9px);animation:a 2s linear infinite}.page-status-primary{background-color:#4330fc}.page-status-primary:after{background-color:#d8d5fe}.page-status-secondary{background-color:#6fdc74}.page-status-secondary:after{background-color:#e2f8e3}.page-status-tertiary{background-color:#ee3124;cursor:pointer}.page-status-tertiary:after{background-color:#fbd5d3;cursor:pointer}.page-status-tertiary:before{position:absolute;top:24px;color:red;content:"retry";font-family:Source Code Pro;text-decoration:underline;cursor:pointer}.page-status-quaternary{background-color:#fd7a31}.page-status-quaternary:after{background-color:#febc98}.sidebar{position:absolute;right:24rem;top:48rem}.flex-1st{flex-basis:106px}.flex-2nd{flex-basis:52px}.flex-3rd{flex-basis:0;flex-grow:1}.chat-container .col-sm-2{flex-basis:43rem;max-width:43rem}.chat-input-field[type=text]{border:none;padding:0;line-height:6rem}.chat-input-field:placeholder{color:#b0b0b0}.chat-sep{text-align:center;font-weight:600;margin:4rem}.chat-msg-pending,.chat-msg-pending *{color:#aaa}.chat-msg-app,.chat-msg-app *{color:#9b9b9b}.cir-status{width:2rem;height:2rem;border-radius:100%;display:inline-block;position:relative;bottom:1px}.cir-green{background-color:#8eee9c}.cir-black,.cir-grey{background-color:#b0b0b0}.cir-red{background-color:#f44}.chat-scrollpane-view{display:flex;flex-direction:column}.chat-scrollpane img{width:100%}.chat-scrollpane-view>*{flex-shrink:0}.chat-scrollpane-view>:first-child{margin-top:auto!important}.scrollpane{height:600px;overflow-y:scroll;overflow-x:hidden;display:flex;flex-direction:column}.scrollpane>*{flex-shrink:0}.scrollpane>:first-child{margin-top:auto!important}.page-notes-edit textarea{border:none;height:800px}.page-notes-index h1{margin-top:0}.notes-actions .btn-secondary{margin-right:10rem}.note-timestamp{position:absolute;left:-16rem;top:3rem}.notes-blurbs{margin-top:8rem}.notes-blurbs li{display:flex;position:relative;margin:4rem 0}textarea.collection-post-edit{height:80%;border:1px solid #d0d0d0;background:#fff;resize:none;padding:13rem 21rem}textarea.comment-edit{border:none;resize:none;padding:0}.create-comment .usership{color:#000}div.coll-title,div.mod{font-size:6rem}.collection-index li.forum .meta-cont>div{float:left}.collection-index li.notes .da{position:absolute;margin-left:-12rem;margin-top:1rem}.collection-index .note-uuid{font-weight:inherit}.collection-index img{width:100%}.collection-index ul{list-style-type:none}.post img{width:100%}.post #edit{display:none}.collection-date{font-family:Source Code Pro,Roboto mono,Courier New,monospace;font-weight:300;font-size:3rem;line-height:3rem}.collection-title{position:relative}.collection-edit:before,.collection-post:before,.collection-title:before{content:"";background-color:#0a7960;border-radius:1px;width:2rem;height:2rem;position:absolute}.collection-post:before{margin-top:35px;margin-left:-11rem}.collection-title:before{margin-top:22px;margin-left:-10rem}.collection-edit:before{margin-left:-11rem}.collection-post h3{font-weight:500;line-height:9rem}.collection-post-page{padding-top:12rem}.collection-comment{margin-bottom:11rem;position:relative}.collection-comment-avatar{position:absolute;left:-12rem;top:7px;width:32px;height:32px}.collection-comment-author{font-size:14px;line-height:24px;text-decoration:none;font-weight:700}.collection-post-actions{justify-content:flex-end;display:flex;align-items:center}.form-mve .input-group-focused,.form-mve .input-group-focused input,.form-mve .input-group-focused textarea{background-color:#f6f6f6}.form-mve .input-group-error-message{display:none}.form-mve .input-group-error *{color:#ee3124}.form-mve .input-group-error input::placeholder{color:#ee3124;opacity:.3}.form-mve .input-group-error .input-group-error-message{display:block}.form-mve .btn-text{padding-left:3rem;padding-right:3rem}.form-mve .btn-text:focus span:first-child{text-decoration:underline}.command-row{height:50px;display:flex;align-items:center;position:relative;margin-top:9rem;margin-bottom:3rem}.command-row .cross{flex-basis:146px;flex-shrink:0}.command-input-placeholder-wrapper,input.command-menu-input{position:relative;border:none;outline:none;height:50px;width:100%;font-size:20px;line-height:50px;font-family:Source Code Pro,Roboto mono,Courier New,monospace}input.command-menu-input{background-color:transparent;z-index:2;padding:0 3rem;font-weight:500}input.command-menu-input[disabled]{opacity:1}.command-input-placeholder-wrapper{background-color:#f6f6f6}.command-input-placeholder-wrapper[disabled]{background-color:transparent}.command-input-placeholder-wrapper:after{content:attr(data-placeholder);position:absolute;top:0;left:0;right:0;z-index:1;white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden;padding:0 3rem;color:#9b9b9b;font-weight:400}.command-options{margin-left:146px;margin-top:30px}.command-item{padding:3rem;cursor:pointer}.command-item-selected{background-color:#f6f6f6}.command-help a{display:block}.profile-shipname{display:flex;align-items:center;font-size:28px;font-weight:600;height:64px;font-family:Source Code Pro,Roboto mono,Courier New,monospace}.profile-message-btn{background:#fff;display:inline-block}.inbox-page .icon{position:relative;left:10px;top:5px}.inbox-page .timestamp{position:relative;left:6px}.inbox-page img{width:100%}.inbox-page .invite .btn{float:right}.inbox-page .collection-preview h1:first-child{display:none}.inbox-link{font-weight:500;color:#777}.inbox-link-active{color:#000} \ No newline at end of file diff --git a/web/landscape/js/index.js b/web/landscape/js/index.js index 32ce8b668..1f68b47f7 100644 --- a/web/landscape/js/index.js +++ b/web/landscape/js/index.js @@ -51064,536 +51064,9 @@ var PAGE_STATUS_PROCESSING = "page status processing"; var PAGE_STATUS_DISCONNECTED = "page status disconnected"; var PAGE_STATUS_RECONNECTING = "page status reconnecting"; var REPORT_PAGE_STATUS = "report page status update"; - -function capitalize(str) { - return "".concat(str[0].toUpperCase()).concat(str.substr(1)); -} -function getQueryParams() { - if (window.location.search !== "") { - return JSON.parse('{"' + decodeURI(window.location.search.substr(1).replace(/&/g, "\",\"").replace(/=/g, "\":\"")) + '"}'); - } else { - return {}; - } -} -function getLoadingClass(storeTransition) { - return classnames({ - 'hide': storeTransition === PAGE_STATUS_READY, - 'page-status': storeTransition !== PAGE_STATUS_READY, - 'page-status-primary': storeTransition === PAGE_STATUS_TRANSITIONING, - 'page-status-secondary': storeTransition === PAGE_STATUS_PROCESSING, - 'page-status-tertiary': storeTransition === PAGE_STATUS_DISCONNECTED, - 'page-status-quaternary': storeTransition === PAGE_STATUS_RECONNECTING - }); -} -/* - Goes from: - 1531943107869 // "javascript unix time" - To: - "48711y 2w 5d 11m 9s" // "stringified time increments" -*/ - -function secToString(secs) { - if (secs <= 0) { - return 'Completed'; - } - - secs = Math.floor(secs); - var min = 60; - var hour = 60 * min; - var day = 24 * hour; - var week = 7 * day; - var year = 52 * week; - - var fy = function fy(s) { - if (s < year) { - return ['', s]; - } else { - return [Math.floor(s / year) + 'y', s % year]; - } - }; - - var fw = function fw(tup) { - var str = tup[0]; - var sec = tup[1]; - - if (sec < week) { - return [str, sec]; - } else { - return [str + ' ' + Math.floor(sec / week) + 'w', sec % week]; - } - }; - - var fd = function fd(tup) { - var str = tup[0]; - var sec = tup[1]; - - if (sec < day) { - return [str, sec]; - } else { - return [str + ' ' + Math.floor(sec / day) + 'd', sec % day]; - } - }; - - var fh = function fh(tup) { - var str = tup[0]; - var sec = tup[1]; - - if (sec < hour) { - return [str, sec]; - } else { - return [str + ' ' + Math.floor(sec / hour) + 'h', sec % hour]; - } - }; - - var fm = function fm(tup) { - var str = tup[0]; - var sec = tup[1]; - - if (sec < min) { - return [str, sec]; - } else { - return [str + ' ' + Math.floor(sec / min) + 'm', sec % min]; - } - }; - - var fs = function fs(tup) { - var str = tup[0]; - var sec = tup[1]; - return str + ' ' + sec + 's'; - }; - - return fs(fm(fh(fd(fw(fy(secs)))))).trim(); -} -function collectionAuthorization(stationDetails, usership) { - if (stationDetails.host === usership) { - return "write"; - } else if (lodash.has(stationDetails, "config.con.sec")) { - var sec = lodash.get(stationDetails, "config.con.sec", null); - - if (sec === "journal") { - return "write"; - } - } - - return "read"; -} -function uuid() { - var str = "0v"; - str += Math.ceil(Math.random() * 8) + "."; - - for (var i = 0; i < 5; i++) { - var _str = Math.ceil(Math.random() * 10000000).toString(32); - - _str = ("00000" + _str).substr(-5, 5); - str += _str + "."; - } - - return str.slice(0, -1); -} -function parseCollCircle(st) { - var sp = st.split('/'); - var pax = sp[1].split('-'); - pax.shift(); - pax = ['web', 'collections'].concat(pax); - var r = { - ship: sp[0], - path: pax, - name: pax[pax.length - 1] - }; - return r; -} -function isPatTa(str) { - var r = /^[a-z,0-9,\-,\.,_,~]+$/.exec(str); - return !!r; -} -function isValidStation(st) { - var tokens = st.split("/"); - if (tokens.length !== 2) return false; - return urbitOb.isShip(tokens[0]) && isPatTa(tokens[1]); -} -/* - Goes from: - ~2018.7.17..23.15.09..5be5 // urbit @da - To: - (javascript Date object) -*/ - -function daToDate(st) { - var dub = function dub(n) { - return parseInt(n) < 10 ? "0" + parseInt(n) : n.toString(); - }; - - var da = st.split('..'); - var bigEnd = da[0].split('.'); - var lilEnd = da[1].split('.'); - var ds = "".concat(bigEnd[0].slice(1), "-").concat(dub(bigEnd[1]), "-").concat(dub(bigEnd[2]), "T").concat(dub(lilEnd[0]), ":").concat(dub(lilEnd[1]), ":").concat(dub(lilEnd[2]), "Z"); - return new Date(ds); -} -/* - Goes from: - (javascript Date object) - To: - ~2018.7.17..23.15.09..5be5 // urbit @da -*/ - -function dateToDa(d, mil) { - var fil = function fil(n) { - return n >= 10 ? n : "0" + n; - }; - - return "~".concat(d.getUTCFullYear(), ".") + "".concat(d.getUTCMonth() + 1, ".") + "".concat(fil(d.getUTCDate()), "..") + "".concat(fil(d.getUTCHours()), ".") + "".concat(fil(d.getUTCMinutes()), ".") + "".concat(fil(d.getUTCSeconds())) + "".concat(mil ? "..0000" : ""); -} // ascending for clarity - -function sortSrc(circleArray) { - var sc = circleArray.map(function (c) { - return util.parseCollCircle(c); - }).filter(function (pc) { - return typeof pc != 'undefined' && typeof pc.top == 'undefined'; - }); - return sc.map(function (src) { - return src.coll; - }).sort(function (a, b) { - return util.daToDate(a) - util.daToDate(b); - }); -} -function arrayEqual(a, b) { - if (a === b) return true; - if (a == null || b == null) return false; - if (a.length != b.length) return false; // If you don't care about the order of the elements inside - // the array, you should sort both arrays here. - - for (var i = 0; i < a.length; ++i) { - if (a[i] !== b[i]) return false; - } - - return true; -} - -function deSig(ship) { - return ship.replace('~', ''); -} // use urbit.org proxy if it's not on our ship - - -function foreignUrl(shipName, own, urlFrag) { - if (deSig(shipName) != deSig(own)) { - return "http://".concat(deSig(shipName), ".urbit.org").concat(urlFrag); - } else { - return urlFrag; - } -} // shorten comet names - -function prettyShip(ship) { - var sp = ship.split('-'); - return [sp.length == 9 ? "".concat(sp[0], "_").concat(sp[8]) : ship, ship[0] === '~' ? "/~~/".concat(ship, "/==/web/landscape/profile") : "/~~/~".concat(ship, "/==/web/landscape/profile")]; -} -function profileUrl(ship) { - return "/~~/~".concat(ship, "/==/web/landscape/profile"); -} -function isDMStation(station) { - var host = station.split('/')[0].substr(1); - var circle = station.split('/')[1]; - return station.indexOf('.') !== -1 && circle.indexOf(host) !== -1; -} -function calculateStations(configs) { - var numSubs = Object.keys(configs).filter(function (sta) { - return !isDMStation(sta) && !sta.includes("inbox"); - }).length; - var numDMs = Object.keys(configs).filter(function (sta) { - return isDMStation(sta); - }).length; - var numString = []; - if (numSubs) numString.push("".concat(numSubs, " subscriptions")); - if (numDMs) numString.push("".concat(numDMs, " DMs")); - numString = numString.join(", "); - return numString; -} -function getStationDetails(station) { - var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var usership = arguments.length > 2 ? arguments[2] : undefined; - var host = station.split("/")[0].substr(1); - var ret = { - type: "none", - station: station, - config: config, - host: host, - cir: station.split("/")[1], - hostProfileUrl: profileUrl(host) - }; - var collParts = parseCollCircle(station); - - if (station.includes("inbox")) { - ret.type = "inbox"; - } else if (isDMStation(station)) { - ret.type = "dm"; - } else if (station.includes("/c")) { - ret.type = "collection"; - } else { - ret.type = "chat"; - } - - switch (ret.type) { - case "inbox": - ret.stationUrl = "/~~/landscape"; - ret.stationTitle = ret.cir; - break; - - case "chat": - ret.stationUrl = "/~~/landscape/stream?station=".concat(station); - ret.stationDetailsUrl = "/~~/landscape/stream/details?station=".concat(station); - ret.stationTitle = ret.cir; - break; - - case "dm": - if (config.con) { - ret.stationTitle = ret.cir.split(".").filter(function (mem) { - return mem !== usership; - }).map(function (mem) { - return "~".concat(mem); - }).join(", "); - - } else { - ret.stationTitle = "unknown"; - } - - ret.stationUrl = "/~~/landscape/stream?station=".concat(station); - break; - - case "collection": - ret.path = collParts.path; - ret.stationUrl = "/~~/~".concat(ret.host, "/==/").concat(collParts.path.join('/')); - ret.stationTitle = collParts.name; - break; - } - - return ret; -} -function getMessageContent(msg) { - var ret; - var MESSAGE_TYPES = { - 'sep.app.sep.fat.sep.lin.msg': 'app', - 'sep.app.sep.lin.msg': 'app', - 'sep.fat': function sepFat(msg) { - var type = msg.sep.fat.tac.text; - var station = msg.aud[0]; - var stationDetails = getStationDetails(station); - var jason = JSON.parse(msg.sep.fat.sep.lin.msg); - var content = type.includes('collection') ? null : jason.content; - var par = jason.path.slice(0, -1); - return { - type: msg.sep.fat.tac.text, - contentType: jason.type, - content: content, - owner: jason.owner, - date: jason.date, - path: jason.path, - postTitle: jason.name, - postUrl: "/~~/".concat(jason.owner, "/==/").concat(jason.path.join('/')), - parentTitle: jason.path.slice(-2, -1), - parentUrl: "/~~/".concat(jason.owner, "/==/").concat(jason.path.slice(0, -1).join('/')) - }; - }, - 'sep.inv.cir': 'inv', - 'sep.lin.msg': 'lin', - 'sep.url': 'url', - 'sep.exp': function sepExp(msg) { - return { - type: "exp", - content: msg.sep.exp.exp, - res: msg.sep.exp.res.join('\n') - }; - } - }; - Object.arrayify(MESSAGE_TYPES).some(function (_ref) { - var key = _ref.key, - value = _ref.value; - - if (lodash.has(msg, key)) { - if (typeof value === "string") { - ret = { - type: value, - content: lodash.get(msg, key) - }; - } else if (typeof value === "function") { - ret = value(msg); - } - - return true; - } - }); - - if (typeof ret === "undefined") { - ret = { - type: "unknown" - }; - console.log("ASSERT: unknown message type on ", msg); - } - - return ret; -} -function getSubscribedStations(ship, storeConfigs) { - var inbox = storeConfigs["~".concat(ship, "/inbox")]; - if (!inbox) return null; - var stationDetailList = inbox.src.map(function (station) { - if (!storeConfigs[station]) return null; - return getStationDetails(station, storeConfigs[station], ship); - }).filter(function (station) { - return station !== null; - }); - var ret = { - chatStations: stationDetailList.filter(function (d) { - return d.type === "chat"; - }), - collStations: stationDetailList.filter(function (d) { - return d.type === "collection"; - }), - dmStations: stationDetailList.filter(function (d) { - return d.type === "dm"; - }) - }; - var numSubs = ret.chatStations.length + ret.collStations.length; - var numDMs = ret.dmStations.length; - var numString = []; - if (numSubs > 0) numString.push("".concat(numSubs, " subscriptions")); - if (numDMs > 0) numString.push("".concat(numDMs, " DMs")); - ret.numString = numString.join(", "); - return ret; -} // maybe do fancier stuff later - -function isUrl(string) { - var r = /^http|^www|\.com$/.exec(string); - - if (r) { - return true; - } else { - return false; - } -} - -var util$1 = Object.freeze({ - capitalize: capitalize, - getQueryParams: getQueryParams, - getLoadingClass: getLoadingClass, - secToString: secToString, - collectionAuthorization: collectionAuthorization, - uuid: uuid, - parseCollCircle: parseCollCircle, - isPatTa: isPatTa, - isValidStation: isValidStation, - daToDate: daToDate, - dateToDa: dateToDa, - sortSrc: sortSrc, - arrayEqual: arrayEqual, - foreignUrl: foreignUrl, - prettyShip: prettyShip, - profileUrl: profileUrl, - isDMStation: isDMStation, - calculateStations: calculateStations, - getStationDetails: getStationDetails, - getMessageContent: getMessageContent, - getSubscribedStations: getSubscribedStations, - isUrl: isUrl -}); - -var UrbitApi = -/*#__PURE__*/ -function () { - function UrbitApi() { - _classCallCheck(this, UrbitApi); - } - - _createClass(UrbitApi, [{ - key: "setAuthTokens", - value: function setAuthTokens(authTokens) { - this.authTokens = authTokens; - } // keep default bind to hall, since its bind procedure more complex for now AA - - }, { - key: "bind", - value: function bind(path, method) { - var ship = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.authTokens.ship; - var appl = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "hall"; - console.log('binding to ...', appl, ", path: ", path, ", as ship: ", ship, ", by method: ", method); - var params = { - appl: appl, - mark: "json", - oryx: this.authTokens.oryx, - ship: ship, - path: path, - wire: path - }; - return fetch("/~/is/~".concat(ship, "/").concat(appl).concat(path, ".json?").concat(method), { - credentials: "same-origin", - method: "POST", - body: JSON.stringify(params) - }); - } - }, { - key: "hall", - value: function hall(data, transition) { - this.action("hall", "hall-action", data, transition); - } - }, { - key: "coll", - value: function coll(data, transition) { - this.action("collections", "collections-action", data, transition); - } - }, { - key: "action", - value: function action(appl, mark, data, transition) { - var params = { - appl: appl, - mark: mark, - oryx: this.authTokens.oryx, - ship: this.authTokens.ship, - wire: "/", - xyro: data - }; - fetch("/~/to/".concat(appl, "/").concat(mark), { - credentials: "same-origin", - method: "POST", - body: JSON.stringify(params) - }); - } - /* - Special actions - */ - - }, { - key: "permit", - value: function permit(nom, aud, message) { - this.hall({ - permit: { - nom: nom, - sis: aud, - inv: true - } - }); - - if (message) { - var audInboxes = aud.map(function (aud) { - return "~".concat(aud, "/inbox"); - }); - var inviteMessage = { - aud: audInboxes, - ses: [{ - inv: { - inv: true, - cir: "~".concat(this.authTokens.ship, "/").concat(nom) - } - }] - }; - this.hall({ - phrase: inviteMessage - }); - } - } - }]); - - return UrbitApi; -}(); - -var api$1 = new UrbitApi(); -window.api = api$1; +var AGGREGATOR_COLL = "c"; +var AGGREGATOR_INBOX = "inbox"; +var AGGREGATOR_NAMES = [AGGREGATOR_INBOX, AGGREGATOR_COLL]; var INBOX_MESSAGE_COUNT = 30; var MessagesReducer = @@ -51609,7 +51082,8 @@ function () { var _this = this; reports.forEach(function (rep) { - var fromInbox = rep.from && rep.from.path.includes("inbox"); + var fromCircle = rep.from && rep.from.path.split("/")[2]; + var fromInbox = fromCircle === "inbox"; switch (rep.type) { case "circle.nes": @@ -51628,7 +51102,8 @@ function () { case "circle.cos.loc": if (fromInbox) { - store.messages.inboxSrc = rep.data.src; + store.messages.inbox.config = rep.data; + store.messages.inbox.src = rep.data.src; _this.storeInboxMessages(store); } @@ -51638,9 +51113,9 @@ function () { case "circle.config.dif.source": if (fromInbox) { if (rep.data.add) { - store.messages.inboxSrc = _toConsumableArray(store.messages.inboxSrc).concat([rep.data.src]); + store.messages.inbox.src = _toConsumableArray(store.messages.inbox.src).concat([rep.data.src]); } else { - store.messages.inboxSrc = store.messages.inboxSrc.filter(function (src) { + store.messages.inbox.src = store.messages.inbox.src.filter(function (src) { return src !== rep.data.src; }); } @@ -51655,7 +51130,12 @@ function () { }, { key: "processMessages", value: function processMessages(messages, store) { - this.storeStationMessages(messages, store); + var msgs = messages.filter(function (m) { + return !m.gam.aud.some(function (st) { + return isRootCollection(st); + }); + }); + this.storeStationMessages(msgs, store); this.storeInboxMessages(store); } // TODO: Make this more like storeInboxMessages @@ -51699,7 +51179,7 @@ function () { value: function storeInboxMessages(store) { var _this2 = this; - var messages = store.messages.inboxSrc.reduce(function (msgs, src) { + var messages = store.messages.inbox.src.reduce(function (msgs, src) { var msgGroup = store.messages.stations[src]; if (!msgGroup) return msgs; return msgs.concat(msgGroup.filter(_this2.filterInboxMessages)); // filter out app & accepted invite msgs @@ -51719,7 +51199,7 @@ function () { // } - store.messages.inboxMessages = ret; + store.messages.inbox.messages = ret; } // Filter out of inbox: // - app messages // - accepted invites @@ -51818,10 +51298,6 @@ function () { Object.keys(configs).forEach(function (cos) { storeConfigs[cos] = storeConfigs[cos] || {}; Object.assign(storeConfigs[cos], configs[cos]); - - if (cos.includes('inbox')) { - storeConfigs["inbox"] = configs[cos]; - } }); } }, { @@ -51873,13 +51349,13 @@ function () { switch (rep.type) { case REPORT_PAGE_STATUS: // Don't let any state other than "READY" or "RECONNECTNG" override the disconnected state - var isDisconnected = store.views.transition === PAGE_STATUS_DISCONNECTED; - var readyOrReconnecting = rep.data === PAGE_STATUS_READY || rep.data === PAGE_STATUS_RECONNECTING; - - if (!isDisconnected || readyOrReconnecting) { - store.views.transition = rep.data; - } - + // let isDisconnected = store.views.transition === PAGE_STATUS_DISCONNECTED; + // let readyOrReconnecting = rep.data === PAGE_STATUS_READY || rep.data === PAGE_STATUS_RECONNECTING; + // + // if (!isDisconnected || readyOrReconnecting) { + // store.views.transition = rep.data; + // } + store.views.transition = rep.data; break; } }); @@ -51920,7 +51396,7 @@ function () { Object.arrayify(rep.data).forEach(function (_ref) { var station = _ref.key, config = _ref.value; - var details = getStationDetails(station, config); + var details = getStationDetails(station); if (ships[details.host]) { ships[details.host] = lodash.uniq(ships[details.host].concat(details.cir)); @@ -52003,11 +51479,14 @@ function () { Object.arrayify(ships).forEach(function (_ref2) { var ship = _ref2.key, stations = _ref2.value; + var sttns = stations.filter(function (s) { + return s !== "c"; + }); if (!_storeNames[ship]) { - _storeNames[ship] = stations; + _storeNames[ship] = sttns; } else { - _storeNames[ship] = lodash.uniq(stations.concat(_storeNames[ship])); + _storeNames[ship] = lodash.uniq(sttns.concat(_storeNames[ship])); } }); } @@ -52100,47 +51579,6 @@ function () { return DmsReducer; }(); -// import { router } from '/router'; - -function createDMStation(station, foreign) { - var circle = station.split("/")[1]; - var everyoneElse = circle.split(".").filter(function (ship) { - return ship !== api$1.authTokens.ship; - }); - api$1.hall({ - create: { - nom: circle, - des: "dm", - sec: "village" - } - }); - warehouse.pushCallback("circles", function (rep) { - api$1.hall({ - source: { - nom: 'inbox', - sub: true, - srs: ["~".concat(api$1.authTokens.ship, "/").concat(rep.data.cir)] - } - }); - }); - warehouse.pushCallback("circle.config.dif.full", function (rep) { - api$1.permit(circle, everyoneElse, !foreign); - }); - - if (foreign) { - warehouse.pushCallback("circle.config.dif.full", function (rep) { - api$1.hall({ - source: { - nom: circle, - sub: true, - srs: [station] - } - }); - }); - } -} - -var LONGPOLL_TIMEOUT = 10000; /** Response format @@ -52186,7 +51624,7 @@ function () { this.runPoll(); this.bindInbox(); this.bindShortcuts(); - this.bindOperations(); + this.bindQuietDmInvites(); } else { console.error("~~~ ERROR: Must set api.authTokens before operation ~~~"); } @@ -52201,8 +51639,7 @@ function () { if (details.type === "inv" && isDMStation(xenoStation) && xenoStation !== "~zod/null") { var circle = xenoStation.split("/")[1]; - if (!warehouse.store.dms.stations.includes(circle)) { - createDMStation(xenoStation, true); + if (!warehouse.store.dms.stations.includes(circle)) {// createDMStation(xenoStation, true); } var newSep = { @@ -52221,8 +51658,8 @@ function () { }); } }, { - key: "bindOperations", - value: function bindOperations() { + key: "bindQuietDmInvites", + value: function bindQuietDmInvites() { var _this = this; // Automatically accept DM invite messages @@ -52258,7 +51695,9 @@ function () { api$1.bind("/circles/~".concat(api$1.authTokens.ship), "PUT"); warehouse.pushCallback('circles', function (rep) { // inbox local + remote configs, remote presences - api$1.bind("/circle/inbox/config/group-r/0", "PUT"); // inbox messages + api$1.bind("/circle/inbox/config/group-r/0", "PUT"); // grab the config for the root collection circle + + api$1.bind("/circle/c/config/group-r/0", "PUT"); // inbox messages api$1.bind("/circle/inbox/grams/-50", "PUT"); return true; @@ -52276,29 +51715,28 @@ function () { value: function runPoll() { var _this2 = this; - console.log('fetching... ', this.seqn); - var controller = new AbortController(); - var disconnectedTimeout = setTimeout(function () { - controller.abort(); - warehouse.storeReports([{ - type: REPORT_PAGE_STATUS, - data: PAGE_STATUS_DISCONNECTED - }]); + console.log('fetching... ', this.seqn); // const controller = new AbortController(); + // const signal = controller.signal; + // const disconnectedTimeout = setTimeout(() => { + // controller.abort(); + // warehouse.storeReports([{ + // type: REPORT_PAGE_STATUS, + // data: PAGE_STATUS_DISCONNECTED + // }]); + // this.runPoll(); + // }, LONGPOLL_TIMEOUT); - _this2.runPoll(); - }, LONGPOLL_TIMEOUT); fetch("/~/of/".concat(api$1.authTokens.ixor, "?poll=").concat(this.seqn), { - credentials: "same-origin", - signal: controller.signal + credentials: "same-origin" // signal: controller.signal + }).then(function (res) { return res.json(); }).then(function (data) { - warehouse.storeReports([{ - type: REPORT_PAGE_STATUS, - data: PAGE_STATUS_READY - }]); - clearTimeout(disconnectedTimeout); - + // warehouse.storeReports([{ + // type: REPORT_PAGE_STATUS, + // data: PAGE_STATUS_READY + // }]); + // clearTimeout(disconnectedTimeout); if (data.beat) { console.log('beat'); @@ -52315,12 +51753,13 @@ function () { _this2.runPoll(); } }).catch(function (error) { - console.error('error = ', error); - warehouse.storeReports([{ - type: REPORT_PAGE_STATUS, - data: PAGE_STATUS_DISCONNECTED - }]); - clearTimeout(disconnectedTimeout); // TODO: Make this reconnect automatically + console.error('error = ', error); // warehouse.storeReports([{ + // type: REPORT_PAGE_STATUS, + // data: PAGE_STATUS_DISCONNECTED + // }]); + // + // clearTimeout(disconnectedTimeout); + // TODO: Make this reconnect automatically // setTimeout(() => { // this.runPoll(); // }, LONGPOLL_TRYAGAIN); @@ -52509,17 +51948,18 @@ function (_Component) { _createClass(Header, [{ key: "isSubscribed", value: function isSubscribed(station) { - var inbox = this.props.store.configs["~".concat(this.props.api.authTokens.ship, "/inbox")]; - if (!inbox) return false; - return inbox.src.includes(station); + var inboxSrc = this.props.store.messages.inbox.src; + if (!inboxSrc) return false; + return inboxSrc.includes(station); } }, { key: "toggleSubscribe", - value: function toggleSubscribe(station) { - var subscribed = this.isSubscribed(station); + value: function toggleSubscribe() { + var subscribed = this.isSubscribed(this.props.data.station); + var stationDetails = getStationDetails(this.props.data.station); this.props.api.hall({ source: { - nom: "inbox", + nom: 'inbox', sub: !subscribed, srs: [this.props.data.station] } @@ -52547,7 +51987,7 @@ function (_Component) { }, { key: "getStationHeaderData", value: function getStationHeaderData(station) { - var stationDetails = getStationDetails(station, this.props.store.configs[station], this.props.api.authTokens.ship); + var stationDetails = getStationDetails(station); return { title: { display: stationDetails.stationTitle, @@ -52582,17 +52022,17 @@ function (_Component) { }); break; - case "collection": + case "collection-index": defaultData = this.getStationHeaderData(this.props.data.station); - if (this.props.data.show === 'default') { + if (this.props.data.collectionPageMode === 'default') { actions = { - details: "/~~/".concat(this.props.data.ship, "/==").concat(this.props.data.path, "?show=details"), - write: "/~~/".concat(this.props.data.ship, "/==").concat(this.props.data.path, "?show=post") + details: "/~~/".concat(this.props.data.owner, "/==/web/collections/").concat(this.props.data.collId, "?show=details"), + write: "/~~/".concat(this.props.data.owner, "/==/web/collections/").concat(this.props.data.collId, "?show=post") }; - } else if (this.props.data.show === 'details') { + } else if (this.props.data.collectionPageMode === 'details') { actions = { - back: "/~~/".concat(this.props.data.ship, "/==").concat(this.props.data.path) + back: "/~~/".concat(this.props.data.owner, "/==/web/collections/").concat(this.props.data.collId) }; } @@ -52605,18 +52045,17 @@ function (_Component) { }); break; - case "raw": - case "both": + case "collection-post": defaultData = this.getStationHeaderData(this.props.data.station); - if (this.props.data.show === 'default') { + if (this.props.data.collectionPageMode === 'default') { actions = { - details: "/~~/".concat(this.props.data.ship, "/==").concat(this.props.data.path, "?show=details"), - edit: "/~~/".concat(this.props.data.ship, "/==").concat(this.props.data.path, "?show=edit") + details: "/~~/".concat(this.props.data.owner, "/==/web/collections/").concat(this.props.data.collId, "/").concat(this.props.data.postId, "?show=details"), + edit: "/~~/".concat(this.props.data.owner, "/==/web/collections/").concat(this.props.data.collId, "/").concat(this.props.data.postId, "?show=edit") }; - } else if (this.props.data.show === 'details') { + } else if (this.props.data.collectionPageMode === 'details') { actions = { - back: "/~~/".concat(this.props.data.ship, "/==").concat(this.props.data.path) + back: "/~~/".concat(this.props.data.owner, "/==/web/collections/").concat(this.props.data.collId, "/").concat(this.props.data.postId) }; } @@ -52625,6 +52064,10 @@ function (_Component) { title: _objectSpread({}, defaultData.title, { display: this.props.data.title ? this.props.data.title : defaultData.title.display }), + breadcrumbs: [defaultData.breadcrumbs[0], { + display: this.props.data.collTitle, + href: "/~~/".concat(this.props.data.owner, "/==/web/collections/").concat(this.props.data.collId) + }], actions: actions }); break; @@ -52632,8 +52075,8 @@ function (_Component) { case "profile": headerData = { title: { - display: this.props.data.ship, - href: profileUrl(this.props.data.ship.substr(1)), + display: this.props.data.owner, + href: profileUrl(this.props.data.owner.substr(1)), style: "mono" } }; @@ -52733,8 +52176,7 @@ function (_Component) { }, { key: "render", value: function render() { - var type = this.props.data.type ? this.props.data.type : "default"; - console.log('header type = ', type); // TODO: This is an ugly hack until we fix queryParams + var type = this.props.data.type ? this.props.data.type : "default"; // TODO: This is an ugly hack until we fix queryParams if (["stream", "dm", "collection-write"].includes(type) && !getQueryParams().station) { return null; @@ -62117,7 +61559,7 @@ function hasOwnProperty$3(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -var util$2 = { +var util$1 = { inherits: inherits$3, _extend: _extend, log: log$1, @@ -62143,7 +61585,7 @@ var util$2 = { }; -var util$3 = Object.freeze({ +var util$2 = Object.freeze({ format: format, deprecate: deprecate, debuglog: debuglog, @@ -62166,7 +61608,7 @@ var util$3 = Object.freeze({ log: log$1, inherits: inherits$3, _extend: _extend, - default: util$2 + default: util$1 }); var inherits_browser = createCommonjsModule(function (module) { @@ -62195,7 +61637,7 @@ if (typeof Object.create === 'function') { } }); -var require$$0$31 = ( util$3 && util$2 ) || util$3; +var require$$0$31 = ( util$2 && util$1 ) || util$2; var inherits = createCommonjsModule(function (module) { try { @@ -64053,9 +63495,10 @@ function (_Component) { value: function subStation(station) { var _this2 = this; + var stationDetails = getStationDetails(station); this.props.api.hall({ source: { - nom: "inbox", + nom: 'inbox', sub: true, srs: [station] } @@ -64135,7 +63578,9 @@ function (_Component) { } else if (this.props.details.type === "inv") { return react.createElement("div", { className: "invite" - }, "invite to ", this.props.details.content, "...", react.createElement(Button, { + }, react.createElement("span", { + className: "text-body" + }, "invite to ", this.props.details.content, "..."), react.createElement(Button, { classes: "btn btn-primary accept", action: this.acceptInvite, actionData: { @@ -64163,7 +63608,9 @@ function (_Component) { }, this.props.details.content); } } else if (this.props.details.type === "exp") { - return react.createElement("div", null, react.createElement("div", { + return react.createElement("div", { + className: "text-body" + }, react.createElement("div", { className: "text-mono" }, this.props.details.content), react.createElement("pre", { className: "text-mono mt-0" @@ -64174,10 +63621,14 @@ function (_Component) { api: this.props.api }); } else if (this.props.details.type === "lin") { - return this.props.details.content; + return react.createElement("span", { + className: "text-body" + }, this.props.details.content); } - return ""; + return react.createElement("span", { + className: "text-mono" + }, ''); } }]); @@ -64240,6 +63691,32 @@ function (_Component) { return Icon; }(react_1); +/* + Data structure: + common: { + host: zod, + hostProfileUrl: (...)/~zod/profile, + + cir: [@ta/dmjoin] + + station: [host]/[circle] + stationUrl: [streamUrl/collIndexUrl] + + subcircle: @ta + subcircleUrl: (...)collIndexUrl/subcircle + + type: {"dm", "chat", "fora"} + } + + Breadcrumb display: + [host] [circle* /coll@ta [*]/dmjoin *] [...subcollection] + + case "dm": + [dmjoin] + + dm: + +*/ var InboxRecentPage = /*#__PURE__*/ function (_Component) { @@ -64331,7 +63808,7 @@ function (_Component) { }, { key: "findPostTitleFromMessage", value: function findPostTitleFromMessage(postId) { - var inbox = this.props.store.messages.inboxMessages; + var inbox = this.props.store.messages.inbox.messages; var result = null; for (var i = 0; i < inbox.length; i++) { @@ -64354,7 +63831,7 @@ function (_Component) { var hostDisplay = section.details.type === "dm" ? null : react.createElement("span", null, react.createElement("a", { href: section.details.hostProfileUrl, - className: "text-700 text-mono underline" + className: "text-600 text-mono underline" }, "~", section.details.host), react.createElement("span", { className: "ml-2 mr-2" }, "/")); @@ -64366,7 +63843,7 @@ function (_Component) { className: "ml-2 mr-2" }, "/"), react.createElement("a", { href: section.details.postUrl, - className: "text-700 underline" + className: "text-600 underline" }, postTitle)); } @@ -64384,7 +63861,7 @@ function (_Component) { className: "col-sm-10" }, hostDisplay, react.createElement("a", { href: section.details.stationUrl, - className: "text-700 underline" + className: "text-600 underline" }, section.details.stationTitle))), sectionContent); }); } // Group inbox messages by time-chunked stations, strictly ordered by message time. @@ -64393,7 +63870,7 @@ function (_Component) { }, { key: "getSectionData", value: function getSectionData() { - var inbox = this.props.store.messages.inboxMessages; + var inbox = this.props.store.messages.inbox.messages; var lastStationName = []; var sections = []; var stationIndex = -1; @@ -64406,7 +63883,7 @@ function (_Component) { sections.push({ name: aud, msgs: [msg], - details: getStationDetails(aud, this.props.store.configs[aud], this.props.api.authTokens.ship) + details: getStationDetails(aud) }); stationIndex++; } else { @@ -64483,7 +63960,7 @@ function (_Component) { }, { key: "render", value: function render() { - var stations = getSubscribedStations(this.props.api.authTokens.ship, this.props.store.configs); + var stations = getSubscribedStations(this.props.api.authTokens.ship, this.props.store); if (!stations) return null; var chatStations = this.buildSection(stations.chatStations); var collStations = this.buildSection(stations.collStations); @@ -64497,15 +63974,15 @@ function (_Component) { }, react.createElement("div", { className: "mt-9" }, react.createElement("div", { - className: "text-700" + className: "text-600" }, "Chats"), chatStations), react.createElement("div", { className: "mt-9" }, react.createElement("div", { - className: "text-700" + className: "text-600" }, "Blogs, Forum and Notes"), collStations), react.createElement("div", { className: "mt-9" }, react.createElement("div", { - className: "text-700" + className: "text-600" }, "Direct Messages"), DMStations)))); } }]); @@ -71216,7 +70693,7 @@ function (_Component) { key: "createDMStationIfNeeded", value: function createDMStationIfNeeded() { if (this.props.store.dms.stored === true && isDMStation(this.state.station) && !this.props.store.dms.stations.includes(this.state.station.split("/")[1]) && !this.state.dmStationCreated) { - createDMStation(this.state.station, false); + // createDMStation(this.state.station, false); this.setState({ dmStationCreated: true }); @@ -71433,7 +70910,7 @@ function (_Component) { if (msg.printship) { contentElem = react.createElement(react.Fragment, null, react.createElement("a", { - className: "vanilla hoverline text-700 text-mono", + className: "vanilla hoverline text-600 text-mono", href: prettyShip(msg.aut)[1] }, prettyShip("~".concat(msg.aut))[0]), msg.dateGroup === parseInt(this.state.activatedMsg.dateGroup, 10) && react.createElement(react.Fragment, null, react.createElement(Elapsed, { timestring: parseInt(this.state.activatedMsg.date, 10), @@ -71515,7 +70992,7 @@ function (_Component) { onChange: this.messageChange }))), react.createElement("a", { onClick: this.messageSubmit, - className: "text-700" + className: "text-600" }, "Send"))); } }], [{ @@ -71662,39 +71139,26 @@ function (_Component) { this.props.api.coll(dat); - this.props.pushCallback("circle.config.dif.source", function (rep) { - api.hall({ - source: { - nom: 'inbox', - sub: true, - srs: [rep.data.src] - } - }); - }); this.props.storeReports([{ type: REPORT_PAGE_STATUS, data: PAGE_STATUS_TRANSITIONING }]); - this.props.pushCallback("circle.gram", function (rep) { - console.log('ydsdifsdfsjf'); - + this.props.pushCallback("circles", function (rep) { _this2.setState({ status: STATUS_READY }); - var type = lodash.get(rep.data, "gam.sep.fat.tac.text", null); + var station = "".concat(rep.from.path.split('/')[2], "/").concat(rep.data.cir); + var stationDetails = getStationDetails(station); + api.hall({ + source: { + nom: 'inbox', + sub: true, + srs: [station] + } + }); - if (type && (type === 'new item' || type === 'edited item')) { - var content = lodash.get(rep.data, "gam.sep.fat.sep.lin.msg", null); - - content = JSON.parse(content); - - _this2.props.transitionTo("/~~/~".concat(details.hostship, "/==/").concat(content.path.join('/'))); - - return true; - } - - return false; + _this2.props.transitionTo(stationDetails.stationUrl); }); } }, { @@ -71813,7 +71277,7 @@ function (_Component) { _this2.setState({ comment: '', status: STATUS_READY - }); // this.props.transitionTo(this.pageShip == this.props.api.authTokens.ship ? `/~~/collections/${this.props.coll}/${this.props.top}` : `/~~/${this.pageShip}/==/web/collections/${this.props.coll}/${this.props.top}`) + }); // this.props.transitionTo(this.pageShip == this.props.api.authTokens.ship ? `/~~/collections/${this.props.coll}/${this.props.top}` : `/~~/${this.pageShip}/==/web/collections/${this.props.coll}/${this.props.top}`) _this2.props.transitionTo(window.location.pathname); // any reason we shouldnt do this? @@ -71970,11 +71434,9 @@ function (_Component) { }, { key: "renderText", value: function renderText() { - var _this = this; - if (this.props.store.public[this.props.hostship]) { var text = this.props.store.public[this.props.hostship].map(function (cir) { - var deets = getStationDetails(cir, _this.props.store.configs[cir], _this.props.api.authTokens.ship); + var deets = getStationDetails(cir); if (deets.type == "text") { return react.createElement("div", { @@ -71994,11 +71456,9 @@ function (_Component) { }, { key: "renderChats", value: function renderChats() { - var _this2 = this; - if (this.props.store.public[this.props.hostship]) { var chats = this.props.store.public[this.props.hostship].map(function (cir) { - var deets = getStationDetails(cir, _this2.props.store.configs[cir], _this2.props.api.authTokens.ship); + var deets = getStationDetails(cir); if (deets.type == "chat") { return react.createElement("div", { @@ -72021,9 +71481,9 @@ function (_Component) { var chats = this.renderChats(); var text = this.renderText(); return react.createElement("div", null, react.createElement("div", { - className: "text-700 mt-8" + className: "text-600 mt-8" }, "Blogs, Fora and Notes"), text, react.createElement("div", { - className: "text-700 mt-8" + className: "text-600 mt-8" }, "Chats"), chats); } }]); @@ -72212,10 +71672,10 @@ function (_Component) { value: this.state.formData[name], disabled: this.state.status === STATUS_LOADING, placeholder: field.placeholder, - autocomplete: "off", - autocorrect: "off", - autocapitalize: "off", - spellcheck: "false" + autoComplete: "off", + autoCorrect: "off", + autoCapitalize: "off", + spellCheck: "false" }; if (first) inputProps.ref = this.firstInputRef; @@ -72705,7 +72165,7 @@ function (_Component) { var isShip = urbitOb.isShip(term.substr(1)); var isStation = isValidStation(term); - var details = isStation && getStationDetails(term, this.props.store.configs[term]); // use collection description if it's a collection + var details = isStation && getStationDetails(term); // use collection description if it's a collection var displayTextTerm = isStation ? details.type == 'text' ? "".concat(details.station.split("/")[0], " / ").concat(details.stationTitle) : details.station.split("/").join(" / ") : term; var displayText = "go ".concat(displayTextTerm); @@ -73079,32 +72539,55 @@ function (_Component) { }, { key: "loadHeader", value: function loadHeader(tempDOM) { - var headerQuery = tempDOM.querySelectorAll('[name="urb-header"]'); - var headerType = headerQuery.length > 0 ? headerQuery[0].getAttribute('value') : "default"; - var headerData; - console.log(headerType); + // Example metadata: + // + var headerQuery = tempDOM.querySelectorAll('[name="urb-metadata"]'); + var headerData = { + type: "default" + }; - if (headerType === "collection" || headerType === "both" || headerType === "raw") { - headerData = { - type: headerType, - path: headerQuery.length > 0 ? headerQuery[0].getAttribute('path') : null, - station: "".concat(headerQuery[0].getAttribute('ship'), "/c-").concat(headerQuery[0].getAttribute('path').split('/').slice(3).join('-')), - postid: headerQuery.length > 0 ? headerQuery[0].getAttribute('postid') : null, - ship: headerQuery.length > 0 ? headerQuery[0].getAttribute('ship') : null, - show: headerQuery.length > 0 ? headerQuery[0].getAttribute('show') : null - }; - } else { - headerData = { - type: headerType, - title: headerQuery.length > 0 ? headerQuery[0].getAttribute('title') : null, - station: headerQuery.length > 0 ? headerQuery[0].getAttribute('station') : null, - postid: headerQuery.length > 0 ? headerQuery[0].getAttribute('postid') : null, - ship: headerQuery.length > 0 ? headerQuery[0].getAttribute('ship') : null, - publ: headerQuery.length > 0 ? headerQuery[0].getAttribute('publ') : null - }; + if (headerQuery.length > 0) { + headerData.type = headerQuery[0].getAttribute('urb-structure-type'); + } + + if (headerQuery.length > 0 && headerData.type) { + headerData.owner = headerQuery[0].getAttribute('urb-owner'); + headerData.pageTitle = headerQuery[0].getAttribute('urb-name'); + headerData.collectionPageMode = headerQuery[0].getAttribute('urb-show'); + headerData.dateCreated = headerQuery[0].getAttribute('urb-date-created'); + headerData.dateModified = headerQuery[0].getAttribute('urb-date-modified'); + headerData.collPath = headerQuery[0].getAttribute('urb-path'); + + if (headerData.type === "collection-index") { + headerData.title = headerData.pageTitle; + headerData.collId = headerData.dateCreated; + headerData.station = "".concat(headerData.owner, "/c-").concat(headerData.collId); + } + + if (headerData.type === "collection-post") { + headerData.title = headerData.pageTitle; + headerData.collId = headerData.collPath.split("/")[3]; + headerData.collTitle = "TBD"; + headerData.postId = headerData.dateCreated; + headerData.station = "".concat(headerData.owner, "/c-").concat(headerData.collId, "-").concat(headerData.postId); + } + + if (headerData.type === "stream") { + headerData.station = getQueryParams().station; + if (!headerData.station) return; + headerData.title = headerData.station.split("/")[1]; + } } - headerData.station = headerData.station === "query" ? getQueryParams().station : headerData.station; return react.createElement(Header, { data: headerData, api: this.props.api, @@ -73113,7 +72596,57 @@ function (_Component) { pushCallback: this.props.pushCallback, transitionTo: this.props.transitionTo, runPoll: this.props.runPoll - }); + }); // let headerType = (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('value') : "default"; + // + // let headerData; + // + // if (headerType === "collection" || + // headerType === "both" || + // headerType === "raw"){ + // + // headerData = { + // type: headerType, + // path: (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('path') : null, + // station: `${headerQuery[0].getAttribute('ship')}/c-${headerQuery[0].getAttribute('path').split('/').slice(3).join('-')}`, + // + // postid: (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('postid') : null, + // ship: (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('ship') : null, + // show: (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('show') : null, + // } + // + // } else { + // headerData = { + // type: headerType, + // title: (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('title') : null, + // station: (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('station') : null, + // postid: (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('postid') : null, + // ship: (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('ship') : null, + // publ: (headerQuery.length > 0) ? + // headerQuery[0].getAttribute('publ') : null, + // } + // } + // headerData.station = (headerData.station === "query") ? getQueryParams().station : headerData.station; + // + // return ( + //
+ // ) } }, { key: "render", @@ -73310,8 +72843,11 @@ function () { this.store = { messages: { - inboxMessages: [], - inboxSrc: [], + inbox: { + src: [], + messages: [], + config: {} + }, stations: {} }, configs: {}, @@ -73438,6 +72974,523 @@ function () { var warehouse = new UrbitWarehouse(); window.warehouse = warehouse; +function getStationDetails(station) { + var host = station.split("/")[0].substr(1); + var config = warehouse.store.configs[station]; + var ret = { + type: "none", + station: station, + host: host, + cir: station.split("/")[1], + config: config, + hostProfileUrl: profileUrl(host) + }; + var circleParts = ret.cir.split("-"); + + if (ret.cir === "inbox") { + ret.type = "inbox"; + } else if (ret.cir === "c") { + ret.type = "aggregator"; + } else if (isDMStation(station)) { + ret.type = "dm"; + } else if (ret.cir.includes("c-") && circleParts.length > 2) { + ret.type = "collection-post"; + } else if (ret.cir.includes("c-")) { + ret.type = "collection-index"; + } else { + ret.type = "chat"; + } + + switch (ret.type) { + case "inbox": + ret.stationUrl = "/~~/landscape"; + ret.stationTitle = ret.cir; + break; + + case "chat": + ret.stationUrl = "/~~/landscape/stream?station=".concat(station); + ret.stationDetailsUrl = "/~~/landscape/stream/details?station=".concat(station); + ret.stationTitle = ret.cir; + break; + + case "dm": + if (config.con) { + ret.stationTitle = ret.cir.split(".").filter(function (mem) { + return mem !== api$1.authTokens.ship; + }).map(function (mem) { + return "~".concat(mem); + }).join(", "); + + } else { + ret.stationTitle = "unknown"; + } + + ret.stationUrl = "/~~/landscape/stream?station=".concat(station); + break; + + case "collection-index": + ret.collId = circleParts[1]; + ret.stationUrl = "/~~/~".concat(ret.host, "/==/web/collections/").concat(ret.collId); + ret.stationTitle = "TBD"; + break; + + case "collection-post": + ret.collId = circleParts[1]; + ret.postId = circleParts[2]; + ret.parentCollectionUrl = "/~~/~".concat(ret.host, "/==/web/collections/").concat(ret.collId); + ret.stationUrl = "/~~/~".concat(ret.host, "/==/web/collections/").concat(ret.collId, "/").concat(ret.postId); + ret.stationTitle = "TBD"; + break; + } + + return ret; +} +window.getStationDetails = getStationDetails; + +function capitalize(str) { + return "".concat(str[0].toUpperCase()).concat(str.substr(1)); +} +function getQueryParams() { + if (window.location.search !== "") { + return JSON.parse('{"' + decodeURI(window.location.search.substr(1).replace(/&/g, "\",\"").replace(/=/g, "\":\"")) + '"}'); + } else { + return {}; + } +} +function isAggregator(station) { + var cir = station.split("/")[1]; + return AGGREGATOR_NAMES.includes(cir); +} +function getLoadingClass(storeTransition) { + return classnames({ + 'hide': storeTransition === PAGE_STATUS_READY, + 'page-status': storeTransition !== PAGE_STATUS_READY, + 'page-status-primary': storeTransition === PAGE_STATUS_TRANSITIONING, + 'page-status-secondary': storeTransition === PAGE_STATUS_PROCESSING, + 'page-status-tertiary': storeTransition === PAGE_STATUS_DISCONNECTED, + 'page-status-quaternary': storeTransition === PAGE_STATUS_RECONNECTING + }); +} +/* + Goes from: + 1531943107869 // "javascript unix time" + To: + "48711y 2w 5d 11m 9s" // "stringified time increments" +*/ + +function secToString(secs) { + if (secs <= 0) { + return 'Completed'; + } + + secs = Math.floor(secs); + var min = 60; + var hour = 60 * min; + var day = 24 * hour; + var week = 7 * day; + var year = 52 * week; + + var fy = function fy(s) { + if (s < year) { + return ['', s]; + } else { + return [Math.floor(s / year) + 'y', s % year]; + } + }; + + var fw = function fw(tup) { + var str = tup[0]; + var sec = tup[1]; + + if (sec < week) { + return [str, sec]; + } else { + return [str + ' ' + Math.floor(sec / week) + 'w', sec % week]; + } + }; + + var fd = function fd(tup) { + var str = tup[0]; + var sec = tup[1]; + + if (sec < day) { + return [str, sec]; + } else { + return [str + ' ' + Math.floor(sec / day) + 'd', sec % day]; + } + }; + + var fh = function fh(tup) { + var str = tup[0]; + var sec = tup[1]; + + if (sec < hour) { + return [str, sec]; + } else { + return [str + ' ' + Math.floor(sec / hour) + 'h', sec % hour]; + } + }; + + var fm = function fm(tup) { + var str = tup[0]; + var sec = tup[1]; + + if (sec < min) { + return [str, sec]; + } else { + return [str + ' ' + Math.floor(sec / min) + 'm', sec % min]; + } + }; + + var fs = function fs(tup) { + var str = tup[0]; + var sec = tup[1]; + return str + ' ' + sec + 's'; + }; + + return fs(fm(fh(fd(fw(fy(secs)))))).trim(); +} +function collectionAuthorization(stationDetails, usership) { + if (stationDetails.host === usership) { + return "write"; + } else if (lodash.has(stationDetails, "config.con.sec")) { + var sec = lodash.get(stationDetails, "config.con.sec", null); + + if (sec === "journal") { + return "write"; + } + } + + return "read"; +} +function uuid() { + var str = "0v"; + str += Math.ceil(Math.random() * 8) + "."; + + for (var i = 0; i < 5; i++) { + var _str = Math.ceil(Math.random() * 10000000).toString(32); + + _str = ("00000" + _str).substr(-5, 5); + str += _str + "."; + } + + return str.slice(0, -1); +} +function isPatTa(str) { + var r = /^[a-z,0-9,\-,\.,_,~]+$/.exec(str); + return !!r; +} +function isValidStation(st) { + var tokens = st.split("/"); + if (tokens.length !== 2) return false; + return urbitOb.isShip(tokens[0]) && isPatTa(tokens[1]); +} +/* + Goes from: + ~2018.7.17..23.15.09..5be5 // urbit @da + To: + (javascript Date object) +*/ + +function daToDate(st) { + var dub = function dub(n) { + return parseInt(n) < 10 ? "0" + parseInt(n) : n.toString(); + }; + + var da = st.split('..'); + var bigEnd = da[0].split('.'); + var lilEnd = da[1].split('.'); + var ds = "".concat(bigEnd[0].slice(1), "-").concat(dub(bigEnd[1]), "-").concat(dub(bigEnd[2]), "T").concat(dub(lilEnd[0]), ":").concat(dub(lilEnd[1]), ":").concat(dub(lilEnd[2]), "Z"); + return new Date(ds); +} +/* + Goes from: + (javascript Date object) + To: + ~2018.7.17..23.15.09..5be5 // urbit @da +*/ + +function dateToDa(d, mil) { + var fil = function fil(n) { + return n >= 10 ? n : "0" + n; + }; + + return "~".concat(d.getUTCFullYear(), ".") + "".concat(d.getUTCMonth() + 1, ".") + "".concat(fil(d.getUTCDate()), "..") + "".concat(fil(d.getUTCHours()), ".") + "".concat(fil(d.getUTCMinutes()), ".") + "".concat(fil(d.getUTCSeconds())) + "".concat(mil ? "..0000" : ""); +} // ascending for clarity +// export function sortSrc(circleArray, topic=false){ +// let sc = circleArray.map((c) => util.parseCollCircle(c)).filter((pc) => typeof pc != 'undefined' && typeof pc.top == 'undefined'); +// return sc.map((src) => src.coll).sort((a, b) => util.daToDate(a) - util.daToDate(b)); +// } + +function arrayEqual(a, b) { + if (a === b) return true; + if (a == null || b == null) return false; + if (a.length != b.length) return false; // If you don't care about the order of the elements inside + // the array, you should sort both arrays here. + + for (var i = 0; i < a.length; ++i) { + if (a[i] !== b[i]) return false; + } + + return true; +} + +function deSig(ship) { + return ship.replace('~', ''); +} // use urbit.org proxy if it's not on our ship + + +function foreignUrl(shipName, own, urlFrag) { + if (deSig(shipName) != deSig(own)) { + return "http://".concat(deSig(shipName), ".urbit.org").concat(urlFrag); + } else { + return urlFrag; + } +} // shorten comet names + +function prettyShip(ship) { + var sp = ship.split('-'); + return [sp.length == 9 ? "".concat(sp[0], "_").concat(sp[8]) : ship, ship[0] === '~' ? "/~~/".concat(ship, "/==/web/landscape/profile") : "/~~/~".concat(ship, "/==/web/landscape/profile")]; +} +function profileUrl(ship) { + return "/~~/~".concat(ship, "/==/web/landscape/profile"); +} +function isDMStation(station) { + var host = station.split('/')[0].substr(1); + var circle = station.split('/')[1]; + return station.indexOf('.') !== -1 && circle.indexOf(host) !== -1; +} +function isRootCollection(station) { + return station.split("/")[1] === "c"; +} +function getMessageContent(msg) { + var ret; + var MESSAGE_TYPES = { + 'sep.app.sep.fat.sep.lin.msg': 'app', + 'sep.app.sep.lin.msg': 'app', + 'sep.fat': function sepFat(msg) { + var type = msg.sep.fat.tac.text; + var station = msg.aud[0]; + var stationDetails = getStationDetails(station); + var jason = JSON.parse(msg.sep.fat.sep.lin.msg); + var content = type.includes('collection') ? null : jason.content; + var par = jason.path.slice(0, -1); + return { + type: msg.sep.fat.tac.text, + contentType: jason.type, + content: content, + owner: jason.owner, + date: jason.date, + path: jason.path, + postTitle: jason.name, + postUrl: "/~~/".concat(jason.owner, "/==/").concat(jason.path.join('/')), + parentTitle: jason.path.slice(-2, -1), + parentUrl: "/~~/".concat(jason.owner, "/==/").concat(jason.path.slice(0, -1).join('/')) + }; + }, + 'sep.inv.cir': 'inv', + 'sep.lin.msg': 'lin', + 'sep.url': 'url', + 'sep.exp': function sepExp(msg) { + return { + type: "exp", + content: msg.sep.exp.exp, + res: msg.sep.exp.res.join('\n') + }; + } + }; + Object.arrayify(MESSAGE_TYPES).some(function (_ref) { + var key = _ref.key, + value = _ref.value; + + if (lodash.has(msg, key)) { + if (typeof value === "string") { + ret = { + type: value, + content: lodash.get(msg, key) + }; + } else if (typeof value === "function") { + ret = value(msg); + } + + return true; + } + }); + + if (typeof ret === "undefined") { + ret = { + type: "unknown" + }; + console.log("ASSERT: unknown message type on ", msg); + } + + return ret; +} +function getSubscribedStations(ship, store) { + var inbox = store.messages.inbox; + var configs = store.configs; // TODO: Maybe I need this? + // if (!inbox) return null; + + var stationDetailList = inbox.src.map(function (station) { + if (!configs[station]) return null; + return getStationDetails(station); + }).filter(function (station) { + return station !== null; + }); + var ret = { + chatStations: stationDetailList.filter(function (d) { + return d.type === "chat"; + }), + collStations: stationDetailList.filter(function (d) { + return ["collection-index", "collection-post"].includes(d.type); + }), + dmStations: stationDetailList.filter(function (d) { + return d.type === "dm"; + }) + }; + var numSubs = ret.chatStations.length + ret.collStations.length; + var numDMs = ret.dmStations.length; + var numString = []; + if (numSubs > 0) numString.push("".concat(numSubs, " subscriptions")); + if (numDMs > 0) numString.push("".concat(numDMs, " DMs")); + ret.numString = numString.join(", "); + return ret; +} // maybe do fancier stuff later + +function isUrl(string) { + var r = /^http|^www|\.com$/.exec(string); + + if (r) { + return true; + } else { + return false; + } +} + +var util = Object.freeze({ + capitalize: capitalize, + getQueryParams: getQueryParams, + isAggregator: isAggregator, + getLoadingClass: getLoadingClass, + secToString: secToString, + collectionAuthorization: collectionAuthorization, + uuid: uuid, + isPatTa: isPatTa, + isValidStation: isValidStation, + daToDate: daToDate, + dateToDa: dateToDa, + arrayEqual: arrayEqual, + foreignUrl: foreignUrl, + prettyShip: prettyShip, + profileUrl: profileUrl, + isDMStation: isDMStation, + isRootCollection: isRootCollection, + getMessageContent: getMessageContent, + getSubscribedStations: getSubscribedStations, + isUrl: isUrl +}); + +var UrbitApi = +/*#__PURE__*/ +function () { + function UrbitApi() { + _classCallCheck(this, UrbitApi); + } + + _createClass(UrbitApi, [{ + key: "setAuthTokens", + value: function setAuthTokens(authTokens) { + this.authTokens = authTokens; + } // keep default bind to hall, since its bind procedure more complex for now AA + + }, { + key: "bind", + value: function bind(path, method) { + var ship = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.authTokens.ship; + var appl = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "hall"; + console.log('binding to ...', appl, ", path: ", path, ", as ship: ", ship, ", by method: ", method); + var params = { + appl: appl, + mark: "json", + oryx: this.authTokens.oryx, + ship: ship, + path: path, + wire: path + }; + return fetch("/~/is/~".concat(ship, "/").concat(appl).concat(path, ".json?").concat(method), { + credentials: "same-origin", + method: "POST", + body: JSON.stringify(params) + }); + } + }, { + key: "hall", + value: function hall(data, transition) { + this.action("hall", "hall-action", data, transition); + } + }, { + key: "coll", + value: function coll(data, transition) { + this.action("collections", "collections-action", data, transition); + } + }, { + key: "action", + value: function action(appl, mark, data, transition) { + var params = { + appl: appl, + mark: mark, + oryx: this.authTokens.oryx, + ship: this.authTokens.ship, + wire: "/", + xyro: data + }; + fetch("/~/to/".concat(appl, "/").concat(mark), { + credentials: "same-origin", + method: "POST", + body: JSON.stringify(params) + }); + } + /* + Special actions + */ + + }, { + key: "permit", + value: function permit(nom, aud, message) { + this.hall({ + permit: { + nom: nom, + sis: aud, + inv: true + } + }); + + if (message) { + var audInboxes = aud.map(function (aud) { + return "~".concat(aud, "/inbox"); + }); + var inviteMessage = { + aud: audInboxes, + ses: [{ + inv: { + inv: true, + cir: "~".concat(this.authTokens.ship, "/").concat(nom) + } + }] + }; + this.hall({ + phrase: inviteMessage + }); + } + } + }]); + + return UrbitApi; +}(); + +var api$1 = new UrbitApi(); +window.api = api$1; + console.log('app running'); /* Common variables: @@ -73456,7 +73509,7 @@ fetch('/~/auth.json', { router.start(); operator.start(); }); -window.util = util$1; +window.util = util; window._ = lodash; }))); diff --git a/web/landscape/onboard.atom b/web/landscape/onboard.atom new file mode 100644 index 000000000..e69de29bb diff --git a/web/landscape/stream.hoon b/web/landscape/stream.hoon index 29ef61681..32c70a055 100644 --- a/web/landscape/stream.hoon +++ b/web/landscape/stream.hoon @@ -2,5 +2,5 @@ ;div ;div(urb-component "ChatPage"); - ;input(type "hidden", name "urb-header", value "stream", station "query"); + ;input(type "hidden", name "urb-metadata", urb-structure-type "stream"); ==