rama 0.3.0-rc1

modular service framework
*,
*::before,
*::after {
    box-sizing: border-box;
}
:root {
    --bg: #000;
    --panel: #0f0f0f;
    --green: #45d23a;
    --muted: #bfbfbf;
}
html,
body {
    min-height: 100%;
    margin: 0;
    font-family:
        system-ui,
        -apple-system,
        Segoe UI,
        Roboto,
        "Helvetica Neue",
        Arial;
}
body {
    background: var(--bg);
    color: var(--muted);
    display: flex;
    flex-direction: column;
    align-items: center;
    min-height: 100vh;
    padding: 2.8rem;
}
.card {
    text-align: center;
    width: 100%;
    max-width: 64rem;
}
.logo {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.8rem;
    margin-bottom: 1.1rem;
}
.logo,
.logo a,
.logo a:hover {
    color: var(--green);
    font-weight: 700;
    font-size: 2rem;
    letter-spacing: 0.4rem;
}
.logo a {
    text-decoration: none;
}
.logo a:hover {
    text-decoration: underline;
}
.subtitle {
    font-size: 1.1rem;
    margin: 0.3rem 0 2rem 0;
    color: var(--muted);
}
.panel {
    background: linear-gradient(180deg, #0b0b0b 0%, #111 100%);
    border-radius: 0.8rem;
    padding: 2rem;
    box-shadow:
        0 0.3rem 2rem rgba(0, 0, 0, 0.7),
        inset 0 0.05rem 0 rgba(255, 255, 255, 0.02);
    border: 0.1rem solid rgba(69, 210, 58, 0.06);
}
.ip {
    background: transparent;
    border-radius: 0.6rem;
    padding: 1rem 1.1rem;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 1.1rem;
    color: #fff139;
    margin: 0.6rem auto 1.1rem auto;
    word-break: break-all;
    border: 0.05rem solid rgba(69, 210, 58, 0.12);
}
.muted {
    color: var(--muted);
    font-size: 1rem;
    margin-bottom: 0.9rem;
}
.controls {
    display: flex;
    gap: 0.8rem;
    justify-content: center;
    flex-wrap: wrap;
}
button {
    background: transparent;
    color: var(--green);
    padding: 0.8rem 1.1rem;
    border-radius: 0.6rem;
    font-weight: 700;
    border: 0.1rem solid rgba(69, 210, 58, 0.9);
    cursor: pointer;
}
button.primary {
    background: var(--green);
    color: #032;
    box-shadow: 0 0.4rem 1.2rem rgba(69, 210, 58, 0.08);
}
.note {
    font-size: 0.95rem;
    color: #9aa;
    margin-top: 1rem;
}
.small {
    font-size: 0.9rem;
    color: #808080;
    margin-top: 0.7rem;
}
.georow {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.25rem 0;
    border-top: 0.05rem solid rgba(255, 255, 255, 0.06);
}
.georow > div:last-child {
    text-align: right;
    word-break: break-word;
}
/* geolocation: heading on its own line, then as many source columns as fit,
   wrapping to new rows on narrower screens */
.geo-section {
    width: 100%;
    margin-top: 1.4rem;
}
.geo-title {
    text-align: left;
    margin-bottom: 0.6rem;
}
.geo-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
    gap: 1rem;
    text-align: left;
}
.geo-card {
    padding: 1.4rem;
}
.geo-source {
    font-weight: 700;
    margin-bottom: 0.5rem;
    text-transform: uppercase;
    letter-spacing: 0.05rem;
    color: var(--green);
}