Rebuild timed loop with 'new' while/repeat options

having still used the below config for my wakeup radio with increased volume per loop, I was hoping to rebuild that in an easier way with the new scripting possibilities. Though I can see how the conditions would translate, I cant find a way to replace the timer of my original/current setup. How to loop per timeframe. Or is this what the delay can be used for? Thats what I try to use in the first attempt posted at the bottom.

please let me post the setup below, which I have placed in the order of action as much as possible. Would appreciate any suggestions you could have, optimizing/modernizing this. I have for the ease of readability made a few subscripts. Of course that can be simplified, though that won’t help for this specific question.

thanks for having a look!

script:

  alarmclock_ring:
    alias: Ring Alarm
    mode: restart
    sequence:
      - service: script.opstaan
      - service: >
          {% if is_state('input_boolean.wakeup_radio','on') %} script.wakeup_radio
          {% else %} script.continue
          {% endif %}

  wakeup_radio:
    alias: Wakeup radio
    mode: restart
    sequence:
      - service: script.play_wakeup_radio
      - service: script.increase_volume_delay

  play_wakeup_radio:
    alias: Play wakeup radio
    mode: restart
    sequence:
      - service: media_player.volume_set
        data:
          entity_id: >
            {{states('sensor.wakeup_radio')}}
          volume_level: '0.01'
      - service: media_player.play_media
        data:
          entity_id: >
            {{states('sensor.wakeup_radio')}}
          media_content_id: >
            {{states('sensor.radio_station_wake_up')}}
          media_content_type: music

  increase_volume_delay:
    alias: Increase volume delay
    mode: restart
    sequence:
      service: timer.start
      data:
        entity_id: timer.increase_volume_delay
        duration: >
          {{states('input_number.increase_volume_delay')|int}}

automation:

  - alias: Increase volume loop
    id: Increase volume loop
    trigger:
      platform: event
      event_type: timer.finished
      event_data:
        entity_id: timer.increase_volume_delay
    condition:
      - condition: state
        entity_id: input_boolean.snooze
        state: 'on'
      - >
          {{states(states('sensor.wakeup_radio')) == 'playing'}}
      - >
          {{states('sensor.wakeup_radio_volume')|float < 1}}
    action:
      - service: script.increase_volume_delay
      - service: media_player.volume_set
        data:
          entity_id: >
            {{states('sensor.wakeup_radio')}}
          volume_level: >
            {% set level =
               states('sensor.wakeup_radio_volume')|float +
               states('input_number.increase_volume')|float %}
            {% if level < 1 %} {{level|round(2)}}
            {% else %} 1
            {% endif %}

  - alias: Alarm clock off
    id: Alarm clock off
    trigger:
      platform: state
      entity_id:
        - input_boolean.snooze
        - input_boolean.wakeup_radio
      to: 'off'
    action:
      - service: media_player.turn_off
        data:
          entity_id: >
            {{states('sensor.wakeup_radio')}}
      - service: timer.cancel
        entity_id: timer.increase_volume_delay

I think this would come close:?

automation:

  - alias: Wakeup radio
    id: Wakup radio
    trigger:
      platform: state
      entity_id: input_select.activity
      to: Opstaan
    condition:
      condition: state
      entity_id: input_boolean.wakeup_radio
      state: 'on'
    action:

      - service: media_player.volume_set
        data:
          entity_id: >
            {{states('sensor.wakeup_radio')}}
          volume_level: '0.01'
      - service: media_player.play_media
        data:
          entity_id: >
            {{states('sensor.wakeup_radio')}}
          media_content_id: >
            {{states('sensor.radio_station_wake_up')}}
          media_content_type: music

      - alias: Increase volume AS LONG AS the conditions are true
        repeat:
          while:
            - condition: state
              entity_id: input_boolean.snooze
              state: 'on'
            - >
                {{states(states('sensor.wakeup_radio')) == 'playing'}}
            - >
                {{states('sensor.wakeup_radio_volume')|float < 1}}
        sequence:
          - service: media_player.volume_set
            data:
              entity_id: >
                {{states('sensor.wakeup_radio')}}
              volume_level: >
                {% set level =
                   states('sensor.wakeup_radio_volume')|float +
                   states('input_number.increase_volume')|float %}
                {% if level < 1 %} {{level|round(2)}}
                {% else %} 1
                {% endif %}
          - delay: >
              {{states('input_number.increase_volume_delay')|int}}