2026-03-18 10:36:51 -04:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > Lotus Guild Matrix< / title >
< style >
* { margin : 0 ; padding : 0 ; box-sizing : border-box ; }
body {
background : #0a0a0a ;
color : #e0e0e0 ;
font-family : 'Segoe UI' , system-ui , - apple-system , sans-serif ;
min-height : 100 vh ;
display : flex ;
align-items : center ;
justify-content : center ;
2026-03-19 22:57:55 -04:00
padding : 20 px 16 px 40 px ;
2026-03-18 10:36:51 -04:00
}
body :: before {
content : '' ;
position : fixed ;
top : 50 % ;
left : 50 % ;
width : 900 px ;
height : 900 px ;
transform : translate ( -50 % , -50 % ) ;
background : radial-gradient ( circle , rgba ( 152 , 0 , 0 , 0.07 ) 0 % , transparent 65 % ) ;
pointer-events : none ;
z-index : 0 ;
}
. container {
position : relative ;
z-index : 1 ;
text-align : center ;
width : 100 % ;
2026-03-19 22:57:55 -04:00
max-width : 900 px ;
2026-03-18 10:36:51 -04:00
}
. logo {
width : 140 px ;
height : 140 px ;
margin : 0 auto 28 px ;
border-radius : 50 % ;
filter : drop-shadow ( 0 0 24 px rgba ( 152 , 0 , 0 , 0.35 ) ) ;
animation : float 6 s ease-in-out infinite ;
}
@ keyframes float {
0 % , 100 % { transform : translateY ( 0 ) ; }
50 % { transform : translateY ( -8 px ) ; }
}
h1 {
font-size : 2 rem ;
font-weight : 300 ;
letter-spacing : 0.15 em ;
text-transform : uppercase ;
color : #fff ;
margin-bottom : 4 px ;
}
2026-03-19 22:57:55 -04:00
h1 span { color : #980000 ; font-weight : 600 ; }
2026-03-18 10:36:51 -04:00
. subtitle {
font-size : 0.85 rem ;
color : #555 ;
letter-spacing : 0.3 em ;
text-transform : uppercase ;
margin-bottom : 36 px ;
}
2026-03-19 22:57:55 -04:00
/* ─── Cards / Panels ─── */
2026-03-18 10:36:51 -04:00
. card {
2026-03-19 22:57:55 -04:00
background : linear-gradient ( 145 deg , rgba ( 22 , 22 , 22 , 0.95 ) , rgba ( 14 , 14 , 14 , 0.98 ) ) ;
border : 1 px solid rgba ( 152 , 0 , 0 , 0.2 ) ;
2026-03-18 10:36:51 -04:00
border-radius : 16 px ;
padding : 32 px ;
2026-03-19 22:57:55 -04:00
max-width : 560 px ;
margin : 0 auto ;
2026-03-18 10:36:51 -04:00
}
. card h2 {
font-size : 0.9 rem ;
font-weight : 500 ;
color : #980000 ;
text-transform : uppercase ;
letter-spacing : 0.15 em ;
margin-bottom : 20 px ;
}
2026-03-19 22:57:55 -04:00
/* ─── Steps ─── */
. steps { list-style : none ; text-align : left ; margin-bottom : 28 px ; }
2026-03-18 10:36:51 -04:00
. steps li {
display : flex ;
align-items : flex-start ;
gap : 14 px ;
padding : 12 px 0 ;
2026-03-19 22:57:55 -04:00
border-bottom : 1 px solid rgba ( 255 , 255 , 255 , 0.04 ) ;
2026-03-18 10:36:51 -04:00
}
. steps li : last-child { border-bottom : none ; }
. step-num {
flex-shrink : 0 ;
2026-03-19 22:57:55 -04:00
width : 28 px ; height : 28 px ;
background : rgba ( 152 , 0 , 0 , 0.12 ) ;
border : 1 px solid rgba ( 152 , 0 , 0 , 0.35 ) ;
2026-03-18 10:36:51 -04:00
border-radius : 50 % ;
2026-03-19 22:57:55 -04:00
display : flex ; align-items : center ; justify-content : center ;
font-size : 0.8 rem ; font-weight : 600 ; color : #c44 ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. step-text { padding-top : 3 px ; font-size : 0.95 rem ; line-height : 1.5 ; color : #bbb ; }
2026-03-18 10:36:51 -04:00
. step-text strong { color : #e0e0e0 ; }
. homeserver {
display : inline-block ;
2026-03-19 22:57:55 -04:00
background : rgba ( 152 , 0 , 0 , 0.1 ) ;
border : 1 px solid rgba ( 152 , 0 , 0 , 0.25 ) ;
2026-03-18 10:36:51 -04:00
color : #e88 ;
font-family : 'SF Mono' , 'Fira Code' , 'Consolas' , monospace ;
font-size : 0.85 rem ;
padding : 3 px 10 px ;
border-radius : 6 px ;
}
2026-03-19 22:57:55 -04:00
a { color : #c44 ; text-decoration : none ; }
. step-text a , . option-block a {
border-bottom : 1 px solid rgba ( 204 , 68 , 68 , 0.3 ) ;
2026-03-18 10:36:51 -04:00
transition : border-color 0.2 s ;
}
2026-03-19 22:57:55 -04:00
. step-text a : hover , . option-block a : hover { border-bottom-color : #c44 ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
/* ─── Or divider ─── */
2026-03-18 10:36:51 -04:00
. or-divider {
2026-03-19 22:57:55 -04:00
display : flex ; align-items : center ; gap : 10 px ;
2026-03-18 10:36:51 -04:00
margin : 4 px 0 10 px 42 px ;
2026-03-19 22:57:55 -04:00
color : #444 ; font-size : 0.78 rem ; letter-spacing : 0.1 em ; text-transform : uppercase ;
2026-03-18 10:36:51 -04:00
}
. or-divider :: before , . or-divider :: after {
2026-03-19 22:57:55 -04:00
content : '' ; flex : 1 ; height : 1 px ; background : rgba ( 255 , 255 , 255 , 0.06 ) ;
2026-03-18 10:36:51 -04:00
}
. option-block {
margin-left : 42 px ;
padding : 12 px 14 px ;
background : rgba ( 255 , 255 , 255 , 0.03 ) ;
border : 1 px solid rgba ( 255 , 255 , 255 , 0.06 ) ;
border-radius : 8 px ;
2026-03-19 22:57:55 -04:00
text-align : left ; font-size : 0.88 rem ; color : #888 ; line-height : 1.5 ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. divider { height : 1 px ; background : rgba ( 152 , 0 , 0 , 0.15 ) ; margin : 24 px 0 ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
/* ─── Tags ─── */
. tag {
font-size : 0.65 rem ;
background : rgba ( 255 , 255 , 255 , 0.08 ) ;
border : 1 px solid rgba ( 255 , 255 , 255 , 0.1 ) ;
padding : 2 px 8 px ; border-radius : 4 px ;
text-transform : uppercase ; letter-spacing : 0.05 em ; color : #bbb ;
white-space : nowrap ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. tag . voice { background : rgba ( 0 , 180 , 120 , 0.2 ) ; border-color : rgba ( 0 , 180 , 120 , 0.4 ) ; color : #5effc4 ; }
. tag . beta { background : rgba ( 255 , 180 , 0 , 0.15 ) ; border-color : rgba ( 255 , 180 , 0 , 0.3 ) ; color : #ffcc55 ; }
. tag . dev { background : rgba ( 160 , 80 , 255 , 0.15 ) ; border-color : rgba ( 160 , 80 , 255 , 0.3 ) ; color : #cc88ff ; }
. tag . rust { background : rgba ( 80 , 140 , 255 , 0.15 ) ; border-color : rgba ( 80 , 140 , 255 , 0.3 ) ; color : #88aaff ; }
. tag . warn { background : rgba ( 255 , 140 , 0 , 0.15 ) ; border-color : rgba ( 255 , 140 , 0 , 0.3 ) ; color : #ffaa44 ; }
. tag . dim { background : rgba ( 255 , 255 , 255 , 0.04 ) ; border-color : rgba ( 255 , 255 , 255 , 0.08 ) ; color : #666 ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
/* ─── Featured client ─── */
. client-featured { margin-bottom : 16 px ; }
2026-03-18 10:36:51 -04:00
. client-featured a {
2026-03-19 22:57:55 -04:00
display : flex ; flex-direction : column ; align-items : center ; gap : 6 px ;
background : linear-gradient ( 135 deg , rgba ( 152 , 0 , 0 , 0.25 ) , rgba ( 120 , 0 , 0 , 0.15 ) ) ;
border : 1 px solid rgba ( 152 , 0 , 0 , 0.55 ) ;
color : #fff ; text-decoration : none ;
padding : 18 px 24 px ; border-radius : 12 px ;
2026-03-18 10:36:51 -04:00
transition : all 0.25 s ease ;
2026-03-19 22:57:55 -04:00
box-shadow : 0 0 20 px rgba ( 152 , 0 , 0 , 0.1 ) ;
2026-03-18 10:36:51 -04:00
}
. client-featured a : hover {
2026-03-19 22:57:55 -04:00
background : linear-gradient ( 135 deg , rgba ( 152 , 0 , 0 , 0.38 ) , rgba ( 120 , 0 , 0 , 0.25 ) ) ;
border-color : rgba ( 152 , 0 , 0 , 0.8 ) ;
box-shadow : 0 0 32 px rgba ( 152 , 0 , 0 , 0.25 ) ;
2026-03-18 10:36:51 -04:00
transform : translateY ( -2 px ) ;
}
2026-03-19 22:57:55 -04:00
. client-name { font-size : 1.15 rem ; font-weight : 600 ; letter-spacing : 0.05 em ; }
. client-desc { font-size : 0.82 rem ; color : #ccc ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
. tag-row { display : flex ; gap : 6 px ; flex-wrap : wrap ; justify-content : center ; margin-top : 2 px ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
/* Also-available note */
. also-available {
font-size : 0.78 rem ; color : #555 ; margin-top : 8 px ; line-height : 1.6 ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. also-available a { color : #666 ; border-bottom : 1 px solid rgba ( 102 , 102 , 102 , 0.3 ) ; transition : color 0.2 s ; }
. also-available a : hover { color : #999 ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
/* ─── Space join ─── */
. space-join {
margin-top : 20 px ; padding : 16 px 20 px ;
background : rgba ( 152 , 0 , 0 , 0.06 ) ;
border : 1 px solid rgba ( 152 , 0 , 0 , 0.2 ) ; border-radius : 10 px ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. space-join p { font-size : 0.82 rem ; color : #666 ; margin-bottom : 10 px ; }
. space-join a {
display : inline-block ;
background : rgba ( 152 , 0 , 0 , 0.15 ) ;
border : 1 px solid rgba ( 152 , 0 , 0 , 0.35 ) ;
color : #c44 ; text-decoration : none ;
padding : 8 px 20 px ; border-radius : 8 px ; font-size : 0.88 rem ;
transition : all 0.25 s ease ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. space-join a : hover { background : rgba ( 152 , 0 , 0 , 0.25 ) ; color : #fff ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
/* ─── Secondary client cards ─── */
. clients-section h3 {
font-size : 0.8 rem ; font-weight : 500 ; color : #666 ;
text-transform : uppercase ; letter-spacing : 0.12 em ; margin-bottom : 14 px ;
2026-03-19 22:51:07 -04:00
}
2026-03-19 22:57:55 -04:00
. client-group { margin-bottom : 18 px ; }
2026-03-19 22:51:07 -04:00
2026-03-19 22:57:55 -04:00
. client-group-label {
font-size : 0.75 rem ; color : #555 ;
text-transform : uppercase ; letter-spacing : 0.1 em ;
margin-bottom : 8 px ;
2026-03-19 22:51:07 -04:00
}
2026-03-19 22:57:55 -04:00
. client-cards { display : flex ; flex-direction : column ; gap : 8 px ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:51:07 -04:00
. client-card {
2026-03-19 22:57:55 -04:00
display : flex ; flex-direction : column ; gap : 6 px ;
2026-03-19 22:51:07 -04:00
background : rgba ( 255 , 255 , 255 , 0.025 ) ;
border : 1 px solid rgba ( 255 , 255 , 255 , 0.06 ) ;
2026-03-19 22:57:55 -04:00
border-radius : 10 px ; padding : 12 px 14 px ; text-align : left ;
2026-03-19 22:51:07 -04:00
transition : border-color 0.2 s ;
}
. client-card : hover { border-color : rgba ( 152 , 0 , 0 , 0.3 ) ; }
. client-card-top {
2026-03-19 22:57:55 -04:00
display : flex ; align-items : center ;
justify-content : space-between ; gap : 10 px ; flex-wrap : wrap ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:51:07 -04:00
. client-card-name {
2026-03-19 22:57:55 -04:00
font-size : 0.95 rem ; font-weight : 600 ; color : #e0e0e0 ;
2026-03-18 10:36:51 -04:00
text-decoration : none ;
2026-03-19 22:57:55 -04:00
border-bottom : 1 px solid rgba ( 204 , 68 , 68 , 0.2 ) ;
2026-03-19 22:51:07 -04:00
transition : color 0.2 s , border-color 0.2 s ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. client-card-name : hover { color : #c44 ; border-bottom-color : #c44 ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
. client-card-tags { display : flex ; gap : 5 px ; flex-wrap : wrap ; }
. client-card-desc { font-size : 0.8 rem ; color : #666 ; line-height : 1.45 ; }
2026-03-19 22:51:07 -04:00
2026-03-19 22:57:55 -04:00
/* ─── Comparison table ─── */
. comparison-section {
margin-top : 32 px ;
background : linear-gradient ( 145 deg , rgba ( 22 , 22 , 22 , 0.95 ) , rgba ( 14 , 14 , 14 , 0.98 ) ) ;
border : 1 px solid rgba ( 152 , 0 , 0 , 0.2 ) ;
border-radius : 16 px ;
overflow : hidden ;
2026-03-19 22:51:07 -04:00
}
2026-03-19 22:57:55 -04:00
. comparison-title {
font-size : 0.78 rem ; font-weight : 500 ; color : #980000 ;
text-transform : uppercase ; letter-spacing : 0.15 em ;
padding : 16 px 20 px 12 px ;
border-bottom : 1 px solid rgba ( 152 , 0 , 0 , 0.1 ) ;
2026-03-19 22:51:07 -04:00
}
2026-03-19 22:57:55 -04:00
. table-wrap { overflow-x : auto ; -webkit- overflow-scrolling : touch ; }
2026-03-19 22:51:07 -04:00
2026-03-19 22:57:55 -04:00
table {
width : 100 % ; border-collapse : collapse ;
font-size : 0.78 rem ; min-width : 640 px ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
thead tr { border-bottom : 1 px solid rgba ( 152 , 0 , 0 , 0.15 ) ; }
th {
padding : 10 px 8 px ; text-align : center ;
font-size : 0.7 rem ; font-weight : 600 ;
color : #888 ; text-transform : uppercase ; letter-spacing : 0.08 em ;
background : rgba ( 255 , 255 , 255 , 0.02 ) ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
th : first-child { text-align : left ; padding-left : 16 px ; min-width : 140 px ; }
th . ours { color : #c66 ; }
th small { display : block ; font-size : 0.6 rem ; font-weight : 400 ; color : #555 ; margin-top : 2 px ; text-transform : none ; letter-spacing : 0 ; }
tr { border-bottom : 1 px solid rgba ( 255 , 255 , 255 , 0.03 ) ; }
tr : last-child { border-bottom : none ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
tr . section-header td {
background : rgba ( 152 , 0 , 0 , 0.06 ) ;
color : #770000 ; font-weight : 600 ;
font-size : 0.65 rem ; text-transform : uppercase ; letter-spacing : 0.12 em ;
padding : 6 px 8 px 5 px 16 px ; text-align : left ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
td {
padding : 8 px 8 px ; text-align : center ; vertical-align : middle ;
color : #888 ; line-height : 1.3 ;
}
td : first-child {
text-align : left ; padding-left : 16 px ;
color : #aaa ; font-size : 0.78 rem ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
td small { display : block ; font-size : 0.68 rem ; color : #555 ; margin-top : 1 px ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
. yes { color : #5effc4 ; font-size : 1 rem ; }
. part { color : #ffcc55 ; font-size : 0.9 rem ; }
. no { color : #444 ; font-size : 1 rem ; }
/* highlight our hosted client column */
th . ours , td . ours { background : rgba ( 152 , 0 , 0 , 0.04 ) ; }
/* ─── Legend ─── */
. legend {
display : flex ; gap : 18 px ; justify-content : center ; flex-wrap : wrap ;
padding : 10 px 16 px 14 px ;
border-top : 1 px solid rgba ( 255 , 255 , 255 , 0.04 ) ;
font-size : 0.72 rem ; color : #555 ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. legend span { display : flex ; align-items : center ; gap : 5 px ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
/* ─── Security note ─── */
2026-03-19 22:51:07 -04:00
. security-note {
2026-03-19 22:57:55 -04:00
margin : 0 20 px 16 px ;
2026-03-19 22:51:07 -04:00
padding : 10 px 14 px ;
2026-03-19 22:57:55 -04:00
background : rgba ( 80 , 140 , 255 , 0.04 ) ;
border : 1 px solid rgba ( 80 , 140 , 255 , 0.12 ) ;
2026-03-19 22:51:07 -04:00
border-radius : 8 px ;
2026-03-19 22:57:55 -04:00
font-size : 0.76 rem ; color : #556 ; line-height : 1.55 ; text-align : left ;
2026-03-19 22:51:07 -04:00
}
. security-note strong { color : #88aaff ; }
2026-03-19 22:57:55 -04:00
. all-clients { margin-top : 14 px ; }
2026-03-18 10:36:51 -04:00
. all-clients a {
2026-03-19 22:57:55 -04:00
font-size : 0.78 rem ; color : #555 ;
border-bottom : 1 px solid rgba ( 85 , 85 , 85 , 0.3 ) ;
2026-03-18 10:36:51 -04:00
transition : color 0.2 s , border-color 0.2 s ;
}
2026-03-19 22:57:55 -04:00
. all-clients a : hover { color : #888 ; border-bottom-color : #888 ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
/* ─── Server info ─── */
2026-03-18 10:36:51 -04:00
. server-info {
margin-top : 24 px ;
2026-03-19 22:57:55 -04:00
background : linear-gradient ( 145 deg , rgba ( 22 , 22 , 22 , 0.95 ) , rgba ( 14 , 14 , 14 , 0.98 ) ) ;
border : 1 px solid rgba ( 152 , 0 , 0 , 0.2 ) ;
border-radius : 12 px ; overflow : hidden ;
2026-03-18 10:36:51 -04:00
}
. server-info-title {
2026-03-19 22:57:55 -04:00
font-size : 0.78 rem ; font-weight : 500 ; color : #980000 ;
text-transform : uppercase ; letter-spacing : 0.15 em ;
2026-03-18 10:36:51 -04:00
padding : 14 px 20 px 10 px ;
2026-03-19 22:57:55 -04:00
border-bottom : 1 px solid rgba ( 152 , 0 , 0 , 0.1 ) ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. info-grid { display : grid ; grid-template-columns : 1 fr 1 fr ; }
2026-03-18 10:36:51 -04:00
. info-item {
padding : 12 px 18 px ;
border-bottom : 1 px solid rgba ( 255 , 255 , 255 , 0.03 ) ;
border-right : 1 px solid rgba ( 255 , 255 , 255 , 0.03 ) ;
text-align : left ;
}
. info-item : nth-child ( even ) { border-right : none ; }
. info-item : nth-last-child ( -n + 2 ) { border-bottom : none ; }
2026-03-19 22:57:55 -04:00
. info-label { font-size : 0.7 rem ; color : #555 ; text-transform : uppercase ; letter-spacing : 0.1 em ; margin-bottom : 3 px ; }
. info-value { font-size : 0.88 rem ; color : #ccc ; }
2026-03-18 10:36:51 -04:00
. privacy-strip {
padding : 10 px 18 px ;
2026-03-19 22:57:55 -04:00
border-top : 1 px solid rgba ( 152 , 0 , 0 , 0.1 ) ;
display : flex ; gap : 18 px ; justify-content : center ; flex-wrap : wrap ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. privacy-badge { font-size : 0.75 rem ; color : #5effc4 ; display : flex ; align-items : center ; gap : 5 px ; }
. privacy-badge :: before { content : '✓' ; font-weight : 700 ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
/* ─── Legal / contact / footer ─── */
2026-03-18 10:36:51 -04:00
. legal-note {
2026-03-19 22:57:55 -04:00
margin-top : 24 px ; padding : 12 px 18 px ;
2026-03-18 10:36:51 -04:00
background : rgba ( 255 , 255 , 255 , 0.02 ) ;
border : 1 px solid rgba ( 255 , 255 , 255 , 0.05 ) ;
2026-03-19 22:57:55 -04:00
border-radius : 8 px ; font-size : 0.75 rem ; color : #444 ;
line-height : 1.6 ; text-align : left ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. legal-note a { color : #555 ; border-bottom : 1 px solid rgba ( 85 , 85 , 85 , 0.3 ) ; }
. legal-note a : hover { color : #888 ; }
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
. contact {
margin-top : 24 px ; padding : 16 px ;
background : linear-gradient ( 145 deg , rgba ( 22 , 22 , 22 , 0.95 ) , rgba ( 14 , 14 , 14 , 0.98 ) ) ;
border : 1 px solid rgba ( 152 , 0 , 0 , 0.2 ) ;
border-radius : 12 px ; text-align : center ;
2026-03-18 10:36:51 -04:00
}
2026-03-19 22:57:55 -04:00
. footer {
margin-top : 20 px ; font-size : 0.72 rem ; color : #383838 ;
letter-spacing : 0.04 em ;
display : flex ; justify-content : center ; gap : 14 px ; flex-wrap : wrap ;
}
. footer a { color : #444 ; transition : color 0.2 s ; }
. footer a : hover { color : #777 ; }
2026-03-18 10:36:51 -04:00
2026-03-19 23:06:00 -04:00
/* ─── Sticky first table column (all screen sizes) ─── */
td : first-child {
position : sticky ;
left : 0 ;
z-index : 1 ;
background : #0d0d0d ;
}
th : first-child {
position : sticky ;
left : 0 ;
z-index : 2 ;
background : #111 ;
}
tr . section-header td {
/* section headers span full width — override sticky bg */
position : static ;
background : rgba ( 152 , 0 , 0 , 0.06 ) ;
}
/* Scroll hint — visible only on mobile via JS class */
. scroll-hint {
display : none ;
font-size : 0.72 rem ;
color : #3a3a3a ;
padding : 0 16 px 10 px ;
letter-spacing : 0.05 em ;
}
/* ─── Tablet (≤ 700px) ─── */
@ media ( max-width : 700px ) {
body { align-items : flex-start ; }
}
/* ─── Mobile (≤ 540px) ─── */
@ media ( max-width : 540px ) {
body { padding : 20 px 12 px 40 px ; }
. logo { width : 100 px ; height : 100 px ; margin-bottom : 20 px ; }
h1 { font-size : 1.5 rem ; letter-spacing : 0.1 em ; }
. subtitle { font-size : 0.78 rem ; letter-spacing : 0.18 em ; margin-bottom : 26 px ; }
. card { padding : 22 px 16 px ; }
. step-text { font-size : 0.88 rem ; }
. homeserver { font-size : 0.75 rem ; word-break : break-all ; }
2026-03-18 10:36:51 -04:00
. or-divider , . option-block { margin-left : 0 ; }
2026-03-19 23:06:00 -04:00
. client-card-top { flex-direction : column ; align-items : flex-start ; gap : 6 px ; }
. client-card-desc { font-size : 0.79 rem ; }
. client-card-tags { gap : 4 px ; }
. also-available { font-size : 0.75 rem ; }
/* Table */
. scroll-hint { display : block ; }
table { font-size : 0.71 rem ; min-width : 520 px ; }
th { padding : 8 px 5 px ; font-size : 0.6 rem ; }
th : first-child { min-width : 100 px ; padding-left : 10 px ; }
td { padding : 7 px 5 px ; }
td : first-child { font-size : 0.71 rem ; padding-left : 10 px ; }
td small , th small { font-size : 0.58 rem ; }
. yes { font-size : 0.88 rem ; }
. part { font-size : 0.82 rem ; }
. no { font-size : 0.88 rem ; }
. comparison-title { font-size : 0.7 rem ; padding : 12 px 14 px 8 px ; letter-spacing : 0.1 em ; }
. security-note { margin : 10 px 12 px 4 px ; font-size : 0.71 rem ; }
. legend { padding : 8 px 12 px 12 px ; gap : 12 px ; font-size : 0.68 rem ; }
/* Server info */
. server-info-title { font-size : 0.7 rem ; padding : 12 px 14 px 8 px ; }
. info-item { padding : 10 px 14 px ; }
. info-label { font-size : 0.65 rem ; }
. info-value { font-size : 0.82 rem ; }
. privacy-strip { flex-direction : column ; align-items : center ; gap : 8 px ; padding : 10 px 14 px ; }
. privacy-badge { font-size : 0.71 rem ; }
/* Legal / footer */
. legal-note { font-size : 0.72 rem ; padding : 11 px 14 px ; }
. contact { padding : 14 px ; }
. footer { gap : 8 px ; font-size : 0.68 rem ; }
}
/* ─── Very small (≤ 380px) ─── */
@ media ( max-width : 380px ) {
h1 { font-size : 1.3 rem ; }
. logo { width : 84 px ; height : 84 px ; }
. card { padding : 18 px 12 px ; }
table { font-size : 0.66 rem ; min-width : 480 px ; }
th { font-size : 0.55 rem ; padding : 7 px 4 px ; }
td { padding : 6 px 4 px ; }
td : first-child { font-size : 0.66 rem ; min-width : 90 px ; }
2026-03-18 10:36:51 -04:00
}
< / style >
< / head >
< body >
2026-03-19 22:57:55 -04:00
< div class = "container" >
< img class = "logo" src = "https://photos.lotusguild.org/api/assets/3c4eb2da-0d06-407f-bdb7-c9e4cf795f0a/thumbnail?key=4aoZxX5-FHE3m_Ywwz1uGo3iNW53kmFztxfUw91PdOgphPNxayLFicNuxPvit1OYTpY&size=preview&c=jUqDBQAWF9iId3J%2FyAeIcIAICEd4d3BzSA%3D%3D" alt = "Lotus Guild" >
< h1 > < span > Lotus< / span > Guild< / h1 >
< p class = "subtitle" > Private Communications< / p >
<!-- ── How to Join ── -->
< div class = "card" >
< h2 > How to Join< / h2 >
< ol class = "steps" >
< li >
< span class = "step-num" > 1< / span >
< span class = "step-text" > Open < a href = "https://chat.lotusguild.org" target = "_blank" rel = "noopener" > chat.lotusguild.org< / a > — your homeserver is pre-configured< / span >
< / li >
< li >
< span class = "step-num" > 2< / span >
< span class = "step-text" > Register with a < strong > token from Jared< / strong > — < code class = "homeserver" > @jared:matrix.lotusguild.org< / code > < / span >
< / li >
< li >
< span class = "step-num" > 3< / span >
< span class = "step-text" > Join the < a href = "https://matrix.to/#/!-1ZBnAH-JiCOV8MGSKN77zDGTuI3pgSdy8Unu_DrDyc?via=matrix.lotusguild.org&via=matrix.org" target = "_blank" rel = "noopener" > Lotus Guild Space< / a > to access all rooms< / span >
< / li >
< / ol >
< div class = "or-divider" > or join from another server< / div >
< div class = "option-block" >
Already have a Matrix account? Sign up free at < a href = "https://app.element.io/#/register?hs_url=https://mozilla.modular.im" target = "_blank" rel = "noopener" > mozilla.org< / a > or < a href = "https://app.element.io/#/register" target = "_blank" rel = "noopener" > matrix.org< / a > , then < a href = "https://matrix.to/#/!-1ZBnAH-JiCOV8MGSKN77zDGTuI3pgSdy8Unu_DrDyc?via=matrix.lotusguild.org&via=matrix.org" target = "_blank" rel = "noopener" > join our space< / a > .
< / div >
< div class = "divider" > < / div >
<!-- ── Recommended client ── -->
< div class = "clients-section" >
< h3 > Recommended Client< / h3 >
< div class = "client-featured" >
< a href = "https://chat.lotusguild.org" target = "_blank" rel = "noopener" >
< span class = "client-name" > Lotus Guild Chat< / span >
< span class = "client-desc" > Hosted Cinny — homeserver pre-configured, no setup< / span >
< span class = "tag-row" >
< span class = "tag dim" > Desktop & Web< / span >
< span class = "tag dev" > Dev Branch< / span >
< span class = "tag voice" > Voice & Video Rooms< / span >
< span class = "tag" > Discord-like UI< / span >
< / span >
< / a >
< / div >
< p class = "also-available" >
Runs the Cinny < strong > dev branch< / strong > — latest beta features, updated nightly.
Prefer stable? Use < a href = "https://cinny.in" target = "_blank" rel = "noopener" > cinny.in< / a > and set homeserver to < code style = "font-size:0.8em;color:#e88;" > matrix.lotusguild.org< / code > .
< / p >
< div class = "space-join" >
< p > Already signed in? Jump straight into the community:< / p >
< a href = "https://matrix.to/#/!-1ZBnAH-JiCOV8MGSKN77zDGTuI3pgSdy8Unu_DrDyc?via=matrix.lotusguild.org&via=matrix.org" target = "_blank" rel = "noopener" > Join Lotus Guild Space → < / a >
2026-03-18 10:36:51 -04:00
< / div >
< div class = "divider" > < / div >
2026-03-19 22:57:55 -04:00
<!-- ── Other clients ── -->
2026-03-18 10:36:51 -04:00
< div class = "clients-section" >
2026-03-19 22:57:55 -04:00
< h3 > Other Clients< / h3 >
< div class = "client-group" >
< p class = "client-group-label" > Mobile — iOS & Android< / p >
< div class = "client-cards" >
< div class = "client-card" >
< div class = "client-card-top" >
< a href = "https://element.io/element-x" target = "_blank" rel = "noopener" class = "client-card-name" > Element X< / a >
< div class = "client-card-tags" >
< span class = "tag dim" > iOS< / span >
< span class = "tag dim" > Android< / span >
< span class = "tag rust" > Rust SDK< / span >
< span class = "tag voice" > Voice, Video & Screenshare< / span >
2026-03-19 22:51:07 -04:00
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< p class = "client-card-desc" > Fastest Matrix client — instant load via Sliding Sync. Native MatrixRTC calls and screenshare. Rust encryption (Vodozemac). Spaces viewing works; creating/managing spaces still in progress.< / p >
< / div >
< div class = "client-card" >
< div class = "client-card-top" >
< a href = "https://fluffychat.im/" target = "_blank" rel = "noopener" class = "client-card-name" > FluffyChat< / a >
< div class = "client-card-tags" >
< span class = "tag dim" > iOS< / span >
< span class = "tag dim" > Android< / span >
< span class = "tag dim" > Desktop< / span >
< span class = "tag dim" > Web< / span >
< span class = "tag rust" > Rust SDK< / span >
< span class = "tag warn" > Calls Experimental< / span >
2026-03-19 22:51:07 -04:00
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< p class = "client-card-desc" > Simple, beginner-friendly, fully cross-platform. Rust encryption (Vodozemac). Unique: supports image captions (text + image as one event). Voice/video calls are experimental — reliability varies by homeserver and platform.< / p >
2026-03-19 22:51:07 -04:00
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< / div >
2026-03-19 22:51:07 -04:00
2026-03-19 22:57:55 -04:00
< div class = "client-group" >
< p class = "client-group-label" > Discord-like — Android, Windows & Linux< / p >
< div class = "client-cards" >
< div class = "client-card" >
< div class = "client-card-top" >
< a href = "https://commet.chat/" target = "_blank" rel = "noopener" class = "client-card-name" > Commet< / a >
< div class = "client-card-tags" >
< span class = "tag dim" > Android< / span >
< span class = "tag dim" > Windows< / span >
< span class = "tag dim" > Linux< / span >
< span class = "tag beta" > Beta< / span >
< span class = "tag voice" > Voice & Video< / span >
2026-03-19 22:51:07 -04:00
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< p class = "client-card-desc" > Most Discord-like client overall. Multi-account support, built-in GIF search (via privacy-respecting proxy — GIFs upload to your homeserver, not tracked by Tenor). Shared calendars and photo albums. No iOS or macOS yet. Active early-stage development.< / p >
2026-03-18 10:36:51 -04:00
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< / div >
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
< div class = "client-group" >
< p class = "client-group-label" > Desktop — Windows, macOS & Linux< / p >
< div class = "client-cards" >
< div class = "client-card" >
< div class = "client-card-top" >
< a href = "https://element.io/download" target = "_blank" rel = "noopener" class = "client-card-name" > Element< / a >
< div class = "client-card-tags" >
< span class = "tag dim" > Windows< / span >
< span class = "tag dim" > macOS< / span >
< span class = "tag dim" > Linux< / span >
< span class = "tag dim" > Web< / span >
< span class = "tag voice" > Voice, Video & Screenshare< / span >
2026-03-19 22:51:07 -04:00
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< p class = "client-card-desc" > Most feature-complete Matrix client — every spec feature including polls, widgets, threads, screenshare. Heavier on resources. Encrypted message search on desktop only (not web).< / p >
< / div >
< div class = "client-card" >
< div class = "client-card-top" >
< a href = "https://nheko-reborn.github.io/" target = "_blank" rel = "noopener" class = "client-card-name" > Nheko< / a >
< div class = "client-card-tags" >
< span class = "tag dim" > Windows< / span >
< span class = "tag dim" > macOS< / span >
< span class = "tag dim" > Linux< / span >
< span class = "tag voice" > Voice & Video< / span >
2026-03-19 22:51:07 -04:00
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< p class = "client-card-desc" > Native C++/Qt client — lightest desktop option, no Electron. Deep KDE/Plasma integration. No threads, no mobile or web. Best for Linux power users who want minimal resource usage.< / p >
2026-03-18 10:36:51 -04:00
< / div >
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< p class = "all-clients" > < a href = "https://matrix.org/ecosystem/clients/" target = "_blank" rel = "noopener" > View all Matrix clients → < / a > < / p >
2026-03-18 10:36:51 -04:00
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< / div > <!-- end .card -->
<!-- ── Feature Comparison Table ── -->
< div class = "comparison-section" >
< p class = "comparison-title" > Client Feature Comparison — March 2026< / p >
2026-03-19 23:06:00 -04:00
< p class = "scroll-hint" id = "scrollHint" > ← swipe to compare →< / p >
2026-03-19 22:57:55 -04:00
< div class = "table-wrap" >
< table >
< thead >
< tr >
< th > < / th >
< th class = "ours" > Cinny< small > chat.lotusguild.org< br > dev branch< / small > < / th >
< th > Element X< small > iOS & Android< / small > < / th >
< th > FluffyChat< small > All platforms< / small > < / th >
< th > Commet< small > Android / Win / Linux< / small > < / th >
< th > Element< small > Web & Desktop< / small > < / th >
< th > Nheko< small > Desktop only< / small > < / th >
< / tr >
< / thead >
< tbody >
<!-- Platform -->
< tr class = "section-header" > < td colspan = "7" > Platform< / td > < / tr >
< tr >
< td > iOS< / td >
< td class = "ours" > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
< tr >
< td > Android< / td >
< td class = "ours" > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
< tr >
< td > Desktop app< / td >
< td class = "ours" > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < small > Win & Linux< / small > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< / tr >
< tr >
< td > Web browser< / td >
< td class = "ours" > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
< tr >
< td > Performance< / td >
< td class = "ours" > Light< / td >
< td > Very fast< small > Sliding Sync< / small > < / td >
< td > Moderate< / td >
< td > Moderate< / td >
< td > Heavy< small > Electron / JS< / small > < / td >
< td > Light< small > Native C++< / small > < / td >
< / tr >
<!-- Security -->
< tr class = "section-header" > < td colspan = "7" > Security & Encryption< / td > < / tr >
< tr >
< td > E2EE< / td >
< td class = "ours" > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< / tr >
< tr >
< td > Rust SDK (Vodozemac)< small > stronger crypto track record< / small > < / td >
< td class = "ours" > < span class = "no" > ✗< / span > < small > js-sdk< / small > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < small > js-sdk, migrating< / small > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
< tr >
< td > Device verification< / td >
< td class = "ours" > < span class = "part" > ~< / span > < small > requests may show as< br > "Unsupported message"< / small > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< / tr >
<!-- Calling -->
< tr class = "section-header" > < td colspan = "7" > Voice & Video< / td > < / tr >
< tr >
< td > Voice & video calls< / td >
< td class = "ours" > < span class = "part" > ~< / span > < small > dedicated space rooms only,< br > not DMs< / small > < / td >
< td > < span class = "yes" > ✓< / span > < small > MatrixRTC< / small > < / td >
< td > < span class = "part" > ~< / span > < small > experimental, varies< br > by homeserver< / small > < / td >
2026-03-19 23:02:08 -04:00
< td > < span class = "part" > ~< / span > < small > 1:1 + group,< br > no E2EE voice rooms< / small > < / td >
2026-03-19 22:57:55 -04:00
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< / tr >
< tr >
< td > Screenshare< / td >
< td class = "ours" > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "part" > ~< / span > < small > partial< / small > < / td >
< / tr >
< tr >
< td > Group calls< / td >
< td class = "ours" > < span class = "part" > ~< / span > < small > space rooms only< / small > < / td >
< td > < span class = "yes" > ✓< / span > < small > MatrixRTC< / small > < / td >
< td > < span class = "no" > ✗< / span > < / td >
2026-03-19 23:02:08 -04:00
< td > < span class = "part" > ~< / span > < small > no E2EE voice rooms< / small > < / td >
2026-03-19 22:57:55 -04:00
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "part" > ~< / span > < small > partial< / small > < / td >
< / tr >
<!-- Core features -->
< tr class = "section-header" > < td colspan = "7" > Core Features< / td > < / tr >
< tr >
< td > Spaces< / td >
< td class = "ours" > < span class = "yes" > ✓< / span > < small > best-in-class sub-space nav< / small > < / td >
< td > < span class = "part" > ~< / span > < small > viewing works;< br > management in progress< / small > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < small > Discord-like categories< / small > < / td >
< td > < span class = "yes" > ✓< / span > < small > sub-spaces clunky< / small > < / td >
< td > < span class = "part" > ~< / span > < small > limited< / small > < / td >
< / tr >
< tr >
< td > Threads< / td >
< td class = "ours" > < span class = "part" > ~< / span > < small > basic, no dedicated view< / small > < / td >
< td > < span class = "part" > ~< / span > < small > Labs flag< / small > < / td >
< td > < span class = "no" > ✗< / span > < small > shows as regular messages< / small > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
< tr >
< td > Polls< / td >
< td class = "ours" > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "part" > ~< / span > < small > recently added< / small > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
< tr >
< td > Custom emoji & stickers< / td >
< td class = "ours" > < span class = "yes" > ✓< / span > < small > best-in-class< / small > < / td >
< td > < span class = "part" > ~< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < small > bulk upload, Signal packs< / small > < / td >
< td > < span class = "part" > ~< / span > < small > sometimes shows mxc:// URLs< / small > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< / tr >
< tr >
< td > GIF search / picker< / td >
< td class = "ours" > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < small > privacy proxy,< br > uploads to homeserver< / small > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
< tr >
< td > Message search (encrypted)< / td >
< td class = "ours" > < span class = "part" > ~< / span > < small > partial, some rooms broken< / small > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "part" > ~< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "part" > ~< / span > < small > desktop only, not web< / small > < / td >
< td > < span class = "part" > ~< / span > < / td >
< / tr >
< tr >
< td > Widgets< / td >
< td class = "ours" > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
<!-- UX / extras -->
< tr class = "section-header" > < td colspan = "7" > UX & Extras< / td > < / tr >
< tr >
< td > Multi-account< / td >
< td class = "ours" > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "part" > ~< / span > < small > supported but clunky< / small > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < small > CLI profiles only< / small > < / td >
< / tr >
< tr >
< td > Image captions< small > (text + image as one event)< / small > < / td >
< td class = "ours" > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < small > unique feature< / small > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "part" > ~< / span > < / td >
< / tr >
< tr >
< td > Discord-like UI< / td >
< td class = "ours" > < span class = "yes" > ✓< / span > < small > best-in-class for web< / small > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < small > WhatsApp/Telegram style< / small > < / td >
< td > < span class = "yes" > ✓< / span > < small > most Discord-like overall< / small > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
< tr >
< td > Shared calendars & albums< / td >
< td class = "ours" > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "yes" > ✓< / span > < small > unique to Commet< / small > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< td > < span class = "no" > ✗< / span > < / td >
< / tr >
2026-03-19 23:02:08 -04:00
< tr >
< td > Deleted message visibility< small > (redacted events)< / small > < / td >
< td class = "ours" > < span class = "no" > ✗< / span > < small > hides deleted messages< br > entirely — no trace< / small > < / td >
< td > < span class = "yes" > ✓< / span > < small > "Message deleted"< br > placeholder shown< / small > < / td >
< td > < span class = "yes" > ✓< / span > < small > shows redaction notice< / small > < / td >
< td > < span class = "yes" > ✓< / span > < small > shows redaction notice< / small > < / td >
< td > < span class = "yes" > ✓< / span > < small > "Message deleted"< br > placeholder shown< / small > < / td >
< td > < span class = "yes" > ✓< / span > < small > shows redaction notice< / small > < / td >
< / tr >
2026-03-19 22:57:55 -04:00
< tr >
< td > Push notifications< / td >
< td class = "ours" > < span class = "part" > ~< / span > < small > web push only< / small > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< td > < span class = "yes" > ✓< / span > < small > desktop< / small > < / td >
< td > < span class = "yes" > ✓< / span > < / td >
< / tr >
< / tbody >
< / table >
< / div > <!-- table - wrap -->
< div class = "security-note" style = "margin:14px 16px 6px;" >
< strong > Encryption architecture:< / strong > Element X, FluffyChat, and Commet use < strong > Vodozemac< / strong > — the Rust implementation of Matrix encryption — which has a stronger security track record than the older JavaScript SDK. Cinny and Element Web/Desktop currently use < strong > matrix-js-sdk< / strong > ; Element is actively migrating to the Rust SDK via WebAssembly. Rust-based clients were not affected by historical js-sdk implementation vulnerabilities.
< / div >
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
< div class = "legend" >
< span > < span class = "yes" > ✓< / span > Full support< / span >
< span > < span class = "part" > ~< / span > Partial / experimental< / span >
< span > < span class = "no" > ✗< / span > Not supported< / span >
< / div >
< / div > <!-- comparison - section -->
<!-- ── Server Details ── -->
< div class = "server-info" >
< p class = "server-info-title" > Server Details< / p >
< div class = "info-grid" >
< div class = "info-item" >
< div class = "info-label" > Access< / div >
< div class = "info-value" > Invite-only< / div >
< / div >
< div class = "info-item" >
< div class = "info-label" > Max Upload< / div >
< div class = "info-value" > 200 MB / file< / div >
< / div >
< div class = "info-item" >
< div class = "info-label" > Message History< / div >
< div class = "info-value" > Kept indefinitely< / div >
< / div >
< div class = "info-item" >
< div class = "info-label" > Media Retention< / div >
< div class = "info-value" > 3 yr local · 1 yr remote< / div >
< / div >
< div class = "info-item" >
< div class = "info-label" > Federation< / div >
< div class = "info-value" > Fully federated< / div >
2026-03-18 10:36:51 -04:00
< / div >
2026-03-19 22:57:55 -04:00
< div class = "info-item" >
< div class = "info-label" > Minimum Age< / div >
< div class = "info-value" > 13+ (COPPA)< / div >
2026-03-18 10:36:51 -04:00
< / div >
< / div >
2026-03-19 22:57:55 -04:00
< div class = "privacy-strip" >
< span class = "privacy-badge" > No ads or tracking< / span >
< span class = "privacy-badge" > No data sold< / span >
< span class = "privacy-badge" > E2EE — server cannot read encrypted rooms< / span >
2026-03-18 10:36:51 -04:00
< / div >
2026-03-19 22:57:55 -04:00
< / div >
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
< div class = "legal-note" >
This service is provided "as-is" with no uptime guarantee. Not for emergency use — do not use to contact emergency services (e.g. 911). Use is governed by our < a href = "https://wiki.lotusguild.org/en/Legal/terms-of-service" target = "_blank" rel = "noopener" > Terms of Service< / a > and < a href = "https://wiki.lotusguild.org/en/Legal/privacy-policy" target = "_blank" rel = "noopener" > Privacy Policy< / a > . Governing law: State of Ohio, United States.
< / div >
2026-03-18 10:36:51 -04:00
2026-03-19 22:57:55 -04:00
< div class = "contact" >
< p style = "font-size:0.85rem;color:#777;margin-bottom:4px;" > Questions or need a registration token?< / p >
< p > Reach out to < code class = "homeserver" > @jared:matrix.lotusguild.org< / code > < / p >
2026-03-18 10:36:51 -04:00
< / div >
2026-03-19 22:57:55 -04:00
< p class = "footer" >
< a href = "https://wiki.lotusguild.org/en/Services/service-matrix" target = "_blank" rel = "noopener" > Wiki & Setup Guide< / a >
< span > · < / span >
< a href = "https://wiki.lotusguild.org/en/Legal/privacy-policy" target = "_blank" rel = "noopener" > Privacy Policy< / a >
< span > · < / span >
< a href = "https://wiki.lotusguild.org/en/Legal/terms-of-service" target = "_blank" rel = "noopener" > Terms of Service< / a >
< span > · < / span >
< span > Powered by Matrix · E2E Encrypted< / span >
< / p >
< / div > <!-- container -->
2026-03-19 23:06:00 -04:00
< script >
// Show scroll hint only on touch devices; hide once table is scrolled
if ( 'ontouchstart' in window || navigator . maxTouchPoints > 0 ) {
var hint = document . getElementById ( 'scrollHint' ) ;
if ( hint ) hint . style . display = 'block' ;
var wrap = hint && hint . nextElementSibling ;
if ( wrap ) wrap . addEventListener ( 'scroll' , function hide ( ) {
hint . style . display = 'none' ;
wrap . removeEventListener ( 'scroll' , hide ) ;
} , { passive : true } ) ;
}
< / script >
2026-03-18 10:36:51 -04:00
< / body >
< / html >