PageSourceSearch

https://www.servicespace.org/projects

html servicespace.org collected 2026-10-02 04:56:37 UTC 65,137 bytes, 1,218 lines download raw bytes

1
2<!DOCTYPE html>
3<html lang="en">
4<head>
5    <meta charset="UTF-8">
6    <meta name="viewport" content="width=device-width, initial-scale=1.0">
7    
8    <!-- Title: Use HTML_TITLE from generateMetaTags if set, else build dynamically -->
9    <title>Our Ecosystem | ServiceSpace</title>
10    
11    <!-- Meta Tags: Use META from generateMetaTags if set, else use inline defaults -->
12        <meta name="description" content="Explore 20+ ServiceSpace initiatives including DailyGood, Karma Kitchen, Awakin Circles, KindSpring, and more.">
13<meta name="keywords" content="servicespace, gift economy, volunteerism, kindness, compassion, gandhi 3.0, inner transformation, service">
14<meta name="author" content="ServiceSpace.org">
15<meta property="og:title" content="Our Ecosystem">
16<meta property="og:description" content="Small acts that change the world. A volunteer-run ecosystem incubating compassionate action since 1999.">
17<meta property="og:image" content="https://www.servicespace.org/images/og-image.jpg">
18<meta property="og:type" content="website">
19<meta property="og:url" content="https://www.servicespace.org/">
20<meta property="twitter:card" content="summary_large_image">
21<meta name="title" content="Our Ecosystem">
22<meta property="twitter:title" content="Our Ecosystem">
23<meta property="twitter:description" content="Explore 20+ ServiceSpace initiatives including DailyGood, Karma Kitchen, Awakin Circles, KindSpring, and more.">
24<meta property="twitter:image" content="https://www.servicespace.org/images/og-image.jpg">
25
26        
27    <!-- Base URL - Set per site -->
28        <base href="https://www.servicespace.org/">
29        
30    <!-- Favicons -->
31    <link rel="shortcut icon" href="https://www.servicespace.org/favicon.ico">
32    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="images/ico/apple-touch-icon-144-precomposed.png">
33    
34    <!-- Google Fonts -->
35    <link rel="preconnect" href="https://fonts.googleapis.com">
36    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
37    <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=DM+Sans:opsz,[email protected],400;9..40,500;9..40,600&display=swap" rel="stylesheet">
38    
39    <!-- Bootstrap Icons -->
40    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css">
41    
42    <!-- Swiper CSS (for carousels) -->
43    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
44    
45    <!-- ============================================
46         GLOBAL STYLES - Header/Footer (all sites)
47         ============================================ -->
48    <link rel="stylesheet" href="https://pod.servicespace.org/assets/css/welcome/global_styles.css?v=1furn">
49    
50    <!-- ============================================
51         PAGE STYLES - Site-specific
52         ============================================ -->
53        <!-- ServiceSpace.org Base Styles -->
54    <link rel="stylesheet" href="https://www.servicespace.org/welcome/css/ss_base.css?v=1furn">
55        
56        
57        
58    <link rel="stylesheet" href="welcome/css/projects.css">    </head>
59<body class="">
60
61            <!-- ============================================
62         GLOBAL HEADER
63         ============================================ -->
64    <header class="ss-header">
65        <div class="ss-header-container">
66            
67            <!-- Logo Area -->
68            <div class="ss-logo-area">
69                <a href="https://www.servicespace.org/" class="ss-logo">
70                    <img src="https://www.servicespace.org/images/index2026/logo_sm2.png" alt="ServiceSpace">
71                </a>
72                            </div>
73            
74            <!-- Desktop Navigation -->
75            <nav class="ss-nav">
76                
77                <!-- Ecosystem Dropdown -->
78                <div class="ss-nav-item">
79                    <button class="ss-nav-link">
80                        Ecosystem <i class="bi bi-chevron-down"></i>
81                    </button>
82                    <div class="ss-dropdown ss-dropdown-wide">
83                        <a href="https://www.servicespace.org/projects" class="ss-dropdown-item">
84                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-teal) 0%, var(--ss-teal-deep) 100%);">
85                                <i class="bi bi-flower1"></i>
86                            </div>
87                            <div class="ss-dropdown-content">
88                                <div class="ss-dropdown-title">Explore All Projects</div>
89                                <div class="ss-dropdown-desc">Our family of projects</div>
90                            </div>
91                        </a>
92                        
93                        <div class="ss-dropdown-divider"></div>
94                        
95                        <a href="https://www.dailygood.org" class="ss-dropdown-item" target="_blank">
96                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-gold) 0%, #e8b84a 100%);">
97                                <i class="bi bi-sun"></i>
98                            </div>
99                            <div class="ss-dropdown-content">
100                                <div class="ss-dropdown-title">DailyGood</div>
101                                <div class="ss-dropdown-desc">News that inspires</div>
102                            </div>
103                        </a>
104                        
105                        <a href="https://www.karmakitchen.org" class="ss-dropdown-item" target="_blank">
106                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-coral) 0%, #e07a65 100%);">
107                                <i class="bi bi-heart"></i>
108                            </div>
109                            <div class="ss-dropdown-content">
110                                <div class="ss-dropdown-title">Karma Kitchen</div>
111                                <div class="ss-dropdown-desc">Pay-it-forward restaurants</div>
112                            </div>
113                        </a>
114                        
115                        <a href="https://www.awakin.org" class="ss-dropdown-item" target="_blank">
116                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-sage) 0%, #7fb578 100%);">
117                                <i class="bi bi-circle"></i>
118                            </div>
119                            <div class="ss-dropdown-content">
120                                <div class="ss-dropdown-title">Awakin Circles</div>
121                                <div class="ss-dropdown-desc">Weekly meditation gatherings</div>
122                            </div>
123                        </a>
124                        
125                        <div class="ss-dropdown-footer">
126                            <a href="https://www.servicespace.org/projects">View all 20+ initiatives →</a>
127                        </div>
128                    </div>
129                </div>
130                
131                <!-- Pods Dropdown -->
132                <div class="ss-nav-item">
133                    <button class="ss-nav-link ">
134                        Pods <i class="bi bi-chevron-down"></i>
135                    </button>
136                    <div class="ss-dropdown">
137                        <a href="https://pod.servicespace.org/welcome" class="ss-dropdown-item">
138                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-teal) 0%, var(--ss-teal-light) 100%);">
139                                <i class="bi bi-brightness-high"></i>
140                            </div>
141                            <div class="ss-dropdown-content">
142                                <div class="ss-dropdown-title">What Are Pods?</div>
143                                <div class="ss-dropdown-desc">An introduction to learning pods</div>
144                            </div>
145                        </a>
146                        
147                        <div class="ss-dropdown-divider"></div>
148                        
149                        <a href="https://pod.servicespace.org/apply" class="ss-dropdown-item">
150                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-gold) 0%, #e8b84a 100%);">
151                                <i class="bi bi-search"></i>
152                            </div>
153                            <div class="ss-dropdown-content">
154                                <div class="ss-dropdown-title">Join a Pod</div>
155                                <div class="ss-dropdown-desc">Find your next journey</div>
156                            </div>
157                        </a>
158                        
159                        <a href="https://pod.servicespace.org/about" class="ss-dropdown-item">
160                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-sage) 0%, #7fb578 100%);">
161                                <i class="bi bi-book"></i>
162                            </div>
163                            <div class="ss-dropdown-content">
164                                <div class="ss-dropdown-title">Our Approach</div>
165                                <div class="ss-dropdown-desc">How transformative learning works</div>
166                            </div>
167                        </a>
168                        
169                        <a href="https://pod.servicespace.org/host" class="ss-dropdown-item">
170                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-coral) 0%, #e07a65 100%);">
171                                <i class="bi bi-person-plus"></i>
172                            </div>
173                            <div class="ss-dropdown-content">
174                                <div class="ss-dropdown-title">Host a Pod</div>
175                                <div class="ss-dropdown-desc">Create space for others</div>
176                            </div>
177                        </a>
178                    </div>
179                </div>
180                
181                <!-- About Dropdown -->
182                <div class="ss-nav-item">
183                    <button class="ss-nav-link">
184                        About <i class="bi bi-chevron-down"></i>
185                    </button>
186                    <div class="ss-dropdown">
187                        <a href="https://www.servicespace.org/about" class="ss-dropdown-item">
188                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-teal) 0%, var(--ss-teal-deep) 100%);">
189                                <i class="bi bi-book"></i>
190                            </div>
191                            <div class="ss-dropdown-content">
192                                <div class="ss-dropdown-title">About Us</div>
193                                <div class="ss-dropdown-desc">Our values, story &amp; people</div>
194                            </div>
195                        </a>
196                        
197                        <a href="https://www.servicespace.org/vision" class="ss-dropdown-item">
198                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-gold) 0%, #e8b84a 100%);">
199                                <i class="bi bi-eye"></i>
200                            </div>
201                            <div class="ss-dropdown-content">
202                                <div class="ss-dropdown-title">Our Vision</div>
203                                <div class="ss-dropdown-desc">Change yourself, change the world</div>
204                            </div>
205                        </a>
206                        
207                        <a href="https://www.servicespace.org/join" class="ss-dropdown-item">
208                            <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-sage) 0%, #7fb578 100%);">
209                                <i class="bi bi-people"></i>
210                            </div>
211                            <div class="ss-dropdown-content">
212                                <div class="ss-dropdown-title">Get Involved</div>
213                                <div class="ss-dropdown-desc">Join the movement</div>
214                            </div>
215                        </a>
216                        
217                        <div class="ss-dropdown-divider"></div>
218                        
219                        <a href="https://pod.servicespace.org/contact" class="ss-dropdown-item">
220                            <div class="ss-dropdown-icon" style="background: var(--ss-cream); color: var(--ss-teal);">
221                                <i class="bi bi-envelope"></i>
222                            </div>
223                            <div class="ss-dropdown-content">
224                                <div class="ss-dropdown-title">Contact Us</div>
225                                <div class="ss-dropdown-desc">Reach our team</div>
226                            </div>
227                        </a>
228                    </div>
229                </div>
230                
231            </nav>
232            
233            <!-- Auth Buttons -->
234            <div class="ss-auth">
235                                    <!-- Logged Out State -->
236                    <a href="https://pod.servicespace.org/login" class="ss-btn ss-btn-outline">
237                        Sign In
238                    </a>
239                    <a href="https://pod.servicespace.org/join" class="ss-btn ss-btn-primary">
240                        Join <i class="bi bi-arrow-right"></i>
241                    </a>
242                            </div>
243            
244            <!-- Mobile Toggle -->
245            <button class="ss-mobile-toggle" aria-label="Toggle menu">
246                <span class="ss-hamburger"></span>
247            </button>
248            
249        </div>
250    </header>
251    
252    <!-- Mobile Menu -->
253    <div class="ss-mobile-menu">
254        
255        <div class="ss-mobile-nav-item">
256            <button class="ss-mobile-nav-link">
257                Ecosystem <i class="bi bi-chevron-down"></i>
258            </button>
259            <div class="ss-mobile-subnav">
260                <a href="https://www.servicespace.org/projects">Explore All Projects</a>
261                <a href="https://www.dailygood.org">DailyGood</a>
262                <a href="https://www.karmakitchen.org">Karma Kitchen</a>
263                <a href="https://www.awakin.org">Awakin Circles</a>
264                <a href="https://www.kindspring.org">KindSpring</a>
265            </div>
266        </div>
267        
268        <div class="ss-mobile-nav-item">
269            <button class="ss-mobile-nav-link">
270                Pods <i class="bi bi-chevron-down"></i>
271            </button>
272            <div class="ss-mobile-subnav">
273                <a href="https://pod.servicespace.org/welcome">What Are Pods?</a>
274                <a href="https://pod.servicespace.org/apply">Join a Pod</a>
275                <a href="https://pod.servicespace.org/about">Our Approach</a>
276                <a href="https://pod.servicespace.org/host">Host a Pod</a>
277            </div>
278        </div>
279        
280        <div class="ss-mobile-nav-item">
281            <button class="ss-mobile-nav-link">
282                About <i class="bi bi-chevron-down"></i>
283            </button>
284            <div class="ss-mobile-subnav">
285                <a href="https://www.servicespace.org/about">Who We Are</a>
286                <a href="https://www.servicespace.org/vision">Our Vision</a>
287                <a href="https://www.servicespace.org/join">Get Involved</a>
288                <a href="https://pod.servicespace.org/contact">Contact Us</a>
289            </div>
290        </div>
291        
292        <div class="ss-mobile-auth">
293                            <a href="https://pod.servicespace.org/login" class="ss-btn ss-btn-outline">Sign In</a>
294                <a href="https://pod.servicespace.org/join" class="ss-btn ss-btn-primary">Join Now</a>
295                    </div>
296        
297    </div>
298    
299    
299<script>
300    document.addEventListener('DOMContentLoaded', function() {
301        const header = document.querySelector('.ss-header');
302        const mobileToggle = document.querySelector('.ss-mobile-toggle');
303        const mobileMenu = document.querySelector('.ss-mobile-menu');
304        
305        // Header scroll effect
306        if (header) {
307            window.addEventListener('scroll', function() {
308                if (window.scrollY > 50) {
309                    header.classList.add('scrolled');
310                } else {
311                    header.classList.remove('scrolled');
312                }
313            });
314        }
315        
316        // Mobile toggle
317        if (mobileToggle && mobileMenu) {
318            mobileToggle.addEventListener('click', function() {
319                this.classList.toggle('active');
320                mobileMenu.classList.toggle('open');
321                document.body.style.overflow = mobileMenu.classList.contains('open') ? 'hidden' : '';
322            });
323        }
324        
325        document.querySelectorAll('.ss-mobile-nav-item').forEach(item => {
326            item.querySelector('.ss-mobile-nav-link').addEventListener('click', function() {
327                document.querySelectorAll('.ss-mobile-nav-item').forEach(other => {
328                    if (other !== item) other.classList.remove('open');
329                });
330                item.classList.toggle('open');
331            });
332        });
333        
334        document.querySelectorAll('.ss-mobile-subnav a').forEach(link => {
335            link.addEventListener('click', function() {
336                mobileToggle.classList.remove('active');
337                mobileMenu.classList.remove('open');
338                document.body.style.overflow = '';
339            });
340        });
341    });
342    </script>
342
343    
344    <main>
345
346
347    <link rel="stylesheet" href="welcome/css/projects.css?1furn">
348
349    <!-- ============================================
350         HERO SECTION
351         ============================================ -->
352    <section class="projects-hero">
353        <div class="projects-hero-bg">
354            <img src="https://pod.servicespace.org/pics/mem/2/rz_ssp_65c1d9a1e87b8.jpg" alt="Community holding hands in a circle on a field" class="hero-bg-image">
355            <div class="hero-bg-overlay"></div>
356        </div>
357        <div class="container">
358            <div class="projects-hero-content">
359                <span class="section-label">Our Ecosystem</span>
360                <h1>A Living Ecosystem</h1>
361                <p class="projects-hero-subtitle">ServiceSpace isn't an organization &mdash; it's an ecosystem. Some things bloom on the surface. Others grow roots over years. And beneath it all, invisible soil nourishes everything.</p>
362            </div>
363        </div>
364        <div class="hero-scroll-hint">
365            <span>Explore the Layers</span>
366            <i class="bi bi-chevron-down"></i>
367        </div>
368    </section>
369
370    <!-- ============================================
371         ECOSYSTEM PHILOSOPHY
372         ============================================ -->
373    <section class="section-intro">
374        <div class="container">
375            <div class="intro-content">
376                <p class="intro-lead">Let a thousand flowers bloom.</p>
377                
378                <p>Instead of one grand plan executed by staff, we create conditions for generosity to flourish. Some ideas don't take root. Some become unexpectedly revolutionary. Leadership here means <strong>search and amplify</strong> rather than plan and execute.</p>
379                
380                <p>All projects share common DNA: volunteer-run, gift-economy, no fundraising, and commitment to inner transformation over external metrics. They're interconnected but autonomous &mdash; like mycorrhizal networks in a forest.</p>
381            </div>
382
383            <!-- Ecosystem Layer Navigator -->
384            <div class="layer-nav">
385                <div class="ecosystem-cross-section">
386                    <a href="#seeds" class="layer-zone zone-seeds">
387                        <div class="zone-icon"><i class="bi bi-sun"></i></div>
388                        <div class="zone-text">
389                            <span class="zone-name">Seeds</span>
390                            <span class="zone-desc">Receive inspiration</span>
391                        </div>
392                    </a>
393                    <a href="#flowers" class="layer-zone zone-flowers">
394                        <div class="zone-icon"><i class="bi bi-flower2"></i></div>
395                        <div class="zone-text">
396                            <span class="zone-name">Flowers</span>
397                            <span class="zone-desc">Show up &amp; participate</span>
398                        </div>
399                    </a>
400                    <div class="ground-line">
401                        <span>ground level</span>
402                    </div>
403                    <a href="#roots" class="layer-zone zone-roots">
404                        <div class="zone-icon"><i class="bi bi-diagram-3"></i></div>
405                        <div class="zone-text">
406                            <span class="zone-name">Roots</span>
407                            <span class="zone-desc">Commit &amp; belong</span>
408                        </div>
409                    </a>
410                    <a href="#soil" class="layer-zone zone-soil">
411                        <div class="zone-icon"><i class="bi bi-gear"></i></div>
412                        <div class="zone-text">
413                            <span class="zone-name">Soil</span>
414                            <span class="zone-desc">Build &amp; create</span>
415                        </div>
416                    </a>
417                </div>
418            </div>
419
420            <p class="intro-note">Scroll down to explore each layer, or click to jump directly.</p>
421        </div>
422    </section>
423
424    <!-- ============================================
425         SEEDS: Receive Inspiration
426         ============================================ -->
427    <section class="section-layer section-seeds" id="seeds">
428        <div class="container">
429            <div class="layer-header">
430                <div class="layer-depth-indicator">
431                    <span class="depth-label">Surface</span>
432                    <div class="depth-line"></div>
433                </div>
434                <h2>Seeds</h2>
435                <p class="layer-tagline">Receive Inspiration</p>
436                <p class="layer-philosophy">Brief encounters that plant themselves in receptive soil. No commitment required &mdash; just openness. A story, a video, an act of kindness. Something lands, and you're slightly different than before.</p>
437            </div>
438
439            <div class="seeds-grid">
440                <!-- READ -->
441                <div class="seed-card">
442                    <div class="seed-card-image">
443                        <img src="https://media.giphy.com/media/LXZVGBQlavb2vT2OM2/giphy.gif" alt="Flower blooming">
444                    </div>
445                    <div class="seed-card-content">
446                        <div class="seed-card-header">
447                            <i class="bi bi-book"></i>
448                            <h3>Read</h3>
449                        </div>
450                        <p>Let words shift your perspective. One story, one passage, one article at a time.</p>
451                        <div class="seed-links">
452                            <a href="https://www.dailygood.org" target="_blank">
453                                <span class="seed-link-name">DailyGood</span>
454                                <span class="seed-link-desc">News that inspires, daily</span>
455                            </a>
456                            <a href="https://www.awakin.org/v2/read" target="_blank">
457                                <span class="seed-link-name">Awakin Weekly</span>
458                                <span class="seed-link-desc">Wisdom passages with audio</span>
459                            </a>
460                            <a href="https://www.conversations.org" target="_blank">
461                                <span class="seed-link-name">Conversations</span>
462                                <span class="seed-link-desc">Deep dives into art &amp; culture</span>
463                            </a>
464                        </div>
465                    </div>
466                </div>
467
468                <!-- LISTEN & WATCH -->
469                <div class="seed-card">
470                    <div class="seed-card-image">
471                        <img src="https://plus.unsplash.com/premium_photo-1708366645191-6c2a83564545?q=80&w=600&auto=format&fit=crop" alt="Dog listening attentively">
472                    </div>
473                    <div class="seed-card-content">
474                        <div class="seed-card-header">
475                            <i class="bi bi-headphones"></i>
476                            <h3>Listen &amp; Watch</h3>
477                        </div>
478                        <p>Let sound and image open doors. Conversations, music, and films that move the heart.</p>
479                        <div class="seed-links">
480                            <a href="https://www.awakin.org/v2/calls" target="_blank">
481                                <span class="seed-link-name">Awakin Calls</span>
482                                <span class="seed-link-desc">Heart-centered conversations</span>
483                            </a>
484                            <a href="https://www.maitritunes.org" target="_blank">
485                                <span class="seed-link-name">MaitriTunes</span>
486                                <span class="seed-link-desc">Sacred music portal</span>
487                            </a>
488                            <a href="https://www.karmatube.org" target="_blank">
489                                <span class="seed-link-name">KarmaTube</span>
490                                <span class="seed-link-desc">Videos that spark action</span>
491                            </a>
492                        </div>
493                    </div>
494                </div>
495
496                <!-- REFLECT & ACT -->
497                <div class="seed-card">
498                    <div class="seed-card-image">
499                        <img src="https://www.charityfocus.org/blog/upload/2008/smile_deck2.jpg" alt="Deck of Smile Cards">
500                    </div>
501                    <div class="seed-card-content">
502                        <div class="seed-card-header">
503                            <i class="bi bi-heart"></i>
504                            <h3>Reflect &amp; Act</h3>
505                        </div>
506                        <p>Let inspiration move through you. A moment of inquiry, a small act of kindness.</p>
507                        <div class="seed-links">
508                            <a href="https://www.awakin.ai" target="_blank">
509                                <span class="seed-link-name">Awakin AI</span>
510                                <span class="seed-link-desc">Pose a question to wisdom bots</span>
511                            </a>
512                            <a href="https://www.kindspring.org" target="_blank">
513                                <span class="seed-link-name">KindSpring</span>
514                                <span class="seed-link-desc">Small acts, big ripples</span>
515                            </a>
516                            <a href="https://www.kindspring.org/smilecards" target="_blank">
517                                <span class="seed-link-name">Smile Cards</span>
518                                <span class="seed-link-desc">Anonymous kindness, pay it forward</span>
519                            </a>
520                        </div>
521                    </div>
522                </div>
523            </div>
524        </div>
525    </section>
526
527    <!-- ============================================
528         FLOWERS: Show Up & Participate
529         ============================================ -->
530    <section class="section-layer section-flowers" id="flowers">
531        <div class="container">
532            <div class="layer-header">
533                <div class="layer-depth-indicator">
534                    <div class="depth-line"></div>
535                    <span class="depth-label">Above Ground</span>
536                    <div class="depth-line"></div>
537                </div>
538                <h2>Flowers</h2>
539                <p class="layer-tagline">Show Up &amp; Participate</p>
540                <p class="layer-philosophy">Visible expressions where inspiration meets action. You show up, something happens, and you return to your life &mdash; but something has bloomed in you.</p>
541            </div>
542
543            <div class="flowers-grid">
544                <!-- Karma Kitchen -->
545                <a href="https://www.karmakitchen.org" target="_blank" class="flower-card">
546                    <div class="flower-image">
547                        <img src="https://img.youtube.com/vi/_S5r7fbLvvc/mqdefault.jpg" alt="Karma Kitchen pay-it-forward restaurant">
548                        <div class="flower-badge">30+ cities</div>
549                    </div>
550                    <div class="flower-content">
551                        <h3>Karma Kitchen</h3>
552                        <p class="flower-tagline">Pay-it-forward restaurant</p>
553                        <p>Your bill is $0.00. Your meal was gifted by someone before you. If you wish, pay forward for those who come after.</p>
554                        <span class="flower-link">Find a Kitchen <i class="bi bi-arrow-up-right"></i></span>
555                    </div>
556                </a>
557
558                <!-- Awakin Circles -->
559                <a href="https://www.awakin.org/v2/local" target="_blank" class="flower-card">
560                    <div class="flower-image">
561                        <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTvWg1xIMAKO8-vnUjIVZ3UiQp6fB3MQ2CnAA&s" alt="People sitting in an Awakin Circle">
562                        <div class="flower-badge">90+ cities</div>
563                    </div>
564                    <div class="flower-content">
565                        <h3>Awakin Circles</h3>
566                        <p class="flower-tagline">Weekly stillness in community</p>
567                        <p>An hour of silence, a reading, and heartfelt sharing. No teachers, no fees &mdash; just presence.</p>
568                        <span class="flower-link">
568Find a Circle <i class="bi bi-arrow-up-right"></i></span>
569                    </div>
570                </a>
571
572                <!-- Join a Pod -->
573                <a href="https://pod.servicespace.org/welcome" target="_blank" class="flower-card">
574                    <div class="flower-image">
575                        <img src="https://pod.servicespace.org/pics/mem/2/rz_ssp_631ffa95a257a.jpg" alt="Pod learning circle">
576                        <div class="flower-badge">Global</div>
577                    </div>
578                    <div class="flower-content">
579                        <h3>Join a Pod</h3>
580                        <p class="flower-tagline">Online learning circles</p>
581                        <p>Multi-week journeys blending contemplation, micro-practices, and deep sharing. Everyone teaches, everyone learns.</p>
582                        <span class="flower-link">Explore Pods <i class="bi bi-arrow-up-right"></i></span>
583                    </div>
584                </a>
585
586                <!-- Local Events -->
587                <a href="https://www.awakin.org/v2/local" target="_blank" class="flower-card">
588                    <div class="flower-image">
589                        <img src="https://awakin.org/pics/abad2.jpg" alt="Local community gathering">
590                    </div>
591                    <div class="flower-content">
592                        <h3>Local Events</h3>
593                        <p class="flower-tagline">Gatherings near you</p>
594                        <p>Day retreats, community service days, special gatherings. A taste of immersion without the full commitment.</p>
595                        <span class="flower-link">See Upcoming <i class="bi bi-arrow-up-right"></i></span>
596                    </div>
597                </a>
598
599                <!-- Volunteer -->
600                <a href="volunteer" class="flower-card">
601                    <div class="flower-image">
602                        <img src="https://images.unsplash.com/photo-1559027615-cd4628902d4a?w=800&q=80" alt="Volunteers working together">
603                    </div>
604                    <div class="flower-content">
605                        <h3>Lend Your Hands</h3>
606                        <p class="flower-tagline">Online or in-person</p>
607                        <p>Serve at a Karma Kitchen, help with a retreat, join a virtual project. Give your hands for a few hours &mdash; or a lifetime.</p>
608                        <span class="flower-link">How to Volunteer <i class="bi bi-arrow-up-right"></i></span>
609                    </div>
610                </a>
611            </div>
612        </div>
613    </section>
614
615    <!-- ============================================
616         ROOTS: Commit & Belong
617         ============================================ -->
618    <section class="section-layer section-roots" id="roots">
619        <div class="container">
620            <div class="layer-header">
621                <div class="layer-depth-indicator">
622                    <div class="depth-line"></div>
623                    <span class="depth-label">Below Ground</span>
624                    <div class="depth-line"></div>
625                </div>
626                <h2>Roots</h2>
627                <p class="layer-tagline">Commit &amp; Belong</p>
628                <p class="layer-philosophy">This is where the ecosystem's real strength lies &mdash; invisible networks of ongoing connection. Relationships that deepen over months and years. Roots intertwine; you become part of something larger.</p>
629            </div>
630
631            <!-- Featured: Multi-Day Retreats -->
632            <div class="root-featured">
633                <div class="root-featured-image">
634                    <img src="https://cf2.org/misc/g3-2025.gif" alt="Retreat community moments">
635                    <div class="root-featured-overlay">
636                        <div class="retreat-locations">
637                            <span class="retreat-tag"><span class="flag">🇮🇳</span> Gandhi 3.0</span>
638                            <span class="retreat-tag"><span class="flag">🇦🇹</span> Awakin Europe</span>
639                            <span class="retreat-tag"><span class="flag">🇯🇵</span> Kuni Pilgrimage</span>
640                            <span class="retreat-tag"><span class="flag">🇻🇳</span> Spirit of Service</span>
641                            <span class="retreat-tag"><span class="flag">🇺🇸</span> Bodhisattva</span>
642                        </div>
643                    </div>
644                </div>
645                <div class="root-featured-content">
646                    <h3>Multi-Day Retreats</h3>
647                    <p class="root-tagline">Bonds forged in immersion</p>
648                    <p>Step away from ordinary time. 3-7 day gatherings where transformation has room to breathe. No fees, no agendas &mdash; entirely gift-based. 11,000+ volunteer hours go into each one.</p>
649                    <p>Gandhi 3.0 alumni. Awakin Europe family. Spirit of Service pilgrims. These aren't just events &mdash; they're communities born from shared surrender.</p>
650                    <a href="https://www.movedbylove.org" class="btn btn-primary" target="_blank">
651                        Explore Retreats <i class="bi bi-arrow-right"></i>
652                    </a>
653                </div>
654            </div>
655
656            <!-- Retreat Diversity Showcase -->
657            <div class="retreat-diversity">
658                <h4>Every Context, One Intention</h4>
659                <p class="retreat-diversity-intro">The same principles &mdash; inner transformation, gift culture, emergent design &mdash; adapt to radically different contexts:</p>
660                
661                <div class="retreat-types-grid">
662                    <a href="https://www.servicespace.org/blog/view.php?id=20515" target="_blank" class="retreat-type">
663                        <i class="bi bi-universal-access"></i>
664                        <span class="retreat-type-name">Inclusion</span>
665                        <span class="retreat-type-desc">With differently-abled communities</span>
666                    </a>
667                    <a href="https://www.movedbylove.org/join/youth" target="_blank" class="retreat-type">
668                        <i class="bi bi-stars"></i>
669                        <span class="retreat-type-name">Youth</span>
670                        <span class="retreat-type-desc">Next generation of heartivists</span>
671                    </a>
672                    <a href="https://pod.servicespace.org/story/78987/view" target="_blank" class="retreat-type">
673                        <i class="bi bi-tree"></i>
674                        <span class="retreat-type-name">Farmers</span>
675                        <span class="retreat-type-desc">Permaculture meets inner ecology</span>
676                    </a>
677                    <a href="https://movedbylove.org/fargo" target="_blank" class="retreat-type">
678                        <i class="bi bi-geo-alt"></i>
679                        <span class="retreat-type-name">Heartland</span>
680                        <span class="retreat-type-desc">Bridging rural &amp; urban divides</span>
681                    </a>
682                    <a href="https://awakin.ai/murmur" target="_blank" class="retreat-type">
683                        <i class="bi bi-cpu-fill"></i>
684                        <span class="retreat-type-name">AI + Humanity</span>
685                        <span class="retreat-type-desc">Technology in service of connection</span>
686                    </a>
687                    <a href="https://www.dailygood.org/story/3352/when-the-path-leads-kotaro-aoki/" target="_blank" class="retreat-type">
688                        <i class="bi bi-signpost-split"></i>
689                        <span class="retreat-type-name">Pilgrimages</span>
690                        <span class="retreat-type-desc">Walking as spiritual practice</span>
691                    </a>
692                    <a href="https://www.servicespace.org/blog/view.php?id=16900" target="_blank" class="retreat-type">
693                        <i class="bi bi-peace"></i>
694                        <span class="retreat-type-name">Peace Prayers</span>
695                        <span class="retreat-type-desc">At Mount Fuji and beyond</span>
696                    </a>
697                    <a href="https://www.movedbylove.org/blog/view.php?id=433" target="_blank" class="retreat-type">
698                        <i class="bi bi-people"></i>
699                        <span class="retreat-type-name">NGO Leaders</span>
700                        <span class="retreat-type-desc">Changemakers reconnecting</span>
701                    </a>
702                </div>
703            </div>
704
705            <!-- Video: Immersion in Action -->
706            <div class="roots-video">
707                <div class="video-container">
708                    <iframe src="https://player.vimeo.com/video/883673126?h=de06d111af" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>
709                </div>
710                <div class="video-caption">
711                    <p>From a Spirit of Service retreat in Vietnam &mdash; farmers, youth, authors, and entrepreneurs becoming brothers and sisters. The language of love communicates everywhere.</p>
712                </div>
713            </div>
714        </div>
715    </section>
716
717    <!-- ============================================
718         SOIL: Build & Create
719         ============================================ -->
720    <section class="section-layer section-soil" id="soil">
721        <div class="container">
722            <div class="layer-header">
723                <div class="layer-depth-indicator">
724                    <div class="depth-line"></div>
725                    <span class="depth-label">Deep Underground</span>
726                </div>
727                <h2>Soil</h2>
728                <p class="layer-tagline">Build &amp; Create</p>
729                <p class="layer-philosophy">Beneath every flower is infrastructure that took years to cultivate. Technology, platforms, accumulated wisdom &mdash; all built by volunteers, all offered freely. Here's how you can start something of your own.</p>
730            </div>
731
732            <!-- Host & Create - Primary Actions -->
733            <div class="host-section">
734                <div class="host-header">
735                    <i class="bi bi-plus-circle"></i>
736                    <h3>Start Something</h3>
737                    <p>The deepest contribution comes from creating space for others. When you host, you become a nucleus &mdash; a center around which community forms.</p>
738                </div>
739
740                <div class="host-grid">
741                    <!-- Host a Circle -->
742                    <div class="host-card-expanded">
743                        <div class="host-card-image">
744                            <img src="https://pod.servicespace.org/news/pics/jul2025/austria_retreat.jpg" alt="Circle gathering">
745                        </div>
746                        <div class="host-card-content">
747                            <h4>Host a Circle</h4>
748                            <p>Weekly gatherings in your living room. An hour of silence, a reading, heartfelt sharing. No expertise required &mdash; just presence.</p>
749                            <div class="host-examples">
750                                <span class="host-example-label">Types of circles:</span>
751                                <span class="host-example">Awakin</span>
752                                <span class="host-example">Gratitude</span>
753                                <span class="host-example">Death Cafe</span>
754                                <span class="host-example">Kindness</span>
755                                <span class="host-example">+ more</span>
756                            </div>
757                            <a href="https://www.movedbylove.org/circles/" target="_blank" class="host-card-link">
758                                Explore 10 Circle Types <i class="bi bi-arrow-right"></i>
759                            </a>
760                        </div>
761                    </div>
762
763                    <!-- Host a Pod -->
764                    <div class="host-card-expanded">
765                        <div class="host-card-image">
766                            <img src="https://pod.servicespace.org/pics/mem/2/rz_ssp_631ffa95a257a.jpg" alt="Pod learning circle">
767                        </div>
768                        <div class="host-card-content">
769                            <h4>Host a Pod</h4>
770                            <p>Multi-week online journeys blending contemplation, micro-practices, and deep sharing. Design your own or use existing templates.</p>
771                            <div class="host-examples">
772                                <span class="host-example-label">Past pods:</span>
773                                <span class="host-example">Mystical Music</span>
774                                <span class="host-example">Qi Gong</span>
775                                <span class="host-example">Rumi</span>
776                                <span class="host-example">New Story</span>
777                            </div>
778                            <a href="https://pod.servicespace.org/host" target="_blank" class="host-card-link">
779                                Start a Pod <i class="bi bi-arrow-right"></i>
780                            </a>
781                        </div>
782                    </div>
783
784                    <!-- Build with Awakin AI -->
785                    <div class="host-card-expanded">
786                        <div class="host-card-image">
787                            <img src="https://pod.servicespace.org/news/pics/nov2024/ai_hi2.jpg" alt="AI and humanity">
788                        </div>
789                        <div class="host-card-content">
790                            <h4>Build with Awakin AI</h4>
791                            <p>Dream up and build ways for technology to bring humans together. Create wisdom bots, design sacred interfaces, or join our explorations.</p>
792                            <div class="host-examples">
793                                <span class="host-example-label">Possibilities:</span>
794                                <span class="host-example">Wisdom Bots</span>
795                                <span class="host-example">Murmuration</span>
796                                <span class="host-example">Sacred Tech</span>
797                            </div>
798                            <a href="https://www.awakin.ai" target="_blank" class="host-card-link">
799                                Explore Awakin AI <i class="bi bi-arrow-right"></i>
800                            </a>
801                        </div>
802                    </div>
803                </div>
804            </div>
805
806            <!-- Infrastructure Tools -->
807            <div class="soil-infrastructure">
808                <h4>Use Our Infrastructure</h4>
809                <p class="infrastructure-intro">All of this was built by volunteers over 26 years. Use it freely to amplify your own work.</p>
810                
811                <div class="soil-grid">
812                    <!-- Create a Podcast -->
813                    <div class="soil-card">
814                        <div class="soil-icon"><i class="bi bi-mic"></i></div>
815                        <h4>Create a Podcast</h4>
816                        <p>Use our Awakin Calls infrastructure to host your own interview series.</p>
817                        <a href="https://www.awakin.org/v2/calls" target="_blank">Learn More <i class="bi bi-arrow-up-right"></i></a>
818                    </div>
819
820                    <!-- Start a Newsletter -->
821                    <div class="soil-card">
822                        <div class="soil-icon"><i class="bi bi-envelope-heart"></i></div>
823                        <h4>Start a Newsletter</h4>
824                        <p>Launch your own stream of inspiration, like "Kindful Kids" or themed curations.</p>
825                        <a href="partner">Get Started <i class="bi bi-arrow-up-right"></i></a>
826                    </div>
827
828                    <!-- Host Local Events -->
829                    <div class="soil-card">
830                        <div class="soil-icon"><i class="bi bi-calendar-event"></i></div>
831                        <h4>Host Local Events</h4>
832                        <p>
832Tap into our event infrastructure &mdash; registration, communication, coordination.</p>
833                        <a href="partner">Partner With Us <i class="bi bi-arrow-up-right"></i></a>
834                    </div>
835
836                    <!-- Build a Website -->
837                    <div class="soil-card">
838                        <div class="soil-icon"><i class="bi bi-window"></i></div>
839                        <h4>Build a Website</h4>
840                        <p>How we started in 1999. We still host 6,000+ sites for causes worldwide.</p>
841                        <a href="https://www.cfsites.org" target="_blank">Visit CFSites <i class="bi bi-arrow-up-right"></i></a>
842                    </div>
843                </div>
844            </div>
845
846            <div class="soil-philosophy">
847                <blockquote>
848                    "The best technology is invisible. It creates conditions for connection, then disappears."
849                </blockquote>
850                <p>All of this is strictly non-commercial. No ads. No data harvesting. No venture capital. Just volunteers building tools for a more compassionate world.</p>
851            </div>
852
853            <div class="soil-cta">
854                <a href="partner" class="btn btn-primary">
855                    <i class="bi bi-handshake"></i> Partner With Us
856                </a>
857            </div>
858        </div>
859    </section>
860
861    <!-- ============================================
862         LIVING PROOF - A Moment of Emergence
863         ============================================ -->
864    <section class="section-living-proof">
865        <div class="container">
866            <div class="living-proof-content">
867                <div class="living-proof-video">
868                    <div class="video-container">
869                        <iframe src="https://player.vimeo.com/video/789918800?h=34ad56e212" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>
870                    </div>
871                </div>
872                <div class="living-proof-text">
873                    <span class="section-label">Living Proof</span>
874                    <h3>When the Whole Becomes Greater</h3>
875                    <p>These projects aren't separate. They weave together &mdash; seeds become flowers, flowers develop roots, roots enrich the soil. And sometimes, in a village immersion or a silent retreat, something emerges that none of us planned.</p>
876                    <p class="living-proof-note">Over 26 years, millions have been touched. But we don't lead with numbers. We lead with the invitation.</p>
877                    <a href="https://www.movedbylove.org/retreat/g3/?pg=alumni" target="_blank" class="living-proof-link">
878                        <i class="bi bi-people"></i> Hear from retreat alumni
879                    </a>
880                </div>
881            </div>
882        </div>
883    </section>
884
885    <!-- ============================================
886         CLOSING SECTION
887         ============================================ -->
888    <section class="section-closing">
889        <div class="container">
890            <div class="closing-content">
891                <h2>Enter the Ecosystem</h2>
892                <p>There's no wrong door. Receive a seed if that's what you have capacity for. Show up to a flower if you're ready to meet others. Let roots grow if you're craving belonging. Or help build the soil if you want to nurture what nurtures everyone.</p>
893                
894                <div class="closing-layers">
895                    <a href="#seeds" class="closing-layer">
896                        <i class="bi bi-sun"></i>
897                        <span>I want to receive something</span>
898                    </a>
899                    <a href="#flowers" class="closing-layer">
900                        <i class="bi bi-flower2"></i>
901                        <span>I want to show up somewhere</span>
902                    </a>
903                    <a href="#roots" class="closing-layer">
904                        <i class="bi bi-diagram-3"></i>
905                        <span>I want to belong somewhere</span>
906                    </a>
907                    <a href="#soil" class="closing-layer">
908                        <i class="bi bi-gear"></i>
909                        <span>I want to build something</span>
910                    </a>
911                </div>
912                
913                <div class="closing-links">
914                    <a href="join" class="btn btn-primary">
915                        Begin Your Journey <i class="bi bi-arrow-right"></i>
916                    </a>
917                    <a href="vision" class="btn btn-secondary">Our Vision</a>
918                    <a href="about" class="btn btn-secondary">Our Story</a>
919                </div>
920            </div>
921        </div>
922    </section>
923
924
925    </main>
926
927            <!-- ============================================
928         GLOBAL FOOTER
929         ============================================ -->
930    <footer class="ss-footer">
931        <div class="ss-footer-container">
932            
933            <div class="ss-footer-main">
934                
935                <!-- Brand Column -->
936                <div class="ss-footer-brand">
937                    <a href="https://www.servicespace.org" class="ss-footer-logo">
938                        <img src="https://www.servicespace.org/images/index2026/logo_sm_light.png" alt="ServiceSpace">
939                    </a>
940                    <p class="ss-footer-tagline">
941                        Small acts that change the world.<br>
942                        Volunteer-run since 1999.
943                    </p>
944                    <div class="ss-footer-social">
945                        <a href="https://www.facebook.com/servicespace" target="_blank" aria-label="Facebook">
946                            <i class="bi bi-facebook"></i>
947                        </a>
948                        <a href="https://twitter.com/servicespace" target="_blank" aria-label="Twitter">
949                            <i class="bi bi-twitter-x"></i>
950                        </a>
951                        <a href="https://www.instagram.com/servicespace" target="_blank" aria-label="Instagram">
952                            <i class="bi bi-instagram"></i>
953                        </a>
954                        <a href="https://www.youtube.com/charityfocus" target="_blank" aria-label="YouTube">
955                            <i class="bi bi-youtube"></i>
956                        </a>
957                    </div>
958                </div>
959                
960                <!-- Projects Column (was Ecosystem) -->
961                <div class="ss-footer-column">
962                    <h4>Projects</h4>
963                    <ul>
964                        <li><a href="https://www.servicespace.org/projects">All Projects</a></li>
965                        <li><a href="https://www.dailygood.org" target="_blank">DailyGood</a></li>
966                        <li><a href="https://www.karmakitchen.org" target="_blank">Karma Kitchen</a></li>
967                        <li><a href="https://www.awakin.org" target="_blank">Awakin Circles</a></li>
968                        <li><a href="https://www.kindspring.org" target="_blank">KindSpring</a></li>
969                    </ul>
970                </div>
971                
972                <!-- Pods Column -->
973                <div class="ss-footer-column">
974                    <h4>Pods</h4>
975                    <ul>
976                        <li><a href="https://pod.servicespace.org/">What Are Pods?</a></li>
977                        <li><a href="https://pod.servicespace.org/apply">Join a Pod</a></li>
978                        <li><a href="https://pod.servicespace.org/about">Our Approach</a></li>
979                        <li><a href="https://pod.servicespace.org/host">Host a Pod</a></li>
980                        <li><a href="https://pod.servicespace.org/faq">FAQ</a></li>
981                    </ul>
982                </div>
983                
984                <!-- About Column -->
985                <div class="ss-footer-column">
986                    <h4>About</h4>
987                    <ul>
988                        <li><a href="https://www.servicespace.org/about">About Us</a></li>
989                        <li><a href="https://www.servicespace.org/join">Get Involved</a></li>
990                        <li><a href="https://www.servicespace.org/donate">Donate</a></li>
991                        <li><a href="https://pod.servicespace.org/contact">Contact Us</a></li>
992                        <li><a href="https://pod.servicespace.org/privacy">Privacy</a>, <a href="https://pod.servicespace.org/terms">Terms</a></li>
993                    </ul>
994                </div>
995                
996            </div>
997            
998            <div class="ss-footer-bottom">
999                <p class="ss-footer-copyright">
1000                    <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank" rel="license" class="cc-license">
1001                        <span class="cc-icons">
1002                            <i class="bi bi-cc-circle"></i>
1003                            <i class="bi bi-person-circle"></i>
1004                        </span>
1005                        <span>CC BY-NC-ND 4.0</span>
1006                    </a>
1007                </p>
1008                <p class="ss-footer-gift">
1009                    <i class="bi bi-gift"></i> 
1010                    100% volunteer-run. No ads. No fundraising. Just love.
1011                </p>
1012            </div>
1013            
1014        </div>
1015    </footer>
1016        
1017    <!-- Swiper JS (for carousels) -->
1018    
1018<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
1018
1019    
1020    <!-- ============================================
1021         SCRIPTS
1022         ============================================ -->
1023        
1024        
1024<script src="welcome/js/scripts.js"></script>
1024
1025    
1026    
1027    <!-- Google Analytics -->
1028    
1028<script>
vendor: 368 bytes, lines 1028-1033
1028
1029        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
1030        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
1031        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
1032        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
1033        ga('create', '
1033UA-472633-14
vendor: 48 bytes, lines 1033-1035
1033', 'auto');
1034        ga('send', 'pageview');
1035    
1035</script>
1035
1036    
1037
1038    
1038<script>
1039(function() {
1040    'use strict';
1041    console.log('SSO: Script starting');
1042
1043    // Skip SSO on dev/coder environments — no production Pod to check against
1044    if (window.location.hostname.endsWith('.coder.dev.servicespace.org')) {
1045        console.log('SSO: Dev environment detected, skipping SSO check');
1046        return;
1047    }
1048
1049    // 2026-09-10: Skip on Pod itself. Pod is the SSO primary -- there is no
1050    // other site whose cookie could log a Pod guest in. Running this here
1051    // (pod's welcome/tpl/footer_global.tpl includes it) sent cold-session
1052    // visitors through check.php with return=pod.servicespace.org, which
1053    // check.php rejected with a blank "Invalid return URL domain" page.
1054    if (window.location.hostname === 'pod.servicespace.org') {
1055        console.log('SSO: On Pod (primary), skipping SSO check');
1056        return;
1057    }
1058    
1059    // Cooldown periods (in milliseconds)
1060    var QUICK_COOLDOWN = 10000;          // 10 seconds - between any checks (per-tab)
1061    var NOT_LOGGED_IN_TTL = 1800000;     // 30 minutes - how long to remember "not logged in"
1062    var VISIBILITY_MIN_AGE = 300000;     // 5 minutes - min age before tab-switch triggers recheck
1063    
1064    // When user returns to this tab after being away a while, clear the
1065    // "not logged in" cache so we re-check SSO status. This handles the
1066    // case where user logs in on another tab/site then returns here.
1067    document.addEventListener('visibilitychange', function() {
1068        if (document.visibilityState === 'visible') {
1069            var checkedAt = parseInt(localStorage.getItem('sso_not_logged_in_at') || '0');
1070            if (checkedAt && (Date.now() - checkedAt >= VISIBILITY_MIN_AGE)) {
1071                console.log('SSO: Tab visible after 5+ min, clearing cache for fresh check');
1072                localStorage.removeItem('sso_not_logged_in_at');
1073                sessionStorage.removeItem('sso_last_attempt');
1074            }
1075        }
1076    });
1077    
1078    // Check if user just logged out - skip SSO check to prevent re-login loop
1079    if (document.cookie.indexOf('sso_logout=') !== -1) {
1080        console.log('SSO: Recent logout detected, skipping check');
1081        // Clear the cookie now that we've respected it
1082        document.cookie = 'sso_logout=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
1083        // Also cache that we're not logged in (prevents check on next tab)
1084        localStorage.setItem('sso_not_logged_in_at', Date.now().toString());
1085        return;
1086    }
1087    
1088    var urlParams = new URLSearchParams(window.location.search);
1089    var ssoToken = urlParams.get('sso_token');
1090    
1091    // Handle returning from redirect-based flow with sso_token
1092    if (ssoToken) {
1093        console.log('SSO: Has sso_token from redirect flow, completing login');
1094        sessionStorage.setItem('sso_last_attempt', Date.now().toString());
1095        // Clear the "not logged in" cache since we're about to log in
1096        localStorage.removeItem('sso_not_logged_in_at');
1097        
1098        // Clean the URL by removing sso_token parameter
1099        var cleanUrl = window.location.href.split('?')[0];
1100        var params = new URLSearchParams(window.location.search);
1101        params.delete('sso_token');
1102        params.delete('sso_checked');
1103        var remainingParams = params.toString();
1104        if (remainingParams) {
1105            cleanUrl += '?' + remainingParams;
1106        }
1107        
1108        // Redirect to local login endpoint with the token
1109        window.location.href = '/sso/login.php?token=' + 
1110            encodeURIComponent(ssoToken) + 
1111            '&return=' + encodeURIComponent(cleanUrl);
1112        return;
1113    }
1114    
1115    // If sso_checked flag is present, Pod confirmed we're not logged in there
1116    if (urlParams.get('sso_checked')) {
1117        console.log('SSO: sso_checked param present, user not logged in on Pod');
1118        // Store in localStorage so ALL tabs know we're not logged in
1119        localStorage.setItem('sso_not_logged_in_at', Date.now().toString());
1120        sessionStorage.setItem('sso_last_attempt', Date.now().toString());
1121        // Clean sso_checked from URL so it doesn't appear in shared/copied links
1122        var params = new URLSearchParams(window.location.search);
1123        params.delete('sso_checked');
1124        var clean = params.toString();
1125        var cleanUrl = window.location.pathname + (clean ? '?' + clean : '') + window.location.hash;
1126        history.replaceState(null, '', cleanUrl);
1127        return;
1128    }
1129    
1130    // Check localStorage cache: are we already confirmed "not logged in"?
1131    var notLoggedInAt = parseInt(localStorage.getItem('sso_not_logged_in_at') || '0');
1132    if (notLoggedInAt && (Date.now() - notLoggedInAt < NOT_LOGGED_IN_TTL)) {
1133        console.log('SSO: Cached not-logged-in (' + Math.round((NOT_LOGGED_IN_TTL - (Date.now() - notLoggedInAt))/60000) + ' min remaining), skipping');
1134        return;
1135    }
1136    
1137    // Quick cooldown: Don't check too frequently within same tab (10 seconds)
1138    var lastAttempt = parseInt(sessionStorage.getItem('sso_last_attempt') || '0');
1139    if (Date.now() - lastAttempt < QUICK_COOLDOWN) {
1140        console.log('SSO: Within quick cooldown, skipping check');
1141        return;
1142    }
1143    
1144    // Prevent concurrent checks
1145    if (window.ssoChecking) {
1146        console.log('SSO: Already checking, skipping');
1147        return;
1148    }
1149    window.ssoChecking = true;
1150    
1151    // Helper function to do redirect-based SSO check
1152    function doRedirectCheck() {
1153        console.log('SSO: Using redirect approach');
1154        sessionStorage.setItem('sso_last_attempt', Date.now().toString());
1155        var returnUrl = encodeURIComponent(window.location.href);
1156        window.location.href = 'https://pod.servicespace.org/sso/check.php?return=' + returnUrl;
1157    }
1158    
1159    // Check if we already tried fetch and it failed (use redirect instead)
1160    var fetchFailed = sessionStorage.getItem('sso_fetch_failed');
1161    if (fetchFailed) {
1162        console.log('SSO: Fetch previously failed, using redirect approach');
1163        sessionStorage.removeItem('sso_fetch_failed');
1164        doRedirectCheck();
1165        return;
1166    }
1167    
1168    console.log('SSO: Starting fetch to Pod status endpoint');
1169    
1170    // Try fetch approach first (works when third-party cookies allowed)
1171    fetch('https://pod.servicespace.org/sso/status.php', {
1172        method: 'GET',
1173        credentials: 'include',
1174        mode: 'cors',
1175        cache: 'no-store'
1176    })
1177    .then(function(response) {
1178        console.log('SSO: Got response', response.status);
1179        if (!response.ok) throw new Error('Network error: ' + response.status);
1180        return response.json();
1181    })
1182    .then(function(data) {
1183        console.log('SSO: Parsed data', data);
1184        sessionStorage.setItem('sso_last_attempt', Date.now().toString());
1185        
1186        if (data.logged_in && data.token) {
1187            console.log('SSO: User logged in on Pod, redirecting to local login');
1188            // Clear cached "not logged in" since user IS logged in
1189            localStorage.removeItem('sso_not_logged_in_at');
1190            window.location.href = '/sso/login.php?token=' + 
1191                encodeURIComponent(data.token) + 
1192                '&return=' + encodeURIComponent(window.location.href);
1193        } else if (!data.logged_in && data.cookie_present === false) {
1194            // Third-party cookies are blocked!
1195            // Pod didn't receive any cookies, so it can't know if user is logged in
1196            // Try redirect fallback which uses first-party Pod cookie
1197            console.log('SSO: Cookies blocked (third-party), trying redirect fallback');
1198            doRedirectCheck();
1199        } else {
1200            console.log('SSO: Not logged in on Pod (confirmed with cookies present)');
1201            // User genuinely not logged in on Pod - cache in localStorage
1202            localStorage.setItem('sso_not_logged_in_at', Date.now().toString());
1203            window.ssoChecking = false;
1204        }
1205    })
1206    .catch(function(error) {
1207        console.log('SSO: Fetch failed:', error.message);
1208        // Mark that fetch failed so we use redirect
1209        sessionStorage.setItem('sso_fetch_failed', '1');
1210        sessionStorage.setItem('sso_last_attempt', Date.now().toString());
1211        doRedirectCheck();
1212    });
1213})();
1214</script>
1214
1215
1216</body>
1217</html>
1218

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.