.jsps-portal{--jsps-green:#173f32;--jsps-gold:#c28a2c;--jsps-cream:#fffdf8;--jsps-brown:#724d37;--jsps-line:#ddcfb8;color:#233a31;font-family:inherit;max-width:1180px;margin:30px auto}.jsps-portal *{box-sizing:border-box}.jsps-card,.jsps-section{background:var(--jsps-cream);border:1px solid var(--jsps-line);border-radius:16px;padding:22px}.jsps-login{max-width:560px}.jsps-login .jsps-card{padding:32px}.jsps-brand{color:var(--jsps-gold);text-transform:uppercase;letter-spacing:.12em;font-weight:800;font-size:13px}.jsps-login h2,.jsps-section h2{font-family:Georgia,serif;color:var(--jsps-brown);font-weight:500}.jsps-login label{display:block;margin:12px 0;font-weight:650}.jsps-login input[type=text],.jsps-login input[type=password]{display:block;width:100%;margin-top:5px;padding:12px;border:1px solid #cfc8bd;border-radius:9px}.jsps-login-remember{display:flex!important;align-items:center;gap:8px;margin:14px 0!important}.jsps-login-remember input{width:16px!important;height:16px!important;margin:0!important}.jsps-login-extra{margin:14px 0;overflow:visible}.jsps-login-extra .g-recaptcha{transform-origin:left top}.jsps-btn{display:inline-block;background:var(--jsps-green);color:#fff!important;border:0;border-radius:9px;padding:11px 17px;text-decoration:none;font-weight:700;cursor:pointer}.jsps-small{font-size:13px}.muted{opacity:.68}.jsps-portal-head{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;margin-bottom:18px;padding:22px;border-bottom:1px solid var(--jsps-line)}.jsps-portal-head h1{margin:3px 0;font-family:Georgia,serif;color:var(--jsps-brown);font-weight:500}.jsps-eyebrow{color:var(--jsps-gold);text-transform:uppercase;font-weight:800;letter-spacing:.1em;font-size:12px}.jsps-portal-head nav{display:flex;gap:14px;flex-wrap:wrap}.jsps-portal-head nav a{color:var(--jsps-green);text-decoration:none;font-weight:700}.jsps-section{margin:18px 0}.jsps-section-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.jsps-section-heading h2{margin:3px 0}.jsps-section-heading p{margin:6px 0 0;color:#6a685f}.jsps-person-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.jsps-person{background:#fff;border:1px solid #e2d7c4;border-radius:10px;padding:14px;display:flex;flex-direction:column}.jsps-profile-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.jsps-card h3{font-family:Georgia,serif;color:var(--jsps-brown);margin-top:0}.jsps-card dl{display:grid;grid-template-columns:135px 1fr;gap:8px 10px}.jsps-card dt{font-size:12px;opacity:.65}.jsps-card dd{margin:0;font-weight:650}.jsps-profile-assignment{padding:10px 0;border-bottom:1px solid #e9e1d5;display:flex;flex-direction:column}.jsps-profile-assignment:last-child{border-bottom:0}.jsps-password-form label{display:block;margin:10px 0;font-weight:650}.jsps-password-form input{display:block;width:100%;margin-top:5px;padding:10px;border:1px solid #cbc4b8;border-radius:8px}.jsps-strength{height:6px;background:#eee;border-radius:999px;overflow:hidden;margin-top:-4px}.jsps-strength span{display:block;height:100%;width:0;background:#999;transition:.2s}.jsps-front-notice{padding:12px 15px;border-radius:10px;margin:10px 0}.jsps-front-notice.success{background:#e5f3e9;color:#245b38}.jsps-front-notice.error{background:#f8e2e2;color:#8f2727}

.jsps-real-calendar{margin-top:14px}.jsps-calendar-toolbar{display:grid;grid-template-columns:46px 1fr 46px;align-items:center;gap:12px;margin-bottom:14px}.jsps-calendar-toolbar h3{margin:0;text-align:center;font-family:Georgia,serif;color:var(--jsps-brown);font-size:24px;font-weight:500}.jsps-calendar-nav{width:42px;height:42px;border:1px solid #d9bd8e;border-radius:50%;display:grid;place-items:center;text-decoration:none!important;color:var(--jsps-green)!important;font-size:24px;background:#fff}.jsps-calendar-weekdays,.jsps-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:7px}.jsps-calendar-weekdays{margin-bottom:7px;text-align:center;font-size:12px;font-weight:800;color:var(--jsps-green)}.jsps-calendar-day,.jsps-calendar-empty{min-height:104px;border-radius:12px}.jsps-calendar-day{position:relative;border:1px solid #e5ded2;background:#fff;padding:10px;text-align:left;color:var(--jsps-green);cursor:pointer;overflow:hidden}.jsps-calendar-day:hover,.jsps-calendar-day.is-selected{border-color:#c28a2c;box-shadow:0 4px 15px rgba(99,72,30,.08)}.jsps-calendar-day.has-events{background:#fff8e4;border-color:#d8a221}.jsps-calendar-number{display:block;font-weight:800;font-size:16px}.jsps-calendar-dot{display:block;width:7px;height:7px;margin:6px 0;border-radius:50%;background:var(--jsps-gold)}.jsps-calendar-preview{display:block;font-size:11px;line-height:1.25;font-weight:700}.jsps-calendar-more{display:block;margin-top:4px;font-size:10px;color:#806b4c}.jsps-calendar-detail{margin-top:14px;border:1px solid #e2d7c4;background:#fff;border-radius:12px;padding:16px}.jsps-calendar-detail h4{margin:0 0 10px;color:var(--jsps-brown);font-family:Georgia,serif;font-size:20px}.jsps-calendar-detail-empty{color:#77736b}.jsps-calendar-event-detail{padding:12px 0;border-top:1px solid #eee5d7;display:grid;gap:3px}.jsps-calendar-event-detail:first-of-type{border-top:0}.jsps-calendar-event-detail strong{color:var(--jsps-green)}.jsps-calendar-event-detail span{font-size:13px}.jsps-calendar-open-note{margin-top:12px;padding:10px 12px;background:#f5f1e8;border-radius:9px;font-size:13px}

.jsps-teacher-schedule-list{display:grid;gap:12px;margin-top:16px}.jsps-teacher-schedule{background:#fff;border:1px solid #e2d7c4;border-radius:12px;padding:16px}.jsps-teacher-schedule-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:14px}.jsps-teacher-schedule-head>div{display:flex;flex-direction:column;gap:3px}.jsps-schedule-pill{border-radius:999px;padding:5px 9px;font-size:11px;font-weight:800;white-space:nowrap}.jsps-schedule-pill.ready{background:#e4f2e8;color:#2e6842}.jsps-schedule-pill.open{background:#fff0c9;color:#845e00}.jsps-schedule-grid{display:grid;grid-template-columns:repeat(3,minmax(150px,1fr));gap:10px;margin-bottom:12px}.jsps-schedule-grid label{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:700}.jsps-schedule-grid input,.jsps-schedule-grid select{min-height:40px;width:100%;padding:7px;border:1px solid #cbc4b8;border-radius:8px;background:#fff}.jsps-teacher-clear-schedule{margin-top:10px}.jsps-text-danger{padding:0;border:0;background:transparent;color:#b32d2e;cursor:pointer;text-decoration:underline}

@media(max-width:900px){.jsps-profile-grid,.jsps-person-grid{grid-template-columns:1fr 1fr}.jsps-portal-head{align-items:flex-start;flex-direction:column}.jsps-schedule-grid{grid-template-columns:1fr 1fr}.jsps-calendar-day,.jsps-calendar-empty{min-height:86px}.jsps-calendar-preview{display:none}}
@media(max-width:620px){.jsps-profile-grid,.jsps-person-grid{grid-template-columns:1fr}.jsps-portal{margin:12px}.jsps-portal-head{padding:12px}.jsps-section{padding:15px}.jsps-schedule-grid{grid-template-columns:1fr}.jsps-calendar-weekdays,.jsps-calendar-grid{gap:4px}.jsps-calendar-day,.jsps-calendar-empty{min-height:54px;border-radius:8px}.jsps-calendar-day{padding:7px}.jsps-calendar-number{font-size:14px}.jsps-calendar-dot{width:6px;height:6px;margin:5px 0}.jsps-login-extra .g-recaptcha{transform:scale(.88);transform-origin:left top;margin-bottom:-8px}}


/* v0.1.3 – reCAPTCHA im Schulportal-Login */
.jsps-login-extra{
  margin:16px 0 14px;
}
.jsps-login-extra .g-recaptcha{
  min-height:78px;
}
@media(max-width:420px){
  .jsps-login-extra{
    max-width:100%;
    overflow:visible;
  }
  .jsps-login-extra .g-recaptcha{
    transform:scale(.86);
    transform-origin:left top;
    margin-bottom:-8px;
  }
}


/* v0.1.4 – Portal-eigener Login */
.jsps-login .jsps-front-notice.error{
  margin:14px 0 18px;
  padding:12px 14px;
  border:1px solid #c96c6c;
  background:#fff2f2;
  color:#7a2525;
  border-radius:10px;
}
.jsps-login-extra{
  margin:16px 0 14px;
}

/* =========================================================
   v0.2.0 – integrierter Lehrer-/Schülerkalender
   ========================================================= */
.jsps-modal-open{overflow:hidden!important}
.jsps-calendar-app{margin-top:18px;--cal-border:#dfd1ba;--cal-soft:#f8f3e9;--cal-gold:#c28a2c;--cal-green:#173f32;--cal-brown:#724d37}
.jsps-calendar-topbar{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.jsps-calendar-view-switch{display:inline-flex;padding:4px;background:#f1ece3;border:1px solid var(--cal-border);border-radius:12px;gap:2px}
.jsps-calendar-view-switch button{appearance:none;border:0;background:transparent;color:#5f625d;padding:8px 13px;border-radius:9px;font-weight:700;cursor:pointer}
.jsps-calendar-view-switch button.is-active{background:var(--cal-green);color:#fff;box-shadow:0 2px 8px rgba(23,63,50,.15)}
.jsps-calendar-date-nav{display:flex;align-items:center;gap:8px}
.jsps-calendar-today{border:1px solid #d9bd8e;background:#fff;color:var(--cal-green);padding:9px 14px;border-radius:999px;font-weight:700;cursor:pointer}
.jsps-calendar-title-row{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:4px 0 14px}
.jsps-calendar-title-row h3{margin:0;font-family:Georgia,'Times New Roman',serif;color:var(--cal-brown);font-size:28px;font-weight:500}
.jsps-calendar-canvas{min-height:240px}
.jsps-calendar-weekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:7px;margin-bottom:7px;text-align:center;font-size:12px;font-weight:800;color:var(--cal-green)}
.jsps-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:7px}
.jsps-calendar-day{min-height:112px;border:1px solid #e6ddd0;background:#fff;border-radius:12px;padding:10px;position:relative;color:var(--cal-green);cursor:pointer;transition:.16s ease;overflow:hidden}
.jsps-calendar-day:hover,.jsps-calendar-day.is-selected{border-color:var(--cal-gold);box-shadow:0 4px 16px rgba(98,68,26,.09)}
.jsps-calendar-day.is-outside{opacity:.38;background:#faf8f4}
.jsps-calendar-day.is-today .jsps-calendar-number{display:inline-grid;place-items:center;min-width:28px;height:28px;padding:0 6px;border-radius:999px;background:var(--cal-green);color:#fff}
.jsps-calendar-day.has-events{background:#fffaf0}
.jsps-calendar-number{font-weight:800;font-size:15px}
.jsps-calendar-day-events{display:grid;gap:4px;margin-top:8px}
.jsps-cal-event{width:100%;appearance:none;border:0;background:#eef6f0;border-left:3px solid #4d8c64;color:var(--cal-green);padding:7px 8px;border-radius:7px;text-align:left;display:grid;grid-template-columns:auto 1fr;gap:3px 7px;cursor:pointer;min-width:0}
.jsps-cal-event:hover{background:#e4f1e8}
.jsps-cal-event.compact{padding:5px 6px;font-size:10px;display:flex;align-items:center;gap:5px;white-space:nowrap;overflow:hidden}
.jsps-cal-event-time{font-weight:800;font-size:11px}
.jsps-cal-event-title{font-weight:750;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jsps-cal-event-sub{grid-column:1/-1;font-size:11px;color:#68736e;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jsps-calendar-more{font-size:10px;color:#7e725f;font-weight:700}
.jsps-calendar-detail{margin-top:14px;border:1px solid #e2d7c4;background:#fff;border-radius:12px;padding:16px}
.jsps-calendar-detail-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:8px}
.jsps-calendar-detail h4{margin:0;color:var(--cal-brown);font-family:Georgia,serif;font-size:20px}
.jsps-calendar-event-detail{padding:12px 0;border-top:1px solid #eee5d7;display:grid;gap:3px}
.jsps-calendar-event-detail:first-of-type{border-top:0}
.jsps-calendar-event-detail strong{color:var(--cal-green)}
.jsps-calendar-event-detail span{font-size:13px}
.jsps-calendar-edit-link{justify-self:start;margin-top:5px;border:0;background:transparent;padding:0;color:#9b6718;text-decoration:underline;cursor:pointer;font-weight:700;font-size:12px}
.jsps-calendar-help{margin:10px 2px 0;color:#77736b;font-size:12px}

/* Wochenansicht */
.jsps-week-grid{display:grid;grid-template-columns:repeat(7,minmax(135px,1fr));gap:7px;overflow-x:auto;padding-bottom:4px}
.jsps-week-day{min-height:330px;border:1px solid #e5ddd1;border-radius:12px;background:#fff;padding:10px;cursor:pointer}
.jsps-week-day.is-selected{border-color:var(--cal-gold)}
.jsps-week-day.is-today .jsps-week-day-head strong{background:var(--cal-green);color:#fff}
.jsps-week-day-head{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #eee5d8;padding-bottom:8px;margin-bottom:8px;color:#66726c}
.jsps-week-day-head strong{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;color:var(--cal-green)}
.jsps-week-events{display:grid;gap:7px}
.jsps-week-empty{color:#bbb3a8;text-align:center;padding:20px 0}

/* Tagesansicht */
.jsps-day-view{min-height:380px;border:1px solid #e3d8c8;background:#fff;border-radius:14px;padding:16px;display:grid;align-content:start;gap:9px;cursor:pointer}
.jsps-day-empty{text-align:center;padding:90px 18px;color:#77736b;line-height:1.6}
.jsps-day-event-row{display:grid;grid-template-columns:78px 1fr;gap:12px;align-items:stretch}
.jsps-day-time{font-weight:800;color:var(--cal-green);padding:10px 6px;text-align:right}.jsps-day-time small{display:block;font-weight:500;color:#8a8177;margin-top:3px}
.jsps-day-event-row .jsps-cal-event{padding:12px}

/* Jahresansicht */
.jsps-year-grid{display:grid;grid-template-columns:repeat(3,minmax(220px,1fr));gap:12px}
.jsps-year-month{border:1px solid #e4dacb;background:#fff;border-radius:12px;padding:12px}
.jsps-year-month h4{margin:0 0 8px;color:var(--cal-brown);font-family:Georgia,serif;font-size:17px;font-weight:500}
.jsps-mini-weekdays,.jsps-mini-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center}.jsps-mini-weekdays{font-size:9px;color:#6d756f;font-weight:800;margin-bottom:2px}
.jsps-mini-day{appearance:none;border:0;background:transparent;min-height:27px;border-radius:6px;font-size:10px;color:var(--cal-green);position:relative;cursor:pointer}.jsps-mini-day:hover{background:#f7efdf}.jsps-mini-day.is-outside{opacity:.22}.jsps-mini-day.has-events{font-weight:800;background:#fff5d9}.jsps-mini-day i{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--cal-gold);bottom:2px;left:50%;transform:translateX(-50%)}

/* Kalender-Modal */
.jsps-calendar-modal[hidden]{display:none!important}.jsps-calendar-modal{position:fixed;inset:0;z-index:999999;display:grid;place-items:center;padding:20px}.jsps-calendar-modal-backdrop{position:absolute;inset:0;background:rgba(31,38,33,.58);backdrop-filter:blur(2px)}
.jsps-calendar-modal-dialog{position:relative;width:min(680px,100%);max-height:calc(100vh - 40px);overflow:auto;background:#fffdf8;border:1px solid #d8c9af;border-radius:18px;padding:28px;box-shadow:0 24px 80px rgba(0,0,0,.22)}
.jsps-calendar-modal-dialog h3{font-family:Georgia,'Times New Roman',serif;color:var(--cal-brown);font-size:28px;font-weight:500;margin:4px 0 5px}.jsps-calendar-series-note{margin:0 0 14px;color:#876f54;font-size:13px}
.jsps-calendar-modal-close{position:absolute;right:14px;top:10px;width:38px;height:38px;border:0;background:transparent;color:#666;font-size:30px;line-height:1;cursor:pointer}
.jsps-calendar-entry-form{display:grid;gap:13px;margin-top:18px}.jsps-calendar-entry-form label{display:grid;gap:5px;font-weight:700;font-size:13px;color:var(--cal-green)}.jsps-calendar-entry-form input,.jsps-calendar-entry-form select{width:100%;min-height:43px;border:1px solid #cbc4b8;border-radius:9px;background:#fff;padding:8px 10px;color:#263a32}.jsps-calendar-form-grid{display:grid;grid-template-columns:1.25fr 1fr 1fr;gap:10px}.jsps-calendar-form-grid.two{grid-template-columns:1fr 1fr}.jsps-optional{font-weight:400;color:#89827a}
.jsps-weekday-field{border:1px solid #e1d4bd;background:#faf6ee;border-radius:12px;padding:12px}.jsps-weekday-field[hidden]{display:none}.jsps-weekday-field legend{padding:0 6px;font-weight:800;color:var(--cal-green);font-size:13px}.jsps-weekday-buttons{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.jsps-weekday-buttons label{display:block}.jsps-weekday-buttons input{position:absolute;opacity:0;pointer-events:none}.jsps-weekday-buttons span{display:grid;place-items:center;min-height:38px;border:1px solid #d8c9af;background:#fff;border-radius:9px;cursor:pointer;font-weight:800}.jsps-weekday-buttons input:checked+span{background:var(--cal-green);color:#fff;border-color:var(--cal-green)}.jsps-weekday-field small{display:block;margin-top:7px;color:#7d7469}
.jsps-calendar-modal-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:5px}.jsps-calendar-delete{border:0;background:transparent}

/* Admin kann denselben Kalender verwenden */
.jsps-admin-calendar-portal{max-width:none;margin:18px 0 0}.jsps-admin-calendar-portal .jsps-calendar-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}

@media(max-width:900px){
  .jsps-year-grid{grid-template-columns:repeat(2,minmax(220px,1fr))}
  .jsps-calendar-day{min-height:92px}.jsps-cal-event.compact .jsps-cal-event-title{display:none}
}
@media(max-width:620px){
  .jsps-calendar-topbar{align-items:stretch}.jsps-calendar-view-switch{width:100%;display:grid;grid-template-columns:repeat(4,1fr)}.jsps-calendar-view-switch button{padding:8px 4px;font-size:12px}.jsps-calendar-date-nav{justify-content:center}.jsps-calendar-title-row h3{font-size:23px}.jsps-calendar-add{padding:9px 12px}
  .jsps-calendar-weekdays,.jsps-calendar-grid{gap:4px}.jsps-calendar-day{min-height:62px;padding:6px;border-radius:8px}.jsps-calendar-day-events{margin-top:4px}.jsps-cal-event.compact{height:7px;padding:0;border-left-width:0;border-radius:999px;background:var(--cal-gold)}.jsps-cal-event.compact span{display:none}.jsps-calendar-more{display:none}.jsps-calendar-number{font-size:13px}
  .jsps-year-grid{grid-template-columns:1fr}.jsps-week-grid{grid-template-columns:repeat(7,minmax(120px,1fr))}.jsps-day-event-row{grid-template-columns:58px 1fr}.jsps-calendar-modal{padding:8px}.jsps-calendar-modal-dialog{max-height:calc(100vh - 16px);padding:22px 16px}.jsps-calendar-form-grid,.jsps-calendar-form-grid.two{grid-template-columns:1fr}.jsps-weekday-buttons{gap:4px}.jsps-weekday-buttons span{min-height:34px;font-size:11px}.jsps-calendar-modal-actions{align-items:flex-start;flex-direction:column}.jsps-calendar-modal-actions .jsps-btn{width:100%}
}


/* v0.3.0 – Profil, Absagen und Status */
.jsps-cancel-policy{margin:0 0 14px;padding:11px 14px;border:1px solid #e2d7c4;border-radius:10px;background:#f8f4ec;color:#5f625d;font-size:13px}
.jsps-cal-event.is-cancelled{background:#efefed!important;border-left-color:#9a9a96!important;color:#777!important;text-decoration:line-through;opacity:.82}
.jsps-calendar-event-detail.is-cancelled{background:#f5f5f3;margin:6px -8px;padding:12px 8px;border-radius:9px;color:#777}
.jsps-cancel-status{font-weight:800;color:#8b4d4d!important}.jsps-student-absence{font-weight:700;color:#8a6844!important}
.jsps-event-actions{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:6px}
.jsps-occurrence-cancel-link{border:0;background:transparent;padding:0;color:#a33f3f;text-decoration:underline;cursor:pointer;font-weight:700;font-size:12px}
.jsps-student-cancel-area{margin-top:10px;padding-top:10px;border-top:1px solid #eee5d7;display:grid;gap:9px}
.jsps-student-cancel-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.jsps-student-cancel-row>span{font-size:12px;color:#6f6b64}
.jsps-student-cancel-btn{border:1px solid #b86c6c;background:#fff;color:#8e3030;border-radius:8px;padding:8px 11px;font-weight:700;cursor:pointer}
.jsps-student-cancel-btn:disabled{border-color:#d6d4cf;background:#eeeeeb;color:#999690;cursor:not-allowed}
.jsps-cancelled-note{font-size:12px;color:#6c6c67;background:#eeeeeb;border-radius:7px;padding:7px 9px}

@media(max-width:620px){
  .jsps-profile-personal dl{display:block!important}
  .jsps-profile-personal dt{margin:12px 0 2px!important;padding:0!important;font-size:11px!important}
  .jsps-profile-personal dt:first-child{margin-top:0!important}
  .jsps-profile-personal dd{margin:0!important;padding:0 0 10px!important;border-bottom:1px solid #eee5d7;overflow-wrap:anywhere}
  .jsps-profile-personal dd:last-child{border-bottom:0;padding-bottom:0!important}
  .jsps-student-cancel-row{align-items:stretch;flex-direction:column}
  .jsps-student-cancel-btn{width:100%}
}
