.portal-tabs {
    display: flex;
    gap: .5rem;
    flex-wrap: wrap;
    margin-bottom: 1rem;
}

.portal-tab {
    padding: .55rem 1rem;
    border-radius: 999px;
    border: 1px solid color-mix(in srgb, var(--ink) 15%, transparent);
    background: var(--panel, #fff);
    color: inherit;
    font-weight: 600;
}

.portal-tab.is-active {
    background: var(--teal);
    color: #fff;
    border-color: var(--teal);
}

.portal-grid {
    display: grid;
    gap: 1.25rem;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}

.portal-card {
    display: block;
    padding: 1.4rem 1.5rem;
    border-radius: 1rem;
    background: color-mix(in srgb, var(--surface) 70%, #fff);
    border: 1px solid color-mix(in srgb, var(--ink) 12%, transparent);
    transition: transform .2s ease, box-shadow .2s ease;
}

.portal-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 12px 28px rgba(0,0,0,.08);
}

.portal-card__role {
    display: inline-block;
    font-size: .8rem;
    font-weight: 700;
    color: var(--teal);
    margin-bottom: .5rem;
}

.portal-card h2 {
    margin: 0 0 .5rem;
    font-size: 1.25rem;
}

.portal-card p {
    margin: 0;
    opacity: .85;
}

.cal-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(4.5rem, 1fr));
    gap: .4rem;
}

.cal-slot {
    border: 1px solid color-mix(in srgb, var(--ink) 15%, transparent);
    border-radius: .45rem;
    padding: .45rem .3rem;
    background: var(--panel, #fff);
    color: inherit;
    cursor: pointer;
    font: inherit;
}

.cal-slot.is-free {
    background: color-mix(in srgb, #15803d 12%, #fff);
}

.cal-slot.is-busy {
    opacity: .45;
    cursor: not-allowed;
}
