You didn't mention how the traditional alarm actually interfaces with Hubitat, but I'll assume it's a virtual switch that gets turned on when the traditional alarm is armed (full or partial) and turned off when disarmed. If it's something else, you'll have to adjust your trigger and the outermost conditional below as appropriate.
Here is my attempt at creating a rule that looks like it should do about what you want:
You can eliminate my "log" actions, which are basically just there as comments to show you my logic. The "magic" part, I think, is the "wait" action: after the alarm is armed, it will either wait for your door (contact sensor) to open. If it does, it will proceed with the actions, and that inner
IF should evaluate to true and run the "fully armed" actions. If instead it proceeds because the 30-second timeout elapsed, the contact sensor should be closed and you can run the "partially armed" actions.
Note that there is a potential weakness here: the door cannot already be opened when the alarm is turned on, since this waits for a change to open after the trigger of the alarm turning on fires. If it was open before and left open, it will assume a full arm even though it was not opened afterwards. If it was open before and then closed (e.g., because you left but the door was open first and you were aiming for a full arm), it will only do a partial arm. You could add some additional complexity to this rule to handle these situations, or if you don't think you'll ever do that, you could leave it as-is. (There is also the theoretical possibility that you could close the door in the literal millisecond or so between opening it to signal the end of the "Wait" and the end of the evaluation for the next "IF," making it false, but I think that's highly unlikely, if not humanly impossible.)
Hope this is helpful! I have not tested it, so let me know if you (or anyone) sees any potential holes in the logic.