orb-daemon 0.1.0

Orb DevKit desktop daemon - secure TCP/WS bridge for the Orb mobile app
<template>
  <Transition name="lock-fade">
    <div v-if="isLocked"
      class="fixed inset-0 z-[9999] flex flex-col items-center justify-center"
      style="backdrop-filter:blur(28px) brightness(0.35);background:rgba(0,0,0,0.55);">

      <!-- Orb — accent-colored -->
      <div class="relative mb-8" style="width:72px;height:72px;">
        <div class="absolute inset-0 rounded-full lock-ring-a"
          :style="{ border: `1px solid ${accent}80` }"></div>
        <div class="absolute rounded-full lock-ring-b"
          :style="{ inset: '4px', border: `0.5px solid ${accent}55` }"></div>
        <div class="absolute rounded-full lock-ring-c"
          :style="{ inset: '10px', boxShadow: `0 0 20px 6px ${accent}66, 0 0 40px 10px ${accent}33` }"></div>
        <div class="absolute rounded-full"
          style="inset:10px;background:radial-gradient(circle at 38% 32%,#1a1a2e 0%,#09090b 55%,#000 100%);box-shadow:inset 0 0 16px rgba(0,0,0,1);"></div>
      </div>

      <div class="flex flex-col items-center gap-3 px-8 text-center mb-10">
        <div class="flex items-center gap-2 mb-1">
          <Lock :size="16" :style="{ color: accent }" :stroke-width="2" />
          <span class="text-[12px] font-bold uppercase tracking-widest" :style="{ color: accent }">Orb is locked</span>
        </div>
        <p class="text-[22px] font-black text-white leading-tight">Session paused</p>
        <p class="text-[13px] text-zinc-400 font-medium leading-relaxed">
          You were away for a while. Tap anywhere to continue.
        </p>
      </div>

      <button @click="unlock"
        class="flex items-center gap-2 px-7 py-4 rounded-2xl text-white text-[15px] font-black shadow-xl active:scale-95 transition-all"
        :style="{ background: accent, boxShadow: `0 8px 32px ${accent}55` }">
        <Unlock :size="17" :stroke-width="2.5" />
        Resume Session
      </button>
    </div>
  </Transition>
</template>

<script setup lang="ts">
import { computed } from 'vue'
import { Lock, Unlock } from 'lucide-vue-next'
import { isLocked, unlock } from '../composables/useIdleLock'
import { settings } from '../composables/useStore'

const accent = computed(() => settings.value.accentColor)
</script>

<style scoped>
.lock-fade-enter-active { transition:opacity 0.5s ease, backdrop-filter 0.5s ease; }
.lock-fade-leave-active { transition:opacity 0.4s ease; }
.lock-fade-enter-from, .lock-fade-leave-to { opacity:0; }

@keyframes lock-spin-cw  { from{transform:rotate(0deg)}   to{transform:rotate(360deg)}  }
@keyframes lock-spin-ccw { from{transform:rotate(360deg)} to{transform:rotate(0deg)}    }

.lock-ring-a { animation:lock-spin-cw  8s linear infinite; }
.lock-ring-b { animation:lock-spin-ccw 12s linear infinite; }
.lock-ring-c { border-radius:50%; }
</style>